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

Двовимірний масив у Паскалі трактується як одномірний масив, тип елементів якого також є масивом (масив масивів). Положення елементів двомірних масивах Паскаля описується двома індексами. Їх можна подати у вигляді прямокутної таблиці або матриці.

Розглянемо двовимірний масив Паскаля розмірністю 3*3, тобто в ній буде три рядки, а в кожному рядку по три елементи:

Кожен елемент має свій номер, як у одновимірних масивів, але зараз номер вже складається з двох чисел – номера рядка, в якому знаходиться елемент, та номери стовпця. Таким чином, номер елемента визначається перетином рядка та стовпця. Наприклад, a 21 – це елемент, що стоїть у другому рядку та у першому стовпці.

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

Існує кілька способів оголошення двовимірного масиву Паскаля.

Ми вже вміємо описувати одновимірні масиви, елементи яких можуть мати будь-який тип, а отже, і самі елементи можуть бути масивами. Розглянемо наступний опис типів та змінних:

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

Type
Vector = array of<тип_элементов>;
Matrix = array of vector;
Var m: matrix;

Ми оголосили двовимірний масив Паскаля m, що складається з 10 рядків, у кожному з яких 5 стовпців. При цьому до кожного i-го рядка можна звертатися m [i], а кожному j-му елементу всередині i-го рядка – m [i, j].

Визначення типів для двовимірних масивів Паскаля можна задавати і в одному рядку:

Type
Matrix = array of array of< тип элементов >;
або ще простіше:
type
matrix = array of<тип элементов>;

Звернення до елементів двовимірного масиву має вигляд: M [i, j]. Це означає, що ми хочемо отримати елемент, розташований в i-му рядку і j-му стовпці. Тут головне не переплутати рядки зі стовпцями, бо ми можемо знову отримати звернення до неіснуючого елементу. Наприклад, звернення до елемента M має правильну форму запису, але може викликати помилку у роботі програми.

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

Все, що було сказано про основні дії з одновимірними масивами, справедливо і для матриць. Єдина дія, яку можна здійснити над однотипними матрицями цілком – це надання. Тобто, якщо в програмі ми описані дві матриці одного типу, наприклад,

type
matrix = array of integer;
var
a, b: matrix;

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

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

Для послідовного введення елементів одновимірного масиву ми використовували цикл for, в якому змінювали значення індексу з 1 до останнього. Але положення елемента у двовимірному масиві Паскаля визначається двома індексами: номером рядка та номером стовпця. Це означає, що нам потрібно буде послідовно змінювати номер рядка з 1 до останнього і в кожному рядку перебирати елементи стовпців з 1 до останнього. Отже, нам знадобиться два цикли for , причому один із них буде вкладено в інший.

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

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

type
matrix = array of integer;
var
a: matrix;
i, j: integer; (Індекси масиву)
begin
for i:=1 to 5 do (цикл для перебору всіх рядків)
readln (a [i, j]); (введення з клавіатури елемента, що стоїть в i-му рядку і j-му стовпці)

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

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

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

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

for i:=1 to 5 do (цикл для перебору всіх рядків)
begin
for j:=1 to 10 do (перебір всіх елементів рядка по шпальтах)
write (a [i, j]: 4); (друк елементів, що стоять в i-му рядку матриці в одному екранному рядку, при цьому для виведення кожного елемента відводиться 4 позиції)
writeln; (Перш ніж змінити номер рядка в матриці, потрібно перевести курсор на початок нового екранного рядка)
end;

Зауваження ( це важливо!): дуже часто у програмах студентів зустрічається помилка, коли введення з клавіатури або виведення на екран масиву намагаються здійснити наступним чином: readln(a), writeln(a), де а- Це змінна типу масив. При цьому їх дивує повідомлення компілятора, що зміну цього типу неможливо рахувати чи надрукувати. Можливо, ви зрозумієте, чому цього зробити не можна, якщо уявите N кухлів, що стоять у ряд, а у вас у руках, наприклад, чайник з водою. Можете ви за командою «налий воду» наповнити відразу всі гуртки? Як би ви не намагалися, але в кожен гурток доведеться наливати окремо. Заповнення та виведення на екран елементів масиву також повинно здійснюватися послідовно та поелементно, т.к. у пам'яті ЕОМ елементи масиву розташовуються у послідовних осередках.

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

