Заповнення та обробка масиву. Дії з одновимірними масивами серед Delphi. Одновимірні масиви. Формування масиву та виведення його елементів Послідовний пошук у масиві

Досі ми працювали з простими типами даних - логічний (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.

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

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

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

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

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

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

Синтаксис масиву 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;

Урок із серії: « Мова програмування Паскаль»

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

Наприклад, запис Mas, A дозволяє звернутися до другого елементу масиву MAS і десятого елементу масиву A. Під час роботи з двовимірним масивом вказується два індекси, з n-мірним масивом - n індексів.

Наприклад, запис Matr робить доступним для обробки значення елемента, що знаходиться у четвертому рядку четвертого стовпця масиву M.

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

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

Заповнення одновимірного масиву значеннями

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

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

Способи заповнення одновимірних масивів:

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

1. Введення значень елементів масиву із клавіатури. У зв'язку з тим, що використовувався оператор Readln, кожне значення вводитиметься з нового рядка.

2. Заповнення масивучислами, згенерованими випадковим чином інтервалу . Підключаємо датчик випадкових чисел – функцію random.

3. Заповнення масивуза формулою. Кожному елементу масиву надається значення, обчислене за формулою. Якщо кожен елемент масиву дорівнює потрійному значенню його порядкового номера (індексу), то процедура матиме вигляд:

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

Виведення значень елементів масиву на екран

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

приклад 1.Заповнити масив із клавіатури та вивести його на екран.

Рішення.

У програмі буде використовуватися дві процедури: процедура Init1 (заповнення масиву з клавіатури) та процедура Print (виведення масиву на екран).

приклад 2.Заповнити масив із текстового файлу та вивести на екран. У текстовому файті кілька рядків, у кожному рядку по 30 чисел.

Ви навчилися заповнювати одновимірний масив та виводити його на екран.

На наступному уроці продовжимо знайомитись з алгоритмами обробки одновимірних масивів.

На занятті пояснюється, як працювати з одновимірними масивами в Паскалі, як використовувати генератор випадкових чисел – функцію randomу Паскалі. Розглядається приклад того, як вивести числа Фібоначчі


Матеріали сайту спрямовані на практичне освоєння мови програмування Pascal. Короткі теоретичні відомості не претендують на повне висвітлення матеріалу на тему; необхідну інформацію можна знайти в Інтернеті у великій кількості. У наші завдання входить надання можливості отримання практичних навичок програмування на Паскалі. Вирішені наочні приклади та завдання викладені зі збільшенням їх складності, що дозволить з легкістю вивчити матеріал з нуля.

Оголошення масиву

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

Оголошення масиву

var dlina: array [1..3] of integer; begin dlina [1]: = 500; dlina [2]: = 400; dlina [3]: = 150; ...

var dlina: array of integer; begin dlina:=500; dlina: = 400; dlina: = 150; ...

  • dlina – ідентифікатор (ім'я) масиву;
  • для оголошення використовується службове слово Array (у перекладі з англ. "Масив" або "набір");
  • - У квадратних дужках ставиться номер (індекс) першого елемента, потім дві точки та індекс останнього елемента масиву, тобто. по суті, вказується кількість елементів; кількість елементів масиву називається розмірністю масиву
  • of integer (з англ. «з цілих чисел») — вказує, якого типу належить масив, of тут — службове слово.
  • Оголосити розмір можна через константу:

    Ініціалізація масиву

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

    const a: array [1..4] of integer = (1, 3, 2, 5);

    const a:array of integer = (1, 3, 2, 5);

    Заповнення послідовними числами:

    Результат: A = 8, A = 9, A = 10, ..., A [N] = A + 1

    Введення з клавіатури:

    Приклад:Розглянемо, як відбувається введення масиву в Паскалі:

    writeln ("введіть кількість елементів: "); readln(n); (якщо кількість заздалегідь невідомо, - запитуємо його) for i:= 1 to n do begin write("a[", i, "]="); read(a[i]); ... end; ...


    ✍ Приклад результату:

    Введіть кількість елементів: 3 a=5 a=7 a=4

    Виведення елементів масиву

    Приклад:Розглянемо, як вивести масив у Паскалі:

    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]: 2); (Виведення елементів масиву) end.

    var a: array of integer; (Масив з п'яти елементів) i: integer; begin a:=2; a:=4; a:=8; a:=6; a:=3; writeln("Масив A:"); for i:= 1 to 5 do write(a[i]:2); (Виведення елементів масиву) end.

    ✍ Приклад результату:

    Масив A: 2 4 8 6 3

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

    Завдання Array 0.Необхідно задати речовий масив розмірністю 6 (тобто із шести елементів); заповнити масив значеннями, що вводяться, і вивести елементи на екран. Використовувати два цикли: перший для введення елементів, другий для виведення.


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

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

    Функція Random у Pascal

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

    Для генерації чисел від 0 до n (не включаючи саме значення n цілі числа в інтервалі of integer; i:integer; begin randomize; for i:=1 to 10 do begin f[i]:=random(10); ( інтервал ) write(f[i]," ");

    ✍ Приклад результату:

    9 8 9 2 0 3 6 9 5 0

    Для речових чисел в інтерваліта вивести елементи на екран: визначити три позиції для виведення кожного елемента.

    Числа Фібоначчі у Паскалі

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

    Приклад:Ряд чисел Фібоначчі: 1 1 2 3 5 8 13…

    f[0]: = 1; f[1]: = 1; f[2]: = 2; …

    f:=1; f:=1; f:=2; …

    f[2]: = f[0] + f[1]; f[3]: = f[1] + f[2];
    f[i]: = f[i-2] + f[i-1];

    f[i]:=f+f;

    Отримали формулу ряду елементів.

    Приклад:Обчислити та роздрукувати перші 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:arrayof integer; begin f:=1; f:=1; for i:=2 to 19 do begin f[i]:=f+f; writeln(f[i]) end; end.

    На цьому прикладі стає зрозумілим принцип роботи з числовими рядами. Зазвичай, для виведення числового ряду є формула визначення кожного елемента даного ряду. Так, у випадку з числами Фібоначчі, ця формула-правило має вигляд f[i]:=f+f . Тому її необхідно використовувати в циклі for для формування елементів масиву.

    Завдання Array 2.Даний ряд із 10 довільнихчисел: a, a, ... , a (використовувати функцію random()). Підрахувати і надрукувати суми трійок чисел, що стоять поруч: a+a+a , a+a+a , a+a+a , …… , a+a+a

    Псевдокод:

    Пошук максимального елемента за його індексом:


    Завдання Array_min:Знайдіть мінімальний елемент масиву. Виведіть елемент та його індекс.

    Завдання Array 4.Даний масив із 10 цілих елементів. Знайти кількість негативних та вивести кількість на екран.

    Завдання Array 5.Знайти мінімальне та максимальне з n введених чисел (масиву). Визначити відстань між цими елементами. 3 2 6 1 3 4 7 2 >>> min=1, max=7, distance=3

    Завдання Array 6.Дано цілісний масив розміру N. Вивести всі парні парні числа, що містяться в даному масиві, в порядку зменшення їх індексів, а також їх кількість. K. N=4 mas: 8 9 2 5 >>> 2 8 кількість= 2

    Завдання Array 7.Ввести з клавіатури масив із 5 елементів, знайти в ньому два максимальні елементи та їх номери.

    Приклад:

    Вихідний масив: 4 -5 10 -10 5 максимальні A=10, A=5

    Пошук у масиві

    Розглянемо складний приклад роботи з одновимірними масивами:

    Приклад:Дано масив із 10 чисел. Визначити, чи є у масиві число, введене користувачем. Якщо є – виводити «знайдено», якщо ні - "не знайдено".
    Складність завдання полягає у тому, що виводити слова «знайдено»або "не знайдено"необхідно один раз.


    Для вирішення поставленого завдання знадобиться оператор break – вихід із циклу.
    Рішення Варіант 1. Цикл for:

    Показати рішення

    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 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, то закінчити пошук інакше перейти до наступного елемента.

    рішення на Паскалі Варіант 2. Цикл While:

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

    Завдання Array 8.Заповнити масив із 10 елементів випадковими числами в інтервалі та вивести номери всіх елементів, рівних X .

    Приклад:

    Вихідний масив: 4 0 1 2 0 1 3 4 1 0 Що шукаємо? 0 A, A, A

    Циклічний зсув

    Приклад:зрушити елементи масиву вліво на 1 позицію, перший елемент стає місце останнього.



    Рішення:

    Алгоритм:
    A:=A; A:=A;… A:=A[N];

    Програма:

    Завдання Array 9.Заповнити масив з 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необхідно привласнити 1 .


    Виведення масиву B:

    writeln("Вибрані елементи"); for i:=1 to count-1 do write(B[i], " ")

    Завдання Array 11.Заповнити масив випадковими числами в інтервалі та записати до іншого масиву всі числа, які закінчуються на 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;

    для i:=1 до N-1 до початку для j:=N-1 вгору і до if A[j] > A then begin з:= A[j]; A[j]: = A; A: = с; end; end;

    Завдання Array 12.Заповнити масив з 10 елементів випадковими числами в інтервалі та відсортувати першу половину масиву за зростанням, а другу – за спаданням (методом 'Бульбашка'). Приклад:Вихідний масив: 14 25 13 30 76 58 32 11 41 97 Результат: 13 14 25 30 76 97 58 41 32 11

    Сортування шляхом вибору

    • в масиві шукається мінімальний елемент і ставиться перше місце (змінюється місцями з A);
    • серед елементів, що залишилися, також проводиться пошук мінімального, який ставиться на друге місце (змінюється місцями з A) і т.д.

    begin c: = A [i]; A [i]: = A [min]; A [min]: = c; end; end;

    for i:= 1 to N-1 do begin min:= i ; для j:= i+1 до N до if A[j]< A then min:=j; if min <>i then begin c:=A[i]; A[i]:=A; A:=c; end; end;

    Завдання Array 13:Заповнити масив із 10 елементів випадковими числами в інтервалі та відсортувати його за зростанням суми цифр Приклад:Вихідний масив: 14 25 13 12 76 58 21 87 10 98 Результат: 10 21 12 13 14 25 76 58 87 98

    Швидке сортування або quick sort

    Алгоритм:

    Виконання на Паскалі:

    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] та відсортувати його за допомогою алгоритму швидкого сортування.

    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.