Заповнити масив з клавіатури паскаль. Pascal. Одновимірні масиви. датчиком випадкових чисел

Головна / Оптимізація роботи

| §2.2 Одномірні масиви цілих чисел

Уроки 11 – 14
§2.2 Одномірні масиви цілих чисел
Опис, заповнення, виведення масиву
Обчислення суми елементів масиву
Послідовний пошук у масиві
Сортування масиву

Ключові слова:

Масив
опис масиву
заповнення масиву
виведення масиву
обробка масиву
послідовний пошук
сортування

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

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

З подібними об'єктами - числовими послідовностями- Ви вже зустрічалися під час уроків математики. Наприклад, члени арифметичної прогресії позначалися так: а 1, а 2, а 3, ..., а n.

Розмір масива - це кількість індексів, необхідне для однозначного доступу до елемента масиву. Масиви з одним індексом називають одновимірними, з двома - двовимірними і т. д. Ми розглядатимемо одномірні масиви.

Вирішення різноманітних завдань, пов'язаних з обробкою масивів, базується на використанні таких типових алгоритмів, як:

Підсумовування значень елементів масиву;
пошук елемента із заданими властивостями;
сортування масиву.

2.2.1. Опис масиву

Перед використанням у програмі масив має бути описаний, тобто має бути вказано ім'я масиву, кількість елементів масиву та їх тип. Це необхідно для того, щоб виділити ділянку пам'яті потрібного розмірудля зберігання масиву. Загальний вигляд опису одновимірного масиву:

приклад

Тут описаний масив а з 10 цілих значень. Під час виконання цього оператора в пам'яті комп'ютера буде виділено місце для зберігання десяти цілих змінних.

Масив, елементи якого мають задані початкові значення, може бути описаний у розділі опису констант:

В цьому випадку не просто виділяються послідовні осередки пам'яті - в них відразу ж заносяться відповідні значення.

2.2.2. Заповнення масиву

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

Наприклад, для введення з клавіатури значень елементів описаного вище масиву використовується наступний цикл з параметром:

Задавати значення елементів масиву можна за допомогою оператора присвоєння. Наприклад:

У наступному фрагменті програми організовано заповнення цілого масиву а, що складається з 10 елементів, випадковими числами, значення яких змінюються в діапазоні від 0 до 99:

2.2.3. Виведення масиву

У багатьох випадках корисно вивести значення елементів масиву на екран. Так, якщо значення масиву генерувалися випадковим чином, необхідно знати, який вихідний масив. Також слід знати, яким став масив після обробки.

Значення елементів масиву можна вивести в рядок, розділивши їх пробілом:

Наочнішим є наступний варіант виведення елементів масиву з поясненнями в стовпчик:

На підставі розглянутих прикладів запишемо програму, в якій здійснюється: заповнення цілісного масиву а , Що складається з 10 елементів, випадковими числами, значення яких змінюються в діапазоні від 0 до 99; виведення масиву а на екрані.


2.2.4. Обчислення суми елементів масиву

приклад. У деякому населеному пунктія будинків. Відомо, скільки людей проживає у кожному з будинків. Складемо алгоритм підрахунку кількості жителів населеного пункту.

Вихідні дані (кількість мешканців) тут представлені за допомогою одновимірного масиву а , що містить n елементів: a - кількість мешканців будинку 1, а - кількість мешканців будинку 2, ..., а [n] - кількість мешканців будинку n. У загальному випадку a[i] - кількість мешканців будинку n, де i набуває цілих значень від 1 до n (коротко позначимо це в блок-схемі як ). Результат роботи алгоритму позначено через s.

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

1) визначається комірка пам'яті (змінна s), в якій буде послідовно накопичуватися результат підсумовування;
2) змінної s надається початкове значення 0 - число, що не впливає на результат додавання;
3) для кожного елемента масиву із змінної s зчитується її поточне значення та складається зі значенням елемента масиву; отриманий результат присвоюється змінною s.

Описаний процес наочно можна зобразити так:

Запишемо відповідну програму мовою Паскаль.

Порівняйте програми n_2 та n_3. Виділіть у них загальні блоки. Зверніть увагу на відмінності.

Яким чином у програмі n_3 уточнено інформацію, наведену в прикладі про будинки населеного пункту?

2.2.5. Послідовний пошук у масиві

У програмуванні пошук- одне з найпоширеніших завдань необчислювального характеру.

