Разработка программы по схеме алгоритма



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

Program - Заголовок программы

Uses – раздел подключения модулей

Begin – открывающая логическая скобка

End – закрывающая логическая скобка

:= - оператор присваивания

Crt - (Cathod ray tube - электронно-лучевая трубка) один из наиболее часто используемых модулей. Он содержит процедуры обслуживания процессов вывода информации на экран, ввода с клавиатуры, а также процедуры и функции вывода звуковых сигналов, работы с окнами на экране и вывода цветных текстовых строк на экран.Graph – графический модуль для вывода базовых графических элементов, таких как точки, отрезки прямых линий, дуги и целые окружности и других графических элементов, называемых графическими примитивами

Var – раздел описания переменных

Writeln, Write – операторы вывода информации

Readln, Read – операторы ввода информации

If <условие> then <оператор>– оператор условного перехода

For <параметр>:=<нач.знач.> to <конечн.знач.> do <оператор> – оператор цикла с параметром

Repeat <оператор> until <условие> - оператор цикла с постусловием

Clrscr – очистка экрана

Initgraph – процедура инициализации графического режима

Closegraph – процедура закрытия графического режима

Line (x1, y1, x2, y2) – соединение двух точек отрезком

Putpixel (x, y, c) – построение точки (x, y) цветом с

Readkey – оператор считывание кода клавиш

Outtextxy (x, y, st) – вывод строки st, начиная с точки (x,y)

Getmaxx – результатом этой функции будет max значение x в данном видеорежиме

Goto – перейти к + - арифметическая операция сложения- - арифметическая операция вычитания* - арифметическая операция умножения/ - арифметическая операция деления

Описание переменных и констант используемых в алгоритме

n – количество узлов в таблице, не считая начальную точку ;

i, j – счётчики;

 - значения узлов записанных в одномерные массивы;

D – переменная, используемая для нахождения значения полинома Ньютона в этой точке;

L – переменная значения полинома Ньютона

k, step – константы используемые для построения графика полинома;

u – переменная шага деления графика;

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

 

Инструкция пользования программой

 

Для запуска программы необходимо дважды щелкнуть на ярлыке с именем Niton.exe. После этого на экран будет выведен титульный лист. Чтобы продолжить надо нажать клавишу Enter.

Следующим шагом в окне программы будет показана строка с текстом «Показать пояснения к программе (1/0)?», чтобы увидеть их следует нажать 1 и подтвердить ввод нажатием клавиши Enter. Чтобы продолжить надо нажать клавишу Enter. Сразу после этого в диалоговом окне появится строка «Введите количество уpлов n (N=n+1)», где нужно указать количество (N-1) узлов таблицы и нажать Enter. Далее надо будет ввести значения из таблицы, по окончанию ввода нажать Enter.

На экран будет выведена введённая таблица значений. Затем пользователю будет предложено «Введите x ». Нужно ввести x для которого необходимо найти приближённое значение. После этого программа вычислит значение и предложит найти значения для другого x.

Дальше программа попросит ввести шаг деления графика. После ввода шага программа построит график полинома. Для продолжения нужно нажать Enter.

Потом программа спросит «повторить вычисления и построения графика полинома для другой функции?» Чтобы начать заново нужно нажать 1, чтобы закончить работу с программой нажать 0 и после ввода подтвердить выбор клавишей Enter.

Текст программы

program interpol;

uses crt,graph;

const

MAXCOUNT=30;

type

per = array [0..MAXCOUNT] of real;

var

 X,y :per;

 n,i :integer;

 l,D,f :real;

 

label Lp, Lt;

 

{Процедура вывода титульного листа}

Procedure Titul;

begin

Clrscr;

