
Программирование и основы алгоритмизации - Лабораторные работы (КИ МГОУ) / Отчёты / Лабораторная работа №1
.docxФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
Коломенский институт (филиал)
Государственного образовательного учреждения
Высшего профессионального образования
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ОТКРЫТЫЙ УНИВЕРСИТЕТ»
____________________________________________________
Кафедра автоматики и электроники в машиностроении
Отчёт
по лабораторной работе №1
на тему: «_____________________________________________»
по дисциплине:
«Программирование и основы алгоритмизации»
Выполнил: студент группы УТС-11
Осипов А. А. (№11147)
Аудитория №210, ПК №12
11.04.12г.
Принял: преподаватель
Филоненко Ирина Николаевна
г. Коломна, 2012г.
Задание 1.
Написать программу для аппроксимации функции, заданной в виде таблицы (таблица 1.1) и представленной в описании работы, в соответствии с условием своего варианта (таблицы 1.2 – 1.4). Оформить интерполяционный метод, как процедуру-реакцию на событие onClick в Windows-приложении. Для ввода исходных данных функции, заданной в виде таблицы, использовать объекты класса TMemo.
Произвести отладку программы.
Вариант 4.
Аргумент функции x: 0.93; вид интерполяции: квадратичная по Лагранжу.
x |
0.8 |
1.0 |
y |
2.601 |
3.001 |
Блок-схема:
Код программы:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTask1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
Memo2: TMemo;
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Task1: TTask1;
implementation
{$R *.dfm}
procedure TTask1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TTask1.Button1Click(Sender: TObject);
var
x,y:real;
i,n:integer;
k:array [0..100] of real;
l:array [0..100] of real;
begin
while (Edit1.Text='') do
begin
ShowMessage('Задайте промежуточное значение x0');
exit;
end;
while not (Memo1.Lines.Count=Memo2.Lines.Count) do
begin
ShowMessage('Введите равное количество значений x и y');
exit;
end;
n:=Memo1.Lines.Count;
x:=StrToFloat(Edit1.Text);
for i:=0 to n-1 do
begin
k[i]:=StrToFloat(Memo1.Lines[i]);
l[i]:=StrToFloat(Memo2.Lines[i]);
end;
i:=0;
repeat i:=i+1 until x<k[i];
if i=n then i:=i-1;
y:=l[i-1]*((x-k[i])*(x-k[i+1]))/((k[i-1]-k[i])*(k[i-1]-k[i+1]))+l[i]*((x-k[i-1])*(x-k[i+1]))/((k[i]-k[i-1])*(k[i]-k[i+1]))+l[i+1]*((x-k[i-1])*(x-k[i]))/((k[i+1]-k[i-1])*(k[i+1]-k[i]));
Edit2.Text:=FloatToStr(y);
end;
procedure TTask1.Button2Click(Sender: TObject);
begin
Edit1.Text:='';
Memo1.Lines.Clear;
Memo2.Lines.Clear;
Edit2.Text:='';
end;
end.
Задание 2.
Написать программу (Windows-приложение в Delphi) для вычисления полинома по схеме Горнера (см. свой вариант в таблице 1.5).
Отладить программу, используя тестовый пример.
Блок-схема:
Код программы:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTask2 = class(TForm)
Memo1: TMemo;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label3: TLabel;
Edit1: TEdit;
Label2: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Task2: TTask2;
implementation
{$R *.dfm}
procedure TTask2.Button3Click(Sender: TObject);
begin
close;
end;
procedure TTask2.Button2Click(Sender: TObject);
begin
edit1.Text:='';
memo1.lines.clear;
edit2.Text:='';
end;
procedure TTask2.Button1Click(Sender: TObject);
var
a:array [0..100] of real;
n,i:integer;
P,x:real;
begin
n:=Memo1.Lines.Count;
x:=StrToFloat(Edit2.Text);
for i:=0 to n-1 do
a[i]:=StrToFloat(Memo1.Lines[i]);
P:=a[n-1];
for i:=n-2 downto 0 do
P:=P*x+a[i];
Edit1.Text:=FloatToStr(P);
end;
end.