Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестрп / Lab_5

.doc
Скачиваний:
12
Добавлен:
15.02.2015
Размер:
88.06 Кб
Скачать

Группа 2

Лабораторна робота 5

Тема: Розробка та реалізація програми з вкладеними циклами

Ціль роботи: оволодіння навичками складання програми з вкла­деними циклами та виконання її у середовищі системи програму­вання ТигЬо Равсаі 6.0; придбання уміння використовувати най­простіші методи сортувння масивів та методи пошуку для упоряд­кованих масивів.

Короткі теоретичні відомості

Тіло циклу одного оператора циклу може містити інші операто­ри циклу. Такі цикли називаються вкладеними. При складанні програм з вкладеними циклами треба пам'ятати про наступне:

* передача керування дозволена з внутрішнього циклу в зовнішній, але не навпаки;

* область дії внутрішнього циклу не повинна виходити за межі зовнішнього циклу.

Крім того, для операторів циклу fог діє ще одне правило: імена параметрів зовнішнього і внутрішнього циклів повинні бути відмінними. В випадку вкладених циклів fог при коленому фіксованому значенні параметра зовнішнього циклу параметр внутрішнього циклу пробігає усі свої значення.

При роботі з двовимірними масивами (матрицями) вкладені цикли рекомендується організовувати так, щоб у зовнішньому циклі змінювався індекс рядка (перший індекс), а у внутрішньому - індекс стовпця (другий індекс), що підвищує ефективність Раscal-

програми завдяки послідовному зчитуванню елементів масиву з пам'яті. Для виведення елементів матриці А рядків, М стовпців) по рядкам використовують наступний фрагмент:

for i:=1 to n do

begin

for j:=1 to m do write(a[i,j]);

writeln;

end;

Завдання 5.1

Представити математичний запис фрагмента програми і обчислити значення змінної X після його виконання, якщо елементи масивуA(який описується як var a: array[1..3,1..3]of integer) визначаються за формулами та .

Фрагмент програми: X:=A[1,3]; N1:=0; N:=3;

FOR I:=1 TO N DO

FOR J:=1 TO N DO

IF X>A[I,J] THEN

BEGIN X: A[I,J];

N1:=I;

END;

Розв’язок

Ця програма шукає найменший елемент масиву A[I] 3:3 після виконання програми X набуває значення 3, N1=1.

Завдання 5.2

Скласти програму сортування масиву в порядку зростання його елементів визначеним методом та виконати її у середовищі системи програмування Тurbо Раscal 6.0, якщо елементи масиву визначаються за формулою . Значення змінюється від 1 до 19.

Умова: обмінне сортування

Розв’язок

program lr5;

const n=19;

var a:array[1..100] of integer;

i,j,k,v:integer;

begin

writeln('Введите номер студента в списке');

read(a[1]);

for i:=1 to n-1 do a[i+1]:=(37*a[i]+3) mod 64;

for i:=1 to n do write (a[i]:3);

writeln;

for i:=1 to n-1 do

begin

if (a[i]>a[i+1]) then

begin

v:=a[i+1];

a[i+1]:=a[i];

a[i]:=v;

end;

end;

writeln('Результат');

for i:=1 to n do writeln(a[i]);

end.

Результати роботи програми:

Введите номер студента в списке

4

4 23 22 49 24 59 10 53 44 31 62 57 0 3 50 61 20 39 38

Результат

4

22

23

24

49

10

53

44

31

59

57

0

3

50

61

20

39

38

62

Завдання 5.3

Оцінити ефективність алгоритму бінарного пошуку за завданням 4.3:

Розв’язок

program lr4;

const n=20;

var a:array[1..n]of integer;

i,m,k:integer;

begin

write('Ввести ключ k=');readln(k);

writeln('Вводимо масив a[1..',n:2,']');

a[1]:=1; a[20]:=219830;

for i:=1 to n-2 do a[i+1]:=(37*a[i]+3)mod 64;

for i:=1 to n do writeln(a[i]);

writeln;

m:=0;

for i:=1 to n do

if a[i]=k then begin writeln ('a[',i:2,']=',a[i]);m:=i

end;

if m=0 then

writeln('Ключ',k,'в масиві не зустрічається');

end.

Результати роботи програми:

Ввести ключ k=2

Вводимо масив a[1..20]

1

40

11

26

5

60

47

14

9

16

19

2

13

36

55

54

17

56

27

219830

a[12]=2

Висновок:

Захист

Program lr5_z;

uses crt;

Var a:array [1..20,1..20] of integer;

max,s,m,n: integer;

Begin

Writeln('Vvedite razmernost matrici');

readln(s);

Writeln('vvedit elementi');

for m:=1 to s do

for n:=1 to s do

Readln(a[m,n]);

max:=a[1,1];

for m:=1 to trunc(s/2) do

for n:=1 to m do

begin

if(a[m,n]>max) then max:=a[m,n];

if(a[m,s-n+1]>max) then max:=a[m,s-n+1];

end;

for m:=1 to trunc(s/2) do

for n:=1 to m do

begin

if(a[s-m+1,n]>max) then max:=a[s-m+1,n];

if(a[s-m+1,s-n+1]>max) then max:=a[s-m+1,s-n+1];

end;

if (s mod 2)>0 then

for n:=1 to s do

if (a[(trunc(s/2)+1),n]>max) then max:=a[(trunc(s/2)+1),n] ;

writeln('Max=',max);

end.

ЛР05- 6.050103.1157-01

Соседние файлы в папке 2 семестрп