Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все лабы.doc
Скачиваний:
9
Добавлен:
05.11.2018
Размер:
1.86 Mб
Скачать

Завдання до лабораторної роботи

Складіть програми для розв’язання наступних задач.

Варіант 0n, 3n. Знайдіть суму трьох найбільших <умова А> елементів вихідного масиву Р(22).

Варіант 1n. Знайдіть добуток двох найбільших і двох найменших <умова А> елементів вихідного масиву В(25).

Варіант 2n. Сформуйте два масиви, що містять значення й індекси <умова А> елементів вихідного масиву Х(20).

Умова А наведена в табл.7.

Таблиця 7

n

Умова А

n

Умова А

1

Додатних парних

2

Від’ємних парних

3

Додатних непарних

4

Від’ємних непарних

5

Непарних, які находяться в інтервалі [1;25]

6

Парних, які находяться в інтервалі [-20;20]

7

Додатних кратних 3

8

Кратних 3 і не менших за 10

9

Від’ємних кратних 4

0

Кратних 5 і не більших за 50

Лабораторна робота 7 вкладені цикли. Обробка двовимірних масивів

Мета роботи: виробити практичні навички в складанні алгоритмів, написанні та налагодженні програм на селективну обробку двовимірних масивів.

Загальні вказівки

У Паскалі багатовимірні масиви можуть визначатися послідовно: спочатку описується один масив, потім другий, елементами якого є оголошені раніше масиви, і т.д. Один масив вкладається в інший, і ступінь такого вкладення не обмежений.

Наприклад:

type str=array[1..10] of real;

tabl=array[1..5] of str;

Наведений опис двовимірного масиву можна замінити еквівалентним описом

type tabl=array[1..5,1..10] of real;

При обробці двовимірних масивів звичайно застосовуються вкладені цикли. Цикл, що охоплює інші цикли, називається зовнішнім, інші цикли - внутрішніми.

Приклад виконання завдання 1 лабораторної роботи

Приклад 21. У матриці a(4,5) знайти добуток позитивних елементів.

Б лок-схема

Порядок роботи:

Крок 1. Уводимо матрицю a(4,5).

Крок 2. Задаємо початкове значення добутку p=1.

Крок 3. Організовуємо цикл, що перебирає рядки матриці (тобто індекс i), починаючи з 1-го і закінчуючи 4-м.

Крок 4. Організуємо цикл, що перебирає стовпці матриці (тобто індекс j), починаючи з 1-го і закінчуючи 5-м.

Крок 5. Якщо aij > 0, тоді привласнюємо p = p aij.

Крок 6. Якщо цикл за j не закінчився, йдемо на початок циклу, тобто на крок 4.

Крок 7. Якщо цикл за i не закінчився, йдемо на початок циклу, тобто на крок 3.

Крок 8. Друкуємо p.

Крок 9. Останов.

Приклад 22. Знайти суму парних елементів третього рядка матриці a(4,5).

Порядок роботи:

Крок 1. Уводимо матрицю a(4,5).

Крок 2. Установлюємо початкове значення суми s = 0.

Крок 3. Задаємо номер оброблюваного рядка i = 3.

Крок 4. Організовуємо цикл, що перебирає стовпці матриці (тобто індекс j), починаючи з 1-го і кінчаючи 5-м.

Крок 5. Якщо aij парне, тоді привласнюємо s = s + aij.

Крок 6. Якщо цикл за j не закінчився, йдемо на початок циклу, тобто на крок 4.

Крок 7. Друкуємо s.

Крок 8. Останов.

Приклад 23. Обчислити середні геометричні додатних елементів кожного рядка матриці X(5,8). Визначити мінімальне значення цих середніх і номер відповідного рядка.

Програма має вид:

program pr23;

uses crt;

const m=5; n=8;

type stroka = Array[1..n] of real;

matr = array[1..m] of stroka;

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

var x:matr; b:stroka; sr:stolb; p,min:real;

i,j,k,nmin:integer; z:char;

begin clrscr;

for i:=1 to m do begin

WRITELN('УВЕДИ ',N,' ЧИСЕЛ ',I,'-Ого РЯДКА');