Можна виділити такі типові завдання пошуку:

1) знайти найбільший (найменший) елемент масиву;

2) знайти елемент масиву, значення якого дорівнює заданому значенню.

Для вирішення таких завдань у програмі необхідно організувати послідовний перегляд елементів масиву і порівняння значення чергового елемента з деяким зразком.

Розглянемо докладно розв'язання задач першого типу: знаходження найбільшого (найменшого) елемента.

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

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

2) візьмемо наступну картку; порівняємо числа, записані на картці та на дошці; якщо число на картці більше, то зітремо число, записане на дошці, і запишемо там же число, що і на картці; якщо ж нове число не більше, то на дошці залишимо наявний запис; приберемо картку убік;

3) повторимо дії, описані в п. 2, для всіх карток, що залишилися в стосі.

У результаті на дошці буде записано найбільше значення елемента переглянутого масиву.

У програмуванні під час обґрунтування коректності циклічних алгоритмів використовується поняття інваріанту циклу.

Інваріант циклу - логічний вираз(Умова), що залежить від змінних, що змінюються в тілі циклу; воно істинно безпосередньо перед початком виконання циклу та після кожного проходу тіла циклу.

Умова «записане на дошці число – найбільша з усіх переглянутих досі» є інваріантом циклу для розглянутого алгоритму.

Оскільки доступ до значення елемента масиву здійснюється за його індексом, при організації пошуку найбільшого елемента в одновимірному масиві можна шукати його індекс. Позначимо шуканий індекс imax. Тоді описаний вище алгоритм у сформованому нами масиві а мовою Паскаль можна записати так:

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

Результатом розв'язання задачі другого типу (знаходження елемента масиву, значення якого дорівнює заданому значенню) може бути:

K - індекс елемента масиву такий, що a[k] = х де х - задане число;
повідомлення про те, що елемента в масиві не виявлено.

Програма пошуку у сформованому нами масиві а значення, що дорівнює х, може виглядати так:

У цій програмі послідовно проглядаються всі елементи масиву. Якщо масиві кілька елементів, значення яких дорівнюють заданому числу, то програма знайде останній їх.

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

Тут виконання алгоритму буде перервано в одному з двох випадків: 1) у масиві знайдено перший із елементів, що дорівнює заданому; 2) всі елементи масиву переглянуті.

Запишіть повний текст програми та виконайте її на комп'ютері.

Найчастіше потрібно визначити кількість елементів, що задовольняють певну умову. У цьому випадку вводиться змінна, значення якої збільшується на одиницю щоразу, коли знайдено потрібний елемент.

Визначте кількість яких елементів підраховується за допомогою наступного фрагмента програми.

Якщо потрібно визначити суму значень елементів, що задовольняють певну умову, то вводять змінну, до якої додають значення знайденого елемента масиву.

Визначте, якою умовою задовольняють елементи масиву, значення яких сумуються за допомогою наступного фрагмента програми.

Запишіть повні тексти двох останніх програм та виконайте їх на комп'ютері.

2.2.6. Сортування масиву

Під сортуванням (упорядкуванням) масиву розуміють перерозподіл значень його елементів у певному порядку.

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

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

Мета сортування – полегшити подальший пошук елементів: шукати потрібний елемент у впорядкованому масиві легше.

Ви вже зустрічалися із сортуванням під час роботи з базами даних. Зараз ми розглянемо один із можливих варіантів 1 реалізації механізму цієї операції – сортування вибором.

1 З іншими способами сортування ви познайомитеся на уроках інформатики у 10-11 класах.


Сортування вибором (наприклад, по незростанню) здійснюється так:

1) у масиві вибирається максимальний елемент;
2) максимальний та перший елементи змінюються місцями; перший елемент вважається відсортованим;
3) у невідсортованій частині масиву знову вибирається максимальний елемент; він змінюється місцями із першим невідсортованим елементом масиву;
4) дії, описані у п. 3, повторюються з невідсортованими елементами масиву доти, доки не залишиться один невідсортований елемент (його значення буде мінімальним).

Розглянемо процес сортування вибором з прикладу масиву а = (0, 1, 9, 2, 4, 3, б, 5).

У цьому масиві із 8 елементів операцію вибору максимального елемента ми проводили 7 разів. У масиві п елементів така операція буде проводитися n - 1 раз. Поясніть, чому.

