Вычисление значения функции при помощи полинома Лагранжа

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



Оглавление

Задание курсовой работы

Вычислительные методы

Описание диалогового взаимодействия пользователя с программой

Текст программы на языке Pascal с комментариями

Модуль для ввода и вывода данных

Модуль для основных действий

Главная программа

Общие принципы работы программы

Контрольный пример

Компьютерные вирусы. Классификация вирусов. Антивирусные средства

Выводы

Задание курсовой работы

Найти значения функции y(x) в точках х=1.52, 1.55, 1.58, 1.61, 1.67, если дана таблица ее значений в точках:

x1.501.541.561.601.631.70y3.8533.9243.9504.0004.0374.135

Изобразить график функции с отмеченными на нем точками

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

Вычислительные методы

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

Составить программу вычисления интерполяционного полинома Лагранжа, который имеет вид:

,

где xi и yi - значения функции, заданной таблично:

xx0x1тАжxnyy0y1тАжyn

Описание диалогового взаимодействия пользователя с программой

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

Текст программы на языке Pascal с комментариями

Модуль для ввода и вывода данных

Модуль inout содержит в себе все подпрограммы для организации ввода и вывода данных на экран и записи их в файлы. Данный модуль использует стандартные модули сrt и graph.

unit inout;

interfacegraph,crt;mas=array[1.. 2] of real; -массив для хранения пары чисел х и у(х)

fm=file of mas; - файл для хранения чисел

procedure vvodklav(var f,n:fm);prosmotr(var f,n:fm);izmenenie(var f,n:fm);readfile(var f,n:fm);out(var f,n:fm; var t:text);zastavka;

Процедура vvodklav обеспечивает ввод данных с клавиатуры. У пользователя есть возможно выбрать вводить ли данные для расчета или те значения х, для которых будет считаться значение у(х).Процедура имеет два параметра - два файла, в которых будут храниться данные.

procedure vvodklav;c,i:integer; a:mas; b:real; z:char;(20,5,60,20);(7);(0);;(Ввести исходные данные?? y/n');

readln(z);z='y' then begin('Ввод исходных данных');

writeln('Сколько значений?');

readln(c);(f);i:=1 to c do begin('Введите x',i);(a[1]);('Введите y',i);(a[2]);(f,a);;(f);;(20,5,60,20);(7);(0);;('Ввести данные для расчета? y/n');

readln(z);z='y' then begin('Ввод данных для расчета');

writeln('Сколько значений?');

readln(c);

rewrite(n);i:=1 to c do begin('Введите x');(a[1]);[2]:=0;(n,a);;(n);;(1,1,80,25);(black);;

Процедура prosmotr выводит на экран значения функции, заданной таблично, и те значения х, для которых будут вычисляться значения у(х). У этой процедуры два параметра - файлы с данными.

procedure prosmotr;

var i:integer; a:mas; b:real;(1,1,80,25);(7);(black);;(f);(' Данные для расчета');;('X');i:=1 to filesize(f) do begin(f,a);(' ',a[1]:5:2);;(f); reset(f);;;('Y');i:=1 to filesize(f) do begin(f,a);(' ',a[2]:5:2);;(f);;;;(n);('Считать для X=');i:=1 to filesize(n) do begin(n,a);(a[1]:5:2,' ');;(n);;;

Процедура izmenenie дает пользователю возможность изменить данные для расчета или те значения х, для которых будут вычислены значения у(х). Изменение происходит по номеру числа. Параметрами процедуры являются файлы с исходными данными.

procedure izmenenie;a:char; m:mas; c:integer;b:real;(20,5,60,20);(7);(0);;('Изменить исходные данные? y/n');

readln(a);a='y' then begin(f);

writeln('Введите номер числа');

readln(c);(f,c-1);(f,m);

writeln('Изменить x или y?');

readln(a);('Введите число');a='x' then readln(m[1]) else readln(m[2]);(f,filepos(f)-1);(f,m);(f);;(20,5,60,20);(7);(0);;(n);('Изменить данные для расчета? y/n');(a);a='y' then begin(n);

writeln('Введите номер числа');

readln(c);(n,c-1);(n,m);

writeln('Введите новое значение');

readln(m[1]);(n,filepos(n)-1);(n,m);(n);;(1,1,80,25);(black);;

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

procedure readfile;

type m=array[1..1] of real;

m2=array[1..1] of real;d:text; s:string[25];a:^m; c:^m2; b:real; k,i:integer; p:mas;(20,5,60,20);(7);(0);;('Введите имя файла');(s);:=s+'.pas';

assign(d,s); - связывание логического файла с указанным физическим файлом

reset(d);:=0;not seekeoln(d) do begin(d,b);:=k+1;;(d);(a,6*k); getmem(c,6*k);(d);i:=1 to k do read(d,a^[i]);(d);i:= 1 to k do read(d,c^[i]);(f);i:=1 to k do begin[1]:=a^[i];[2]:=c^[i];(f,p);;(f);(c,6*k); freemem(a,6*k); k:=0;(d);not seekeoln(d) do begin read(d,b); k:=k+1; end;(d);(a,k*6);(d);(d); readln(d);i:=1 to k do read(d,a^[i]);(n);i:=1 to k do begin[1]:=a^[i];[2]:=0;(n,p);;(n);(a,6*k);(d);

end;

Процедура out аналогична процедуре prosmotr, но она, в отличие от последней, выводит на экран как заданные значения х, так и вычисленные значения у(х). Кроме того, данная процедура записывает в новый текстовый файл значения х и вычисленные для них значения у. Если значения у(х) еще не были вычислены, на их месте стоят нули. Процедура имеет входные парамет