РефератыИнформатикаПрПрограмма исследования функций

Программа исследования функций

Программа исследования функций


Пояснительная записка к курсовой работе по дисциплине “Основы алгоритмизации и программирования”


Выполнил : студент гр. 96ВВ3 Гаврищенко О.Н.


Пензенский государственный технический университет, Кафедра “Вычислительная Техника”


1997


Введение


В настоящее время индустрия производства компьютеров и программного обеспечения для них является одной из наиболее важных сфер экономики развитых стран. Ежегодно в мире продаются десятки миллионов компьютеров. Только в США объем продаж компьютеров составляет десятки миллионов долларов и постоянно продолжает расти.


В чем же причины такого стремительного роста индустрии персональных компьютеров и их сравнительная выгодность для многих деловых применений?


1. Простота использования, обеспеченная с помощью диалогового способа взаимодействия с компьютером.


2. Относительно высокие возможности по переработке информации, наличие программного обеспечения, а так же мощных систем для разработки нового программного обеспечения.


Имеются и другие причины.


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


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


Задача курсовой работы состоит в разработки системы , позволяющей исследовать некоторые функций:


y = sin(x);


y = cos(x);


Cистема должна обеспечивать выполнение следующих функций:


Выбор из предложенного списка исследуемой функции;


Задание диапазона (диапазонов) изменения параметров;


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


Вывод на экран графика функции.


2 Описание программы


2.1 Общие сведения


Данная программа предназначена для исследования математических функций (см. пункт 1). Программа do.cpp разработана на алгоритмическом языке Turbo C++ v.3.0. , и предназначена для использования на персональном компьютере IBM PC/XT или совместимым с ним.


2.2 Краткое описание метода решения задачи


Работа с программой организована в графическом режиме 640х480 точек , 16 цветов через меню, по пунктам которого можно передвигать цветовой курсор с помощью клавиш управления курсором.


Основное меню описано при помощи массива структур menu_ на 5 элементов , который заначительно упрощает работу программы при обращении к этому меню. Каждый пункт основного меню (кроме "Выход") содержит в себе подменю , каждый пункт которого вызывает какие-либо действия программы.


Главное меню состоит из следующих пунктов:


"Функция" - выбор исследуемой функции;


"Диапазон" - задание минимального и максимального значения Х для отображения графика функции и занесения значений в таблицу;


"Масштаб" - задание масштаба по оси X;


"Таблица" - вывод значений функции на экран или в файл (имя файла задаётся пользователем) , изменение числа выволимых значений;


"Выход" - завершение работы программы.


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


2.3 Функциональное назначение


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


2.4 Описание данных


Структура , массив которых образует меню , состоит из 3 полей:


1. num - поле целого типа (int) - содержит количество пунктов меню;


2. onum - поле целого типа (int) - содержит количество опрашиваемых пунктов меню;


3. capt - массив символов (по 20 символов на элемент) из 6 элементов - содержит имена пунктов меню.


Глобальные переменные,которые использует программа:





































Название Тип Начальное значение Назначение
MinX float -4 Начальное значение Х
MaxX float 4 Начальное значение Y
MX float 80 Масштаб по оси Х
MY float 80 Масштаб по оси Y
CF int 0 Номер функции
SC int 20 Число строк в таблице

2.5 Структура программы


Данная программа разработана на алгоритмическом языке С++ и состоит из следующих функциональных модулей:


1. Функция fun - Возвращает 0 , если невозможно вычислить значение функции при заданном значении Х, иначе вычисляет значение Y и возвращает 1;


2. Функция output - Осуществляет вывод графика функции на экран с учётом всех параметров;


3. Функция use_scroll - Осуществляет обработку вертикального меню;


4. Функция use_menu - Осуществляет обработку главного меню;


5. Функция InputFloat - Осуществляет ввод вещественного числа в графическом режиме;


6. Функция InputString - Осуществляет ввод строки символов в графическом режиме;


7. Функция prttabl - Осуществляет вывод таблицы в файл или на экран;


8. Основная программа Main - Заполняет массив меню , организует взаимодействие всех функциональных модулей.


2.6 Спецификация на функциональные модули


2.6.1 Функция fun


Назначение: Возвращает 0 , если невозможно вычислить значение функции при заданном значении Х, иначе вычисляет значение Y и возвращает 1;


Входные данные: x - значение переменной х , *y - имя функции.


Выходные данные: fun.