Наведемо фрагмент програми, що реалізує описаний алгоритм:

Тут ми використали один цикл усередині іншого. Така конструкція називається вкладеним циклом.

Запишіть повний текст програми та виконайте її на комп'ютері для розглянутого в прикладі масиву а.

2.2.7. Інші структури даних

Багато сучасних додатків (діалогові, мережеві, інструментальні системи, операційні системи та ін.) працюють з даними, обсяг яких заздалегідь не може бути обмежений певною величиною. Припустимо, розробляється великий програмний комплекс, при роботі якого в оперативної пам'ятізберігатиметься велика кількість різних даних, представлених у формі масивів. Область пам'яті, що відводиться кожному масиву, безперервна; межі області під час виконання програми суворо фіксовано. Так як обсяг даних заздалегідь невідомий, програмістам доведеться вказувати максимально можливі розміри масивів, що використовуються. Внаслідок цього для зберігання всіх можливих даних може виявитися недостатньо доступною пам'яті. При цьому на практиці вкрай рідко зустрічатимуться ситуації, коли кожен масив буде повністю заповнений – у багатьох із них частина зарезервованої пам'яті залишатиметься вільною. Жорсткі кордони неможливо перерозподіляти порожній простір одних масивів на користь інших. Як результат – неефективне використання оперативної пам'яті. Виходом у цій ситуації є заміна при проектуванні програми деяких масивів на списки, які займають саме стільки пам'яті, скільки дійсно потрібно зараз, і не створюють жодних запасів.

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

Лінійний однозв'язковий список - послідовність лінійно зв'язаних елементів, для яких дозволені операції додавання елемента довільне місце списку та видалення будь-якого елемента.

У лінійному списку кожного елемента, крім першого, є попередній елемент; для кожного елемента, крім останнього є наступний елемент. Таким чином, усі елементи списку упорядковані (рис. 2.3).

Рис. 2.3. Лінійний список


У лінійному списку можна обійти всі елементи лише рухаючись послідовно від поточного елемента до наступного, починаючи з першого. Прямий доступ до i елементу неможливий; список – структура з послідовним доступом. На відміну від списку, масив є структурою з довільним доступом.

НАЙГОЛОВНІШЕ

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

Перед використанням у програмі масив має бути описаний. Загальний вигляд опису одновимірного масиву:

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

При розв'язанні різноманітних завдань, пов'язаних із обробкою масивів, використовуються такі типові алгоритми, як: підсумовування елементів масиву; пошук елемента із заданими властивостями; сортування масиву.

Запитання та завдання

1. Ознайомтеся з матеріалами презентації до параграфа, що міститься в електронному додаткудо підручника. Якими слайдами Ви могли б доповнити презентацію?

2. Чи може масив одночасно містити цілі та речові значення?

3. Для чого необхідний опис масиву?

4. Що ви можете сказати про масив, сформований наступним чином?

а) for i:=l to 10 do a[i]:=random(101)-50;
б) for i:=l to 20 do a[i]:=i;
в) for i:=l to 5 do a[i]:=2*i-l;

5. Виконайте на комп'ютері програму розв'язання задачі, розглянутої на прикладі пункту 2.2.4. Вважайте кількість мешканців будинку випадковим числом із діапазону від 50 до 200 осіб, а число будинків n = 30.

6. Поруч із вами знаходяться два кошики. Перша наповнена яблуками різних розмірів, друга – порожня.

Крок 1. Ви берете будь-яке яблуко з першого кошика і кладете його на стіл перед собою.

Крок 2. Ви дістаєте наступне яблуко з першого кошика та виконуєте порівняння:

Якщо яблуко в руках більше, ніж яблуко на столі, то ви опускаєте яблуко, яке у вас у руках, у другий кошик;
- якщо яблуко в руках менше яблука на столі, ви кладете яблуко на стіл, а яблуко, яке лежало на столі, перекладаєте у другий кошик.

Ви повторюєте крок 2 до тих пір, поки перший кошик не спорожніє.

Яке яблуко опиниться на столі наприкінці? Спробуйте сформулювати, що інваріантом циклу в наведеному алгоритмі. Сформулюйте умову завдання із використанням термінології, розглянутої у цьому параграфі.

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

8. Даний масив із десяти цілих чисел. Напишіть програму підрахунку кількості елементів масиву, що мають максимальне значення.