FOR J:=1 TO N DO READ(X[I,J]); END;

WRITELN(' ':10,'ВИХІДНА МАТРИЦЯ ');

FOR I:=1 TO M DO BEGIN

FOR J:=1 TO N DO WRITE(X[I,J]:7:1);

WRITELN;END;

{ОБЧИСЛЕННЯ СЕРЕДНІХ ГЕОМЕТРИЧНИХ}

for i:=1 to m do

begin

b:=x[i]; p:=1; k:=0;

for j:= 1 to n do

if b[j]>0 then

begin p:=p*b[j];k:=k+1; end;

if k>0 then sr[i]:=exp(ln(p)/k) else sr[i]:=-1;

END; {FOR}

{ПОШУК МІНІМАЛЬНОГО ЕЛЕМЕНТА}

min:=1E20;

for i:= 1 to m do

if( sr[i]<min) and (sr[i]>0) then

BEGIN MIN:=SR[I];NMIN:=I; END;

WRITELN;WRITELN(' ':5,' РЕЗУЛЬТАТИ РОЗРАХУНКУ');

FOR I:=1 TO M DO

WRITELN('СЕР.ГЕОМ .',I,'-Ого РЯДКА=',SR[I]:7:2);

FOR I:= 1 TO 34 DO WRITE(' = ');

WRITELN;

WRITELN('МІНІМАЛЬНЕ СЕРЕДНЄ = ',MIN:7:2);

WRITELN('НОМЕР РЯДКА = ',NMIN:2);

z:=readkey

end.

Приклади виконання завдання 2 лабораторної роботи

Приклад 24. Знайти суму парних елементів головної діагоналі матриці a(5,5).

Порядок роботи:

Крок 1. Уводимо матрицю a(5,5).

Крок 2. Установлюємо початкове значення суми s=0.

Крок 3. Організовуємо цикл, що перебирає рядки матриці (тобто індекс i), починаючи з 1-го і закінчуючи 5-м.

Крок 4. Організовуємо цикл, що перебирає стовпці матриці (тобто індекс j), починаючи з 1-го і закінчуючи 5-м.

Крок 5. Якщо aij парне й i = j, привласнюємо s = s + aij.

Крок 6. Якщо цикл за j не закінчився, йдемо на початок циклу , тобто на крок 4.

Крок 7. Якщо цикл за i не закінчився, йдемо на початок циклу, тобто на крок 3.

Крок 8. Друкуємо s.

Крок 9. Останов.

Приклад 25. Обчислити добуток від множення суми додатних елементів головної діагоналі на суму непарних елементів побічної діагоналі матриці А(6,6).

Програма має вид

program pr25;

uses crt;

const n=6;

type raz=1..n;

matr=array[raz,raz] of integer;

var a:matr; p,s1,s2,i,j:integer; z:char;

BEGIN CLRSCR;

FOR I:=1 TO N DO BEGIN

WRITELN('УВЕДИ ',N,' ЧИСЕЛ ',I,'-Ого РЯДКА');

FOR J:=1 TO N DO READ(A[I,J]); END;

CLRSCR;

WRITELN(' ':10, 'ВИХІДНА МАТРИЦЯ ');

for i:=1 to n do begin

for j:=1 to n do

write(a[i,j]:5); WRITELN;END;

{ОБЧИСЛЕННЯ СУМИ ДІАГОНАЛЕЙ}

s1:=0; s2:=0;

for i:=1 to n do

begin j:= n+1-i;

if a[i,i] > 0 then s1:=s1+a[i,i];

if a[i,j] MOD 2 <> 0 then s2:=s2+a[i,j];

end;

{ОБЧИСЛЕННЯ ДОБУТКУ}

P:=S1*S2;

WRITELN;WRITELN(' ':10,'РЕЗУЛЬТАТИ РОЗРАХУНКУ ');

WRITELN('СУМА ДОД. ЕЛ. ГОЛ. ДІАГОНАЛІ=',S1:4);

WRITELN('СУМА НЕП. ЕЛ. ПОБ. ДІАГОНАЛІ=',S2:4);

WRITELN(' ЇХНІЙ ДОБУТОК = ',P:4);

