Масиви у Pascal

Досить часто виникає потреба обробляти зберігати ряд однотипних змінних разом. Наприклад, якщо програма має зберігати (наприклад, для знаходження середнього) оцінки з інформатики 10 учнів, можна писати так: program Otsinky; var o1,o2,o3,o4,o5,o6,o7,o8,o9,o10:integer; s:real; begin writeln('Введіть оцінки:'); readln(o1,o2,o3,o4,o5,o6,o7,o8,o9,o10); s:=(o1+o2+o3+o4+o5+o6+o7+o8+o9+o10)/10; writeln(s); end.

Але такий спосіб запису: дуже довгий; потребує явної операції з кожною змінною, неможливо загнати їх усіх в цикл.

Щоб розв'язати ці проблеми, в мові Паскаль існує спеціальний тип даних - масив. Запис var o:array[1..10] of integer; визначає 10 змінних типу integer, об'єднаних під єдиним ім'ям. Окремі змінні називаються за індексом у квадратних дужках: o, o, o. Індекс може бути змінною (o[i] - i-ий елемент масиву) чи навіть виразом: o[max(i,j)]. Зверніть увагу на те, що тип елементів масиву, а також найменший і найбільший можливі індекси масиву вказуються при його визначенні; спроба звернутися до елементу, що виходить за ці межі, на кшталт o чи o викличе помилку. Перепишемо програму, наведену вище: program Otsinky; var o:array[1..10] of integer; i:integer; s:real; begin for i:=1 to 10 do begin write('Введіть оцінку ',i,'-го учня:'); readln(o[i]); end; s:=0; for i:=1 to 10 do s:=s+o[i]; writeln(s); end.

Зверніть увагу, що для обчислення суми нам довелося скористатися додатковою змінною s, яка спочатку рівна нулю, а потім до неї покроково додається оцінка кожного учня.

Введення, виведення і сортування масивів

Це три найтиповіші задачі, з якими доводиться стикатися при роботі з масивами, і які викликають в початківців питання. Масив — не одна змінна, тому стандартні команди write і readln з ним не працюють (перевірте це!). Оскільки масив — це набір змінних, до яких звертаються за допомогою індексу, то більшість операцій з масивами потребують циклів по цьому індексу. Отже, ввід масиву виглядає приблизно так:

writeln('Введіть елементи масиву'); for i:=1 to n do readln(A[i]); а вивід, відповідно, writeln('Масив A:'); for i:=1 to n do write(A[i],', '); де йдеться про те, що масив A має індекси від 1 до n, а i - змінна типу integer. Звісно, вводити та виводити можна й іншими способами, експериментуйте!

Що ж стосується сортування, тобто впорядковування елементів, то існує багато [:w:Алгоритм сортування|різних алгоритмів] для цього. Найпростішим є так званий "бульбашковий алгоритм", який полягає в тому, що перший елемент порівнюється з другим; якщо перший більший, елементи обмінюються місцями. Після цього другий порівнюється з третім, за потреби обмінюються, третій — з четвертим і т.д. Виходить, ніби легка "бульбашка" спливає у важкій рідині. Після досягнення кінця циклу можна бути впевненим, що останній елемент — найбільший; після цього спливає нова "бульбашка" і т.д., доки весь масив не буде впорядкованим. Ось повний код програми: Program Bulbashka; var arr:array[1..10] of integer; i,j,t:integer; begin writeln('Введіть елементи масиву'); for i:=1 to 10 do readln(arr[i]);

for i:=1 to 9 do begin for j:=1 to 10-i do begin if arr[j] > arr[j + 1] then begin t := arr[j]; arr[j] := arr[j + 1]; arr[j + 1] := t; end; end; end;

writeln('Відсортований масив:'); for i:=1 to 10 do write(arr[i],', '); end. Зверніть увагу: для вводу і виводу ми скористалися наведеними вище фрагментами коду; t - тимчасова змінна, потрібна для обміну значень; на організацію вкладених циклів; на розставляння операторних дужок begin-end у вкладених циклах. Чи всі вони потрібні? Без яких можна обійтися? Яка програма легше сприймається — з ними чи без них?

Завдання

1. Введіть масив на 5 елементів, запитуючи кожен елемент окремим запрошенням, на кшталт Введіть A = 3 Введіть A = 765 Введіть A = _ і виведіть його, нумеруючи елементи: A = 3 A = 765 A= 32 ...