9. У класі 20 учнів писали диктант з російської. Напишіть програму, яка підраховує кількість двійок, трійок, четвірок та п'ятірок, отриманих за диктант.

10. Оголошено набір до шкільної баскетбольної команди. Відомий зростання кожного з п учнів, які бажають потрапити до цієї команди. Складіть алгоритм підрахунку кількості претендентів, які мають шанс потрапити в команду, якщо зростання гравця команди має бути не менше 170 см. Запишіть програму на мові Паскаль. Вважайте зростання претендента до команди випадковим числом з діапазону від 150 до 200 см, а число претендентів n = 50.

11. У цілих масивах а і b містяться довжини катетів десяти прямокутних трикутників (а[i] - довжина першого катета, b[i] - довжина другого катета i-ro трикутника). Напишіть програму, яка за наявними даними визначить трикутник із найбільшою площею та виведе його номер, довжини катетів та площу. Передбачте випадок, коли таких трикутників є кілька.

12. Занесіть інформацію про десять європейських країн у масиви n (назва країни), k (чисельність населення), s (площа країни). Напишіть програму, яка виводить назви країн у порядку зростання щільності їхнього населення.

13. Знайдіть інформацію про такі окремі випадки списку, як стек і черга. Підготуйте коротке повідомлення.

1 Спосіб (заповнення з клавіатури. Динамічнийвведенняданих)

M:array of integer;

For I:=1 To 10 Do Begin

Write("Введіть ",I," значення ");

2 Спосіб (з використанням генератора випадкових чисел)

M: array of integer;

For I:=1 To 25 Do Begin

M[I]:=Random(50);

3 Спосіб (Статичне введення даних)

M: array of integer = (31,28,31,30,31,30,31,31,30,31,30,31);

For I:=1 To 9 Do

1.4 Приклади розв'язання задач

1. Алгоритми пошуку та присвоєння значень елементам масиву

1. Скласти програму обробки масиву розмірністю n заповненого цілими числами, введеними з клавіатури. Вивести індекси та значення позитивних елементів масиву.

A:ARRAY OF INTEGER;

(Заповнення масиву)

FOR I:=1 TO N DO Begin

Write("Введіть ",I," елемент масиву "); ReadLn(A[I]);

(Обробка елементів масиву)

FOR I:=1 TO N DO

IF A[I]>0 THEN WriteLn("Позитивний елемент = ",A[I]," його індекс = ",I);

2. Скласти програму обчислення та друку значень функції Y=sin(x-1)/2x. Значення аргументів задати масиві X, що складається з 6 елементів. Значення функції записати масив Y.

X,Y:ARRAY OF REAL;

FOR I:=1 TO 6 DO Begin

Write("Введіть ",I," значення аргументу "); ReadLn(X[I]);

FOR I:=1 TO 6 DO Begin

Y[I]:=SIN(X[I]-1)/(2*X[I]);

WriteLn(" X = ", X [I]: 4:1, "Y =", Y [I]: 5: 2);

3. Даний масив M, що складається із 30 елементів. Елементи масиву – довільні цілі числа. Видати на екран значення кожного п'ятого та позитивного елемента. Вказані елементи видати у рядок.

M:ARRAY OF INTEGER;

ClrScr; Randomize;

WriteLn(" Значення елементів масиву");

FOR I:=1 TO 30 DO Begin

M[I]:=Random(20)-4; Write(M[I]:3);

WriteLn(" Значення кожного п'ятого та позитивного елемента масиву");

While I<=30 DO Begin

IF M[I] > 0 THEN Write(M[I]:3);

Приклади для самостійного вирішення:

    Даний одновимірний масив розмірністю 10, заповнений цілими числами, введеними з клавіатури, і величина N. Негативні елементи замінити на N. Змінений масив вивести на екран одним рядком.

    Дано одномірний масив розмірністю N, заповнений випадковими числами в інтервалі від -15 до 20. Вивести на екран значення елементів масиву, абсолютне значення яких >10.

    Дано одномірний масив розмірністю N, заповнений випадковими числами. Кожен третій елемент масиву звести квадрат, якщо елемент негативний. Змінений масив вивести на екран.

    Скласти програму обчислення та друкування значень функції Y=(sinx+1)cos4x. Значення аргументів задати масиві X, що складається з 10 елементів. Значення функції записати масив Y.

    З елементів масиву А, що складається з 25 елементів, сформувати масив D тієї ж розмірності за правилом: перші 10 елементів перебувають за формулою Di=Ai+i, інші - за формулою Di=Ai-i.