z:=readkey

end.

Приклад 26. Знайти максимальний елемент побічної діагоналі матриці X(5,5) і вивести на друк весь стовпець, у якому він знаходиться.

Програма має вид:

program pr26;

uses crt;

const n=5;

type raz=1..n;

matr=array[raz,raz] of real;

var x:matr; max:real; i,j,jmax:raz; z:char;

BEGIN CLRSCR;

FOR I:=1 TO N DO BEGIN

WRITELN('УВЕДИ',N,'ЧИСЕЛ ',I,'-ОГО РЯДКА');

FOR J:= 1 TO N DO READ(X[I,J]);

END;

CLRSCR;

WRITELN(' ':5, 'ВИХІДНА МАТРИЦЯ ');

for i:=1 to n do begin

for j:=1 to n do

write(x[i,j]:5:1);

writeln; end;

{ПОШУК МАКСИМАЛЬНОГО ЕЛЕМЕНТА}

max:=-1e20;

for i:=1 to n do

begin j:=n+1-i;

if x[i,j]>max then

begin max:=x[i,j];jmax:=j; end;

END;

{ВИВІД ЗНАЙДЕНОГО СТОВПЦЯ}

WRITELN; WRITELN(' МАКС. ЕЛЕМЕНТ=',MAX:5:1);

WRITELN('СТОВПЕЦЬ З МАКС. ЕЛ. ',jmax:2);

for i:=1 to n do

writeln(' ':10,x[i,jmax]:5:1);

z:=readkey

end.

Приклад 27. У матриці a(4,5) знайти кількість парних елементів у рядку, у якому другий елемент позитивний (якщо таких рядків декілька, результат роздрукувати окремо для кожного).

Порядок роботи:

Крок 1. Уводимо матрицю a(4,5).

Крок 2. Організовуємо цикл, що перебирає рядки матриці (тобто індекс i), починаючи з 1-го і закінчуючи 4-м.

Крок 3. Якщо ai2 > 0, то йдемо на крок 4, інакше беремо інший рядок, тобто йдемо на крок 9.

Крок 4. Установлюємо початкове значення кількості k=0.

Крок 5. Організовуємо цикл, що перебирає стовпці матриці (тобто індекс j), починаючи з 1-го і закінчуючи 5-м.

Крок 6. Якщо aij парне, тоді привласнюємо k = k + 1.

Крок 7. Якщо цикл за j не закінчився, йдемо на початок циклу, тобто на крок 5.

Крок 8. Друкуємо k.

Крок 9. Якщо цикл за i не закінчився, йдемо на початок циклу, тобто на крок 2.

Крок 10. Останов.

Приклад 28. У матриці a(4,5) знайти кількість парних елементів у рядку, у якого сума елементів позитивна (якщо таких рядків декілька, результат роздрукувати окремо для кожного).

Порядок роботи:

Крок 1. Уводимо матрицю a(4,5).

Крок 2. Організовуємо цикл, що перебирає рядки матриці (тобто індекс i), починаючи з 1-го і закінчуючи 4-м.

Крок 3. Установлюємо початкове значення суми s = 0.

Крок 4. Організовуємо цикл, що перебирає стовпці матриці (тобто індекс j), починаючи з 1-го і закінчуючи 5-м.

Крок 5. Привласнюємо s = s + aij.

Крок 6. Якщо цикл за j не закінчився, йдемо на початок циклу, тобто на крок 4.

Крок 7. Якщо s > 0, то йдемо на крок 8, інакше - беремо інший рядок, тобто йдемо на крок 13.

Крок 8. Установлюємо початкове значення кількості k=0.

Крок 9. Організовуємо цикл, що перебирає стовпці матриці (тобто індекс j), починаючи з 1-го і кінчаючи 5-м.

Крок 10. Якщо aij парне, тоді привласнюємо k = k + 1.

Крок 11. Якщо цикл за j не закінчився, йдемо на початок циклу, тобто на крок 9.

Крок 12. Друкуємо k.

Крок 13. Якщо цикл за i не закінчився, йдемо на початок циклу, тобто на крок 2.

Крок 14. Останов.