Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Лабораторна робота № 3. Структуровані типи даних.






Структуровані типи даних.

Масиви

Масив – це структурований тип даних, який складається із фіксованої кількості елементів одного і того ж типу.

Опис масиву у програмі має вигляд

 

< ім’я типу> array [< список індексних типів> ] of < тип>;

 

де < ім’я типу> – правильний ідентифікатор; array, of – зарезервовані слова (масив, із); < список індексних типів> – список з одного або декількох індексних типів (розмірність масиву не обмежується), розділених комами; < тип> – тип елементів масиву, може бути будь-яким крім файлового. В ролі індексних типів може використовуватися будь-який порядковий тип (частіше використовується діапазон).

Масив можна описати в розділі Var безпосередньо або за допомогою раніше описаного ідентифікатора типу:

 

Type Tm= array[1..10] of integer;

Var a, b: array[1..100] of double;

r: array[1..100] of double;

s: array[1..100] of double;

c, d: Tm;

x: array[1..10, 1..10] of integer;

y: array[1..10] of array[1..10] of integer;

 

тут масиви a, b, r, s описані безпосередньо, масиви c, d описані за допомогою ідентифікатора типу, а матриці x, y описані безпосередньо ідентичними способами.

Для масивів у цілому допускається тільки операція присвоєння, якщо вони описані одним ідентифікатором типу. Тому оператор a: =b; буде вірним і присвоїть елементам масиву a відповідні елементи масиву b, а оператор r: =s; буде невірним.

Для доступу до окремого елемента масиву потрібно за іменем масиву вказати у квадратних дужках його індекс (положення у масиві): a[5], x[3, 4] або y[5][6]. З елементами масиву можна працювати як із звичайними скалярними змінними.

Існують так звані динамічні масиви. При опису таких масивів у програмі межі індексів не вказуються. Пам’ять для цих масивів виділяється на етапі виконання програми в динамічній області процедурою SetLength і звільняється процедурою Finalize. Наприклад,

 

Var a: array of integer;

b: array of array of char;

c: array of array of array of double;

i, j: integer;

Begin

{Розподіл пам’яті}

SetLength(a, 10);

{Довжина першого виміру (кількість рядків)}

SetLength(b, 10);

{Довжина кожного рядка)}

for i: =0 to 9 do

SetLength(b[i], 20);

{Кубічний масив c[0..2, 0..2, 0..2]}

SetLength(c, 3);

for i: =0 to 2 do

begin

SetLength(c[i], 3);

for j: =0 to 2 do

SetLength(c[i, j], 3);

end;

{Робота з масивами}

………………

{Звільнення пам’яті}

a: =NIL;

Finalize(b);

Finalize(b);

End.

 

У наведеному прикладі: а – одновимірний масив цілих чисел, якому виділена пам’ять для десяти елементів; b – двовимірний масив символів із 10 рядків по 20 символів у рядку; c – тривимірний масив дійсних чисел. Нижня межа індексів по кожному виміру динамічного масиву завжди дорівнює нулю. У багатовимірних масивах спочатку встановлюється довжина його першого виміру, потім другого, третього і т. д.

Алгоритми обробки масивів. До традиційних алгоритмів обробки даних належать: пошук максимального і мінімального елементів масиву, накопичення сум і добутків елементів масиву, циклічний зсув елементів масиву, побудова об’єднання, перетину, різниці елементів масивів та інші.

Розглянемо алгоритм пошуку максимального елемента масиву . Візьмемо один із елементів (як правило це перший) і будемо порівнювати його з усіма останніми елементами масиву. Якщо зустрінеться більший елемент, то він запам’ятовується і порівняння продовжується. Після перегляду всіх елементів масиву буде знайдено найбільший елемент. Програма пошуку максимального елемента масиву має вигляд:

 

Program LABR3_1;

{$APPTYPE CONSOLE}

uses Sysutils;

VAR a: array[1..300] of integer;

maxa: integer;

n, i: integer;

BEGIN

{Введення початкових даних}

writeln(‘Введіть розмір масиву а, (n< =300)’);

readln(n);

writeln(‘Введіть елементи масиву а’);

for i: =1 to n do

read(a[i]);

{Пошук максимального елемента масиву}

maxa: =a[1];

for i: =2 to n do

if maxa < a[i] then maxa: =a[i];

writeln(‘Максимальний елемент =’, maxa);

readln;

END.

 

Розглянемо алгоритм побудови перерізу двох масивів. Нехай задано два масиви цілих чисел , . Розробити програму, яка будує переріз масивів . Переріз масивів - це всі елементи масиву , які містяться у масиві і взяті по одному разу. Переріз масивів буде нараховувати не більше 200 елементів. Помістимо їх у масив .

Для побудови перерізу будемо кожний елемент масиву порівнювати з усіма елементами масиву . Якщо елемент масиву збіжиться з деяким елементом масиву , то цей елемент буде елементом перерізу, і якщо такого елемента ще немає в масиві , то він туди записується. Програма побудови перерізу двох масивів має вигляд:

 

Program LABR3_2;

{$APPTYPE CONSOLE}

uses Sysutils;

VAR a, c: array[1..200] of integer;

b: array[1..300] of integer;

n, m, k, i, j: integer;

f1, f2: boolean;

BEGIN

{Введення початкових даних}

writeln(‘Введіть розмір масиву а, (n< =200)’);

readln(n);

writeln(‘Введіть елементи масиву а’);

for i: =1 to n do

read(a[i]);

writeln(‘Введіть розмір масиву b, (m< =300)’);

readln(m);

writeln(‘Введіть елементи масиву b’);

for i: =1 to m do

read(b[i]);

{Побудова перетину масивів}

k: =0;

for i: =1 to n do

begin

j: =1; f1: =false;

while (j < = m) and (not f1) do

if a[i]=b[j] then f1: =true else j: =j+1;

if f1 then begin

j: =1; f2: =true;

while (j < = k) and f2 do

if a[i]=c[j] then f2: =false else j: =j+1;

if f2 then begin k: =k+1; c[k]: =a[i]; end;

end;

end;

{Виведення перетину по п’ять елементів у рядку}

if k=0 then writeln(‘Перетин порожній’)

else

for i: =1 to k do

if i mod 5 < > 0 then write(c[i]: 6)

else writeln(c[i]: 6);

readln;

END.

Лабораторна робота № 3






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.