Программирование с использованием подпрограмм на языке С

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П.О. СУХОГО

Факультет автоматизированных и информационных систем

Кафедра "Информационные технологии"






РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине "Основы алгоритмизации и программирования"

на тему: "ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ

ПОДПРОГРАММ НА ЯЗЫКЕ С"




Исполнитель: студент гр. ИТ-12

Зарецкий В.В.

Руководитель: ассистент

Стефановский И.Л.







Гомель 2013

Содержание


Введение

1. Теоретические сведения

1.1 Характеристика численного метода интегрирования

1.2 Использование подпрограмм в языке Си

2. Алгоритмический анализ

2.1 Постановка задач и исходные данные

2.2 Решение задач

2.3 Алгоритмы решения задач

2.3.1 Задача 1

2.3.2 Задача 2

2.3.3 Задача 3

2.3.4 Задача 4

2.3.5 Основная задача

3. Анализ разработанных программ

3.1 Задача 1

3.2 Задача 2

3.3 Задача 3

3.4 Задача 4

3.5 Основная программа

Заключение

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

Приложения

Введение


Современная наука и техника находится в постоянном развитии, что способствует повышению требований к работникам этой отрасли, которые должны обладать навыками работы со средствами электронно-вычислительной техники и программно-техническими комплексами. Таким образом, современный научно-технический и научный работник должен уметь составлять схемы алгоритмов, писать эффективное программное обеспечение на языке программирования, использовать пакеты графических программ и математических систем.

Цель данной курсовой работы - закрепление на практике знаний, полученных при изучении курса "Основы алгоритмизации и программирования", и приобретение опыта самостоятельной разработки прикладного программного обеспечения для решения расчетной задачи для персонального компьютера.

В процессе выполнения работы необходимо решить следующие задачи:

изучить структуру подпрограммы, механизмы передачи параметров в подпрограмму, возврата результатов из подпрограммы, и вызова подпрограммы на выполнение;

разработать алгоритмы решения четырех задач с использованием вспомогательных алгоритмов в соответствии с вариантом задания;

оформить в виде блок-схемы основной и вспомогательный алгоритмы для каждой задачи;

подготовить тесты для отладки программ;

написать и отладить комментированные программы на языке С.

1. Теоретические сведения


1.1 Характеристика численного метода интегрирования


Заменим подынтегральную функцию f (x) интерполяционным многочленом Лагранжа (1.1)


(1.1)


где q - вычислеятся по формуле (1.2);


(1.2)


n - количество узлов; yi - значение функции в і-той точке.

Тогда получим выражение (1.3).


(1.3)


Так как dx=hdq, где h выражено в формуле (1.4),


(1.4)


то значение интеграла можно рассчитать по формуле (1.5).


(1.5)


Окончательно получаем формулу Ньютона-Котеса (1.6).


(1.6)


Величины Hi называют коэффициентами Ньютона-Котеса. Они не зависят от f (x). Их можно вычислить заранее для различного числа узлов n (формула (1.7)).


(1.7)


Формула Ньютона-Котеса с n узлами точна для полиномов степени не выше n. Для получения большей точности не рекомендуется использовать формулы с большим числом узлов, а лучше разбивать отрезок на подотрезки, к каждому из которых применяется формула с одним и тем же небольшим числом узлов.

Значения коэффициентов Ньютона-Котеса приведены в таблице 1.1.


Таблица 1.1 - Значения коэффициентов Ньютона-Котеса

HN1234H0½1/61/87/90H1½2/33/816/45H2-1/63/82/15H3--1/816/45H4---7/90

Интересно отметить, что из формулы (1.7) следуют как частные случаи: формула трапеций (1.8) при n=1,


(1.8)


формула Симпсона (1.9) при n=2,


(1.9)


правило трех восьмых (1.10) при n=3.


(1.10)


Формулу (1.7) при n>6 не применяют, так как коэффициенты Ньютона-Котеса становятся слишком большими и вычислительная погрешность резко возрастает.

Описание данного метода было произведено в соответствии с [1], [2].


1.2 Использование подпрограмм в языке Си


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

программирование подпрограмма параметр язык

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

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