Елементи абстрактного масиву в пам'яті машини фізично розташовуються послідовно згідно з описом. При цьому кожен елемент займає в пам'яті кількість байт, що відповідає його розміру. Наприклад, якщо масив складається з елементів типу integer, то кожен елемент займатиме по два байти. А весь масив займе S 2 байта, де S - кількість елементів в масиві.

А скільки місця займе масив, що з масивів, тобто. матриця? Вочевидь: S i^S j , де S i - кількість рядків, а S j – кількість елементів у кожному рядку. Наприклад, для масиву типу

Matrix = array of integer;

потрібно 12 байт пам'яті.

Як розташовуватимуться в пам'яті елементи цього масиву? Розглянемо схему розміщення масиву M типу matrix у пам'яті.

Під кожен елемент M типу integer виділяється дві комірки пам'яті. Розміщення у пам'яті здійснюється «знизу нагору». Елементи розміщуються у порядку зміни індексу, що відповідає схемі вкладених циклів: спочатку розміщується перший рядок, потім другий, третій... Усередині рядка по порядку йдуть елементи: перший, другий і т.д.

Як ми знаємо, доступ до будь-якої змінної можливий тільки якщо відома адреса осередку пам'яті, в якій зберігається змінна. Конкретна пам'ять виділяється для змінної під час завантаження програми, тобто встановлюється взаємна відповідність між змінною та адресою комірки. Але якщо ми оголосили змінну як масив, то програма знає адресу початку масиву, тобто першого його елемента. Як відбувається доступ до всіх інших елементів масиву? При реальному доступі до комірки пам'яті, в якій зберігається елемент двовимірного масиву, система обчислює її адресу за формулою:

Addr + SizeElem * Cols * (I -1) + SizeElem * (J -1),

де Addr – фактичний початковий адресу, яким масив перебуває у пам'яті; I, J – індекси елемента у двовимірному масиві; SizeElem – розмір елемента масиву (наприклад, два байти для елементів типу integer); Cols – кількість елементів у рядку.

Вираз SizeElem * Cols * (I -1) + SizeElem * (J -1) називають зміщенням щодо початку масиву.

Скільки пам'яті виділяється для масиву?

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

Для роботи програми пам'ять виділяється сегментами по 64 Кбайт кожен, причому щонайменше один з них визначається як сегмент даних. Ось у цьому сегменті і розташовуються ті дані, які оброблятиме програма. Жодна змінна програми не може розташовуватись більш ніж в одному сегменті. Тому, навіть якщо в сегменті знаходиться тільки одна змінна, описана як масив, вона не зможе отримати більш ніж 65536 байт. Але майже, напевно, крім масиву в сегменті даних будуть описані ще деякі змінні, тому реальний обсяг пам'яті, який може бути виділений під масив, знаходиться за формулою: 65536-S , де S - обсяг пам'яті, вже виділений під інші змінні.

Навіщо це знати? Для того, щоб не дивуватися, якщо при компіляції транслятор видасть повідомлення про помилку оголошення занадто довгого масиву, коли в програмі зустріне опис (правильний з погляду синтаксису):

Type myArray = array of integer;

Ви вже знаєте, що, враховуючи двобайтове уявлення цілих чисел, реально можна оголосити масив з кількістю елементів, що дорівнює 65536/2 –1=32767. І то лише у тому випадку, якщо інших змінних не буде. Двовимірні масиви повинні мати ще менші межі індексів.

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

Завдання:Знайти добуток ненульових елементів матриці.

