![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Лабораторна робота № 3. Структуровані типи даних.Стр 1 из 8Следующая ⇒
Структуровані типи даних. Масиви Масив – це структурований тип даних, який складається із фіксованої кількості елементів одного і того ж типу. Опис масиву у програмі має вигляд
< ім’я типу> 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.
Розглянемо алгоритм побудови перерізу двох масивів. Нехай задано два масиви цілих чисел Для побудови перерізу будемо кожний елемент масиву
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
|