Лекции.Орг


Поиск:




Лабораторная работа 4. Программирование циклических алгоритмов. Вложенные циклы




4.1 Исходное условие и уточнение постановки задачи

Заданы аргументы: k=1, 3, 5,…, 27; где m-заданное число

Вычислить значения функций S.

Уточнение постановки задачи

 

Исходные данные: вещественные значения k.

Результаты: вывод числа в символе S.

4.2. Алгоритм

Алгоритм решения задачи включает одну алгоритмическую единицу (назовем ее R3) и может быть представлен в следующем виде.

Алгоритм R3

переменные

k,j,m: целые; {входные параметры}

S,р: вещ; {выходные данные}

Началo алг

Ввести m

k:=1;

Цикл1 начало

пока k<=27

s:=0;

Цикл2 начало

для j от 2 до m

p:=sin(j/power(2,k)-pi)*sin(j/power(2,k)-pi);

Цикл2 Конец

s:=s+p;

k:=k+2;

Цикл1 Конец

вывести результат x,y,sum,pr,min,max на экран;

конец алг.

4.3. Программа

4.3.1. Интерфейс

4.3.2. Программа на языке Delphi

procedure TForm1.Button1Click(Sender: TObject);

var j,m,k:integer; // определяем тип значений

s,p:real; // определяем тип значений

begin

k:=1; // присваеваем значение к переменной

m:=StrToint(edit1.Text); // выводим значение m

while k<=27 do begin

s:=0; // присваеваем значение к переменной

for j:=2 to m do

begin

p:=sin(j/power(2,k)-pi)*sin(j/power(2,k)-pi); // производим вычисление для р

s:=s+p; //производим вычисление для s

end;

k:=k+2; //производим вычисление для к

label1.Caption:=label1.Caption+FloatToStr(s)+#13;

end;

4.4. Результаты тестирования и выполнения программы

Для анализа правильности программы необходимо проверить ее работу при различных вариантах исходных данных. Тестовые примеры, выбранные для данной задачи, предусматривают проверку работы обеих ветвей программы. Результаты тестирования представлена ниже.

Исходные данные: m=50

Результаты: 24,8989781328588

25,1169588619545

25,3662974146517

2,539528579046

0,016342383504

0,00063961258

0,0000399761

0,000002499

0,00000016

0

Исходные данные: m=20

Результаты: 9,50034686946757

12,0713899987859

2,58078768491726

0,17421466859864

0,0109408616025

0,00068400921

0,0000427514

0,000002672

0,00000017

Исходные данные: m=1000

Результаты: 499,501158172292

502,10514496015

502,618179656355

497,847352908721

589,043379439968

75,8782812670524

4,95968783864002

0,3108487101556

0,0194314406721

0,00121447831

0,00000759049

0,000004744

0, 0000003

4. 5. Заключение

Программа проверена. Решение задачи закончено

ЛАБОРАТОРНАЯ РАБОТА 5. ЦИКЛИЧЕСКАЯ ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ

5.1 Исходное условие и уточнение постановки задачи

Разработать алгоритм и программу решения задачи обработки одномерного массива (массивов)

1) Элементы исходного массива (массивов) вводятся пользователем

2) Элементы исходного массива (массивов) вычисляются случайно.

3) Элементы исходного массива (массивов) задаются как предусмотренный в программе набор констант.

Уточнение условия: Найти номер наибольшего элемента массива , значения которого также принадлежат отрезку [- 2; 2,5].

5.2. Алгоритм

Алгоритм R3

переменные

X:[0…100]:вещ; {входные параметры}

I,n,imax:целые; {входные параметры}

max:вещ; {выходные данные}

началo блока

n:=memo1.Lines.Count;

max:=-x[0]; imax:=0;

Цикл 1 начало

для i от 0 до n-1

x[i]:=strtofloat(memo1.Lines[i]);

если (x[i]<=2.5) и (x[i]>=-2) и (x[i]>=max) тогда начало max:=x[i]; imax:=I; конец

Цикл 1 конец

Вывести (imax) на экран.

Конец блока.

переменные

X:[0…100]:вещ; {входные параметры}

I,n:целые; {входные параметры}

max:вещ; {выходные данные}

началo блока

Ввод случайных значений;

n:= random(10);

Цикл 1 начало

для i от 0 до n-1

memo2.lines.Add(floattostr(random(10)));

Цикл 1конец

 

max:=-x[0]; imax:=0;

Цикл 2 начало

для i от 0 до n-1

x[i]:=strtofloat(memo1.Lines[i]);

если (x[i]<=2.5) и (x[i]>=-2) и (x[i]>=max) тогда начало max:=x[i]; imax:=I; конец

Цикл 2 конец

Вывести (imax) на экран.

Конец блока.

Вывести (max) на экран.

Конец блока.

переменные

X:[0…100]:вещ; {входные параметры}

I,n:целые; {входные параметры}

max:вещ; {выходные данные}

началoблока

n:=6;

Цикл 1 начало

для i от 0 до n-1

memo3.lines.Add(inttostr(i));

Цикл 1 конец

 

max:=-x[0]; imax:=0;

Цикл 2 начало

для i от 0 до n-1

x[i]:=strtofloat(memo1.Lines[i]);

если (x[i]<=2.5) и (x[i]>=-2) и (x[i]>=max) тогда начало max:=x[i]; imax:=I; конец

Цикл 2 конец

Вывести (imax) на экран.

Конец блока.

Вывести (max) на экран;

Конец блока.

5.3. Программа

5.3.1. Интерфейс

Программа на языке Delphi

procedure TForm1.Button1Click(Sender: TObject);

var max: real; x: array[0..100] of real; i,n: integer;

begin

n:=memo1.Lines.Count;

max:=-5;

for i:= 0 to n - 1 do

begin

x[i]:=strtofloat(memo1.Lines[i]);

if (x[i]<=2.5)and (x[i]>=-2) and (i>=max) then max:=i;

end;

label1.caption:=floattostr(max);

end;

 

procedure TForm1.Button2Click(Sender: TObject);

var max: real; x: array[0..100] of real; i,n: integer;

begin

Randomize;

n:=random(10);

for i:= 0 to n - 1 do

begin

memo2.lines.Add(floattostr(random(10)));

end;

 

max:=-5;

for i:= 0 to n - 1 do

begin

x[i]:=strtofloat(memo2.Lines[i]);

if (x[i]<=2.5)and (x[i]>=-2) and (i>=max) then max:=i;

end;

label2.caption:=floattostr(max);

end;

 

procedure TForm1.Button3Click(Sender: TObject);

var max: real; x: array[0..100] of real; i,n: integer;

begin

n:=6;

for i:= 0 to n - 1 do

begin

memo3.lines.Add(inttostr(i));

end;

max:=-5;

for i:= 0 to n - 1 do

begin

x[i]:=strtofloat(memo3.Lines[i]);

if (x[i]<=2.5)and (x[i]>=-2) and (i>=max) then max:=i;

end;

label3.caption:=floattostr(max);

end;

end.

5.4. Результаты тестирования и выполнения программы

Для анализа правильности программы необходимо проверить ее работу при различных вариантах исходных данных. Тестовые примеры, выбранные для данной задачи, предусматривают проверку работы обеих ветвей программы. Результаты тестирования представлена ниже.

Исходные данные: Результаты:

6 1

-3

Исходные данные: Результаты:

6 0

Исходные данные: Результаты:

0 2

 

5. 5. Заключение






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


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 690 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Лучшая месть – огромный успех. © Фрэнк Синатра
==> читать все изречения...

781 - | 742 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.