Рішення:

  • Для вирішення цієї задачі нам знадобляться змінні: матриця, що складається, наприклад, з цілих елементів; P – добуток елементів, відмінних від 0; I, J – індекси масиву; N , M – кількість рядків та стовпців у матриці.
  • Вхідними даними є N, M - їх значення введемо з клавіатури; матриця – введення матриці оформимо як процедури, заповнення матриці здійснимо випадковим чином, тобто. за допомогою функції random().
  • Вихідними даними буде значення змінної P (твір).
  • Щоб перевірити правильність виконання програми, потрібно вивести матрицю на екран, для цього оформимо процедуру виведення матриці.
  • Хід розв'язання задачі:

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

  • введемо значення N і M;
  • Введемо двовимірний масив Паскаля, при цьому звертаємося до процедури vvod (a), де а – матриця;
  • Надрукуємо отриману матрицю, для цього звертаємось до процедури print(a);
  • Надамо початкове значення змінної P =1;
  • Будемо послідовно перебирати всі рядки I від 1-го до N-го, у кожному рядку перебиратимемо всі стовпці J від 1-го до M-го, для кожного елемента матриці перевірятимемо умову: якщо a ij ? 0, твір P будемо домножувати на елемент a ij (P = P * a ij);
  • Виведемо на екран значення добутку ненульових елементів матриці - P;

А тепер поговоримо про процедури.

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

Type
Matrix = array of integer;
procedure primer (a: matrix);
..............................

Повернемося тепер до наших процедур.

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

Procedure vvod (var m: matrix);

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

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

Procedure print (m: matrix);

І знову для реалізації вкладених циклів усередині процедури нам будуть потрібні лічильники, нехай вони називаються так само - k і h. Алгоритм виведення матриці на екран було описано вище, скористаємося цим описом.

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

Program proizvedení;
Type
Matrix = array of integer;
Var
A: matrix;
N, m, i, j: byte;
P: integer;
Procedure vvod (var m: matrix);
Var k, h: byte;
Begin
For i:=1 to n do (змінна n для процедури є глобальною, отже «відомою»)
For j:=1 to m do (змінна m для процедури є глобальною, а значить «відомою»)
M:= random(10);
End;
Procedure print (m: matrix);
Var k, h: byte;
Begin
For i:=1 to n do
begin
For j:=1 to m do
Write (M: 4);
Writeln;
end;
End;
Begin (початок основної програми)
Writeln ("Введіть розмірність матриці:");
Readln(N, M);
Vvod(a);
Print(a);
P:=1;
For i:=1 to N do
For j:=1 to M do
If a<>0 then p:=p*a;
Writeln (p);
End.

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

Індексж масиву - це число ціле, що вказує на конкретний елемент масиву

Кількість індексів масиву, що використовуються, може бути різним. Масиви з одним індексом називають одновимірними, з двома - двовимірнимиі т.д.

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

Масив описується так:

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

Вище описується масив В, Що складається з 5 елементів та символьний масив R, Що складається з 34 елементів. Для масиву Убуде виділено 5 * 6 = 30 байт пам'яті (т.к. під змінні типу Realвиділяється 6 байт пам'яті), для масиву R - 1*34=34 байта пам'яті (під змінні типу Char - 1 байт). Базовий типелементів масиву може бути будь-яким, як простим, так і структурованим, за винятком файлового! Масив можна оголосити з використанням власноготипу:

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

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

Цикли бувають:

- Цикл з лічильником, у якому деяка змінна змінює своє значення від заданого початковогозначення до кінцевогозначення з деяким кроком, і кожного значення цієї змінної тіло циклу виконується один раз. Реалізується оператором for

приклад. Заповнити масив:

А так можна заповнити двовимірниймасив:

- Цикл з передумовою, який виконується поки що істинно деяка умова, вказана перед його початком. Реалізується оператором while.

- Цикл з постумовою, В якому умова перевіряється після виконання тіла циклу, а, отже, тіло завжди виконується хоча б один раз. У мові Паскаль цей цикл реалізує оператор repeat...until

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