Библиотеки функций позволяют:

использовать одни и те же функции разными программистами;

повысить структурированность и наглядность программ;

облегчить чтение, освоение и корректировку программы.

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

Описание (определение) функции - это ее текст на языке С. В нем определяется имя, формальные параметры, операторы тела функции и тип возвращаемого результата.

Синтаксис описания:

// Заголовок функции

[тип] <имя_функции> ([список формальных параметров или void])

{ // Начало тела функции <описание данных><операторы>return (выражение)] } // Конец тела функции

В квадратных скобках записано то, что может быть опущено. {…} - тело функции (совокупность действий в фигурных скобках).

Вызов функции активизирует функцию, т.е. передает ей управление и фактические параметры, если они есть. Чтобы вызвать функцию, надо указать ее имя, передать ей список фактических параметров в соответствии с описанными в заголовке формальными параметрами. Соответствие между фактическими и формальными параметрами должно соблюдаться в количестве, типе, порядке следования.

Для вызова функции используется оператор вызова функции. Его синтаксис:

<имя_функции> ([список фактических параметров]);

Каждая переменная, используемая в теле функции, должна быть объявлена как формальный аргумент либо внутри, либо вне функции.

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

Глобальные переменные описываются в файле как внешние. Переменные, которые не являются формальными параметрами, объявленные в теле функции, называются локальными. Они доступны только той функции, в теле которой они описаны.

Ссылка - это выражение вида float&L, int&d и т.п. в списке формальных параметров.

При вызове функции на месте такого параметра записывается имя переменной, например s=pl (r,L) (прототип float PL (float r, float&L);) тем самым в функцию передается адрес переменной. Этот адрес обрабатывается также, как и остальные параметры.

Функция, работая с копией адреса, имеет доступ к ячейке памяти, в которой хранится значение переменной, и тем самым может его изменить.

Можно передавать в функцию указатель. В этом случае в теле функции следует применять операции разадресации и взятия адреса явным образом.

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

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

Указатель на функцию - такой тип переменной, которой можно присваивать адрес точки входа в функцию, т.е. адрес первой исполняемой команды. Эта переменная может в дальнейшем использоваться для вызова функции вместо ее имени.

Общий вид определения указателя на функцию:

Тип_результата (*имя_указателя_на_функцию) (список типов параметров);

Указатели на функцию передаются в качестве аргумента другим функциям, если последние реализуют какой-либо метод обработки функций, не зависящий от вида конкретной обрабатываемой функции. Эта конкретная (фактическая) функция вызывается из тела обрабатываемой функции по переданному ей указателю.

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

Описание подпрограмм выполнено в соответсвии с [3], [4] и [5].

2. Алгоритмический анализ


2.1 Постановка задач и исходные данные


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

Условия задач:

вычислить объем и площадь боковой поверхности параллелепипеда со сторонами а, b, c, используя формулы (2.1) и (2.2);

=abc (2.1)

S=2 (a+b) c (2.2)


вычислить значение функции (2.3);


T=0,57sin (p) - 0,73cos (g) +e (2.3)


где р - количество положительных элементов массива А;

g - количество положительных элементов массива В;

е - количество положительных элементов массива С.

решить уравнение (2.4);


рх2+qx+c=0 (2.4)


где р - сумма элементов, лежащих выше главной диагонали и на ней в матрице А;

q - сумма элементов, лежащих выше главной диагонали и на ней в матрице B;

с - сумма элементов, лежащих выше главной диагонали и на ней в матрице D.

разработать и оформить в виде графической схемы алгоритм вычисления определенного интеграла с точностью ? численным методом Ньютона (правило 3/8). Выбор функции осуществлять из формул (2.5), (2.6), (2.7) с помощью меню простого выбора.


x/ (x4-x) 1/2 (2.5)/cos (x/25) (2.6)

/ (x2) +sin (x/6) (2.7)


2.2 Решение задач


В данном подразделе все задачи разбиваются на подзадачи, каждая из которых будет реализована в качестве подпрограммы.

Для решения первой задачи необходимо выделить подзадачу: расчет объёма и площади боковой поверхности (SV).

Перед решением второй задачи разобьем ее на следующие этапы:

ввод массивов и кол-во элементов в них (vvod);

вывод массивов (vivod);

определение количества положительных элементов в каждом массиве (kol);

вычисление значения заданной формулы (func).

Чтобы решить третью задачу, нужно выделить отдельные подзадачи:

ввод квадратных матриц и кол-во строк в них (vvod2);

вывод исходных матриц (vivod2);

нахождение суммы элементов выше главной диагонали и на ней (sum);

нахождение корней полученного квадратного уравнения (fun).

В четвертой задаче выделим следующие подзадачи:

вычисление значения первой функции (f1);

вычисление значения первой функции (f2);

вычисление значения первой функции (f3);

вычисление значения первой функции (integral).


2.3 Алгоритмы решения задач


2.3.1 Задача 1

Алгоритм решения первой задачи представлен на рисунке 2.1, ниже на рисунке 2.2 изображен алгоритм разработанной подпрограммы.


Рисунок 2.1 - Алгоритм решения первой задачи (подпрограмма pp1)


Рисунок 2.2 - Алгоритм вычисления объема и площади боковой поверхности параллелепипеда (подпрограмма SV)

2.3.2 Задача 2

Алгоритм решения задачи 2 представлен на рисунке 2.3 На рисунках 2.4, 2.5, 2.6, 2.7 изображены алгоритмы подпрограмм, используемых при решении данной задачи.


Рисунок 2.3 - Алгоритм решения задачи 2 (подпрограмма pp2)


Рисунок 2.4 - Алгоритм ввод одномерного массива (подпрограмма vvod)


Рисунок 2.5 - Алгоритм вывода одномерного массива (подпрограмма vivod)


Рисунок 2.6 - Алгоритм нахождения положительных элементов в массиве (подпрограмма kol)


Рисунок 2.7 - Алгоритм вычисления заданной функции (подпрограмма func)


2.3.3 Задача 3

Алгоритм решения задачи 3 представлен на рисунке 2.8, ниже на рисунках 2.9, 2.10, 2.11, 2.12 приведены алгоритмы подпрограмм используемых для решения данной задачи.


Рисунок 2.8 - Алгоритм решения задачи 3 (подпрограмма рр3)


Рисунок 2.9 - Алгоритм ввода двумерного массива (подпрограмма vvod2)


Рисунок 2.10 - Алгоритм вывода двумерного массива (подпрограмма vivod2)


Рисунок 2.11 - Алгоритм нахождения суммы элементов, стоящих выше главной диагонали и на ней (подпрограмма sum)


Рисунок 2.12 - Алгоритм решения квадратного уравнения (подпрограмма fun)


2.3.4 Задача 4

Алгоритм решения задачи 4 представлен на рисунке 2.13, ниже на рисунках 2.14, 2.15, 2.16, 2.17 представлены алгоритмы подпрограмм, которые использовались для решения данной задачи.


Рисунок 2.13 - Алгоритм решения задачи 4 (подпрограмма рр4)


Рисунок 2.14 - Алгоритм вычисления первой подынтегральной функции (подпрограмма f1)


Рисунок 2.15 - Алгоритм вычисления второй подынтегральной функции (подпрограмма f2)


Рисунок 2.16 - Алгоритм вычисления третьей подынтегральной функции (подпрограмма f3)


Рисунок 2.17 - Алгоритм вычисления значения интеграла (подпрограмма integral)


2.3.5 Основная задача

Алгоритм для основной программы приведен на рисунке 2.18, алгоритмы подпрограмм, которые были использованы в данной программе, показаны на рисунках 2.1, 2.3, 2.8, 2.13,2.19,2.20.


Рисунок 2.18 - Алгоритм основной программы


Рисунок 2.19 - Алгоритм вывода меню (подпрограмма menu)


Рисунок 2.20 - Алгоритмы вывода заставки (подпрограмма zact)


3. Анализ разработанных программ


3.1 Задача 1


Переменные, которые использовались для решения задачи 1, приведены ниже в таблице 3.1.


Таблица 3.1 - Таблица соответствия переменных задачи 1

Имя переменной в условииИмя переменной в программеТипКомментарийaafloatИсходное данное (сторона пар-да) bbfloatИсходное данное (сторона пар-да) ccfloatИсходное данное (сторона пар-да) ssfloatРезультат (площадь бок. пов. пар-да) vvfloatРезультат (объем пар-да) -rfloatПеременная для возврата

Листинг решения задачи 1 приведен в приложении А.

Результаты выполнения программы 1 приведены на рисунках 3.1, 3.2, 3.3, тесты для отладки показаны в таблице 3.2.


Таблица 3.2 - Тесты для проверки задачи 1

Исходные данныеРезультатa=1 b=2 c=3S=18 V=6 a=4 b=5 c=6S=108 V=120a=10 b=9 c=4S=152 V=360

Рисунок 3.1 - Результат выполнения программы 1 (тест 1)


Рисунок 3.2 - Результат выполнения программы 1 (тест 2)


Рисунок 3.3 - Результат выполнения программы 1 (тест 3)


Разработанные тесты совпадают с результатами выполнения программы, следовательно, программы выполнены верно.


3.2 Задача 2


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


Таблица 3.3 - Таблица соответствия переменных задачи 2

Имя переменной в условииИмя переменной в программеТипКомментарийAA [20] intИсходный массив АBB [20] intИсходный массив ВCC [20] intИсходный массив СnnintКоличество элементов в массиве АmmintКоличество элементов в массиве ВkkintКоличество элементов в массиве СppintКоэффициент функцииggintКоэффициент функцииeeintКоэффициент функцииTTfloatРезультат функции-*nintПеременная-указатель для передачи размерности массива-*p [] intПеременная-указатель для передачи массива -iintИтератор цикла -simcharПеременная для передачи названия массива

Листинг решения задачи 2 приведен в приложении Б.

Результаты выполнения программы приведены на рисунках 3.4, 3.5, 3.6, тесты для отладки показаны в таблице 3.4.


Таблица 3.4 - Тесты для проверки задачи 2

Исходные данныеРезультатA [1,2,3] B [-1,2,0,3] C [3,0] T=1,8A [-1,2,0,3] B [,0,-10] C [1,2,3,-5,9] T=2,8A [-1,2,3,0] B [-1,-3] C [-1,0,2] T=-0.21

Рисунок 3.4 - Результат выполнения программы 2 (тест 1)


Рисунок 3.5 - Результат выполнения программы 2 (тест 2)


Рисунок 3.6 - Результат выполнения программы 2 (тест 3)


Так как результаты тестов совпали с результатами выполнения программы, делаем вывод, что задача решена правильно.


3.3 Задача 3


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


Таблица 3.5 - Таблица соответствия переменных задачи 3

Имя переменной в условииИмя переменной в программеТипКомментарийAA [20] intИсходный массив АBB [20] intИсходный массив ВDD [20] intИсходный массив DnnintКоличество столбцов в матрице АmmintКоличество столбцов в матрице ВkkintКоличество столбцов в матрице DppintКоэффициент уравнения qqintКоэффициент уравненияccintКоэффициент уравненияx1x1floatКорень уравненияx2x2floatКорень уравненияdesdesfloatДискриминант уравнения-*nintПеременная-указатель для передачи размерности массива-*p [] [] intПеременная-указатель для передачи массива -iintИтератор цикла-jintИтератор цикла-sintСумма искомых элементов

Листинг решения задачи 3 представлен в приложении В

Результаты выполнения программы 3 приведены на рисунках 3.7, 3.8, 3.9, тесты для отладки в таблице 3.6.

Таблица 3.6 - Тесты для проверки задачи 3

Исходные данныеРезультатA [-1 2 B [-1 - 2 D [4 - 8 0 0 1] - 1 9] 2 8 0 5 2 0] 2x2+6x+4=0 x1=-1 x2=-2A [3 2 B [-1 1 D [5 7 1 0] 1 2] 8 1] 5x2+2x+13=0 корней нетA [2 2 B [-321 D [0 5 0 0] 5-3] 2-4] 4х2-4х+1=0 х=0.5

Рисунок 3.7 - Результат выполнения программы 3 (тест 1)


Рисунок 3.8 - Результат выполнения программы 3 (тест 2)


Рисунок 3.9 - Результат выполнения программы 3 (тест 3)


Данные тестов и результаты выполнения программ совпадают, значит задача решена верно.

3.4 Задача 4


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


Таблица 3.7 - Таблица соответствия переменных задачи 4

Имя переменной в условииИмя переменной в программеТипКомментарийffintПункт менюaadoubleНижний предел интегрированияbbdoubleВерхний предел интегрированияEEdoubleТочность интегрированияintegintegdoubleЗначение интеграла-integ1doubleПромежуточное значение интеграла-integ2doubleПромежуточное значение интеграла-funcfloatЗначение функции в заданной точке-nintКоличество узлов-hdoubleШаг интегрирования-iintИтератор цикла-sdoubleИнтегральная сумма-xdoubleТочка, входящая в интегрируемый отрезок

Листинг решения задачи 4 приведен в приложении Г.

Тесты для отладки задачи 4 приведены на рисунке 3.10 (результат выполнения программы Mathcad), результаты выполнения программы приведены на рисунках 3.11, 3.12, 3.13.



Рисунок 3.10 - Результаты выполнения программы 4 (тест 1)


Рисунок 3.11 - Результаты выполнения программы 4 (тест 2)


Рисунок 3.12 - Результаты выполнения программы 4 (тест 3)


Результаты выполнения программы совпали с тестами, что позволяет сделать вывод о правильности решения задачи.


3.5 Основная программа


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


Таблица 3.8 - Таблица соответствия переменных основной программы

Имя переменной в условииИмя переменной в программеТипКомментарийmmintПункт менюffintФлаг для вызова меню

Листинг основной программы приведен в приложении Д.

На рисунках 3.14 и 3.15 приведены результаты выполнения основной программы.


Рисунок 3.14 - Результат выполнения основной программы (заставка)


Рисунок 3.15 - Результат выполнения основной программы (меню)

Заключение


Изучение темы "Программирование с использованием подпрограмм на языке С" позволяет получить базовые знания для дальнейшего изучения дисциплины, а выполнение задач и написание программ - укрепить и увидеть на практике их выполнение.

При выполнении данной курсовой работы были разработаны алгоритмы для решения поставленных задач, после чего были написаны программы для реализации этих алгоритмов на языке программирования С в среде wxDev-C++, был изучен один из численных методов интегрирования для решения определенных интегралов-метод Ньютона (правило 3/8).

В процессе выполнения работы была изучена структура подпрограмм, механизмы передачи параметров в подпрограмму, в частности передача одномерных и двумерных массивов в функцию, механизмы возврата данных из подпрограммы и вызова подпрограммы на выполнения. Были разработаны блок-схемы алгоритмов, написаны соответствующие программы и разработаны тесты для отладки данных программ.

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

Также были даны краткие теоретические сведения по таким вопросам, как краткая характеристика численного метода интегрирования и использование подпрограмм в языке Си.

В приложениях А, Б, В, Г и Д отражен листинг решенных соответствующих задач.

Для написания курсовой работы были использованы методические и учебные пособия, учебники современных и иностранных авторов, а также материалы интернет-ресурсов.

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

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


1. Мышенков, В.И. Численные методы. Часть первая: Учебное пособие для студентов специальности 0101.07/В.И. Мышенков, Е.В. Мышенков. - М.: МГУЛ, 2001. - 120 с.

. Бахвалов, Н.С. Численные методы. / Н.С. Бахвалов, Н.П. Жидков, Г.М. Кобельков. - М.: Наука, 1987. - 600 с.

. Подпрограммы и программирование с их использованием на языке С. Пособие по одноименным курсам для студентов дневной и заочной форм обучения специальностей 1-36 04 02 всех специальностей "Промышленная электроника", 1-40 01 02 "Информационные системы и технологии"/ сост. Кравченко О.А., Литвинов Д.А. - Гомель: ГГТУ им.П.О. Сухого, 2007. - 48 с.

. Страуструп, Б. Язык программирования Си++/ Б. Страуструп. - М.: Радио и связь, 1991. - 352 с.

. Касаткин, А.И. Профессиональное программирование на языке СИ: от Turbo C к Borland C++: Справ. пособие. / А.И. Касаткин, А.Н. Вальвачев. - Мн.: Выш. шк., 1992. - 240 с.


Приложения


Приложение А


Листинг решения задачи 1

void pp1 () // вызов подпрограммы для решения задачи 1

{

float a,b,c, // стороны параллелепипеда

s, // площадь боковой поверхности параллелепипеда

v; // объем параллелепипеда(Rus ("\tВычислить объем и площадь боковой поверхности параллелепипеда со сторонами а, b, c. ")); // вывод условия задачи на экран(); // ожидание нажатия любой клавиши("cls"); // очистка экрана(Rus ("Введите стороны параллелепипеда а, b, c. "));

scanf ("%f%f%f",&a,&b,&c); // ввод данных=SV (a,b,c,v); // вызов подпрограммы для расчета(Rus ("Объем параллелепипеда со сторонами %.2f %.2f %.2f равен %.2f, а площадь боковой поверхности данного параллелепипеда равна %.2f\n"),a,b,c,v,s); // вывод результатов(); // ожидание нажатия любой клавиши

}

float SV (float a,float b,float c, float &v) // подпрограммы для вычисления объема и площади

{

float r;

v=a*b*c; // вычисления объема параллелепипеда

r=2* (a+b) *c; // вычисление площади боковой поверхности параллелепипеда

return (r); // возврат в программу результата

}

Приложение Б


Листинг решения задачи 2

void pp2 () // вызов подпрограммы для решения задачи 2

{

int A [20],B [20],C [20]; // исходные массивы

int n,m,k, // количество элементов в массивах

p,g,e; // коэффициенты функции

float T; // значение функции(Rus ("\tВычислить значение функции T =0,57 sin p - 1,73 cos g+ e, где p, g, e - количество положительных элементов массивов А, В и С, соответственно. \n\n ")); // вывод условия задачи на экран

getch (); // ожидание нажатия любой клавиши

system ("cls"); // очистка экрана

vvod (A,&n,'A'); // ввод массива А

vvod (B,&m,'B'); // ввод массива В

vvod (C,&k,'C'); // ввод массива С

vivod (A,n,'A'); // вывод массива А

vivod (B,m,'B'); // вывод массива В

vivod (C,k,'C'); // вывод массива С

p=kol (A,n); // определения коэффициента функции

g=kol (B,m); // определения коэффициента функции

e=kol (C,k); // определения коэффициента функции

T=func (p,g,e); // расчет значения функции(Rus ("Результат %.5f\n"),T); // вывод результата

getch (); // ожидание нажатия любой клавиши

}

float func (int p, int g, int e) // подпрограмма для расчет значения функции

{

float T; // значение функции

T=0.57*sin (p) - 1.73*cos (g) +e // расчет функции;

return (T); // возврат значения функции в программу

}

void vivod (int *p, int n,char sim) // подпрограмма для вывода массива

{

int i; // номер элемента массива

printf (Rus ("Массив %c\n"),sim);

for (i=0; i<n; i++) // цикл для вывода массива

printf ("%2d", * (p+i));("\n");

}vvod (int *p, int *n, char sim) // подпрограммa для ввода массива

{i; // номер элемента в массиве(Rus ("\nВведите количество элементов в массиве %c\n"), sim);("%d", n); // ввод кол-ва элементов в массиве

puts (Rus ("Введите массив"));(i=0; i<*n; i++) // циклдлявводмассива

{printf ("%c [%d] =", sim, i);("%d", p+i); }

}kol (int *p, int n)

{

int i; // номер элемента в массиве

int f=0; // начальное значение количества положительных элементов в массиве

for (i=0; i<n; i++) // цикл для перебора всех элементов массива

if (* (p+i) >0) // условие для определения знака элемента в массиве

f++; // изменение значения количества положительных элементов массива

return (f); } // возврат количества положительных элементов в программу

Приложение В


Листинг решения задачи 3

void pp3 () // вызов подпрограммы для решения задачи 3

{

int A [20],B [20],D [20], // исходные массивы

p,q,c, // коэффициенты функции

n,m,k; // количество строк в матрицах

float x1,x2,des; // корни и дискриминант функции(Rus ("\tРешить уравнение px^2 + qx + c = 0, где p, q и с - суммы элементов, лежащих выше главной диагонали и на ней, в матрицах А, В и D, соответственно. ")); // вывод условия задачи

getch (); // ожидания нажатия любой клавиши

system ("cls"); // очистка экрана

vvod2 (A,&n,'A'); // ввод массива А

vvod2 (B,&m,'B'); // ввод массив В

vvod2 (D,&k,'D'); // ввод массива D

vivod2 (A,n,'A'); // вывод массива А

vivod2 (B,m,'B'); // вывод массива В

vivod2 (D,k,'D'); // вывод массива D

p=sum (A,n); // определение коэффициента функции

q=sum (B,m); // определение коэффициента функции

c=sum (D,k); // определение коэффициента функции

fun (p,q,c,des,x1,x2); // вычисление корней и дискриминанта функции

if (des>0) // условие для вывод результатов

printf (Rus ("Корнями уравнения %d*x^2+%d*x+%d=0 являются %.2f и %.2f\n"),p,q,c,x1,x2);

else if (des==0)

printf (Rus ("Корнем уравнения %d*x^2+%d*x+%d=0 является %.2f\n"),p,q,c,x1);

else printf (Rus ("Корни уравнения %d*x^2+%d*x+%d=0 комплексные (нет действительных корней) \n"),p,q,c);

getch ();

}

void vvod2 (int *p, int *n, char sim) // подпрограмма для ввода матрицы

{i,j; // номер элемента в матрице(Rus ("Введите количество строк и столбцов в квадратной матрице %c\n"),sim);("%d",n); // ввод количества строк матрицы(Rus ("Введите матрицу"));

for (i=0; i<*n; i++) // цикл для ввода матрицы

for (j=0; j<*n; j++)

{("%c [%2d] [%2d] =",sim, i,j);("%d",p+i**n+j);

}

}vivod2 (int *p, int n,char sim) // подпрограмма для вывода матрицы

{

int i,j; // номер элемента матрицы

printf (Rus ("Матрица %c\n"),sim); (i=0; i<n; i++) // цикл для вывода матрицы

{for (j=0; j<n; j++)("%2d ",* (p+i*n+j)); ("\n");

}

}

int sum (int *p, int n) // подпрограмма для определения коэффициентов функции

{

int s, // сумма элементов, стоящих над главной диагональю и на ней

i,j; // номер элемента матрицы

s=0; // начальное значение суммы

for (i=0; i<n; i++) // цикл для перебора элементов в матрице

for (j=i; j<n; j++)

s=s+* (p+i*n+j); // изменение значения суммы

return (s); // возврат значения суммы в программу

}

float fun (int p, int q, int c,float&des,float&x1,float&x2) // подпрограмма для расчета корней уравнения и его дискриминанта

{

des=q*q-4*p*c; // определение дискриминанта уравнения

x1= (-q+pow (des, (1. /2))) / (2*p); // расчет корней

x2= (-q-pow (des, (1. /2))) / (2*p); // уравнения

return (x1,x2,des); // возврат данных в программу

}

Приложение Г


Листинг решения задачи 4

void pp4 () // вызов подпрограммы для решения задачи 4

{f; // пункт меню

double a,b, integ,E; // пределы точность и значение интеграла(Rus ("Выберите функцию для интегрирования")); // вызов меню

puts ("1. x/sqrt (pow (x,4) - x)");("2. x/cos (x/25)");("3.1/ (x*x) +sin (x/6)");

scanf ("%d",&f); // выбор уравнения

system ("cls"); // очистка экрана(Rus ("Введите нижний предел интегрирования"));("%lf",&a); // ввод нижнего предела интегрирования(Rus ("Введите верхний предел интегрирования"));("%lf",&b); // ввод верхнего предела интегрирования(Rus ("Введите точность"));

scanf ("%lf",&E); // ввод точности

switch (f) // выбор интегрируемой функции

{ case 1: integ=integral (a,b,*f1,E); break; // решение первого интеграла

case 2: integ=integral (a,b,*f2,E); break; // решение второго интеграла3: integ=integral (a,b,*f3,E); break; } // решение третьего интеграла

printf (Rus ("Значение определенного интеграла для данной функции равно %.4lf"), integ); // вывод результата(); } // ожидание нажатия любой клавишиf1 (float x) // подпрограмма для вызова первой подынтегральной функции

{

double func; // значение функции в точке

func=x/sqrt (x*x*x*x-x); // определения значения функции в точке

return (func); // возврат результата в программу

}

float f2 (float x) // подпрограмма для вызова второй подынтегральной функции

{

double func; // значение функции в точке

func=x/cos (x/25); // определения значения функции в точке

return (func); // возврат результата в программу

}

float f3 (float x) // подпрограмма для вызова третьей подынтегральной функции

{

double func; // значение функции в точке

func=1/ (x*x) +sin (x/6); // определения значения функции в точке(func); // возврат результата в программу

}integral (float a,float b,funct_type funct,float E) // подпрограммa для расчета интеграла

{n=3, i; // количество узловh, integ1, integ2,x,s; // значения интеграла и шаг= (b-a) /n; // расчет шага=3*h/8* (funct (a) +funct (b) +3*funct (a+2*h) +3*funct (a+h)); // вычисления значения интеграла=1000;(fabs (integ1-integ2) >E) // цикл по достижению точности

{ n*=2; h= (b-a) /n; integ1=integ2; integ2=0; s=0; i=1;(x=a; x<=b; x=x+h)

{i++;(i%3==0)+=3*h/8* (funct (x) +funct (b) +3*funct (x+2*h) +3*funct (x+h)); }

integ2=integ2+s; }(integ2); } // возврат значения интеграла в программу

Приложение Д


Листинг основной программы

#include<conio. h> // подключение

#include<stdio. h> // используемых

#include<windows. h> // библиотек

#include "lib. h" // подключение библиотеки с подпрограммами

main ()

{

int f, // флаг для вызова меню

m; // пункт меню

zact (); // вызов заставки

f=0; // начальное значение флажка

while (f==0) // цикл для вызова меню

{

menu (); // вызов меню

scanf ("%d",&m); // ввод пункта меню

switch (m) // выбор задачи

{

case 1: system ("cls"); pp1 (); break; // решение задачи 1

case 2: system ("cls"); pp2 (); break; // решение задачи 23: system ("cls"); pp3 (); break; // решение задачи 34: system ("cls"); pp4 (); break; // решение задачи 45: system ("cls"); zact (); break; // вызов заставки

case 6: f=1; break; // изменения флажка

}

}(0);

}

Все подпрограммы, описанные в приложениях А, Б, В и Г содержаться в библиотеке lib, а также в данной библиотеке находятся подпрограмма для вызова меню и информации о работе, листинг которых приведен ниже.

void zact () // подпрограмма для вызова заставки

{(Rus ("\n\n\n\n\t\t\tКурсовая работа")); // вывод информации о работе на экран(Rus ("\tпо дисциплине <основы алгоритмизации и программирования>"));(Rus ("\t\на тему: Программирование с использованием подпрограмм на языке С"));(Rus ("\n\n\n\n\n\t\t\t\tВыполнил студент группы ИТ-12 Зарецкий В.В. "));

getch ();

}

void menu () // подпрограмма для вызова меню

{

system ("cls"); // очистка экрана

puts (Rus ("\t\t\t1-Задача 1")); // вывод меню на экран

puts (Rus ("\n\t\t\t2-Задача 2"));(Rus ("\n\t\t\t3-Задача 3"));(Rus ("\n\t\t\t4-Задача 4"));

puts (Rus ("\n\t\t\t5-Информация о работе"));

puts (Rus ("\n\t\t\t6-Выход"));

puts (Rus ("\nВыберите пункт меню"));

}


МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П.О. СУХОГО Факультет авто

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