Построение графика функции с использованием программирования
Итак, оригинальная версия языка программирования Pascal была предложена в 1970 году. Впоследствии появилось множество версий и расширений этого языка. Наиболее популярным из них стал пакет Turbo Pascal фирмы Borland, выпущенный в 1983 году. Первая версия этого пакета предназначалась для операционной системы СР/М, но уже через год (в 1984 г.) появилась версия для MS DOS. С тех пор было выпущено… Читать ещё >
Построение графика функции с использованием программирования (реферат, курсовая, диплом, контрольная)
Введение
2
1. Анализ задания на курсовую работу 3
2. Описание программы 5
2.1 Описание структуры программы 5
2.2 Описание работы программы 6
3. Блок схема алгоритма 10
4. Листинг программы 16
5. Результаты тестирования программы 20
Заключение
24
Список использованной литературы 25
Приложение 26
Язык программирования, одной из поздних версий которого посвящена данная книга, создан швейцарским физиком Никлаусом Виртом (Niklaus Wirth) в 1970 году и назван в честь французского математика XVII века Блеза Паскаля.
Почему язык программирования назван именем французского математика? Дело в том, что Паскаль (в 1640 г.) создал арифметическую (или счетную) машину, которая считается первым подобным устройством. Он даже смог изготовить и продать 10−15 ее экземпляров, причем некоторые из них дошли до наших дней!
Итак, оригинальная версия языка программирования Pascal была предложена в 1970 году. Впоследствии появилось множество версий и расширений этого языка. Наиболее популярным из них стал пакет Turbo Pascal фирмы Borland, выпущенный в 1983 году. Первая версия этого пакета предназначалась для операционной системы СР/М, но уже через год (в 1984 г.) появилась версия для MS DOS. С тех пор было выпущено несколько версий этого пакета, последняя из которых — Turbo Pascal 7.0
Анализ задания на курсовую работу
Поскольку задана некоторая функция, то для построения графика этой функции необходимо получить значения этой функции на некоторой области определения. В данном случае областью определения функции может быть любое значение коэффициентов и аргумента. Эту задачу легко можно выполнить в выбранной среде программирования Turbo Pascal. Данный язык позволяет реализовать ряд математических, тригонометрических функций.
Более сложной задачей является вывод графика на экран дисплея, поскольку расположение внутренних осей и осей координат графика функции на совпадает. Однако решить поставленные задачи достаточно просто с использованием модуля Graph.
При написании программы используются функции стандартных модулей CTR, GRAPH, языка TURBO PASCAL.
График функции В данной курсовой работе график будет строится в декартовой системе координат.
Функция существует на всем интервале.
Начальное и конечное значение интервала, на котором строится график, хранятся в переменных LFT и RHT соответственно переменные должны быть вещественного типа (REAL). Для построения графика функций используются переменные Х, У так же вещественного типа. В программе так же используются счетчики цикла (переменные целочисленного типа) переменные для хранения шага приращения по осям t и s, число горизонтальных и вертикальных линий сетки, так же переменные для хранения минимального и максимального значения по оси s и цены деления по осям s и t:
Nx, ny, dx, dy, lx, ly, i, j, ch, dxe, dyc, integer
Mash x, mash y, min y, max y: REAL.
Так же используются переменные MAXPICX, MAXPICY, типа INTEGER, которые показывают количество пикселей по оси s и t. Так же необходимы переменные для инициализации графического режима:
GRAPHDRIVER, GRAPHMODE, ERRCODE.
Кроме того нужно предусмотреть определение переменных необходимых для создания системы координат и оцифровку сетки.
S, S1, S2: STRING.
2. Описание программы
2.1 Описание структуры программы
Программа состоит из нескольких отдельных процедур и функций предназначенных для реализации поставленных целей.
Во-первых, процедура okno которая отображает окна на экране. В этих окнах отображается математическая запись графика функции, информация о разработчике и вводятся коэффициенты. Для этого используются процедуры RECTANGLE, OUTTEXTXY.
Во-вторых, процедура INTER, которая осуществляет ввод интервала по t для которого строится график функции начальное значение t записывается в переменную LFT, а конечное значение в переменную RGH.
Сначала выводится сообщение, далее в цикле пока не нажата клавиша имитируется работа курсора, это осуществляется сменой цветов горизонтальной линии длиной в 6 пикселей. После завершения цикла переменной, а присваивается значение коэффициента и это значение выводится на экран.
Процедура OSI осуществляет рисование осей и координатных линий.
Процедура Y_INTER предназначена для определения интервала по S, то есть находит минимальное и максимальное значение S. В этой процедуре используется функция F: REAL. Входными данными для этой функции являются коэффициент и текущее значение аргумента, которое хранится в переменной Х. Функция выдает результат типа REAL (вещественный). Переменной F присваивается значение функции. А так же осуществляется вывод интервала по S.
Процедура OZIFR позволяет оцифровать оси.
Также разработана процедура Zas, которая позволяет вывести на экран титульный лист. Для вывода используется процедура Outtextxy.
Процедура graphic позволяет построить график функции. Для этого используется функция f, описанная ранее. И несколько циклов со счетчиком.
Наконец, основная программа в которой сначала производится инициализация графического режима, затем вызываются процедуры
Zas;
Okno;
INTER;
koef;
Osi;
Y_INTER;
Graphik;
OZIFR.
2.2 Описание работы программы
После запуска программы осуществляется вывод титульного листа, с помощью процедуры Zas. В этой процедуре используются процедуры модуля CRT, такие как gotoxy — переход на точку с указанными координатами, и outtextxy — вывод сообщения.
Затем выполняется процедура OKNO, где происходит инициализация графического режима, затем происходит установка фона и цвета с помощью функций SETBKCOLOR и SETCOLOR. Далее процедура OKNO с использованием процедур BAR, RECTANGLE вычерчивает на экране окна в которых отображается справочная информация. В этой процедуре используется так же следующие стандартные процедуры SETLINESTYLE — установка линий, SETTEXTSTYLE — установка стиля текста и процедура OUTTEXTXY — вывод строки с заданной позиции. Затем вызывается процедура INTER, которая осуществляет ввод начального и конечного значения аргумента t, в графическом режиме. Для вывода на экран числового значения используется процедура STR которая преобразует числовое значение в строковую переменную. Процедура KOEF осуществляет вывод коэффициентов на экран с помощью процедуры Outtext. После ввода интервала, на котором строится график и вывода коэффициентов вызывается процедура построения координатной сетки OSI. Сначала устанавливается тип линий и цвет. Сначала выводятся линии которые ограничивают область построения графика слева и снизу. Далее выводится название осей.
По оси абсцисс будет отображаться значение аргумента T, по оси ординат — значение функции S.
Далее задается число линий сетки. Оно одинаково по горизонтали и вертикали и определяется переменными nx=10; ny=10;
Затем определяется шаг расстановки линий по горизонтали и вертикали dx и dy. Далее устанавливается стиль линии и цвет. Потом устанавливается начальное значение по горизонтали и вертикали lx = 50, ly = 10.
Далее в цикле происходит увеличение координаты по оси T для перехода на следующую засечку. Так как оси координат уже начерчены, то сразу происходит переход на вторую засечку. Потом вычерчивается линия засечки по оси T, т.к. по оси S первой засечки нет, то сначала вычерчивается она, а только потом происходит переход следующую засечку.
После выполнения процедуры OSI запускается процедура Y_INTER. Переменные MAXPICX и MAXPICY показывают сколько пикселей по горизонтали и вертикали можно использовать для построения графика. Далее считается шаг изменения по оси X от пикселя к пикселю. Для этого используется переменная MASHX. Далее находится минимальное и максимальное значение функции. Для этого сначала полагаем MAXY = 1 000 000, MINY = 1 000 000, далее от начала интервала считаем значение и сравниваем это значение с максимальным и минимальным. Затем переходим к следующему пикселю и операция повторяется. После перехода всей области в переменных MAXY, MINY будут храниться минимальные и максимальные значения функции. Затем эти значения выводятся на экран с пояснительным текстом. После завершения процедуры Y_INTER происходит рисование графика с помощью процедуры GRaphik.
Сначала считается шаг изменения по оси S. Начальное значение интервала (переменная LFT). Вычисляется значение функции Y (переменная У). Затем переменной J присваивается значение функции в абсолютных координатах, затем с помощью процедуры PUTPIXEL высвечивается точка с координатами. Указатель перемещается в эту точку. Далее в цикле пока не будет пройдена вся область по оси T выполняются следующие действия. Значение X (абсциссы) увеличивается на шаг mashx. Считается значение функции (переменная Y). Считаются значения абсолютной координаты по S. И строится линия от текущей позиции до точки с полученными координатами. После того как завершается построение графика запускается процедура OZIFR которая производит оцифровку осей. Cначала, выбирается цвет линий. В переменную dxc записывается цена засечки. Переменной ch присваивается начальное значение интервала по T и это значение выводится под первой засечкой. Также вычисляется значение S в этой точке и проводится преобразование в строковую переменную. Далее в цикле происходит переход к следующей засечке. Значение Ch увеличивается на цену деления и выводится на экран. После завершения оцифровки оси S определяется цена деления по оси T. Оцифровка начинается с минимального значения и далее аналогично оцифровке оси T.
После завершения процедуры OZIFR программу ожидание нажатия на любую клавишу. После того как клавиша нажата происходит закрытие графического режима и программа завершает свою работу.
3. Блок схема алгоритма
Схема алгоритма процедуры ZAS.
Схема алгоритма процедуры okno
Схема алгоритма функции f
Схема алгоритма процедуры inter
Схема алгоритма процедуры koef
Схема алгоритма процедуры osi
Схема процедуры Y_inter
Схема алгоритма процедуры ozifr
Схема алгоритма процедуры Graphik
Схема алгоритма основной программы
4. Листинг программы
USES GRAPH, CRT;
Var
GraphDriver, GraphMode, ErrorCode: Integer;
s, s1, s2,s3:String;
lft, rgh, a, b, ch, dxc, dyc: Real;
nx, ny, dx, dy, lx, ly, i, j:Integer;
MaxPicX, MaxPicY: Integer;
mashX, mashY, miny, maxy, x, y:Real;
Procedure zas;
begin
textbackground (19);
clrscr;
textcolor (11);
gotoxy (12,2);
writeln ('КУЗНЕЦКИЙ ИНСТИТУТ ИНФОРМАЦИОННЫХ И УПРАВЛЕНЧЕСКИХ ТЕХНОЛОГИЙ'); textcolor (5);
gotoxy (20,6);
writeln ('КУРСОВОЕ ПРОЕКТИРОВАНИЕ ПО КУРСУ ИНФОРМАТИКА');
gotoxy (21,10);
textcolor (4);
writeln ('ТЕМА ПРОЕКТА:');
gotoxy (35,10);
textcolor (7);
writeln ('Разработка программы решения');
gotoxy (22,12);
writeln ('задачи по расчету и построению графиков');
gotoxy (20,14);
writeln ('функций в среде программирования Turbo Pascal.');
textcolor (4);
gotoxy (38,24);
writeln ('2005г.');
gotoxy (22,18);
textcolor (1);
writeln ('Выполнил студент гр. 04КМ1 Калашников В');
gotoxy (22,20);
writeln ('Преподаватель: Шевченко Ольга Анатольевна');
readkey;
end;
{******** Исследуемая функция **********************}
Function f: real;
Begin
f:=a*x*x/2;
End;
procedure okno;
Begin
GraphDriver:=Detect;
InitGraph (GraphDriver, GraphMode,'d:bpbgi');
SetBkColor (0);
SetColor (White);
{************** Изображение окон *********************} SetColor (Brown);
SetLineStyle (0,0,3);
Rectangle (620,17,478,138);
Rectangle (620,152,478,400);
Rectangle (2,17,469,398);
SetTextStyle (0,HorizDir, 1);
end;
{*************** Ввод интервала по Х ****************}
procedure inter;
begin
SetColor (Brown);
SetTextStyle (0,HorizDir, 1);
OutTextXY (490,25,'Интервал по t:');
OutTextXY (490,70,'от до'); GotoXY (66,5);
Readln (lft);
GotoXY (74,5);
Readln (rgh);
Str (rgh:5:2,S);
end;
{********** Ввод коэффициентов **************}
procedure koef;
begin
OutTextXY (490,245,'a= ');
GotoXY (66,16);
Readln (a);
Str (a:5:2,S);
end;
{********* Рисование осей и координатных линий ************} procedure osi;
begin
SetViewPort (0,15,635,400,ClipOn);
SetLineStyle (0,0,1);
SetColor (5);
Line (50,10,50,350);
Line (50,350,460,350);
OutTextXY (5,10,'S');
OutTextXY (450,370,'T');
nx:=10; { Число вертикальных линий }
ny:=10; { Число горизонтальных линий } dx:=Round ((460−50)/nx); { Шаг расстановки линий по х} dy:=Round ((350−10)/ny); { Шаг расстановки линий по y} SetLineStyle (0,0,1);
SetColor (5);
lx:=50;
ly:=10;
For i:=1 To nx do
Begin
lx:=lx+dx;
Line (lx, 10, lx, 350);
Line (50,ly, 460, ly);
ly:=ly+dy;
End;
end;
{ Определение интервала по Y }
procedure y_interval;
begin
MaxPicX:=460−50;
MaxPicY:=350−10;
MashX:=(rgh-lft)/MaxPicX;
MinY:=1 000 000;
MaxY:=-1 000 000;
x:=lft;
For i:=50 to 460 do
Begin
y:=f;
If y > maxY then maxY:=y;
If y < minY then minY:=y;
x:=x+mashX;
End;
{Вывод интервала по Y }
SetViewPort (0,0,GetmaxX, GetmaxY, ClipOn); SetColor (Brown); OutTextXY (500,300,'Интервал по Y:'); Str (minY:5:2,s1);
Str (maxY:5:2,s2); OutTextXY (480,320,'от'+s1+' до'+s2); end;
{Рисование графика }
procedure graphik;
begin
SetViewPort (10,15,480,400,ClipOn);
mashY:=(maxY-minY)/MaxPicY;
x:=lft;
y:=f; j:=(350+round (minY/mashy)-round (y/mashY)); PutPixel (60,j, red);
MoveTo (50,j);
For i:=51 to 460 do
Begin
x:=x+mashX;
y:=f; j:=(350+round (minY/mashy)-round (y/mashY)); LineTo (i-10,j);
End;
end;
{Оцифровка осей }
procedure ozifr;
begin
SetColor (4);
Dxc:=abs (rgh-lft)/nx;
lx:=2;
ch:=lft;
Str (ch:5:2,s);
OutTextXY (lx-57,355,s);
For i:=1 to nx do
Begin
lx:=lx+dx;
ch:=ch+dxc;
x:=ch;
y:=f;
str (y:5:2,s3);
Str (ch:5:2,s);
OutTextXY (lx, 355, s);
s1:=s1+' '+s;
s2:=s2+' '+s3;
End;
dyc:=abs (maxY-minY)/ny;
ly:=345;
ch:=minY;
Str (ch:5:2,s);
OutTextXY (1,ly+52,s);
For i:=1 to ny do
Begin
ly:=ly-dy;
ch:=ch+dyc;
Str (ch:5:2,s);
OutTextXY (1,ly, s);
End; SetViewPort (0,0,GetmaxX, GetmaxY, ClipOn);
{ SetViewPort (10,410,620,480,ClipOn); }
SetTextStyle (0,HorizDir, 1); outtextxy (12,420,'x= '+s1); outtextxy (12,440,'y= '+s2);
readln;
CloseGraph;
End;
{end;}
Begin
zas;
okno;
inter;
koef;
osi;
Y_interval;
graphik;
ozifr;
End.
5. Результаты тестирования программы
Результаты тестирования показывают, что разработанная в ходе курсовой работы программа работает правильно и требования задания соблюдены в полном объеме. Листинг результатов работы программы приведен в приложении.
Заключение
В ходе курсовой работы была написана программа на языке Turbo Pascal, которая построит график функции. Для построения графика функции использовалась декартова система координат.
Показаны линии сетки координатной системы и их оцифровка. Одновременно с графиком функции выводится на экран уравнение, диапазон изменения аргумента, Ф. И. О. и номер группы.
1. О. А. Меженный. TURBO PASCAL. Учитесь программировать. — М.: Диалектика, 2001 г.
2. А. М. Епанешников, В. А. Епанешников. Turbo Pascal 7.0. — М.: «ДИАЛОГ-МИФИ», 2001 г.
программирование pascal функция листинг декартовый
Приложение