Також у циклах нерідко використовується команда дострокового виходу із циклунаприклад, коли при виконанні тіла циклу виявляється помилка, після якої подальша робота циклу не має сенсу. Реалізується оператором EXITабо break.

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

Виходячи з вищесказаного, використовуваний двовимірний масив А- це матриця розміром n x n. Цикл використовується з лічильникомвід одиниці до n, мабуть визначеною раніше.

Усередині циклу: змінна знабуває значення двовимірного масиву з індексом (c:= A), Спочатку це . Потім на місце цього елемента масиву заноситься значення елемента того ж масиву, але з індексом (A:= A), або при k:=1 (A:= A). Тобто. заносяться елементи першого рядка, т.к. перше число в індексі відповідає за номер рядка в матриці - [ i j), а друге за номер стовпця - . І насамкінець, на місце елемента з індексом , заноситься первісне значення елемента масиву Аз індексом , яке ми занесли до змінної з (A:=c).

І з кожною ітерацією нашого циклу значення iзбільшується на одиницю. Простежимо за кроками. Спочатку це :

з:=A A:=A A:=c

з:=A A:=A A:=c

з:=A A:=A A:=c

І так nраз до . Тобто. значення діагоналі матриці напряму зліва направо та зверху вниз. І елементи цієї діагоналі змінюються значеннями з елементами першою стоки матриці(або k-Того рядка). Значить, правильна відповідь - варіант 3: даний алгоритм змінює місцями елементи діагоналі таk-го стовпця таблиці.

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

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

Масив характеризується такими основними поняттями:

Елемент масиву (значення елемента масиву)– значення, що зберігається у певній комірці пам'яті, розташованої в межах масиву, а також адресу цієї комірки пам'яті.
Кожен елемент масиву характеризується трьома величинами:

  • адресою елемента - адресою початкової комірки пам'яті, в якій розташований цей елемент;
  • індексом елемента (порядковим номером елемента у масиві);
  • значенням елемента.

Адреса масиву – адреса початкового елемента масиву.

Ім'я масиву – ідентифікатор, який використовується для звернення до елементів масиву.

Розмір масиву – кількість елементів масиву

Розмір елемента – кількість байт, які займає один елемент масиву.

Графічно розташування масиву в пам'яті комп'ютера можна у вигляді безперервної стрічки адрес.

Представлений малюнку масив містить q елементів з індексами від 0 до q-1 . Кожен елемент займає пам'яті комп'ютера k байт, причому розташування елементів у пам'яті послідовне.

Адреси i-го елемента масиву має значення

Адреса масиву є адресою початкового (нульового) елемента масиву. Для звернення елементів масиву використовується порядковий номер (індекс) елемента, початкове значення якого дорівнює 0 . Так, якщо масив містить елементів q, то індекси елементів масиву змінюються в межах від 0 до q-1 .

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

Довжина Масиву = Розмір Елементу * Кількість Елементів

Для визначення розміру елемента масиву може використовуватись функція

int sizeof (тип);

Наприклад,

sizeof (char) = 1;
sizeof(int) = 4;
sizeof (float) = 4;
sizeof (double) = 8;

Оголошення та ініціалізація масивів

Для оголошення масиву в мові Сі використовується наступний синтаксис:

тип ім'я [розмірність] = (ініціалізація);

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

int a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); // масив a з 10 цілих чисел

Якщо кількість ініціалізуючих значень, зазначених у фігурних дужках, менша, ніж кількість елементів масиву, вказана в квадратних дужках, то всі елементи, що залишилися в масиві (для яких не вистачило ініціалізуючих значень) дорівнюватимуть нулю. Цю властивість зручно використовувати для завдання нульових значень усім елементам масиву.

int b = (0); // масив b з 10 елементів, ініціалізованих 0


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

int a = (1, 2, 3, 4, 5, 6, 7, 8, 9);