GoToXY(23,2);

 Writeln(‘Федеральное агентство по образованию');

GoToXY(22,3);

 Writeln('Тульский государственный университет');

GoToXY(28,4);

 Writeln('КАФЕДРА РАДИОЭЛЕКТРОНИКИ');

GoToXY(14,8);

 Writeln('Интерполяция функции одной переменной методом Ньютона.');

GoToXY(27,9);

 Writeln('Построение графика полинома.');

GoToXY(34,12);

 Writeln('Вариант #7');

GoToXY(24,17);

 Writeln('Студент гр. 220371 Поляков A.M.');

GoToXY(20,19);

 Writeln('Руководитель доцент, K.T.H. Давыдов B.B.');

GoToXY(33,23);

 Writeln('Тула, 2008 g.');

 readkey;

 clrscr;

end;

 

{Процедура вывода пояснения к программе}

Procedure help;

begin

clrscr;

writeln (Эта программа по значениям функции f(x) заданной таблично в нескольких точках отрезка находит ее значения в ' +

+ остальных точках данного отрезка. Точки с координатами (xi, yi) называются узловыми точками или узлами.');

writeln ('Количество узлов в табличной функции должно быть равно N=n+1. ');

writeln (' После ввода количества узлов n (начальная точка (x[0],y[0]) не является узлом) нужно вводить узловые точки +

+' функции. После этого программа сможет находить значения данной функции в остальных точках отрезка (x[0]..x[n]).');

writeln (После этого на экран будут выведен график полинома.');

readkey;

clrscr;

end;

 

{Процедура ввод табличных значений}

procedure Enter(var X,y: per);

var

 i: integer;

label mp;

begin

mp: for i:=0 to n do

 begin

 write('X[',i,'] = '); readln(x[i]);

 write('y[',i,'] = '); readln(y[i]);

 end;

 for i:=0 to n-1 do

 if x[i+1]-x[i]<=0 then

 begin

 writeln ('Ошибка. Повторите ввод.');

 goto mp

 end;

 end;

{процедура вывода табличных значений}

procedure Print(n: integer; X,y: per); var

 i: integer;

 begin

 for i:=0 to n do

 begin

 write(x[i]:12:6);

 end;

 writeln;

 for i:=0 to n do

 begin

 write(y[i]:12:6);

 end;

 writeln;

end;

 

{Функция формулы Ньютона}

Function Polinom(n: integer; d:real; X,y :per):real;

var

l:real;

k,i:integer;

p: real;

begin

L:=y[0];

P:=1;

for k:=1 to n do begin

P:=P*(D-X[k-1]);

for i:=0 to (n-k) do begin

Y[i]:=(y[i+1]-y[i])/(x[i+k]-x[i]);

end;

L:=L+P*y[0];

end;

POlinom:=l;

end;

{ процедура построение графика}

procedure Grafik(n: integer; D :real ; X,Y: per; L:real);

const

step=10;

var

 driver,mode: integer;

 i:longint;

 st:string;

 u,k:integer;

 

begin

writeln('Введите шаг деления графика');

readln(u);

k:=26;

driver:=detect;

initgraph (driver,mode,'');

 

setcolor (1);

line (320,0,320,480);

line (0,240,640,240);

for i:=0 to 32 do begin

setlineStyle (1,0,0);

line (0,i*k+6,640,i*k+6);

line (i*k+8,0,i*k+8,480);

end;

setcolor (3);

outtextxy (310,15,'y');

outtextxy (620,240,'x');

 

for i:=0 to getmaxx div (2*k) do

begin

str (i*u,st);

outtextxy(getmaxx div 2+i*(k),getmaxy div 2+step,st);

str (-i*u,st);

outtextxy (getmaxx div 2-i*k,getmaxy div 2+step,st);

end;

 

for i:=1 to getmaxy div (2*k) do

begin

str (-i*u,st);

outtextxy (getmaxx div 2+step,getmaxy div 2+i*k,st);

str (i*u,st);

outtextxy (getmaxx div 2+step,getmaxy div 2-i*k,st);

end;

d:=-u*12;

repeat

d:=d+0.002;

putpixel (round(320+d*k/u),round(240+(-POlinom(n,d,x,y))*k/u),10);

until d>u*12;

readkey;

end;

 

{Основной текст программы}

begin

TextMode(3);

TextBackground(1);

TextColor(14);

 Titul;

 writeln ('Вывести пояснение к программе?? (Да-1,Нет-0)');

 read (f);

 if f=1 then help else

lp:clrscr;

 writeln('Введите количество узлов n (N=n+1)');

 read(n);

 Enter(X,y);

 Print(n,X,y);

 repeat

 lt:Writeln('BbBedite X (ot ',x[0]:4:2,' do ',x[n]:4:2,')');

 read(d);

 if d<x[0] then begin

 writeln('Ошибка. x не может быть меньше ',x[0]:4:2);

 goto lt; end;

 if d>x[n] then begin

 writeln('Ошибка. x не может быть больше ',x[n]:4:2);

 goto lt; end;

 writeln(Polinom (n,d,X,y):6:3);

 writeln('Найти значения для другой точки X?(ДА-1,НЕТ-0)');

 read(f)

 until f=0;

 Grafik(n,D,X,Y,l);

 readkey;

 CloseGraph;

 clrscr;

 writeln('Повторить для другой функции? (Да-1,Нет-0)');

 read(f);

 if f=1 then goto lp else end.

 


Дата добавления: 2019-07-15; просмотров: 177; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!