- оголошення масиву
- ініціалізація масиву
- Висновок елементів масиву
- Функція Random в Pascal
- Числа Фібоначчі в Паскалі
- Максимальний (мінімальний) елемент масиву
- Пошук в масиві
- циклічний зсув
- Перестановка елементів в масиві
- Вибір елементів і збереження в інший масив
- Сортування елементів масиву
Наша взаимовыгодная связь https://banwar.org/
На занятті пояснюється, як працювати з одновимірними масивами в Паскалі, як використовувати генератор випадкових чисел - функцію random в Паскалі. Розглядається приклад того, як вивести числа Фібоначчі
Матеріали сайту labs-org.ru спрямовані на практичне освоєння мови програмування Pascal. Короткі теоретичні відомості не претендують на повне висвітлення матеріалу по темі; необхідну інформацію можна знайти в мережі Інтернет у великій кількості. У наші ж завдання входить надання можливості отримання практичних навичок програмування на Паскалі. Вирішені наочні приклади і завдання викладені в міру збільшення їх складності, що дозволить з легкістю вивчити матеріал з нуля.
оголошення масиву
Масиви в Паскалі використовуються двох типів: одномірні і двовимірні.
Визначення одновимірного масиву в Паскалі звучить так: одновимірний масив - це певна кількість елементів, що відносяться до одного і того ж типу даних, які мають одне ім'я, і кожен елемент має свій індекс - порядковий номер.
Опис масиву в Паскалі (оголошення) і звернення до її елементів відбувається наступним чином:
оголошення масиву
var dlina: array [1 .. 3] of integer; begin dlina [1]: = 500; dlina [2]: = 400; dlina [3]: = 150; ...
var dlina: array [1..3] of integer; begin dlina [1]: = 500; dlina [2]: = 400; dlina [3]: = 150; ...
Оголосити розмір можна через константу:
ініціалізація масиву
Крім того, масив може бути сам сталою, тобто всі його елементи в програмі заздалегідь визначені. Опис такого масиву виглядає наступним чином:
const a: array [1 .. 4] of integer = (1, 3, 2, 5);
const a: array [1..4] of integer = (1, 3, 2, 5);
Заповнення послідовними числами:
Введення з клавіатури:
Приклад: Розглянемо, як відбувається введення масиву в Паскалі:
writeln ( 'введіть кількість елементів'); readln (n); {Якщо кількість заздалегідь не відомо, - запитуємо його} for i: = 1 to n do write ( 'a [', i, '] ='); read (a [i]); ...
writeln ( 'введіть кількість елементів'); readln (n); {Якщо кількість заздалегідь не відомо, - запитуємо його} for i: = 1 to n do write ( 'a [', i, '] ='); read (a [i]); ...
Висновок елементів масиву
Приклад: Розглянемо, як вивести масив в Паскалі:
1 2 3 4 5 6 7 8 9 10 11 12 13 var a: array [1 .. 5] of integer; {Масив з п'яти елементів} i: integer; begin a [1]: = 2; a [2]: = 4; a [3]: = 8; a [4]: = 6; a [5]: = 3; writeln ( 'Масив A:'); for i: = 1 to 5 do write (a [i]: 4); {Висновок елементів масиву} end.
var a: array [1..5] of integer; {Масив з п'яти елементів} i: integer; begin a [1]: = 2; a [2]: = 4; a [3]: = 8; a [4]: = 6; a [5]: = 3; writeln ( 'Масив A:'); for i: = 1 to 5 do write (a [i]: 4); {Висновок елементів масиву} end.
Для роботи з масивами найчастіше використовується в Паскалі цикл for з параметром, так як зазвичай відомо, скільки елементів в масиві, і можна використовувати лічильник циклу в якості індексів елементів.
В даному прикладі роботи з одновимірним масивом є явне незручність: присвоювання значень елементам.
Обробка масивів в Паскалі, так само як і заповнення масиву, відбувається зазвичай з використанням циклу for.
Функція Random в Pascal
Для того щоб постійно не запитувати значення елементів масиву використовується генератор випадкових чисел в Паскаль, який реалізується функцією Random. Насправді генеруються псевдовипадкові числа, але суть не в цьому.
Для генерації чисел від 0 до n (не включаючи саме значення n, цілі числа в інтервалі [0, N)) використовується запис random (n).
Перед використанням функції необхідно ініціалізувати датчик випадкових чисел за допомогою процедури randomize.
Діапазон в Паскалі тих самих випадкових чисел від a до b задається формулою:
Приклад: Заповнення масиву випадковими числами в Pascal:
1 2 3 4 5 6 7 8 9 10 var f: array [1 .. 10] of integer; i: integer; begin randomize; for i: = 1 to 10 do begin f [i]: = random (10); {Інтервал [0,9]} write (f [i], ''); end; end.
var f: array [1..10] of integer; i: integer; begin randomize; for i: = 1 to 10 do begin f [i]: = random (10); {Інтервал [0,9]} write (f [i], ''); end; end.
Для дійсних чисел в інтервалі [0,1):
var x: real; ... x: = random; {Інтервал [0,1)}
var x: real; ... x: = random; {Інтервал [0,1)}
Завдання Array 1. Необхідно задати масив розмірністю 5, заповнити масив випадковими числами в інтервалі [-1,1] і вивести елементи на екран: визначити три позиції для виведення кожного елемента.
Числа Фібоначчі в Паскалі
Найбільш поширеним прикладом роботи з масивом є висновок ряду чисел Фібоначчі в Паскаль. Розглянемо його.
Приклад: Ряд чисел Фібоначчі: 1 1 2 3 5 8 13 ...
f [0]: = 1; f [1]: = 1; f [2]: = 2; ...
f [0]: = 1; f [1]: = 1; f [2]: = 2; ...
або
f [2]: = f [0] + f [1]; f [3]: = f [1] + f [2];
f [2]: = f [0] + f [1]; f [3]: = f [1] + f [2];
або
Приклад: Обчислити і надрукувати перші 20 чисел Фібоначчі.
1 2 3 4 5 6 7 8 9 10 11 var i: integer; f: array [0 .. 19] of integer; begin f [0]: = 1; f [1]: = 1; for i: = 2 to 19 do begin f [i]: = f [i - 1] + f [i - 2]; writeln (f [i]) end; end.
var i: integer; f: array [0..19] of integer; begin f [0]: = 1; f [1]: = 1; for i: = 2 to 19 do begin f [i]: = f [i-1] + f [i-2]; writeln (f [i]) end; end.
На даному прикладі, стає зрозумілий принцип роботи з числовими рядами. Зазвичай, для виведення числового ряду знаходиться формула визначення кожного елемента даного ряду. Так, у випадку з числами Фібоначчі, ця формула-правило виглядає як f [i]: = f [i-1] + f [i-2]. Тому її необхідно використовувати в циклі for при формуванні елементів масиву.
Завдання Array 2. Дан ряд з 10 довільних чисел: a [1], a [2], ..., a [10]. Підрахувати і надрукувати суми трійок стоять поруч чисел: a [1] + a [2] + a [3], a [2] + a [3] + a [4], a [3] + a [4] + a [5], ......, a [8] + a [9] + a [10]
Завдання Array 3.
Написати програму вирішення задачі про друк ряду чисел 2 4 8 16 32 ... 512; для заповнення масиву використовувати цикл Repeat
Максимальний (мінімальний) елемент масиву
псевдокод:
Пошук максимального елемента по його індексу:
Завдання: Знайдіть мінімальний елемент масиву
Завдання Array 4. Дан масив з 10 цілочисельних елементів. Знайти кількість негативних і вивести кількість на екран.
Завдання Array 5. Знайти мінімальне і максимальне з n введених чисел (масиву) і їх індекси.
Завдання Array 6. Дан цілочисельний масив розміру N. Вивести все що містяться в даному масиві парні числа в порядку убування їх індексів, а також їх кількість K.
Завдання Array 7.Ввести з клавіатури масив з 5 елементів, знайти в ньому два максимальних елемента і їх номери.
приклад:
Вихідний масив: 4 -5 10 -10 5 максимальні A [3] = 10, A [5] = 5
Пошук в масиві
Розглянемо складніший приклад роботи з одновимірними масивами:
Приклад: Дан масив з 10 чисел. Визначити, чи є в масиві число, введене користувачем. Якщо є - виводити «знайдено», якщо немає - "не знайдено».
Для вирішення поставленого завдання знадобиться оператор break - вихід з циклу.
Рішення Варіант 1: Показати рішення 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var f: array [1 .. 10] of integer; flag: boolean; i, c: integer; begin randomize; for i: = 1 to 10 do begin f [i]: = random (10); write (f [i], ''); end; flag: = false; writeln ( 'введіть зразок'); readln (c); for i: = 1 to 10 do if f [i] = c then begin writeln ( 'знайдений'); flag: = true; break; end; if flag = false then writeln ( 'не найден'); end.
var f: array [1..10] of integer; flag: boolean; i, c: integer; begin randomize; for i: = 1 to 10 do begin f [i]: = random (10); write (f [i], ''); end; flag: = false; writeln ( 'введіть зразок'); readln (c); for i: = 1 to 10 do if f [i] = c then begin writeln ( 'знайдений'); flag: = true; break; end; if flag = false then writeln ( 'не найден'); end.
Розглянемо ефективне рішення:
Завдання: знайти в масиві елемент, рівний X, або встановити, що його немає.
алгоритм:
- почати з 1-го елемента (i: = 1);
- якщо черговий елемент (A [i]) дорівнює X, то закінчити пошук інакше перейти до наступного елементу.
рішення на Паскалі:
Пошук елемента в масиві
Пропонуємо подивитися детальний відео розбір пошуку елемента в масиві (ефективний алгоритм):
Завдання Array 8.Заповнити масив з 10 елементів випадковими числами в інтервалі [0..4] і вивести номери всіх елементів, рівних X.
приклад:
Вихідний масив: 4 0 1 2 0 1 3 4 1 0 Що шукаємо? 0 A [2], A [5], A [10]
циклічний зсув
Рішення:Алгоритм:
A [1]: = A [2]; A [2]: = A [3]; ... A [N-1]: = A [N];
програма:
Заповнити масив з 10 елементів випадковими числами в інтервалі [-10..10] і виконати циклічний зсув вліво без першого елемента.
Приклад: Вихідний масив: 4 -5 3 10 -4 -6 8 -10 1 0 Результат: 4 3 10 -4 -6 8 -10 1 0 -5
Перестановка елементів в масиві
Розглянемо, як відбувається перестановка або реверс масиву.
Рішення:
Завдання Array 10. Заповнити масив з 10 елементів випадковими числами в інтервалі [-10..10] і зробити реверс всіх елементів, крім останнього.
Приклад: Вихідний масив: -5 3 10 -4 -6 8 -10 1 0 4 Результат: 0 1 -10 8 -6 -4 10 3 -5 4
Вибір елементів і збереження в інший масив
Рішення:
Рішення:
підраховувати кількість знайдених елементів за допомогою лічильника count, черговий елемент встановлювати на місце B [count]. Зміною count необхідно присвоїти 1.
Висновок масиву B:
Завдання Array 11.
Заповнити масив випадковими числами в інтервалі [20,100] і записати в інший масив все числа, які закінчуються на 0.
Приклад: Вихідний масив: 40 57 30 71 84 Закінчуються на 0: 40 30
Сортування елементів масиву
Сортування методом «Бульбашки»
- У такому типі угруповань масив представляється у вигляді води, маленькі елементи - бульбашки у воді, які спливають наверх (найлегші).
- При першій ітерації циклу елементи масиву попарно порівнюються між собою: передостанній з останнім, перед передостанній з передостаннім і т.д. Якщо попередній елемент виявляється більше подальшого, то проводиться їх обмін.
- При другій ітерації циклу немає потреби порівнювати останній елемент з передостаннім. Останній елемент вже стоїть на своєму місці, він найбільший. Значить, число порівнянь буде на одне менше. Те ж саме стосується кожної наступної ітерації.
Виконання на Паскалі:
1 2 3 4 5 6 7 8 for i: = 1 to N - 1 do begin for j: = N - 1 downto i do if A [j]> A [j + 1] then begin з: = A [j] ; A [j]: = A [j + 1]; A [j + 1]: = с; end; end;
for i: = 1 to N-1 do begin for j: = N-1 downto i do if A [j]> A [j + 1] then begin з: = A [j]; A [j]: = A [j + 1]; A [j + 1]: = с; end; end;
Завдання Array 112Заповнити масив з 10 елементів випадковими числами в інтервалі [0..50] і впорядкувати першу половину масиву по зростанню, а другу - по спадаючій. Приклад: Вихідний масив: 14 25 13 30 76 58 32 11 41 97 Результат: 13 14 25 30 76 97 58 41 32 11
Сортування методом вибору
- в масиві шукається мінімальний елемент і ставиться на перше місце (міняється місцями з A [1]);
- серед решти елементів також проводиться пошук мінімального, який ставиться на друге місце (міняється місцями з A [2]) і т.д.
Виконання на Паскалі:
1 2 3 4 5 6 7 8 9 10 for i: = 1 to N - 1 do begin min: = i; for j: = i + 1 to N do if A [j] <A [min] then min: = j; if min <> i then begin c: = A [i]; A [i]: = A [min]; A [min]: = c; end; end;
for i: = 1 to N-1 do begin min: = i; for j: = i + 1 to N do if A [j] <A [min] then min: = j; if min <> i then begin c: = A [i]; A [i]: = A [min]; A [min]: = c; end; end;
Завдання Array 13:Заповнити масив з 10 елементів випадковими числами в інтервалі [0..50] і впорядкувати його по зростанню суми цифр Приклад: Вихідний масив: 14 25 13 12 76 58 21 87 10 98 Результат: 10 21 12 13 14 25 76 58 87 98
Швидке сортування або quick sort
алгоритм:
- Вибирається і запам'ятовується середній елемент масиву (дамо X):
- Ініціалізіруем дві змінні (майбутні індекси масиву): L: = 1, R: = N (N - кількість елементів).
- Збільшуємо L і шукаємо перший елемент A [L], який більше або дорівнює X (в результаті він повинен знаходитися праворуч).
- Зменшуємо R і шукаємо елемент A [R], який менше або дорівнює X (в результаті він повинен знаходитися зліва).
- Дивимося, якщо L
Виконання на Паскалі:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 procedure QSort (first, last: integer); var L, R, c, X: integer; begin if first <last then begin X: = A [(first + last) div 2]; L: = first; R: = last; while L <= R do begin while A [L] <X do L: = L + 1; while A [R]> X do R: = R - 1; if L <= R then begin c: = A [L]; A [L]: = A [R]; A [R]: = c; L: = L + 1; R: = R - 1; end; end; QSort (first, R); QSort (L, last); end; end.
procedure QSort (first, last: integer); var L, R, c, X: integer; begin if first <last then begin X: = A [(first + last) div 2]; L: = first; R: = last; while L <= R do begin while A [L] <X do L: = L + 1; while A [R]> X do R: = R - 1; if L <= R then begin c: = A [L]; A [L]: = A [R]; A [R]: = c; L: = L + 1; R: = R - 1; end; end; QSort (first, R); QSort (L, last); end; end.
Завдання Array 14:
Заповнити масив з 10 елементів випадковими числами в інтервалі [-50..50] і впорядкувати його за допомогою алгоритму швидкого сортування.