Не вызывает никаких функций.


Вызывается из output: rt=fun(x,&y);


prttabl: if (fun(x,&y)) fprintf (f,"Fun(%f)=%fnf",x,y);


2.6.2 Функция output


Назначение: Осуществляет вывод графика функции на экран с учётом всех параметров.


Входные данные: нет.


Выходные данные: нет.


Вызывает функцию fun.


Вызывается из основной программы: output();


В пункте 2.11 приведён алгоритм работы данной функции.


2.6.3 Функция use_scroll


Назначение: Осуществляет обработку вертикального меню - опрос клавиатуры , отображение пунктов подменю , передвижение курсора , при нажатии клавиши Enter возврвщает код выбранного пункта меню , при нажатии клавиши ESC возвращает -1.


Входные данные: menu_m - название массива меню , х-координата х вывода меню.


Выходные данные: use_scroll.


Не вызывает никаких функций.


Вызывается из основной программы: CF=use_scroll(fun,0);


switch (se_scroll(dia,105))


switch (se_scroll(mas,205))


switch (se_scroll(tabl,305))


2.6.4 Функция use_menu


Назначение: Осуществляет обработку главного меню - вывод пунктов меню на экран , отображение цветового курсора , при нажатии клавиши Enter возврвщает код выбранного пункта меню , при нажатии клавиши ESC возвращает -1.


Входные данные: menu_m - название массива меню.


Выходные данные: use_menu.


Не вызывает никаких функций.


Вызывается из основной программы: switch (use_menu(m1))


2.6.5 Функция InputFloat


Назначение: Осуществляет ввод и редактирование вещественного числа в графическом режиме , возвращает введённое число.


Входные данные: x1,y1,x2,y2 - координаты окна редактирования , last - текущее значение данного параметра.


Выходные данные:InputFloat.


Не вызывает никаких функций.


Вызывается из основной программы:MinX=InputFloat(210,30,310,45,MinX);


MaxX=InputFloat(210,50,310,65,MaxX);


MY=InputFloat(310,30,410,55,MY);


2.6.6 Функция InputString


Назначение: Осуществляет ввод и редактирование строки символов в графическом режиме , возвращает указатель на введённую строку.


Входные данные: x1,y1,x2,y2 - координаты окна редактирования ,* last - указатель на строку.


Выходные данные: *InputString.


Не вызывает никаких функций.


Вызывается из основной программы: prttabl(Inputstring(410,30,510,45,"Prn"));


2.6.7 Функция PrtTabl


Назначение: Осуществляет вывод таблицы в файл или на экран.


Входные данные: *fname - указатель на имя файла , если имя файла "con" то вывод осуществляется на экран в текстовом режиме.


Выходные данные: нет.


Вызывает функцию fun.


Вызывается из основной программы: prttabl("conx0");


prttabl(Inputstring(410,30,510,45,"Prn"));


2.7 Описание работы основной программы


Основная программа осуществляет следующие действия:


Заполнеие массива меню.


Установку начальных пунктов меню.


Установку графического режима , очистку экрана.


Вызов функции оформления экрана.


Опрос меню , вызов функций , соответствующих каждому из выбраннх пунктов.


Выход из программы.


Основная программа использует следующие функции: output , use_scroll , use_menu , InputFloat , Inputstring , prttabl.


Далее в пункте 2.10 приведён подробный алгоритм работы основной программы.


2.8 Схема взаимодействия функциональных модулей


2.9 Описание алгоритма основной программы и функции Output


В нижеприведённом алгоритме работы основной программы отображены следующие блоки:


Блоки 0,30 - Начало программы , функции;


Блоки 11,12,14,15,18,19,23,26,40,41 - Операции ввода,вывода;


Блоки 1,2,3,5,13,21,28,32,33,38 - Операции действия , вычисления , присваивания.


Блоки 6,8,16,20 - Операция ветвления.


Блоки 31,37,39,44 - Условная операция.


Блоки 4,7,8,17,22,24,25,36 - Вызов функции.


Блоки 29,45 - Конец программы,функции.


2.10 Алгоритм работы основной программы


2.11 Алгоритм работы функции output


3 План отладки программы


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


1. Пишется и отлаживается функция fun.


2. Пишется и отлаживается функция use_menu.


3. Пишется и отлаживается функция use_scroll.


4. Пишется основная программа с заглушками.


5. Пишется и отлаживается функция output.