Дізнаємося поняття масиву, способи організації масивів в алгоритмах та програмах, способи заповнення масивів, типи та розміри масивів. Вчимося вирішувати найпростіші завдання, задачі на пошук елементів, що відповідають умові.

Мета уроку: дати поняття масиву, способів організації масивів в алгоритмах і програмах, способи заповнення масивів, типи та розміри масивів, навчитися вирішувати найпростіші задачі, задачі на пошук елементів, що відповідають умові, показати рішення задач на сортування масивів.

Хід уроку:

1. Пояснення нового матеріалу:

Для вирішення завдань накопичення та обробки даних в ЕОМ важливу роль відіграють масиви та послідовності даних, що розміщуються в оперативній пам'яті або на магнітних носіях інформації.

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

Для позначення окремих елементів масивах необхідно вказувати індекси.

Опис масивів:

  • Тип (повторення типів змінних, аналогія з масивами: речовий, цілий %, символьний $, логічний)
  • Розміри масивів (одномірний-лінійний, двовимірний-прямокутний і т. д.)

Оскільки масивах зберігаються сукупності даних, їх обробка виробляється з допомогою циклів.

алг"Таблиця множення"
поч
від K=1 до 9 цикл
від L=1 до 9 цикл
T=K*L
кцикл
кцикл
кін

T-двовимірний масив (цикл у циклі)
L-формує рядки-внутрішній цикл
К-змінює індекс рядків

алг"виведення таблиці множення"
поч
від K=1 до 9 цикл
від L=1 до 9 цикл
Висновок T
Кцикл
Висновок (новий рядок)
кцикл
кін

внутрішній цикл організує виведення рядків
зовнішній-формує таблицю (стовпці)

Способи заповнення масивів

  1. з клавіатури
  2. переписування інформації, що зберігається на МГД
  3. формулою
  4. датчиком випадкових чисел
  5. data, read

Табличні величини

Одновимірний масив відповідає переліку, двовимірний- таблиці. Перш ніж їх використовувати в програмі, необхідно вказати машині, щоб вона заздалегідь відвела місце.

Dim (dimension-розмір)

Dim(8) Dim(8, 15)

Відлік розмірності йде із нуля.

Dim ставиться на початку програми.

Способи заповнення масивів

1. з клавіатури

dim A(3,4)
for I=1 to 3
for j=1 to 4
input A(I,J)
next J,I

2. формулою

dim A(3)
for I=1 to 3
A(I)=cos(I)
next I

3. датчиком випадкових чисел

dim B(7)
for I=0 to 7
A(I)=int(rnd(1)*100+1)
next I

4. data, read

dim A$(4)
for I=1 to 4
read A$(I)
? A$(I)
next I
data Олена, Оля, Катя, Коля

д/з: конспекти

Масив у програмуванніє набором елементів одного типу (однотипних).

Розрізняють кілька видів масивів – одномірний(векторний) та багатовимірний.

Елементи в масиві характеризуються своїми іменами та порядковими номерами - індексами.

Індекс – це порядковий номер елемента у масиві.

У Паскалі кожному елементу надається один або кілька індексів, які описують положення елемента в масиві.

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

Синтаксис масиву Pascal такий:

Var a: array Of integer ;
Де:
1 – нижній індекс
10 – верхній індекс
A – ім'я змінної масиву
- Діапазон значень
Integer – тип даних
A[ i ] – звернення до елемента масиву Pascal

Тип елементів масиву може бути будь-яким допустимим типом Pascal, крім файлів (навіть масивом).

Приклад масиву: A = (1,-5,230,55,-88,0,100)

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

При описі масиву йде розподіл пам'яті, і компілятор повинен знати скільки пам'яті потрібно виділити під описаний масив.

Обмеження кількості індексів у масиві Pascal не обмежується. Однак сам масив не повинен бути більшим ніж 65537 байт.

Масив також можна оголошувати у розділі опису типів:

Type mass = array Of real; Var a, b, c: mass;
Доступ до елементів масиву здійснюється у циклі.

Найбільш раціональним способом обробки елементів масиву Паскаль є оператор циклу з параметром.

