Имя переменной
в условии
|
Имя переменной
в программе
|
Тип
|
Комментарий
|
m
|
m
|
int
|
Пункт меню
|
f
|
f
|
int
|
Флаг для вызова
меню
|
Листинг основной программы приведен в приложении Д.
На рисунках 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" // подключение библиотеки с подпрограммами
{
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Выберите пункт меню"));
}