6. Пишется и отлаживается функция inputfloat.


7. Пишется и отлаживается функция inputstring.


8. Пишется и отлаживается функция prttabl.


9. Отлаживается основная программа без заглушек.


4.Руководство пользователя


Для запуска данной программы необходимо наличие персонального компьютера IBM PC/XT c операционной системой MS-DOS.


Необходимый объем оперативной памяти - от 640 КБайт и выше.


Для работы программы необходимо наличие видеокарты VGA , для обеспечения установки графического режима 640х480 точек 16 цветов.


Дла запуска программы необходимо сделать текущем каталог с программой do.exe и вызвать её на выполнение. В этом же каталоге должен находиться файл графической библиотеки egavga.bgi.


Выбор необходимого пункта меню осуществляется при помощи клавиш управления курсором. Для активизации нужно нажать ENTER.


Выход из программы - клавиша ESC или выбор пункта "Выход".


Заключение


В курсовой работе решена задача исследования математических функций.


Разработан алгоритм решения поставленной задачи. По этому алгоритму на языке Turbo C++ составлена и отлажена программа, анализ работы которой показал, что поставленная задача успешн

о решается.


Список литературы


1.Бьярн Страуструп. Язык программирования С++.в двух частях. Пер. с англ. Киев:"ДиаСофт",1993.-296 с.,ил.


2.Корриган Джон Компьютерная графика: Секреты и решения: Пер с англ. -М.:Энтроп, 1995. - 352 с., ил.


ПРИЛОЖЕНИЕ 1


Распечатка программы


#include <stdio.h>


#include <conio.h>


#include <stdlib.h>


#include <graphics.h>


#include <string.h>


#include <math.h>


// Драйвер - VGA, Режим - 640x480x16


int drv=VGA,mode=VGAHI;


// Структура, описывающая меню


struct menu_ {


int num; // Количество пунктов


int onum; // Количество опрашиваемых пунктов


char capt[6][20];// Имена пунктов


};


// Глобальные переменные


float MinX=-4; // Начальное значение X


float MaxX=4; // Конечное значение X


float MX=80; // Масштаб по X


float MY=80; // Масштаб по Y


int CF=0; // Номер функции


int SC=20; // Число строк в таблице


// Возвращает 0, если невозможно подсчитать функцию при данном X,


// иначе изменяет Y и возвращает 1


int fun(float x,float * y) {


switch(CF) {


case(0):


*y=sin(x);


return 1;


case(1):


*y=cos(x);


return 1;


case(2):


*y=x*x;


return 1;


case(3):


if (x<0) return 0;


*y=sqrt(x);


return 1;


case(4):


if (fabs(x)<0.0000001) return 0;


*y=1/fabs(x);


return 1;


case(5):


if (fabs(x)<0.0000001) return 0;


*y=2*sin(x*x)/x;


return 1;


}


return 0;


}


// Вывод графика функции на экран


void output() {


float x; // Очередная точка


float y; // графика


float stp; // Шаг изменения X


float px,py; // Предыдущая точка


int rp=0; // 1 - если предыдущая точка существует


int rt=0; // 1 - если текущая точка существует


// Выход при неправильно заданном диапазоне


if ((MaxX-MinX)<=0) return;


// Установка начальных значений


x=MinX;


stp=(MaxX-MinX)/320;


// Вывод линий


setcolor(12);


line(0,240,639,240);


if ((MinX<0)&&(MaxX>0))


line((0-MinX)*MX,0,(0-MinX)*MX,480);


setcolor(15);


// Вывод функции


do {


// Нахождение очередной точки


rt=fun(x,&y);


if (rt==0) {


// Если точки нет - сброс значения предыдущей


rp=0;


} else {


// Иначе - проверка:


if (rp==0) {


// Если предыдущей нет, ставим точку


putpixel((x-MinX)*MX,(240-y*MY),15);


rp=1;


} else {


// Иначе рисуем линию


line((px-MinX)*MX,(240-py*MY),(x-MinX)*MX,(240-y*MY));


}


// Новые значения предыдущей точки


px=x;


py=y;


}


// Новое значение X


x+=stp;


} while (x<MaxX);


}


// Процедура обработки вертикального меню


// Параметры: меню, координата X вывода меню