Як думаєте, чому? Та тому, що нам відома кінцева кількість елементів у масиві.

Алгоритми заповнення масиву в Pascal

  1. Введення елементів масиву за допомогою комп'ютера здійснюється за допомогою такої конструкції:

    For i:= 1 To 10 Do read(A[i]);

  2. Завдання масиву випадково.

    Масив можна встановити випадковим чином за допомогою датчика випадкових величин.

    Для запуску датчика випадкових величин Паскаль потрібно прописати спеціальну конструкцію - Randomize;

    Нове значення генерується з допомогою функції Random(n) ,де n – ціле число. У такому разі генерується будь-яке число з діапазоном від 0 до n.

    K:= Random (100);
    Якщо функція Random використовується без параметра, вона генерує речовинне число (тип real) в діапазоні 0< X < 1

    X:= Random;

Заповнення масиву випадковим чином

Дана конструкція Pascal реалізує заповнення масиву випадково.

Randomize; For i:= 1 To 10 Do Begin A[i] := random*100-70 ; write(A[i]:6:2) ; End;

Досі ми працювали з простими типами даних - логічний (boolean), цілий (integer, word, byte, longint), речовий (real), символьний (char). Будь-який алгоритм можна запрограмувати за допомогою цих чотирьох основних типів. Але для обробки інформації про різноманітний реальний світ потрібні дані, що мають складнішу будову. Такі складні конструкції, засновані на найпростіших скалярних типах, називають структурами. Структура – ​​деякий складовий тип даних, складений із базових скалярних.Якщо структура не змінює своєї будови протягом усього виконання програми, де вона описана, то таку структуру називають статичною.

Масив – однорідна сукупність елементів

Найпоширенішою структурою, реалізованої практично переважають у всіх мовах програмування, є масив.

Масиви складаються з обмеженого числакомпонент, причому всі компоненти масиву мають той самий тип, званий базовим. Структура масиву завжди однорідна. Масив може складатися з елементів типу integer, real або char або інших однотипних елементів. З цього, щоправда, слід робити висновок, що компоненти масиву можуть мати лише скалярний тип.

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

Індекс масиву

Номер елементу масиву називається індексом. Індекс – це значення порядкового типу, визначеного як тип індексуданого масиву. Дуже часто це цілий тип (integer, word або byte), але може бути і логічний і символьний.

Опис масиву в Паскалі. У мові Паскаль тип масиву визначається з використанням спеціального слова array(англ. – масив), та його оголошення у програмі виглядає так:

Type< имя _ типа >= array [I] of T;

де I – тип індексу масиву, T – тип його елементів.

Можна описувати відразу змінні типумасив, тобто. у розділі опису змінних:

Var a, b: array [I] of T;

Зазвичай тип індексу характеризується деяким діапазоном значень будь-якого порядкового типу: I 1 .. I n . Наприклад, індекси можуть змінюватися в діапазоні 1..20 або "a".."n".

При цьому довжину масиву Паскаля характеризує вираз:

ord (I n)- ord (I 1)+1.

Ось, наприклад, оголошення двох типів: vector у вигляді масиву Паскаля з 10 цілих чисел і stroka у вигляді масиву з 256 символів:

Type
Vector=array of integer;
Stroka = array of char;

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

Опишемо змінні типу vector і stroka:

Обчислення індексу масиву Паскаля

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

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

Приклад програми з помилкою масиву Паскаля

Program primer _error;
Type
vector=array of word;
var
n: integer;
a: vector;
begin
n: = 45;
a:=25;
end.

Хоча ця програма повністю відповідає синтаксису мови, і транслятор "пропустить" її, на стадії виконання відбудеться помилка виходу за межі масиву Паскаля. При n =45 вираз n *2=90, комп'ютер зробить спробу звернутися до елемента масиву a але такого елемента немає, оскільки описаний масив розмірністю 80.

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

З цього слід зробити висновок: програмісту треба бути дуже акуратним при роботі з індексами масиву.

Основні дії з масивами Паскаля

Як відомо, визначення типу даних означає обмеження області допустимих значень, внутрішнє уявлення в ЕОМ, а також набір допустимих операцій над даними цього типу. Ми визначили тип даних як масив Паскаля. Які операції визначені над цим типом даних? Єдина дія, яку можна виконувати над масивами цілком, причому лише за умови, що масиви однотипні – це привласнення. Якщо у програмі описані дві змінні одного типу, наприклад,

