
2 семестрп / Lab_4
.doc
Лабораторна робота 4
Тема: Розробка та реалізація програми з масивами
Ціль роботи: оволодіння навичками складання програми з масивами та виконання її у середовищі системи програмування Тurbo Раscal 6.0, придбання уміння використовувати алгоритми послідовного пошуку в масивах.
Короткі теоретичні відомості
Масив - це упорядкована послідовність однойменних елементів, кожен з яких має один і той самий тип. Елементи масиву можуть мати любий стандартний тип (окрім файлового) або тип, введений користувачем. Тип елементів масиву називається базовим. Елементи масиву розміщені впорядковано, кожен має свій номер, який називається індексом. Доступ до елементів масиву відбувається шляхом вказування імені масиву та порядкового номера елемента (індексації). Індексом може бути будь-який вираз порядкового типу. Тип індексу визначає межі зміни значень індексу.
Опис масиву складається з ключового слова array, за яким в квадратних дужках записано тип індексу, ключового слова оf і описа типу елементів. Загальний вигляд опису масива:
type ім'я типу аггау [тип индсксу] оf тип елементів;
var ім'я масиву: ім'я типу;
або
var ім'я масиву: аггау [тип индексу] оf тип елементів;
Наприклад, tуре RGB = (red, green, blue) ;
NM= 1 . . МахІпt;
Аі = array 1..20] of integer ; ( 20 елементів)
var М, L0 : Аі;
А, В: аггау [1..10] of integer;
Соlor: аггау [RGB] of byte;
МаtrC: аггау [1..3,1..4] оf геаl;{3 рядки, 4 стовпця}
А2: аггау [Nm] of Ai;
Якщо базовим типом є масив, то утворюється багатовимірний масив. У наведеному прикладі змінні А2 і МаtrC є двовимірні масиви. Опис змінної МаtrC еквівалентний такому опису
Завдання 4.1
Представити математичний запис
фрагмента програми і обчислити
значення змінної X
після його виконання, якщо
елементи масиву визначаються за формулою
Фрагмент програми: T:=3; N:=3; X:=a[n+1]
for J:=1 to n do
X:=X+A[J]*exp((n-j-1)*ln(t));
Розв’язок
Цей фрагмент програми находить значення Х за формулою X:=X+A[J]*exp((n-j-1)*ln(t))
Х=49. Після виконання фрагменту Х=91,33333.
Завдання 4.2
Скласти програму обчислення
наступних величин та виконати її у
середовищі системи програмування Тurbо
Раscal
6.0, якщо елементи масиву визначаються
за формулою
.
Значення
змінюється від 1 до 19.
Умова: знайти середнє арифметичне додатних елементів масиву а.
Розв’язок
program lr4;
const n=19;
var a:array[1..n] of integer;
i,k,summa:integer;
srednee:real;
begin
writeln('Вводимо масив a[1..',n:2,']');
a[1]:=4;
summa:=0;
k:=0;
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 do
begin
if a[i]>0 then
begin
summa:=summa+A[i];
inc(k);
end;
end;
srednee:=summa/k;
writeln('Среднє арифметичне додатних елементів масива=', srednee);
end.
Результати роботи програми:
Вводимо масив a[1..19]
4 23 22 49 24 59 10 53 44 31 62 57 0 3 50 61 20 39 38
'Среднє арифметичне додатних елементів масива=36.0555555555556
Завдання 4.3
Оцінити ефективність алгоритму послідовного пошуку для чого:
1.Створити одновимірний масив
з 20 елементів за формулою
.
Значення
=N=1;
i
змінюється від 1 до 18;
=190*1157=219830.
2.Скласти програму
послідовного пошуку ключа k
в масиві
,
якщо k=N+1=2.
3.Обчислити avg
за формулою
Розв’язок
program lr4_3;
const n=20;
var a:array[1..n] of integer;
i,m,k:integer;
begin
write('Ввести ключ k=');readln(k);
write('Vvesti masiv a[1..',n:2,']');
a[1]:=4;
a[18]:=30;
for i:=1 to n-2 do a[i+1]:=(37*a[i]+3) mod 64;
for i:=1 to n do write(a[i]:3);
writeln;
m:=0;
for i:=1 to n do
if a[i]=k then
begin
writeln('a[',i:2,']=',a[i]:3);
m:=1;
end;
if m=0 then
writeln('Kluch',k,'v masivi ne zustrichaetsa');
end.
Результати роботи програми:
Ввести ключ k=4
Vvesti masiv a[1..20] 4 23 22 49 24 59 10 53 44 31 62 57 0 3 50 61 20 39 38 0
a[ 1]= 4
Висновок: масиви відносяться до структурованих типів даних, але завдяки індексуванню, з масиву можна виділити будь-який його елемент і використати його у програмі як окреме значення раніше визначеного типу. Тобто над елементами масиву можна виконувати такі ж операції як і над змінними та константами.
Захист
program lr4z;
const n=50;
label l5;
var a:array[1..n] of integer;
i,nn,s:integer;
begin
s:=0;
writeln('Vvedit rozmirnist mat');
readln(nn);
writeln('Вводимо масив');
for i:=1 to nn do
read(a[i]);
begin
if(i>1)then
if a[i]*a[i-1]>0 then
S:=1;
end;
if(s>0) then
for i:=1 to nn do
a[i]:=-abs(a[i]);
l5:writeln('Rezultat');
for i:=1 to nn do writeln(a[i]);
end.
ЛР04-
6.050103.1157-04