При зверненні до елементів масиву індекс необхідного елемента вказується у квадратних дужках.

Приклад на Сі

1
2
3
4
5
6
7
8

#include
int main()
{
int a = (5, 4, 3, 2, 1); // масив a містить 5 елементів
printf("%d%d%d%d\n", a, a, a, a, a);
getchar();
return 0;
}

Результат виконання програми:

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

int a;

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


#include
int main()
{
int a;
int i;
// Введення елементів масиву
for (i = 0; i<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
// Виведення елементів масиву
for (i = 0; i<5; i++)
printf("%d", a[i]); // Пробіл у форматі друку обов'язковий
getchar(); getchar();
return 0;
}

Результат виконання програми

Багатовимірні масиви

У мові Сі можуть бути оголошені багатовимірні масиви. Відмінність багатовимірного масиву від одномірного у тому, що у одномірному масиві становище елемента визначається одним індексом, а багатомірному - декількома. Прикладом багатовимірного масиву є матриця.

Загальна форма оголошення багатовимірного масиву

тип ім'я[розмірність1][розмірність2]...[розмірністьm];

Елементи багатовимірного масиву розташовуються в послідовних осередках оперативної пам'яті зростання адрес. У пам'яті комп'ютера елементи багатовимірного масиву розташовуються поспіль, наприклад масив, що має 2 рядки і 3 стовпці,

int a;


буде розташований у пам'яті наступним чином

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

Кількість Рядок * Кількість Стовпців = 2 * 3 = 6.

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

Кількість елементів * Розмір елемента = 6 * 4 = 24 байти.

Ініціалізація багатовимірних масивів

Значення елементів багатовимірного масиву, як і в одновимірному випадку, можуть бути задані константними значеннями при оголошенні, укладеними у фігурні дужки (). Однак у цьому випадку зазначення кількості елементів у рядках та стовпцях має бути обов'язково вказано у квадратних дужках.

Приклад на Сі

1
2
3
4
5
6
7
8
9

#include
int main()
{
int a = (1, 2, 3, 4, 5, 6);
printf("%d%d%d\n", a, a, a);
getchar();
return 0;
}



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

Приклад на Сі

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
int a; // масив з 2 рядків та 3 стовпців
int i, j;
// Введення елементів масиву
for (i = 0; i<2; i++) // цикл по рядках
{
for (j = 0; j<3; j++) // цикл по стовпцях
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
// Виведення елементів масиву
for (i = 0; i<2; i++) // цикл по рядках
{
for (j = 0; j<3; j++) // цикл по стовпцях
{
printf("%d", a[i][j]);
}
printf("\n"); // Переведення на новий рядок
}
getchar(); getchar();
return 0;
}



Передача масиву у функцію

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

  • адреса масиву,
  • розмір масиву.

Виняток становлять функції обробки рядків, які достатньо передати лише адресу.

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#define _CRT_SECURE_NO_WARNINGS
#include
// Функція обміну
void change(int * x, int n)
{
// x - покажчик на масив (адреса масиву)
// n - розмір масиву
int i;
int max, index;
max = x;
index = 0;
// Пошук максимального елемента
for (i = 1; i {
if (x[i]>max)
{
max = x [i];
index = i;
}
}
// Обмін
x = x;
x = max;
}
// Головна функція
int main()
{
int a;
int i;
for (i = 0; i<10; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]);
}
change(a, 10); // виклик функції обміну
// Виведення елементів масиву
for (i = 0; i<10; i++)
printf("%d", a[i]);
getchar();
getchar();
return
p = p * x [i];
}
return p;
}
// Головна функція
int main()
{
int a; // оголошено масив a з 5 елементів
int i;
int pr;
// Введення елементів масиву
for (i = 0; i<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]); // &a[i] - адреса i-го елемента масиву
}
pr = func(a, 5); // Обчислення твору
printf("\n pr = %d", pr); // Висновок твору парних елементів
getchar(); getchar();
return 0;
}



Підключення до інтернету