Var
a, b: array of real;

то можна змінною aприсвоїти значення змінної b(a: = b). При цьому кожному елементу масиву aбуде присвоєно відповідне значення з масиву b. Всі інші дії над масивами Паскаля проводяться поелементно (це важливо!) .

Введення масиву Паскаля

Щоб ввести значення елементів масиву, необхідно послідовно змінювати значення індексу, починаючи з першого до останнього, і вводити відповідний елемент. Задля реалізації цих процесів зручно використовувати цикл із заданим числом повторень, тобто. простий арифметичний цикл, де параметром циклу виступатиме змінна – індекс масиву Паскаля. Значення елементів можуть бути введені з клавіатури або визначені оператором присвоєння.

Приклад фрагменту програми введення масиву Паскаля

Var
A: array of integer;
Begin
For i:=1 to 10 do
Readln (a[i]); (введення i-го елемента проводиться з клавіатури)

Розглянемо тепер випадок, коли масив Паскаля заповнюється автоматично випадковими числами, для цього використовуватимемо функцію random (N).

Приклад фрагмента програми заповнення масиву Паскаля випадковими числами

Var
I: byte; (Змінна I вводиться як індекс масиву)
Begin
For i:=1 to 10 do
A [i]: = random (10); ( i -му елементу масиву надається «випадкове» ціле число в діапазоні від 0 до 10)

Виведення масиву Паскаля

Виведення масиву Паскале здійснюється також поэлементно, в циклі, де параметром виступає індекс масиву, приймаючи послідовно всі значення від першого до останнього.

Приклад фрагмента програми виведення масиву Паскаля

Var
A: array of integer;
I: byte; (Змінна I вводиться як індекс масиву)
Begin
For i:=1 to 10 do
Write (a [i], ""); (Виведення масиву здійснюється в рядок, після кожного елемента друкується пробіл)

Висновок можна здійснити і в стовпчик із зазначенням відповідного індексу. Але в такому випадку потрібно враховувати, що при великій розмірності масиву всі елементи можуть не поміститися на екрані і відбуватиметься скролінг, тобто. при заповненні всіх рядків екрана друкуватиметься черговий елемент, а верхній зміщуватиметься за межі екрана.

Приклад програми виведення масиву Паскаля у стовпчик

Var
A: array of integer;
I: byte; (Змінна I вводиться як індекс масиву)
Begin
For i:=1 to 10 do
Writeln ("a[", i,"]=", a[i]); (виведення елементів масиву в стовпчик)

На екрані ми побачимо, наприклад, такі значення:

a =2
a =4
a = 1 і т.д.

Приклад розв'язання задачі з використанням масивів Паскаля

Завдання:дано два n-мірних вектора. Знайти суму цих векторів.

Рішення задачі:

  • Вхідними даними в цьому завданні будуть два одновимірні масиви. Розмір цих масивів то, можливо довільним, але певним. Тобто. ми можемо описати свідомо великий масив, а програмі визначити, скільки елементів реально використовуватиметься. Елементи цих масивів можуть бути цілими. Тоді опис буде виглядати так:

    var a, b: array of integer;

  • Вихідними будуть елементи результуючого масиву, назвемо його c . Тип результуючого масиву також має бути цілим.
  • Крім трьох масивів нам знадобиться змінна – параметр циклу та індекс масиву, назвемо її i, а також змінна n для визначення кількості елементів у кожному масиві.

Хід розв'язання задачі:

  • визначимо кількість елементів (розмірність) масивів, введемо значення n;
  • введемо масив a;
  • введемо масив b;
  • у циклі, перебираючи значення індексу i від 1 до n , послідовно обчислимо значення елементів масиву c за формулою:

    c [i] = a [i] + b [i];

  • виведемо на екран отриманий масив.

Текст програми:

Приклад програми підсумовування векторів

Program summa;
Var
a, b, c: array of integer;
I, n: byte;
Begin
Write ("введіть розмірність масивів:");
Readln(n);
For i:=1 to n do
Readln (a[i]); (Введення масиву a)
For i:=1 to n do
Readln (b [i]); (Введення масиву b)
For i:=1 to n do
C[i]:=a[i]+b[i]; (обчислення суми масивів)
For i:=1 to n do
write (c[i]," "); (виведення масиву з)
end.

© 2022 androidas.ru - Все про Android