Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція по масивам.doc
Скачиваний:
4
Добавлен:
24.11.2019
Размер:
204.29 Кб
Скачать

Малюнок 5.1

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

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

  • тип-масив (array);

  • тип-множина(set);

  • тип запис (record);

  • файловий тип (file).

5.1 Масиви

Масиви - формальне об'єднання декількох однотипних об'єктів (чисел, символів, рядків і т.п.), що розглядається як єдине ціле. Необхідність використовувати масиви з'являється, коли потрібно зв'язати й використати цілий ряд споріднених величин.

Масиви (Array) - упорядкована структура однотипних даних, причому кількість компонентів фіксована. Її розмір не повинен перевищувати 64 Кб (розмір сегмента пам'яті). Тип компонента може бути структурний. Масиви можуть бути як одномірними, так і багатомірними.

Опис масиву:

1-й спосіб:

 

Type <ім'я типу> = Array [діапазон1,…,діапазон n] of <тип компонентів>;

…....

Var <ім'я змінної>: <ім'я типу>;

2-й спосіб:

Var <ім'я змінної> = Array [діапазон1, …,діапазон n] of <тип компонентів>;

Діапазон може бути будь-яким типом, що розглядається, але він повинен належати до типу Word.

Масив - упорядкована множина однорідних елементів, якому дане одне загальне ім'я. Кожне число в масиві називається елементом.

5.2 Одномірні масиви

Одномірний масив складається з n елементів - це a1,a2,…,a n-являє собою рядок або стовпець. Елементи одномірного масиву позначаються a[i], де a - ім'я масиву, i - номер елемента в масиві.

 

Приклад. Географ передав набір значень температури, які знімалися протягом червня місяця. Необхідно обчислити:

а) середню температуру;

б) число днів, у яких температура була вище 23 градусів.

Набір температур утворить масив. Дамо цьому масиву ім'я t. Тоді масив t містить 30 елементів, при цьому кожен елемент являє собою температуру одного із днів червня.

Елементи масиву t можна записати в такому вигляді: t[1], t[2], t[3], t[4], ..., t[29], t[30].

Нижче показано, як призначаються елементи масиву для 30 чисел, які становлять червневі температури.

Дата

Температура

Елемент

1 ЧЕРВНЯ

15

t[1]

2 ЧЕРВНЯ

18

t[2]

3 ЧЕРВНЯ

23

t[3]

4 ЧЕРВНЯ

25

t[4]

5 ЧЕРВНЯ

24

t[5]

. . . . . .

. . . . . . .

. . . . . .

29 ЧЕРВНЯ

20

t[29]

30 ЧЕРВНЯ

21

t[30]

Наприклад, значення елемента t[3]=23, а значенню елемента t[29]=20. Важливо пам'ятати, що елементи t[1], t[2], t[3], ..., t[30] є просто окремими числами.

uses WinCrt; var t : array[1..30] of integer; {опис масиву} i, k : integer;{i- лічильник, k - кількість днів для яких t>23} s : real; {s- середня температура} begin {введення масиву температур} for i := 1 to 30 do begin write('Введіть температуру в ',i,' - день '); readln(t[i]) end; s := 0; k := 0; for i := 1 to 30 do begin s:= s + t[i]; {обчислюємо сумарну температуру} if t[i] > 23 then k:= k + 1 end; s:=s/30; {обчислюємо середню температуру} writeln('Середня температура в червні ', s:4:2); writeln('Число днів з температурою більше 23 град. ', k) end.

Приклад. Необхідно ввести одномірний масив і перевірити, чи належать його елементи відрізку [a,b] і, якщо належать, запам'ятати їх номера й вивести на екран. Відрізок ввести із клавіатури.

uses wincrt; var x: array[1..20] of real; {опис вихідного масиву} nom: array[1..20] of integer; {опис масиву номерів елементів, що належать до заданого інтервалу} a, b: real; i, k, n: integer; begin k:=0; {кількість шуканих елементів} writeln('введіть відрізок [а,b], a < b:'); write('a='); readln(a); write('b='); readln(b); {введення вихідного масиву} write('розмір масиву n='); readln(n); writeln('введення масиву'); for i:=1 to n do begin read(x[i]); {введення N чисел у рядок через пробіл} if (x[i]>=a) and (x[i]<=b) then begin k:=k+1; {обчислюємо кількість} nom[k]:=i; {заповнюємо масив} end; end; write('кількість таких елементів:k=',k); writeln; write('їх номера: '); for i:=1 to k do write(' ',nom[i]); {друк нового масиву} end.

Приклад. Скласти програму перестановки m - го й k - го елементів одномірного масиву. Розглянемо вирішення задачі на конкретному прикладі.

Нехай заданий довільний масив чисел:

3, -12 , 45 , 16 , -23 , 4 , -5 , 76 , -34.

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

Користувач забажав, щоб були переставлені 5-й й 8-й елементи, тобто -23 й 76. Якщо виконати відразу команду присвоєння a[5] := a[8], то значення елемента a[5] буде "стерте" і загублено назавжди. Щоб цього не відбулося, потрібна ще одна команда, яка б "запам'ятовувала" значення одного з елементів, що переставляють. Нехай ця змінна з ім'ям p, тоді перестановка буде виглядати так:

p := a[5] - "запам'ятовується" 5 - й елемент,

a[5] := a[8] - на місце п'ятого елемента "ставиться" восьмий,

a[8] := p - на місце восьмого елемента "ставиться" п'ятий.

uses wincrt; var а: array[1..9] of real; {опис вихідного масиву} p: real; k, m,n: integer; begin writeln('введіть m , k:'); write('m='); readln(m); write('k='); readln(k); {введення вихідного масиву} write('розмір масиву n='); readln(n); writeln('введення масиву'); for i:=1 to n do read(a[i]); {введення N чисел у рядок через пробіл} p := a[k]; a[k]:= a[m]; a[m]:= p; for i:=1 to n do write(' ',a[i]); {друк нового масиву} writeln; end.

Приклад. Знайти максимальний елемент числового масиву A(20) і його номер.

Алгоритм: Нехай заданий деякий числовий масив (знову для простоти міркувань задамо масив чисел):

 

A

45

25

93

35

i

1

2

3

4

…...

 

На початку за найбільший елемент будемо вважати перший елемент і потім послідовно порівнюємо його з іншими елементами масиву, як тільки зустрітися елемент, більший максимального, то його (більший елемент, що зустрівся) вважаємо найбільшим і запам'ятовуємо його номер. Продовжуємо подальше порівняння до кінця масиву.

На нашому прикладі цей процес буде виглядати так: Приймаємо за найбільший -А(1) (max=45, im=1) і порівнюємо його з наступними елементами А(2)> max (25>45-?) (немає), ідемо далі; A(3)>max (93>45-?) (так) - за найбільший приймаємо A(3) (max=93) і запам'ятовуємо його номер (im=3) продовжуємо порівняння; A(4)> max ((35>93-?)) (немає) і т.д. У результаті змінна мах буде дорівнює максимальному елементу, im- буде містити його номер.

uses wincrt; var а: array[1..9] of real; {опис вихідного масиву} max: real; i, im,n: integer; begin {введення вихідного масиву} write('розмір масиву n='); readln(n); writeln('введення масиву'); for i:=1 to n do read(a[i]); {введення N исел у рядок через пробіл} max:= a[1]; for i := 2 to n do if a[i]> max then begin max := a[i] ; im:=i; end; writeln('max=',max,'im=',im); end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]