Программирование с использованием подпрограмм на языке С
Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 06.12.2013 |
Размер файла | 575,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
12
Размещено на http://www.allbest.ru
Министерство Образования Республики Беларусь
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ
ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО
Факультет автоматизированных и информационных систем
Кафедра: «Информационные технологии»
РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по дисциплине: «Основы алгоритмизации и программирования»
на тему: «Программирование с использованием подпрограмм на языке С»
Выполнил: студент группы ИТ-11
Кулаженко Игорь Петрович
Руководитель: преподаватель
Кравченко Ольга Алексеевна
Гомель 20013г.
Введение
Cи++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей Cи++ является надмножеством языка программирования Cи. Помимо возможностей, которые дает Cи, Cи++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
Разработчиком языка Си++ является Бьерн Страуструп. В своей работе он опирался на опыт создателей языков Симула, Модула 2, абстрактных типов данных. Основные работы велись в исследовательском центре компании Bell Labs.
Непосредственный предшественник Си++ - язык Си с классами - появился в 1979 году, а в 1997 году был принят международный стандарт Си++, который фактически подвел итоги его 20-летнего развития. Принятие стандарта обеспечило единообразие всех реализаций языка Си++. Не менее важным результатом стандартизации стало то, что в процессе выработки и утверждения стандарта язык был уточнен и дополнен рядом существенных возможностей.
Язык Си++ является универсальным языком программирования, в дополнение к которому разработан набор разнообразных библиотек. Поэтому, строго говоря, он позволяет решить практически любую задачу программирования. Тем не менее, в силу разных причин (не всегда технических) для каких-то типов задач он употребляется чаще, а для каких-то - реже.
Си++ как преемник языка Си широко используется в системном программировании. На нем можно писать высокоэффективные программы, в том числе операционные системы, драйверы и т.п. Язык Си++ - один из основных языков разработки трансляторов.
Поскольку системное программное обеспечение часто бывает написано на языке Си или Си++, то и программные интерфейсы к подсистемам ОС тоже часто пишут на Си++.
Распределенные системы, функционирующие на разных компьютерах, также разрабатываются на языке Си++. Этому способствует то, что у широко распространенных компонентных моделей CORBA и COM есть удобные интерфейсы на языке Си++.
Обработка сложных структур данных - текста, бизнес информации, Интернет страниц и т.п. - одна из наиболее распространенных возможностей применения языка. В прикладном программировании, наверное, проще назвать те области, где язык Си++ применяется мало.
Разработка графического пользовательского интерфейса на языке Си++ выполняется, в основном, тогда, когда необходимо разрабатывать сложные, нестандартные интерфейсы.
В целом надо сказать, что язык Си++ в настоящее время является одним из наиболее распространенных языков программирования в мире.
Подпрограмма -- поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. В языках программирования для оформления и использования подпрограмм существуют специальные синтаксические средства.
Подпрограммы изначально появились как средство оптимизации программ по объёму занимаемой памяти -- они позволили не повторять в программе идентичные блоки кода, а описывать их однократно и вызывать по мере необходимости. К настоящему времени данная функция подпрограмм стала вспомогательной, главное их назначение -- структуризация программы с целью удобства её понимания и сопровождения.
Преимущества использования подпрограмм очевидны. Во-первых, в программе нет дублирования кода, что сокращает трудоемкость создания программы, делает более удобным процесс отладки и внесения изменений. Если программа использует подпрограмму, то изменения надо внести только в текст подпрограммы. Во-вторых, значительно повышается надежность программы. Следует обратить внимание, что подпрограммы используют не только тогда, когда нужно избежать дублирования кода. Удобно большую задачу разделить на несколько подзадач и оформить каждую задачу как подпрограмму. В этом случае значительно улучшается "читаемость" программы и, как следствие, существенно облегчается процесс отладки.
1. Постановка задач и исходные данные
1. Для решения каждой задачи в соответствии с условием, требуется разбить задачу на подзадачи и разработать вспомогательные и основной алгоритмы.
2. Оформить разработанные алгоритмы в виде графических схем.
3. Написать программу с использованием подпрограмм, соответствующую разработанным алгоритмам.
4. Отладить программу в среде программирования.
5. Каждая подпрограмма в качестве входных параметров должна иметь массив и количество его элементов (при наличии массива). Результат выполнения подпрограммы передавать через ее заголовок и/или по оператору return.
6. Исходные данные для отладки программы подобрать самостоятельно.
7. Подготовить полный набор тестов для отладки разработанных программ.
прикладное программирование алгоритм
№ |
Задание |
Используемые формулы |
|
1 |
Вычислить кривизну К полукубической параболы с параметром a>0 в точке с абсциссой x и длину L дуги кривой от начала координат до точки с абсциссой x. |
||
2 |
Вычислить значение функции z. |
||
3 |
Решить уравнение px2 + qx + t = 0, где p, q и t - минимальные значения элементов побочной диагонали матриц A, B и C, соответственно. |
- |
|
4 |
Разработать и оформить в виде графической схемы алгоритм вычисления определенного интеграла с точностью о методом Ньютона (правило 3/8). |
f1=; f2=; f3=; |
Примечание: в задании 4 в функцию необходимо передать указатель на подынтегральную функцию.
2. Передача параметров и возврат параметров для функции
2.1 Теоретические сведения
Функции позволяют программисту разбить одну большую задачу на несколько более мелких, решение которых по отдельности занимает намного меньше времени, а так же позволяет минимизировать объем вводимого кода в случаях, когда одна и та же операция выполняется несколько раз, вынося ее в отдельную подпрограмму.
В случае, если производится отладка одной цельной и большой программы, программисту необходимо сперва найти место, где находится ошибка и только после этого приступить к её устранению. При использовании подпрограмм эта задача значительно упрощается из-за того, что область поиска ошибок сужается до конкретной подпрограммы.
При написании подпрограмм очень важно следить за соблюдением области видимости переменных (область, внутри которой операторы могут «видеть» и изменять значение этой переменной). Так, локальные переменные (объявленные в самой подпрограмме или в её заголовке) будут доступны только внутри этой подпрограммы, а так же могут дублироваться в других подпрограммах без конфликта (области видимости не совпадают). Глобальные же переменные могут использоваться во всей программе и при объявлении такой же переменной (по имени) возникнет ошибка из-за перекрещения областей видимости этих переменных.
В подпрограммах используются три способа передачи переменных:
а) непосредственная передача переменной. При этом значение переменной можно изменять внутри самой подпрограммы, однако сама переменная (в той области видимости переменных, откуда была вызвана эта переменная) изменяться не будет;
б) передача указателя на переменную. При этом изменение переменной в функции вызовет аналогичное изменение этой переменной, находящейся в области видимости вызывающей подпрограммы. При этом необходимо не забывать о необходимости применения операции разадресации;
в) возврат переменной как результата выполнения функции. Для этого необходимо явно задать тип возвращаемого значения (по умолчанию это int) и присвоить ему конкретное значение оператором return. При этом присвоении значения происходит выход из функции.
Выбор конкретного способа зависит от поставленной задачи и функционала подпрограммы.
2.2 Блок-схема программы
2.3 Листинг программы
/*Кулаженко И.П. Курсовая рабата. Задача№1*/
#include <stdio.h> //Подключение библиотек;
#include<conio.h>
#include<math.h>
float KrivDlin(float a,float x, float *L); //Прототип функции;
void main()
{
clrscr(); //Вызов ф-ции очистки экрана;
float L,K,a,x; //Объявление перенных;
puts("Введите значение параметра полукубической параболы(а>0):");
scanf("%f",&a); //Ввод переменной а;
while(a<=0) //Проверка переменной а на соответствие условию;
{
puts("Введено неверное значение параметра!");
puts("Введите значение параметра полукубической параболы(а>0):");
scanf("%f",&a);
}
puts("Введите абсцису точки (Х):");
scanf("%f",&x); //Ввод переменной х;
K=KrivDlin(a,x,&L); //Присвоение значения, возвращаемого
//подпрограммой KrivDlin переменной К;
puts("------------------------------------------------------------");
puts("| Исходные значения | Результат |");
puts("------------------------------------------------------------");
puts("| параметр а | абсциса Х | Кривизна | Длинна дуги |");
puts("------------------------------------------------------------");
printf("|%12f|%11f|%15f|%17f|\n",a,x,K,L);//Вывод исходных данных и
//результатов выполнения программы;
puts("------------------------------------------------------------");
getch(); //Вызов ф-ции задержки экрана;
}
/*Описание функции KrivDlin*/
float KrivDlin(float a,float x, float *L)
{
float K;
K=6*a/(sqrt(fabs(x))*pow((4+9*a*a*fabs(x)),1.5));
*L=(pow(4+9*a*a*x,1.5)-8)/(27*a*a);
return(K); //Возвращение значения переменной К
}
2.4 Тесты
1.При a=1 и x=1: К=0.128008, L=1.43971;
2.При а=2 и х=-2: K=0.012807, L= 0.012807;
3.При а=5 и х=6: K= 0.0002458202, L= 73.799681;
3. Передача и возврат одномерных массивов в функцию
3.1 Теоретические сведения
Передавать массив в функцию возможно двумя способами, в зависимости от типа массива:
а) Посредством указателя на начальный элемент массива - используется для динамических массивов. Характеризуется наибольшим быстродействием, поскольку в качестве параметра передается только один параметр;
б) Передается сам массив целиком - имеет наименьшее быстродействие, поскольку при вызове такой функции в качестве параметра передается весь массив. Данный метод возможно использовать только при сравнительно малых размерах передаваемого массива.
3.2 Блок-схема программы
3.3 Листинг программы
//Кулаженко И.П.Курсовая работа.Задание №2
#include<conio.h> //Подключение библиотек
#include<stdio.h>
#include<math.h>
//Прототипы ф-ций
float *vvod(int *kol_el, char name); //Прототип ф-ции ввода
void vivod(float *mas,int kol_el,char name); //Прототип ф-ции вывода
float sum(float *mas, int kol_el,char name); //Прототип ф-ции суммирования
void main()
{
clrscr(); //Вызов ф-ции очистки экрана
float *x,*y,*z, //Указатели на первые элементы массивов x,y,z
f; //Переменная для хранения значения вычисляемой ф-ции
int m,n,lm; //Переменные для хранения кол-ва элементов в массивах x,y,z
x=vvod(&m,'x'); //Обращение к ф-ции ввода, ввод массива х
puts("В массиве у должно быть не меньше 20 элементов");
y=vvod(&n,'y'); //Обращение к ф-ции ввода, ввод массива y
if (n==20) //Проверка на соответствие массива y условию задачи
{
z=vvod(&lm,'z'); //Обращение к ф-ции ввода, ввод массива z
f=sum(x,m,'x')*sin(sum(y,n,'y'))-cos(sum(z,lm,'z'));//Вычисление значения ф-ции, заданной в условии
vivod(x,m,'x'); //Обращение к ф-ции вывод, вывод массива х
vivod(y,n,'y'); //Обращение к ф-ции вывода, вывод массива у
vivod(z,lm,'z'); //Обращение к ф-ции вывода, вывод массива z
printf("Значение ф-ции: %.12f\n",f); //Вывод вычичленного значения
}
else //Вывод неверном вводе массива у
puts("В массиве у введено неверное кол-во элементов");
delete []x; //Высвобождение памяти
delete []y;
delete []z;
getch(); //Задержка экрана
}
//Описание ф-ции суммирования
float sum(float *mas, int kol_el,char name)
{
int i;
float s=0;
printf("Введите номер элемента масива %c с которого производить суммирование:\n",name);
scanf("%d",&i);
for (i;i<kol_el;i++)
s=s+mas[i]*mas[i];
return (s);
}
//Описание ф-ции ввода
float *vvod(int *kol_el, char name)
{
int i;
float *mas;
printf("Введите количество элементов в массиве %c\n",name);
scanf("%d",kol_el);
mas=new float[*kol_el];
for(i=0;i<*kol_el;i++)
{
printf("%c[%d]=\n",name,i);
scanf("%f",&mas[i]);
}
return(mas);
}
//Описание ф-ции вывода
void vivod(float *mas,int kol_el,char name)
{
int i;
for(i=0;i<kol_el;i++)
printf("%c[%d]=%f\n",name,i,mas[i]);
puts("");
}
3.4. Тесты
1. При:
x{1,1,1,1,1};
y{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
z{3,2,1};
m=5; lm=3;k=1;
4.427989;
2. При:
x{3,1,2,1};
y{2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2};
z{4,3,1,1};
m= 4; lm=4;k=1;
-9.662369;
3. При:
x{2,3,2,1};
y{3,3,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1};
z{2,2,1,1};
m=4; lm=4;k=1;
6.173706;
4. Передача двумерных массивов в функцию
4.1 Теоретический сведения
Передача двумерных массивов в функцию может осуществляться двумя методами:
а) Передача двойного указателя (например, “int **massiv”). Этот метод является наиболее удобным для восприятия, поскольку не затрудняет понимания, к какому элементу массива идет обращение в данный момент (то есть в программе пишется “massiv[i][j]”);
б) Передача указателя на первый элемент массива (например, “int *massiv”). Этот метод является наиболее быстродействующим и гибким за счет того, что программист сам реализует необходимую адресацию при обращении к массиву. Однако при этом значительно усложняется код программы, поскольку необходимо вычислять позицию необходимого элемента массива по отношению к первому (в программе принимает следующий вид: “massiv[i*n+j]” - для стандартной адресации).
4.2 Блок-схема программы
4.3 Листинг программы
//Курсовая работ.Кулаженко И.П.Задание№3
#include<conio.h> //Подключение необходимых библиотек
#include<stdio.h>
#include<math.h>
//Прототипы ф-ций
int *vvod(int *n,char name); //Прототип ф-ции ввода
void vivod(int *mas,int n,char name); //Прототип ф-ции вывода
int poiskmin(int *mas,int n); //Прототип ф-ции поиска минимального элемента массива
void main()
{
clrscr(); //Функция очистки экрана
int *A,*B,*C; //Указатели на массивы A,B,C
int p,q,t; //Переменные для хранения мин. значений в матрицах
int n,m,k; //Переменные, указывающие на размерность матриц
float D,x1,x2;
A=vvod(&n,'A'); //Ввод матрицы A
B=vvod(&m,'B'); //Ввод матрицы В
C=vvod(&k,'C'); //Ввод матрицы С
p=poiskmin(A,n); //Поиск минимального значения в матрице A
q=poiskmin(B,m); //Поиск минимального значения в матрице В
t=poiskmin(C,k); //Поиск минимального значения в матрице С
puts("Введенные матрицы");
vivod(A,n,'A'); //Выводы матриц A,B,C
vivod(B,m,'B');
vivod(C,k,'C');
printf("p=%d q=%d t=%d\n",p,q,t);
D=(q*q)-(4*p*t); //Нахождение дискриминанта
if(D>=0) //Проверка на наличие действительных корней
{
x1=(-q-sqrt(D))/(2*p); //Нахождение корней уровнения
x2=(-q+sqrt(D))/(2*p);
printf("Корни уровнения %dx^2+%dx+%d=0:\nx1=%f x2=%f",p,q,t,x1,x2);
}
else
printf("Дискрименант уровнения %dx^2+%dx+%d=0 отрицательный\n",p,q,t);
getch();
}
//Описание ф-ции ввода
int *vvod(int *n,char name)
{
int i,j,nn;
int *mas;
puts("Введите размерность квадратной матрицы");
scanf("%d",n);
nn=*n**n;
mas=new int [nn];
for(i=0;i<*n;i++)
for(j=0;j<*n;j++)
{
printf("%c[%d,%d]=",name,i,j);
scanf("%d",&mas[*n*i+j]);
}
return (mas);
}
//Описание ф-ции нахождения минимального элемента
int poiskmin(int *mas,int n)
{
int min,i;
min=mas[n-1];
for(i=1;i<n;i++)
if(mas[i*n+n-1-i]<min)
min=mas[i*n+n-1-i];
return (min);
}
//Описание ф-ции вывода
void vivod(int *mas,int n,char name)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%c[%d,%d]=%d ",name,i,j,mas[i*n+j]);
puts("");
}
puts("");
}
4.4 Тесты
1. A={ 2 3 2
1 2 1
1 0 2};
B={ 2 8
2 2 };
C={ 1 0 4
1 2 1
1 0 2 };
p=1; q=2; t=1;
px2 + qx + t = 0;
x1=-1; x2=-1;
2.A={ 2 4 7
1 6 1
1 0 2};
B={ 3 -5
11 2 };
C={ 2 2 7
3 6 3
7 9 2 };
p=1; q=-5; t=6;
px2 + qx + t = 0;
x1=2; x2=3;
3.A={ 2 3 2
1 2 1
2 0 2};
B={ 2 8 11
2 12 1
6 7 1};
C={ 1 4 -8
1 2 1
1 0 2 };
p=2; q=6; t=-8;
px2 + qx + t = 0;
x1=-4; x2=1;
5. Передача функции в функцию
5.1 Теоретические сведения
5.1.1 Передача функции в функцию
Указатель на функцию - такой тип переменной, которой можно присваивать адрес точки входа в функцию, т.е. адрес первой исполняемой команды. Эта переменная может в дальнейшем использоваться для вызова функции вместо ее имени.
Общий вид определения указателя на функцию:
Тип_результата (*имя_указателя_на_функцию) (список типов параметров);
Указатели на функцию передаются в качестве аргумента другим функциям, если последние реализуют какой-либо метод обработки функций, не зависящий от вида конкретной обрабатываемой функции. Эта конкретная (фактическая) функция вызывается из тела обрабатываемой функции по переданному ей указателю.
Чтобы сделать программу легко читаемой, при описании указателей на функцию используют создание новых типов (typedef). Например,
typedef float (*func) (float);
Здесь описан тип func как указатель на функцию с одним параметром типа float и возвращающую результат типа float.
Указатели на функцию используются часто. Например, многие библиотечные функции в качестве аргументов получают указатель на функцию. Использование указателей на функцию в качестве аргументов позволяет разрабатывать универсальные функции, например численного решения уравнений, численного интегрирования и дифференцирования. Можно создавать массивы указателей на функции. Массивы указателей на функции используются, например, для организации меню.
5.1.2 Численное интегрирование. Метод Ньютона (правило 3/8)
Одномерный определенный интеграл вида
с пределами интегрирования можно трактовать как площадь фигуры, ограниченной отрезками прямых , осью абсцисс и графиком подынтегральной функции Если известна первообразная для то интеграл легко определяется по формуле Ньютона-Лейбница Для некоторых подынтегральных функций интеграл можно вычислить аналитически, найти в справочниках или оценить с помощью асимптотических рядов. Однако в общем случае может быть не определена: либо первообразные не выражаются через элементарные функции, либо сами подынтегральные функции не являются элементарными. Это приводит к необходимости разработки приближенных методов вычисления определенных интегралов.
Наиболее общеупотребительными приближенными методами вычисления одномерных определенных интегралов являются так называемые классические» методы численного интегрирования по квадратурным формулам: метод прямоугольников, метод трапеций, метод парабол (основанные на суммировании элементарных площадей, на которые разбивается вся площадь под функцией . Хотя эти методы обычно предпочтительны в случае малых размерностей, они практически не годятся для вычисления многомерных интегралов, для вычисления последних наиболее пригоден метод Монте-Карло (численный метод решения математических задач при помощи моделирования случайных величин).
Во всех этих методах отрезок интегрирования разбивается на достаточно большое число равных частей, на которых строятся искомые площади (рис. 8.2):
и
Оценкой площади под кривой служит сумма площадей криволинейных трапеций Простой прием построения формул для расчета интегралов состоит в том, что подынтегральная функция заменяется
на отрезке интерполяционным многочленом и получается приближенное равенство
Используемая на практике квадратурная формула интерполяционного типа -- так называемое «правило 3/8» получается при замене подынтегральной функции интерполяционным полиномом третьей степени, построенным по четырем точкам.
Размещено на http://www.allbest.ru
12
Размещено на http://www.allbest.ru
где, Fi=F(xi), xi=a+ih, h=(b-a)/3k- расстояние между узлами интерполяции,
k- число разбиений отрезка [a, b], i=0,1,…3k;
5.2 Блок-схема программы
5.3 Листинг программы
//Кулаженко И.П. Курсовая работа. Задание№4
#include<stdio.h> //Подключение библиотек.
#include<conio.h>
#include<math.h>
typedef float(*funct_type)(float);//Объявление пользовательского типа
//funct_type - указатель на ф-цию.
//Прототипы ф-ций.
float integral(float a,float b,funct_type funct,float E);
float f1(float x);
float f2(float x);
float f3(float x);
void main()
{
clrscr(); //Вызов ф-ции очистки экрана.
float a,b, //Объявление переменных,отвечающих
//за границы интегрирования.
integ_f1, //Объявление переменных, в которые
integ_f2, //будет возвращаться результат
integ_f3, //выполнения ф-ции integral.
E; //Объявление переменной, отвечающей
//за точность.
puts("Введите отрезок [a,b]");
scanf("%f%f",&a,&b); //Ввод границ интегрирования.
puts("Введите точность");
scanf("%f",&E); //Ввод точности.
integ_f1=integral(a,b,f1,E); //Вызов ф-ции integral, вычисление интеграла от f1(x).
integ_f2=integral(a,b,f2,E); //Вызов ф-ции integral, вычисление интеграла от f2(x).
integ_f3=integral(a,b,f3,E); //Вызов ф-ции integral, вычисление интеграла от f3(x).
//Вывод результатов выполнения программы.
printf("Значение интеграла от ф-ции f1(x)=%f\n",integ_f1);
printf("Значение интеграла от ф-ции f2(x)=%f\n",integ_f2);
printf("Значение интеграла от ф-ции f3(x)=%f\n",integ_f3);
getch(); //Вызов ф-ции задержки экрана.
}
//Описани ф-ции интеграл.
float integral(float a,float b,funct_type funct,float E)
{
int n=6; //Объявление переменной n, определяющей
//количество частей, на которые разбивается отрезок[a,b].
float h,integ1,integ2,x,s1,s2;
h=(b-a)/n; //Вычисление значения шага переменной х.
integ2=3*h/8*(funct(a)+funct(b)+2*funct(a+3*h)+3*(funct(a+h)+funct(a+2*h)+funct(a+4*h)+funct(a+5*h)));
integ1=1000;
float sa=funct(a), sb=funct(b);
while(fabs(integ1-integ2)>E) //Цикл, выполняющийся до достижения заданной точности.
{
n+=12; //Увеличение часией разбиения отрезка[a,b], для увеличение точности.
h=(b-a)/n; //Вычисление шага с учётом нового значения n.
integ1=integ2;
s1=s2=0;
for(int i=1;i<=n-1;i++) //Цикал начисления сумм s1,s2, с учётом специфики
{ //используемого метода.
if(i%3==0)
s1+=funct(x);
else
s2+=funct(x);
x=a+i*h; //Вычисление шага переменной х.
}
integ2=3*h/8*(sa+sb+2*s1+3*s2); //Вычисление значения интеграла.
}
return(integ2); //Возврат значения переменной integ2.
}
//Описание ф-ции f1.
float f1(float x)
{
float funct;
funct=1/sqrt((x+2)*(x+0.5));
return(funct); //Возврат вычисленного значения ф-циий.
}
//Описание ф-ции f2.
float f2(float x)
{
float funct;
funct=(x-3)*atan(x);
return(funct); //Возврат вычисленного значения ф-циий.
}
//Описание ф-ции f3.
float f3(float x)
{
float funct;
funct=x*x*x-2*x*x+16;
return(funct); //Возврат вычисленного значения ф-циий.
}
5.4 Тесты
Тест 1
1. График функции f1(x)= , на отрезке [2, 4.5];
Размещено на http://www.allbest.ru
12
Размещено на http://www.allbest.ru
Значение интеграла от функции f1(x) на отрезке [2, 4.5]:
2. График функции f2(x)= , на отрезке [2, 4.5]:
Значение интеграла от функции f2(x) на отрезке [2, 4.5]:
3. График функции f3(x)= , на отрезке [2,4.5]:
Значение интеграла от функции f3(x) на отрезке [2, 4.5]:
Тест 2
1. График функции f1(x)= , на отрезке [0, 3];
Значение интеграла от функции f1(x) на отрезке [0, 3]:
2. График функции f2(x)= , на отрезке [0, 3]:
Значение интеграла от функции f2(x) на отрезке [0, 3]:
3. График функции f3(x)= , на отрезке [0,3]:
Значение интеграла от функции f3(x) на отрезке [0,3]:
Тест 3
1. График функции f1(x)= , на отрезке [4,5];
Значение интеграла от функции f1(x) на отрезке [4, 5]:
2. График функции f2(x)= , на отрезке [4, 5]:
Значение интеграла от функции f2(x) на отрезке [4, 5]:
3. График функции f3(x)= , на отрезке [4,5]:
Значение интеграла от функции f3(x) на отрезке [4,5]:
Заключение
Курсовое проектирование является необходимым этапом подготовки и обучения студентов, становления их как высококвалифицированных специалистов и играет важную роль в формировании самостоятельного творческого мышления студента. Курсовая работа представляет собой комплексную учебно-исследовательскую работу студента, которая выполняется на основе теоретических и практических знаний, накопленных в процессе обучения дисциплине. Она является многоцелевым элементом учебного процесса и позволяет привить студентам навыки и умения сбора, анализа, обобщения информации по данной предметной области, решения конкретной прикладной задачи с применением обоснованно выбранной компьютерной системы.
В ходе выполнения курсовой работы мною были получены незаменимые практические навыки написания компьютерных программ на языке Си. Так же был осмыслен прикладной характер тех знаний, которые были получены на лекциях и практических занятиях. В ходе изучения поставленной задачи был получен незаменимый опыт работы с источниками информации, что немало важно для дальнейшего обучения и в будущем для совершенствования себя как специалиста.
Данной курсовой работай можно подвести итог тому, что было сделано в ходе изучения дисциплины «основы алгоритмизации и программирования» и считать первым пройденным этапом на пути становления будущего инженера.
Список литературы
1. Шилд Г. «Самоучитель С++» БХВ «Питербург» 2003г.
2. Страуструп Б. «Справочное руководство по С++» Москва 1999г.
3. Трохова Т.А., Самовендюк Н.В., Романькова Т. Практическое руководство к курсовому проектированию по курсу "Информатика" для студентов технических специальностей дневной и заочной форм обучения. - Гомель: Учреждение образования "ГГТУ имени П.О.Сухого", 2004. - с.
4. О.А. Кравченко, Д.А. Литвинов. Пособи по курсу «подпрограммы и программирование с их использованием на языке С» для студентов дневной и заочной форм обучения специальностей 1-36 04 02 всех специальностей "Промышленная электроника", 1-40 01 02 "Информационные системы и технологии"
5. Бахвалов Н.С. Численные методы. М., 1973.
6. Никольский С.М. Квадратурные формулы. М., 1958.
7. http://www.crec.mipt.ru/study/materials/compmath/lectures/lobanov
Приложение А
Результаты выполнения программы для Задания №1
Введите значение параметра полукубической параболы(а>0):
1
Введите абсцису точки(Х):
1
| Исходные значения | Результат |
---------------------------------------------------------------------
| параметр а | абсциса Х | Кривизн | Длинна дуги |
---------------------------------------------------------------------
| 1.000000| 1.000000| 0.128008| 1.439710 |
---------------------------------------------------------------------
Введите значение параметра полукубической параболы(а>0):
1
Введите абсцису точки(Х):
1
-------------------------------------------------------------------------
| Исходные значения | Результат |
-------------------------------------------------------------------------
| параметр а | абсциса Х | Кривизн | Длинна дуги |
------------------------------------------------------------------------
| 1.000000| 1.000000| 0.128008| 1.439710|
------------------------------------------------------------------------
Введите значение параметра полукубической параболы(а>0):
1
Введите абсцису точки(Х):
1
| Исходные значения | Результат |
-------------------------------------------------------------------------
| параметр а | абсциса Х | Кривизн | Длинна дуги |
| 1.000000| 1.000000| 0.000246| 73.799683|
------------------------------------------------------------------------
Приложение Б
Результаты выполнения программы для Задания №2
x[0]= 1.000000
x[1]= 1.000000
x[2]= 1.000000
x[3]= 1.000000
x[4]= 1.000000
y[0]= 1.000000
y[1]= 1.000000
y[2]= 1.000000
y[3]= 1.000000
y[4]= 1.000000
…
y[18]= 1.000000
y[19]= 1.000000
z[0]= 3.000000
z[1]= 2.000000
z[2]= 1.000000
значение ф-ции: 4.427989006042
x[0]= 3.000000
x[1]= 1.000000
x[2]= 2.000000
x[3]= 1.000000
y[0]= 2.000000
y[1]= 2.000000
y[2]= 1.000000
y[3]= 1.000000
y[4]= 1.000000
…
y[18]= 1.000000
y[19]= 2.000000
z[0]= 4.000000
z[1]= 3.000000
z[2]= 1.000000
z[2]= 1.000000
значение ф-ции: -9.662369728088
x[0]= 2.000000
x[1]= 3.000000
x[2]= 2.000000
x[3]= 1.000000
y[0]= 3.000000
y[1]= 3.000000
y[2]= 3.000000
y[3]= 2.000000
y[4]= 2.000000
y[5]= 1.000000
y[6]= 1.000000
y[4]= 0.000000
…
y[18]= 0.000000
y[19]= 1.000000
z[0]= 2.000000
z[1]= 2.000000
z[2]= 1.000000
z[2]= 1.000000
значение ф-ции: 6.173706054688
Приложение В
Результаты выполнения программы для Задания №3
Введенные матрицы
A[0,0]=2 A[0,1]=3 A[0,2]=2
A[1,0]=1 A[1,1]=2 A[1,2]=1
A[2,0]=1 A[2,1]=0 A[2,2]=2
B[0,0]=2 B[0,1]=8
B[1,0]=2 B[1,1]=2
C[0,0]=1 C[0,1]=0 C[0,2]=4
C[1,0]=1 C[1,1]=2 C[1,2]=1
C[2,0]=1 C[2,1]=0 C[2,2]=2
p=1 q=2 t=1
Корни уровнения 1x^2+2x+1=0:
x1=-1.000000 x2=-1.000000
Введенные матрицы
A[0,0]=2 A[0,1]=4 A[0,2]=7
A[1,0]=1 A[1,1]=6 A[1,2]=1
A[2,0]=1 A[2,1]=0 A[2,2]=2
B[0,0]=3 B[0,1]=-5
B[1,0]=2 B[1,1]=2
C[0,0]=2 C[0,1]=2 C[0,2]=7
C[1,0]=3 C[1,1]=6 C[1,2]=3
C[2,0]=7 C[2,1]=9 C[2,2]=2
p=1 q=-5 t=6
Корни уровнения 1x^2+-5x+6=0:
x1=2.000000 x2=3.000000
Введенные матрицы
A[0,0]=2 A[0,1]=3 A[0,2]=2
A[1,0]=1 A[1,1]=2 A[1,2]=1
A[2,0]=2 A[2,1]=0 A[2,2]=2
B[0,0]=2 B[0,1]=8 B[0,2]=11
B[1,0]=2 B[1,1]=12 B[1,2]=1
B[2,0]=6 B[2,1]=7 B[2,2]=1
C[0,0]=1 C[0,1]=4 C[0,2]=-8
C[1,0]=1 C[1,1]=2 C[1,2]=1
C[2,0]=1 C[2,1]=0 C[2,2]=2
p=2 q=6 t=-8
Корни уровнения 2x^+6x+-8=0:
x1=-4.000000 x2=1.000000
Приложение Г
Результаты выполнения программы для Задания №4
Введите отрезок [a,b]
2
4.5
Введите точность
0.000000001
Значение интеграла от ф-ции f1(x)=0.579820
Значение интеграла от ф-ции f2(x)=0.908314
Значение интеграла от ф-ции f3(x)=83.107857
Введите отрезок [a,b]
0
3
Введите точность
0.000000001
Значение интеграла от ф-ции f1(x)=1.321113
Значение интеграла от ф-ции f2(x)=-3.042308
Значение интеграла от ф-ции f3(x)=50.252434
Введите отрезок [a,b]
4
5
Введите точность
0.000000001
Значение интеграла от ф-ции f1(x)=0.175870
Значение интеграла от ф-ции f2(x)=2.031002
Значение интеграла от ф-ции f3(x)=67.586716
Размещено на Allbest.ru
Подобные документы
Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.
курсовая работа [331,9 K], добавлен 18.01.2016Паскаль как язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля, история его разработки и функциональные особенности. Задача с использованием двумерного массива, составление блок-схемы решения.
контрольная работа [819,0 K], добавлен 12.03.2014Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.
контрольная работа [831,0 K], добавлен 24.11.2013Приемы работы с инструментальной средой программирования С++. Кодирование арифметических и логических выражений с использованием стандартных библиотечных функций ввода, вывода в С++. Описание переменной вещественного типа в языке программирования С++.
лабораторная работа [137,9 K], добавлен 13.06.2014Модели параллельного программирования; отладка параллельных программ. Реализация экспериментальной версии системы сравнительной отладки Fortran-OpenMP программ: получение, сбор и запись трассы, инструментарий программ, используемый формат файлов трассы.
дипломная работа [92,8 K], добавлен 17.10.2013Обработка сложных структур данных как одна из наиболее распространенных возможностей применения языка программирования С++. Преимущества использования подпрограмм. Передача параметров, одномерных и двумерных массивов, функции и их возврат в функцию.
курсовая работа [1,1 M], добавлен 24.11.2013Изучение некоторых аспектов языка Ассемблера и ЭВМ в целом. Построение алгоритмов решения поставленной задачи на языках программирования Си, Ассемблер УМ и IBM PC. Составление блок-схем решений и написание программ на каждом из перечисленных языков.
курсовая работа [691,5 K], добавлен 20.10.2014Разработка прикладного программного обеспечения для решения задачи для персонального компьютера. Структура подпрограммы, механизмы передачи параметров и возврат результатов из подпрограммы. Вызов подпрограммы на выполнение. Отладка программы на языке С.
курсовая работа [818,1 K], добавлен 03.01.2014Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.
учебное пособие [1,6 M], добавлен 28.12.2013Расчет матрицы по заданной формуле. Формирование вектора по алгоритму, построение его вектора. Структура окна С++. Свойства события компонент С++, которые использовались для реализации задачи. Структуры программирования. Блок-схемы алгоритмов подпрограмм.
курсовая работа [602,7 K], добавлен 26.06.2016