int use_scroll(menu_ m,int x) {


int n; // Счетчик


int vp=0; // Выбранный пункт


char c; // Считанный с клавиатуры символ


// Очистка места под меню


setfillstyle(1,8);


settextjustify(1,1);


bar(x,0,x+105,479);


do {


// Выводпунктовменю


for (n=0;n<m.num;n++) {


// Выделение цветом выбранного пункта и неактивных поселдних пунктов


if (n==vp) {


setfillstyle(1,4);


setcolor(15);


} else {


if (n>(m.onum-1)) {


setfillstyle(1,8);


setcolor(10);


} else {


setfillstyle(1,1);


setcolor(14);


}


}


// Выводпункта


bar(x+5,5+30*n,x+100,25+30*n);


rectangle(x+6,6+30*n,x+99,24+30*n);


outtextxy(x+55,15+30*n,m.capt[n]);


}


// Опрос клавитауры


do {


c=getch();


if (c==0) c=getch();


// КлавишаВниз


if (c==72) {


vp--;


if (vp<0) vp=m.onum-1;


}


// КлавишаВверх


if (c==80) {


vp++;


if (vp>=m.onum) vp=0;


}


} while ((c!=72)&&(c!=80)&&(c!=13)&&(c!=27));


} while ((c==72)||(c==80));


// Возврат выбраннго пункта


if (c==13) return vp;


// Возврат -1 при ESC


return -1;


}


// Процедура обработки горизонтального меню


int use_menu(menu_ m) {


int n; // Счетчик


int vp=0; // Выбранный пункт


char c; // Символ


// Очистка места под меню


setfillstyle(1,0);


settextjustify(1,1);


bar(0,0,639,25);


do {


// Выводпунктовменю


for (n=0;n<m.num;n++) {


// Выделение цветом


if (n==vp) {


setfillstyle(1,4);


setcolor(15);


} else {


if (n>(m.onum-1)) {


setfillstyle(1,8);


setcolor(10);


} else {


setfillstyle(1,1);


setcolor(14);


}


}


// Выводпункта


bar(10+100*n,5,105+100*n,25);


rectangle(11+100*n,6,104+100*n,24);


outtextxy(60+100*n,15,m.capt[n]);


}


// Опрос клавиатуры


do {


c=getch();


if (c==0) c=getch();


if (c==75) {


// Влево


vp--;


if (vp<0) vp=m.onum-1;


}


if (c==77) {


// Вправо


vp++;


if (vp>=m.onum) vp=0;


}


} while ((c!=75)&&(c!=77)&&(c!=13)&&(c!=27));


} while ((c==75)||(c==77));


if (c==13) return vp;


return -1;


}


// Ввод числа


// Параметры: координаты прямоугольной рамочки и значение по умолчанию


float InputFloat(int x1,int y1,int x2,int y2,float last) {


char s[100]; // Строка


char s1[100]; // Промежуточная строка


char c; // Символ


// Вывод рамочки


setfillstyle(1,2);


setcolor(14);


bar(x1,y1,x2,y2);


rectangle(x1+1,y1+1,x2-1,y2-1);


sprintf(s,"%2.3f",last);


settextjustify(0,1);


// Опрос клавиатуры


do {


// Вывод строки и курсора


bar(x1+2,y1+2,x2-2,y2-2);


strcpy(s1,s);


strcat(s1,"_");


outtextxy(x1+5,y1+10,s1);


c=getch();


if (((c>='0')&&(c<='9'))||(c=='.')||(c=='-')) {


// Нажат разрешенный символ - добавление


s[strlen(s)+1]=0;


s[strlen(s)]=c;


}


// Нажат BackSpace


if ((c==8)&&(strlen(s)>0)) s[strlen(s)-1]=0;


} while ((c!=13)&&(c!=27));


// Если не ESC - перевод нового значения из строки в число


if (c!=27) sscanf(s,"%f",&last);


return last;


}


// Ввод строки


// Параметры: координаты прямоугольной рамочки и значение по умолчанию


char * InputString(int x1,int y1,int x2,int y2,char * last) {


char s[100];


char s1[100];


char c;


// Выводрамочки


setfillstyle(1,2);


setcolor(14);


bar(x1,y1,x2,y2);


rectangle(x1+1,y1+1,x2-1,y2-1);


strcpy(s,last);


settextjustify(0,1);


// Опросклавиатуры


do {


// Вывод строки и курсора


bar(x1+2,y1+2,x2-2,y2-2);


strcpy(s1,s);


strcat(s1,"_");


outtextxy(x1+5,y1+10,s1);


c=getch();


if ((c!=13)&&(c!=27)&&(c!=8)) {


// Нажат разрешенный символ - добавление


s[strlen(s)+1]=0;


s[strlen(s)]=c;


}


if ((c==8)&&(strlen(s)>0)) s[strlen(s)-1]=0;


} while ((c!=13)&&(c!=27));


// Если ESC - возвращаем старое значение


if (c==27) return last;


return s;


}


