Файл: Курсовой проект по дисциплине Основы программирования и алгоритмизации Тема Разработка программы табулирования функции.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.10.2024

Просмотров: 41

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(ФГБОУ ВО «ВГТУ», ВГТУ)
Факультет экономики, менеджмента и информационных технологий

(факультет)
Кафедра Систем управления и информационных технологий в строительстве

КУРСОВОЙ ПРОЕКТ
по дисциплине: Основы программирования и алгоритмизации

Тема: Разработка программы табулирования функции
Расчетно-пояснительная записка
Разработал студент М.Д. Логунов

Подпись, дата Инициалы, фамилия
Руководитель О.В. Курипта

Подпись, дата Инициалы, фамилия
Члены комиссии

Подпись, дата Инициалы, фамилия



Подпись, дата Инициалы, фамилия
Нормоконтролер О.В. Курипта

Подпись, дата Инициалы, фамилия
Защищена __________________ Оценка ____________________________

дата

2021

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(ФГБОУ ВО «ВГТУ», ВГТУ)
Кафедра Систем управления и информационных технологий в строительстве
ЗАДАНИЕ

на курсовой проект
по дисциплине: Основы программирования и алгоритмизации

Тема: Разработка программы табулирования функции
Студент бИСТ-213, Логунов Михаил Дмитриевич

Группа, фамилия, имя, отчество
Вариант №11
Технические условия CPU: Intel® Xeon E5-2689 V4 3,6 ГГц, GPU: Nvidia GTX 1070 8GB, RAM: 16 GB
Содержание и объем работы (графические работы, расчеты и прочее):

30 страниц, 15 иллюстраций, 2 таблицы.

Сроки выполнения этапов: анализ и постановка задачи (11.09.21); разработка пошаговой детализации программы (18.09-25.10); реализация программы (25.10-01.12); тестирование программы (01.12-08.12); оформление пояснительной записки (06.12-20.12).
Срок защиты курсового проекта:
Руководитель О.В. Курипта

Подпись, дата Инициалы, фамилия
Задание принял студент

Подпись, дата Инициалы, фамилия

Замечания руководителя

Содержание




Введение 5

1. Постановка задачи 6

2. Пошаговая детализация решения 10

3. Тестирование программы 22

Заключение 29

Список использованных источников 30

Приложение 31


Введение



Реализованная программа, осуществляющая табулирование функций помогает закрепить знания, полученные в ходе изучения дисциплины «Основы программирования и алгоритмизации», приобрести практические навыки самостоятельной разработки программ, структурного программирования и на практике продемонстрировать знания языка программирования Си.

Цель данной работы - алгоритмизация и написание кода на языке СИ для табулирования монотонной Y(x) функции, включающую последовательность различных математических операций и кусочной V(x), использующую многоальтернативный выбор решения :




Задачи, которые необходимо решить в данной работе:

  • Реализовать два элементарных программных модуля для вычисления двух функций;

  • Создать интерфейс программы, который должен обеспечивать выбор одной из 2х функций, задание шага и 4 интервала табуляции, возможность выбора вывода результатов вычислений в консоль или файл;

  • Реализовать модуль поиска заданного значения в заданном массиве;

  • Реализовать модуль шейкерной сортировки;

  • Построение графика функций;

  • Заменить четные элементы массива на 0, нечетные на 1.

1. Постановка задачи



Согласно заданию необходимо реализовать две функции.

Математическая функция Y(x) – непрерывна, симметрична относительно начала координат. График монотонной функции показан на рисунке 1.1. Таким образом, данные представленные в таблице 1.1 будут использованы в качестве контрольного примера работы программы. Минимальное значение – (-4), максимальное значение – (4), шаг табуляции – (1).



Рисунок 1.1 – График Y(x)


x

-4,00

-3,00

-2,00

-1,00

0,00

1,00

2,00

3,00

4,00

Y(x)

-10,43

-7,43

-4,43

-1,43

0,00

4,57

7,57

10,57

13,57


Таблица 1.1 – Таблица значений функции Y(x)


Многоальтернативный выбор функции V(x) будет реализован с помощью ветвления. Условием станет значение переменной x. При x > 3.61 функция принимает вид представленный на рисунке 1.2. Данные представленные в таблице 1.2 будут использованы в качестве контрольного примера: минимальное значение - (-20), максимальное значение - (20), шаг табуляции (8).


Рисунок 1.2 – График V(x) при x > 3.61


График функции V(x) при показан на рисунке 1.3.

Рисунок 1.3 – График V(x) при

График функции V(x) при x < 0 показан на рисунке 1.4.

Рисунок 1.4 – График V(x) при x < 0
Таблица 1.2 – Таблица значений функции V(x)



x

-20,00

-15,00

-10,00

-5,00

0,00

5,00

10,00

15,00

20,00

V(x)

1,00

1,00

1,00

1,00

1,00

0,01

0,00

0,00

0,00

2. Пошаговая детализация решения



Прежде чем начинать анализ решения задачи и непосредственно приступать к ее выполнению, необходимо для большего понимания и удобства разбить задачу на подзадачи и для каждой расписать функции (рисунок 2.1).



Рисунок 2.1 – Конструирование программы
Подзадача 1. Необходимо реализовать два элементарных программных модуля для вычисления двух функций: монотонной, кусочной.

