Главная страница

СЕДЬМАЯ ЛАБОРАТОРНАЯ ЦИФРОВОЙ ПРАКТИКУМ. седьмая лабораторная практикум. Алгоритмы повторений


Скачать 285.71 Kb.
НазваниеАлгоритмы повторений
АнкорСЕДЬМАЯ ЛАБОРАТОРНАЯ ЦИФРОВОЙ ПРАКТИКУМ
Дата18.12.2021
Размер285.71 Kb.
Формат файлаdocx
Имя файласедьмая лабораторная практикум.docx
ТипОтчет
#307992

Санкт-Петербургский политехнический университет Петра Великого

Институт машиностроения, материалов и транспорта

Высшая школа машиностроения

Отчет

по лабораторной работе №7

Дисциплина: «Цифровой практикум»

Тема: «Алгоритмы повторений»

Студент гр. 3331506/10001 Суднеко В.П.

Преподаватель Ситкин Д.С.

Санкт-Петербург

2021

Цель работы: приобретение умений разработки и программной реализации циклических алгоритмов.

Задание I: разработать алгоритм вычисления значений x и y параметрической функции для значений параметра t от a до b с шагом h и реализовать его в проекте



Задание II: разработать алгоритм вычисления конечной суммы или произведения и реализовать его в проекте



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



На рисунке 1 представлена блок-схема первого алгоритма.



Рисунок 1 – Алгоритм вычисления

таблицы значений x и y

Код программы №1 представлен ниже.

unit Lab7_1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label4: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

a, b, h, t, x, y: real;

const m=5;

implementation

{$R *.dfm}

procedure test(var Key: Char; Str: String);

begin

case Key of

'0'..'9': ;

#8: ;

'-': if Pos('-',Str)<>0 then Key:=#0;

',': if Pos(',',Str)<>0 then Key:=#0;

else Key:=#0;

end;

end;

function testStr(Str: String): boolean;

begin

if Str = '' then testStr:=false

else if Str = '-' then testStr:=false

else if (Pos('-', Str)<>0) and (Pos('-', Str)<>1) then testStr:=false

else testStr := true;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if (testStr(Edit1.Text) and testStr(Edit2.Text) and testStr(Edit3.Text)) then

begin

a := StrToFloat(Edit1.Text);

b := StrToFloat(Edit2.Text);

if a>=b then

begin

ShowMessage('Лево – это лево, право – это право ;)');

Exit;

end;

h := StrToFloat(Edit3.Text);

t := a;

Label4.Caption := '';

while t<=b do

begin

x := m*(t - Sin(t));

y := m*(1 - Cos(t));

Label4.Caption := Label4.Caption + #13 + 'При t = ' + FloatToStr(t) + #9 + #9 + #9 + 'x = ' + FloatToStr(x) + #9 + 'y = ' + FloatToStr(y);

t := t + h

end

end

else ShowMessage('Исправьте ошибки в введённых данных');

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

Test(Key, Edit1.Text);

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

Test(Key, Edit2.Text);

end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);

begin

Test(Key, Edit3.Text);

end;

end;

Пример работы приложения представлен на рисунке 2.



Рисунок 2 – Пример работы первого приложения

Альтернативный расчёт представлен на рисунке 3:



Рисунок 3 – Альтернативный расчёт для первой программы

На рисунке 4 представлена блок-схема алгоритма вычисления конечной суммы.



Рисунок 4 – Блок-схема

второго алгоритма

Код программы №2 представлен ниже.

unit Lab7_2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

Label2: TLabel;

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

x, S, a: real;

i: byte;

const n=10;

implementation

{$R *.dfm}

procedure test(var Key: Char; Str: String);

begin

case Key of

'0'..'9': ;

#8: ;

'-': if Pos('-',Str)<>0 then Key:=#0;

',': if Pos(',',Str)<>0 then Key:=#0;

else Key:=#0;

end;

end;

function testStr(Str: String): boolean;

begin

if Str = '' then testStr:=false

else if Str = '-' then testStr:=false

else if (Pos('-', Str)<>0) and (Pos('-', Str)<>1) then testStr:=false

else testStr := true;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if not (testStr(Edit1.Text)) then

begin

ShowMessage('Исправьте значение x');

Exit;

end;

x := StrToFloat(Edit1.Text);

a := Exp(x)/6;

S := a;

for i:=2 to 10 do

begin

a := a*Exp(x)/(i+2);

S := S + a;

end;

Label2.Caption := 'S = ' + FloatToStr(S);

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

test(Key, Edit1.Text);

end;

end.

Пример работы приложения представлен на рисунке 5.



Рисунок 5 – Пример работы второго приложения

Альтернативный расчёт представлен на рисунке 6:



Рисунок 6 – Альтернативный расчёт

для третьей программы

На рисунке 7 представлена блок-схема алгоритма вычисления бесконечной суммы с точностью .



Рисунок 7 – Блок-схема алгоритма

вычисления бесконечной суммы

Код третьей программы представлен ниже.
unit Lab7_3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label3: TLabel;

Label4: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

k, a, S, e, x: real;

implementation

{$R *.dfm}

procedure test(var Key: Char; Str: String);

begin

case Key of

'0'..'9': ;

#8: ;

'-': if Pos('-',Str)<>0 then Key:=#0;

',': if Pos(',',Str)<>0 then Key:=#0;

else Key:=#0;

end;

end;

function testStr(Str: String): boolean;

begin

if Str = '' then testStr:=false

else if Str = '-' then testStr:=false

else if (Pos('-', Str)<>0) and (Pos('-', Str)<>1) then testStr:=false

else testStr := true;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

test(Key, Edit1.Text)

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

test(Key, Edit2.Text)

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if (testStr(Edit1.Text) and testStr(Edit2.Text) and (0 < StrToFloat(Edit1.Text)) and (StrToFloat(Edit1.Text) <= Pi)) then

begin

x:=StrToFloat(Edit1.Text);

e:=StrToFloat(Edit2.Text);

k:=0; S:=0; a := Sin(x);

repeat

S:=S+a;

k:=k+1;

a:=Sin((2*k + 1)*x) / (2*k + 1);

until Abs(a/S)<=e;

Label3.Caption := 'S='+FloatTostrF(S,ffFixed,10,5);

Label4.Caption := 'Слагаемых в сумме ' + FloatToStr(k);

end

else ShowMessage('Исправьте ошибки в введённых данных.');

end;

end.

Пример работы приложения представлен на рисунке 8.



Рисунок 8 – Пример работы третьего приложения
Альтернативный расчёт для третьей программы представлен на рисунке 9.

Рисунок 9 – Альтернативный расчёт для третьей программы.
Вывод: были приобретены умения разработки и программной реализации циклических алгоритмов.


написать администратору сайта