// Выводтаблицывфайл


void prttabl(char * fname) {


FILE * f; // Указатель на файл


float stp; // Шаг изменения функции


float x; // Текущая


float y; // точка


// Выход при неправильно заданном диапазоне


if ((MaxX-MinX)==0) return;


// Открываем файл на запись


f=fopen(fname,"wb");


// Начальные значения


x=MinX;


stp=(MaxX-MinX)/SC;


do {


// Если значение функции верно - вывод в файл


if (fun(x,&y)) fprintf(f,"Fun( %f )= %f nr",x,y);


x+=stp;


} while (x<=MaxX);


// Закрываем файл


fclose(f);


}


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


void main() {


char s[30];


// Описаниеменю


menu_ m1;


menu_ fun;


menu_ dia;


menu_ mas;


menu_ tabl;


strcpy(m1.capt[0],"Функцияx0");


strcpy(m1.capt[1],"Диапазонx0");


strcpy(m1.capt[2],"Масштабx0");


strcpy(m1.capt[3],"Таблицаx0");


strcpy(m1.capt[4],"Выход x0");


m1.num=6;


m1.onum=5;


strcpy(fun.capt[0],"Sin(X)x0");


strcpy(fun.capt[1],"Cos(X)x0");


strcpy(fun.capt[2],"X^2x0");


strcpy(fun.capt[3],"Sqrt(X)x0");


strcpy(fun.capt[4],"1/|X|x0");


strcpy(fun.capt[5],"2Sin(X^2)/Xx0");


fun.num=6;


fun.onum=6;


strcpy(dia.capt[0],"Диапазонx0");


strcpy(dia.capt[1],"Min:x0");


strcpy(dia.capt[2],"Max:x0");


dia.num=3;


dia.onum=3;


strcpy(mas.capt[0],"Масштабx0");


strcpy(mas.capt[1],"Y:x0");


strcpy(mas.capt[2],"X:x0");


mas.num=3;


mas.onum=2;


strcpy(tabl.capt[0],"Таблицаx0");


strcpy(tabl.capt[1],"Наэкранx0");


strcpy(tabl.capt[2],"Вфайлx0");


strcpy(tabl.capt[3],"Число строкx0");


tabl.num=4;


tabl.onum=4;


// Инициализация графики


initgraph(&drv,&mode,"");


for (;;) {


// Вывод графика функции


cleardevice();


output();


strcpy(m1.capt[5],fun.capt[CF]);


// Опросменю


switch(use_menu(m1)) {


case 0:


CF=use_scroll(fun,0);


break;


case 1:


switch(use_scroll(dia,105)) {


case 1:


MinX=InputFloat(210,30,310,45,MinX);


break;


case 2:


MaxX=InputFloat(210,50,310,65,MaxX);


break;


}


sprintf(dia.capt[1],"Min: %2.3f",MinX);


sprintf(dia.capt[2],"Max: %2.3f",MaxX);


MY=MX=(640/(MaxX-MinX));


sprintf(mas.capt[1],"Y: %2.1f",MY);


sprintf(mas.capt[2],"X: %2.1f",MX);


break;


case 2:


switch(use_scroll(mas,205)) {


case 1:


MY=InputFloat(310,30,410,45,MY);


break;


}


sprintf(mas.capt[1],"Y: %2.1f",MY);


sprintf(mas.capt[2],"X: %2.1f",MX);


break;


case 3:


switch(use_scroll(tabl,305)) {


case(1):


cleardevice();


prttabl("conx0"); // Вкачествефайла - консоль


getch();


break;


case(2):


prttabl(InputString(410,30,510,45,"Prn"));


break;


case(3):


SC=InputFloat(410,30,510,45,SC);


break;


}


sprintf(tabl.capt[3],"Строк: %d",SC);


break;


case -1:


case 4:


return;


}


}


}

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Программа исследования функций

Слов:2734
Символов:27895
Размер:54.48 Кб.