Для этого следует:

  • Предложить пользователю выбрать одну из двух функций;

  • Предложить пользователю выбрать либо табулирование, либо график, либо выход;

  • В зависимости от выбора предложить пользователю ввести начальное, конечное значение и шаг (если это требуется);

  • В зависимости от выбора передать введенные параметры в функцию, осуществляющую табуляцию, либо в функцию строящую график;

  • Передать полученный массив после табулирования в функцию для форматированного вывода результатов табуляции.




Подзадача 2.

  • Выделяем область памяти под массив;

  • Предложить пользователю ввести массив чисел;

  • Предложить пользователю выбрать один из пунктов меню. Далее будет реализовано ветвление;

  • Для реализации сортировки следует скопировать введенный массив, чтобы в дальнейшем работать с первоначальным массивом;

  • Предложить пользователю выбрать вариант сортировки;

  • Выполнить сортировку, вызвав соответствующую функцию;

  • Вывести результат сортировки;

  • Спросить у пользователя, вернуться к меню или закончить выполнение программы;

  • Для реализации поиска числа вызываем соответствующую функцию;

  • Используем ветвление, чтобы исходя из значения, которое вернет функция вывести соответствующее сообщение;

  • Спросить у пользователя, вернуться к меню или закончить выполнение программы;

  • Для сдвига элементов массива вызвать соответствующую функцию;

  • Осуществить сам сдвиг элементов массива;

  • Спросить у пользователя вернуться ли к меню или закончить выполнение программы;

  • В любой момент при выборе пользователем «выход» закончить выполнение программы;

Все программы, написанные на языке C, содержат основную функцию, которая должна иметь имя main. Именно с этой функции должна начинаться любая программа и, как правило, ею же и завершаться. Функции в исходном коде программы выполняют одну или несколько конкретных задач. Функция main может вызывать эти функции для выполнения соответствующих задач.

Блок-схема функции main () представлена на рисунке 2.2, где fun, oper, i, p – переменные целочисленного типа, хранящие выбор пунктов меню. Также в функции после каждого ввода пользователем данных происходит проверка на ошибки, что не показано на рисунке, дабы не загромождать его. Листинг функции main () представлен в приложении (страницы 28-31).



Рисунок 2.2 – Блок-схема главной функции

Таблица 2.1 – Описание собственных функций

Описание собственных функций

Наименование

Назначение

Примечание

fun1

Вычисление математических операций и функций.

Возвращает результат

вычисления монотонной

функции.

fun2

Вычисление математических операций и функций.

Возвращает результат

вычисления кусочной

функции.

tabl_func

Осуществляет табуляцию массива.

Принимает введенные пользователем параметры и указатель на выбранную функцию. Возвращает указатель на массив.

print_res

Осуществляет форматированный вывод массива после табуляции.

Принимает введенные пользователем параметры и указатель на массив, после табуляции.

sort_func

Выполняет шейкерную сортировку

Массив просматривается

поочередно справа налево и слева направо.

find_func

Выполняет поиск заданного числа в массиве.

Возвращает либо индекс найденного элемента, либо -1.

сalc_func

Все четные элементы заменяет на 0, нечетные на 1.

Массив просматривается, выполняется поиск элементов и последующая их замена

plot

Выполняет построение графика.

Принимает введенные пользователем параметры и указатель на выбранную функцию.




Функция double func1 принимает значение х в интервале определения значений double и возвращает вещественное значение монотонной функции, представлена на рисунке 2.3.

Рисунок 2.3 – Блок-схема функции Y(x)

Функция double func2 возвращает вещественное значение кусочной функции, блок-схема алгоритма показана на рисунке 2.4.


Рисунок 2.4 – Блок-схема функции V(x)
Для получения массива вычисленных значений выбранной функции реализована функция double* tabl_func(TFun f, double xmin, double xmax, double dx). Данный программный модуль принимает указатель на функцию (TFun f), начальное значение(xmin), конечное значение(xmax) и шаг табуляции(dx). Функция возвращает новый массив, поэтому перед этим мы должны выделить область памяти под этот массив:

sizemas = ((xmax - xmin) / dx) + 1;

double* arry = (double*)malloc(sizemas * sizeof(double));.
Блок-схема алгоритма функции табулирования представлена на рисунке 2.7.



Рисунок 2.7 – Блок-схема функции табулирования
Для вывода массива после табуляции реализована функция void print_func(double* arr, double xmin, double xmax, double dx). Данный программный модуль принимает практически те же параметры, что и функция табуляции, кроме указателя на функцию, вместо него передается указатель на массив, полученные после табуляции. Функция имеет тип void, так как не возвращает ничего явного, вместо этого она сразу осуществляет вывод таблицы значений. Блок-схема алгоритма представлена на рисунке 2.8.



Рисунок 2.8 – Блок-схема функции вывода массива после табуляции
Функция void plot(double x0, double x1, TFun f) выполняет построение графика. В функцию передается начальное значение x0 конечное значение x1 и указатель на функцию f, для которой необходимо построить график. Функция имеет тип void, так как не возвращает ничего явного, вместо этого она сразу осуществляет построение графика в консоли. В функции используется двумерный массив, индексы которого объявлены с помощью директивы SCREENW = 115; SCREENH = 20. Блок-схема алгоритма представлена на рисунке 2.9.

Процедура функции для подзадачи 1 представлена в приложении на страницах 31-32.

Блок-схема алгоритма представлена на рисунке 2.9.