Як заповнити двовимірний масив. Статичний масив: оголошення, наповнення, використання. Заповнення по стовпцях

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

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

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

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

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

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

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

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

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

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

Представлений малюнку масив містить 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;
}



Матриця– в – аналог двовимірного масиву – квадратна або прямокутна таблиця, що складається з рядків та стовпців:

Розмір двовимірного масиву- кількість елементів у масиві M*N,

де М - число рядків, N - число стовпців (натуральні числа).

Квадратна матриця- матриця з рівним числом рядків та стовпців.

Порядок матриці –число рядків (стовпців) квадратної матриці.

1. Опис двовимірного масиву

Двовимірний масив – це масив масивів, тобто двовимірна таблиця. Оперувати можна як із окремими елементами масиву, так і з масивом в цілому.

У мові Pascal індекси полягають у квадратних дужках:

А, A,..A.

Можливі 2 способи опису 2-мірного масиву:

1 Опис масиву в розділі зміннихVAR:

iнач..iкон, jнач..jкон- Діапазони індексів (рядків, стовпців);

t – тип елементів.

Наприклад:

VAR y: of integer;

VAR F: array of array of real;

VAR mb: array of real;

VAR C: array OF string;

CONST M = 4; N=2;

VAR A: array OF integer;

2 Опис масиву в розділі опису типівTYPE:

Для заповнення матриці організується зовнішній цикл i, внутрішній – по j(За умови, що i – рядки, j – стовпці). При цьому індекс рядка iзмінюється повільніше індексу стовпця jза рахунок того, що відбувається поступовий перебір всіх елементів рядка, тобто стовпців i-го рядка.

Заповнення по стовпцях:

А А
А
А
A

Вправи на заповнення 2-мірних масивів

Вправа mas1:Заповнити матрицю А(5, 10) рядками методом генерування випадкових чисел.

program mas_1; (Заповнення матриці по рядках)

A: array of INTEGER;

writeLn('Матриця А:');

FOR i:= 1 to 5 DO(Зовнішній цикл по рядках)

FOR j:=1 TO 10 DO(Внутрішній цикл по стовпцях)

A:= random(10);

write(A:3); (друкуємо поспіль весь рядок)

writeLn; (переходимо на новий рядок)

Вправа mas2:Заповнити матрицю А(3, 4) по шпальтах шляхом введення чисел з клавіатури.

program mas_2; (Заповнення матриці по стовпцях)

Const N = 4; M = 3;

Var A: array of INTEGER;

FOR j:= 1 to M DO(зовнішній цикл по стовпцях)

FOR i:=1 TO N DO(Внутрішній цикл по рядках)

write(‘Введіть елемент A[",i,",",j,"]=’);

readLn(A);

writeLn('Результуюча матриця A:');

for i:=1 to N do (Виведення матриці)

for j:=1 to M do

write(A,' ');

Вправа mas3:Дано матрицю A(N? M), що складається з натуральних чисел. Визначити її максимальний елемент та його індекси.

program mas_3; (Max елемент матриці)

CONST = 10; r=10;

A: array of INTEGER;

n, m, Max, iMax, jMax, k: integer;

write('Введіть число рядків N='); readLn(N);

write('Введіть число стовпців M='); readLn(M);

writeLn('Матриця:');

FOR i:= 1 to N DO (заповнення масиву генеруванням випадкових чисел)

FOR j:=1 TO M DO

A:= random(10);

write(A:3);

Max: = A; iMax: = 1; jMax:=1; k:=0;(Приймаємо початкове значення Мах = значенням 1-го ел-та)

For i:=1 to N do

For j:=1 to M do

IF A > Max then

Max: = A; iMax:=i; jMax:=j; k:=1

WriteLn('Max= ' ,Max,' у рядку: ',imax, ' стовпці:', jmax);

Розділи: Інформатика

Тема: Двовимірні масиви. Заповнення двовимірного масиву за заданим правилом.

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

ХІД ЗАНЯТТЯ

1. Актуалізація знань

Масиви, положення елементів яких описується двома індексами, називаються двовимірними. Структура такого масиву може бути представлена ​​прямокутною матрицею. Кожен елемент матриці однозначно визначається зазначенням номера рядка та шпальти, номер рядка – i, номер шпальти – j.
Розглянемо матрицю розміром n*m:

а 11 а 12 а 13 а 14
а 21 а 22 а 23 а 24
а 31 а 32 а 33 а 34

Матриця з 3 рядків та 4 стовпців, кількість рядків n=3, кількість стовпців m=4. Кожен елемент має свій номер, який складається з двох чисел – номера рядка, в якому знаходиться елемент, та номери стовпця. Наприклад, а23 – це елемент, що стоїть у другому рядку та у третьому стовпці.
Двовимірний масив Турбо Паскаль можна описати по-різному. Щоб описати двовимірний масив, треба визначити якого типу його елементи, і як вони пронумеровані (якого типу його індекс). Існує кілька способів опису двовимірного масиву.

Const maxN = ...; (Максимальні значення кількості рядків)
maxM=…; (Максимальні значення кількості стовпців)

1 спосіб

Type Mas = array of<тип элементов>; (одномірний масив)
Type TMas = array of Mas; (одномірний масив, елементами якого є одномірні масиви)

2 спосіб

Type TMas = array of array of<тип элементов>;
(одномірний масив, елементами якого є одномірні масиви)

3 спосіб

Type<имя типа>= array of<тип элементов>; (Двовимірний масив)

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

Наприклад:

Const N=3; M=4;
Type TMas = array of integer; (Двовимірний масив із цілих чисел)

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

1) Формування двовимірного масиву за допомогою введення з клавіатури та алгоритм рядкового виведення елементів матриці.

Const N = 10; M = 10;
Type Tmas = array of integer;
Var A: Tmas; i,j:integer;
Begin
(Введення елементів матриці)
For i:=1 to N do
For j:=1 to M do
Read(A);
(Виведення елементів матриці)
For i:=1 to N do begin
For j:=1 to M do
Write(A:4); (Друкується перший рядок)
Writeln (Перехід на новий рядок)
end;
End.

2) Фрагмент програми формування двовимірного масиву через генератор випадкових чисел.

Begin
Randomize; (Ініціалізація генератора випадкових чисел)
(Введення елементів матриці)
For i:=1 to N do
For j:=1 to M do
A:=random(45)-22;

2. Вивчення нового матеріалу. Заповнення масиву за правилом

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

1. Заповнити масив А розміром n*m таким чином, наприклад

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

Масив заповнюється за принципом "змійки". Правило заповнення: якщо номер рядка – непарне число, то A=(i-1)*m+j, інакше A=i*m-j+1.

program M1А;

n, m, i, j: integer;
begin
readln(n,m);
for i:=1 to n do begin
for j:=1 to m do
begin
if i mod 2 = 1 then
A=(i-1)*m+j
else
A=i*m-j+1;
write(A:3);
end;
writeln;
end;
readln;
end.

Наведемо приклад програми іншого способу заповнення за заданим правилом:

program M1В;
var A:array of integer;
n, m, i, j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for i:=1 to n do
begin
for j:=1 to m do
begin
A:=c;
if (i mod 2 = 0) and (j<>m) then
dec(c)
else
inc(c);
write(A:3);
end;
c:=c+m-1;
writeln;
end;
readln;
end.

2. Заповнити масив A за таким принципом:

1 0 2 0 3 0 4
0 5 0 6 0 7 0
8 0 9 0 10 0 11
0 12 0 13 0 14 0

program M2;
var A:array of integer;
n, m, i, j: integer;
c: integer;
begin
readln(n,m);
c:=0;
for i:=1 to n do
begin
for j:=1 to m do
begin
if (i-1+j) mod 2 = 0 then
A:=0
else
begin
inc(c);
A:=c;
end;
write(A:5);
end;
writeln;
end;
readln;
end.

3. Заповнити масив A за таким принципом:

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

var A:array of integer;
n, m, i, j: integer;
c: integer;
begin
readln(n,m);
c:=1;
for j:=1 to m do
begin
for i:=1 to n do
begin
A:=c;
if (j mod 2 = 0) and (i<>n) then
dec(c)
else
inc(c);
end;
c:=c+n-1;
end;
for i:=1 to n do
begin
for j:=1 to m do
write(A:5);
writeln;
end;
readln;
end.

4. Заповнити масив A за таким принципом:

1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4

var i,j,m,c,d: integer;

begin
c:=1;
readln(m);
for j:=1 to m do
begin
i:=c;
d:=1;
repeat
A:=d;
inc(i);
if i>m then
i:=1;
inc(d);
until i=c;
dec(c);
if c<= 0 then
c:=m-c;
end;
for i:=1 to m do
begin
for j:=1 to m do
write(A:2);
writeln;
end;
end.

5. Заповнити масив A за таким принципом:

1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1

var m,i,j: integer;
A:array of integer;
begin
readln(m);
for i:=1 to m do
begin
for j:=1 to m do
begin
if (i=j) або (m-i+1=j) then
A:=1
else
A:=0;
write(A:2);
end;
writeln;
end;
end.

3. Завдання для самостійного вирішення

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

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

0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0

4) Заповнити масив за таким принципом:

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

5) Заповнити масив за таким принципом:

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

Домашні завдання:

1) Заповнити масив за таким принципом:

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

2) Заповнити масив за таким принципом:

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

3) Заповнити масив за таким принципом:

0 1 1 1 0
1 0 1 0 1
1 1 0 1 1
1 0 1 0 1
0 1 1 1 0

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

Одновимірні масиви С++

Одновимірний масив - масив, з одним параметром, що характеризує кількість елементів одновимірного масиву. Фактично одновимірний масив - це масив, у якого може бути лише один рядок, і n-е кількість стовпців. Стовпці в одновимірному масиві – це елементи масиву. На малюнку 1 показана структура цілісного одновимірного масиву a. Розмір цього масиву – 16 осередків.

Малюнок 1 - Масиви в С++

Зауважте, що максимальний індекс одновимірного масиву aдорівнює 15, але розмір масиву 16 осередків, тому що нумерація осередків масиву завжди починається з 0. Індекс осередку – це ціле невід'ємне число, яким можна звертатися до кожної осередку масиву і виконувати будь-які дії над нею (осередком).

//синтаксис оголошення одномірного масиву С++: /*тип даних*/ /*ім'я одномірного масиву*/; // приклад оголошення одномірного масиву, зображеного малюнку 1: int a;

де, int-цілочисленний;

А - ім'я одновимірного масиву;
16 - розмір одномірного масиву, 16 осередків.

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

//ще один спосіб оголошення одновимірних масивів int mas, a;

Оголошено два одновимірні масиви mas і розмірами 10 і 16 відповідно. Причому у такому способі оголошення всі масиви матимуть однаковий тип даних, у разі — int .

// масиви можуть бути ініціалізовані при оголошенні: int a = (5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 ); // ініціалізація одновимірного масиву

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

Int a=(5,-12,-12,9,10,0,-9,-12,-1,23,65,64,11,43,39,-15); // Ініціалізації масиву без визначення його розміру.

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

// array.cpp: визначає точку входу для консольної програми. #include "stdafx.h" #include << "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } system("pause"); return 0; }

// код Code::Blocks

// код Dev-C++

// array.cpp: визначає точку входу для консольної програми. #include using namespace std; int main(int argc, char* argv) ( cout<< "obrabotka massiva" << endl; int array1 = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 }; // объявление и инициализация одномерного массива cout << "indeks" << "\t\t" << "element massiva" << endl; // печать заголовков for (int counter = 0; counter < 16; counter++) //начало цикла { //вывод на экран индекса ячейки массива, а затем содержимого этой ячейки, в нашем случае - это целое число cout << "array1[" << counter << "]" << "\t\t" << array1 << endl; } return 0; }

У рядках 10 - 11оголошено та проініціалізовано цілочисленний одновимірний масив з ім'ям array1 , розмір якого дорівнює 16 осередкам, тобто такий масив може зберігати 16 чисел. Будь-яка обробка масиву здійсненна лише разом із циклами. Який цикл вибрати для обробки масиву це вам вирішувати. Але найкраще для цього завдання підходить. Змінну-лічильник counter будемо використовувати для звернення до елементів одновимірного масиву array1. У разі продовження циклу for стоїть суворий знак нерівності, оскільки шістнадцятого індексу в одновимірному масиві array1 немає. Оскільки нумерація осередків починається з нуля, то елементів у масиві 16. У тілі циклу for оператор cout друкує елементи одномірного масиву (див. малюнок 2).

Обробка massiva indeks element massiva array1 5 array1 -12 array1 -12 array1 9 array1 10 array1 0 array1 -9 array1 -12 array1 -1 array1 23 array1 65 array1 64 array1 arra1 натисніть будь-яку клавішу. . .

Малюнок 2 - Масиви в С++

Розробимо ще одну програму на обробку одновимірного масиву С++. Програма повинна послідовно зчитувати десять введених чисел із клавіатури. Усі введені цифри підсумувати, результат вивести на екран.

// array_sum.cpp: визначає точку входу для консольної програми. #include "stdafx.h" #include << "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> << "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; system("pause"); return 0; }

// код Code::Blocks

// код Dev-C++

// array_sum.cpp: визначає точку входу для консольної програми. #include using namespace std; int main(int argc, char* argv) ( int array1; // оголошуємо цілий масив cout<< "Enter elementi massiva: " << endl; int sum = 0; for (int counter = 0; counter < 10; counter++) // цикл для считывания чисел cin >> array1; // зчитуємо числа, що вводяться з клавіатури cout<< "array1 = {"; for (int counter = 0; counter < 10; counter++) // цикл для вывода элементов массива cout << array1 << " "; // выводим элементы массива на стандартное устройство вывода for (int counter = 0; counter < 10; counter++) // цикл для суммирования чисел массива sum += array1; // суммируем элементы массива cout << "}\nsum = " << sum << endl; return 0; }

Перед тим як виконувати обробку масиву його необхідно оголосити, причому розмір одновимірного масиву дорівнює 10, оскільки це обумовлено умовою завдання. У змінній sum накопичуватимемо суму елементів одновимірного масиву. Перший цикл for заповнює оголошений одновимірний масив, введеними з клавіатури числами, рядки 12 - 13. Змінна лічильник counter використовується для послідовного доступу до елементів одновимірного масиву array1, починаючи з індексу 0 до 9 включно. Другий цикл for виводить на екран елементи масиву, рядки 15 - 16. Третій цикл for послідовно зчитує елементи одновимірного масиву і підсумовує їх, сума накопичується в змінній sum , рядки 17 - 18. Результат роботи програми дивитись малюнку 3.

Enter elementi massiva: 0 1 2 3 4 5 6 7 8 9 array1 = (0 1 2 3 4 5 6 7 8 9 ) sum = 45 Для продовження натисніть будь-яку клавішу. . .

Малюнок 3 - Масиви в С++

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

Двовимірні масиви С++

До цього ми розглядали одномірні масиви, якими який завжди можна обмежитися. Допустимо, необхідно обробити деякі дані з таблиці. У таблиці є дві характеристики: кількість рядків та кількість стовпців. Також і в двовимірному масиві, крім кількості елементів масиву, є такі характеристики як кількість рядків і кількість стовпців двовимірного масиву. Тобто, візуально, двовимірний масив — це звичайна таблиця з рядками та стовпцями. Фактично двовимірний масив – це одномірний масив одновимірних масивів. Структура двовимірного масиву з ім'ям a , розміром m на n показана нижче (див. малюнок 4).

Малюнок 4 - Масиви в С++

де, m - кількість рядків двовимірного масиву;
n - кількість стовпців двовимірного масиву;
m * n – кількість елементів масиву.

// синтаксис оголошення двовимірного масиву /*тип даних*/ /*ім'я масиву*/;

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

  • тип даних;
  • ім'я масиву.

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

// Приклад оголошення двомірного масиву: int a;

  • a - ім'я цілісного масиву
  • число перших квадратних дужках вказує кількість рядків двовимірного масиву, у разі їх 5;
  • число у других квадратних дужках показує кількість стовпців двовимірного масиву, у разі їх 3.

// ініціалізація двовимірного масиву: int a = ((4, 7, 8), (9, 66, -1), (5, -5, 0), (3, -3, 30), (1, 1, 1) );

У цьому масиві 5 рядків, 3 стовпці. після знака присвоїти ставляться загальні фігурні дужки, всередині яких ставиться стільки пар фігурних дужок, скільки має бути рядків у двовимірному масиві, причому ці дужки поділяються комами. У кожній парі фігурних дужок записувати через кому елементи двовимірного масиву. У всіх фігурних дужках кількість елементів має збігатися. Так як у масиві п'ять рядків, то й внутрішніх пар дужок також п'ять. У внутрішніх дужках записано три елементи, оскільки кількість стовпців — три. Графічно наш масив буде виглядати як двомірна таблиця (див. малюнок 5).

Малюнок 5 - Масиви в С++

У кожному осередку двовимірного масиву aпоказано значення, в нижньому правому кутку показано адресу цієї комірки. Адресою осередку двовимірного масиву є ім'я масиву, номер рядка та номер стовпця.

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

// array2.cpp: визначає точку входу для консольної програми. #include "stdafx.h" #include < 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) else cout<< " "; // вывести два пробела cout << endl; } system("pause"); return 0; }

// код Code::Blocks

// код Dev-C++

// array2.cpp: визначає точку входу для консольної програми. #include using namespace std; int main(int argc, char* argv) ( // 1-умовно "стінки лабіринту" // 2-"правильний шлях, вихід з лабіринту" // 0-"хибний шлях" int mas = ((1,2,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,), // ініціалізація двовимірного масиву (1,2,1,0 ,0,1,0,1,2,2,2,1,1,1,1,0,0,0,0,1,), (1,2,1,1,0,1,0, 1,2,1,2,2,2,2,1,0,1,1,0,1,), (1,2,2,2,2,2,2,1,2,1,1 ,1,1,2,1,0,0,1,0,1,), (1,1,1,1,1,1,2,1,2,1,0,0,1,2, 1,1,0,1,0,1,), (1,0,0,1,0,0,2,2,2,1,1,0,0,2,0,0,0,1 ,0,1,), (1,0,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,1,0,1,), (1,0,0,0,0,0,0,0,0,1,1,1,1,2,1,0,0,0,0,1,), (1,1,1, 1,1,1,0,1,1,1,2,2,2,2,1,0,1,1,1,1,), (1,1,0,0,0,1,0 ,0,1,1,2,1,1,1,1,0,0,0,0,1,), (1,0,0,1,0,0,0,0,0,1, 2,2,2,2,1,1,1,1,0,1,), (1,1,1,1,1,1,1,1,1,1,1,1,1,2 ,1,0,0,0,0,1,), (1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,0,1, 1,1,1,), (1,2,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,) , (1,2,1,0,0,0,1,2,2,2,1,0,0,0,0,0,1,1,0,1,), (1,2,1 ,1,1,1,1,2,1,2,1,1,1,0,1,0,0,0,0,1,), (1,2,1,2,2,2, 1,2,1,2,2,2,1,1,1,1,1,1,1,1,), (1,2,1,2,1,2,1,2,1,0 ,1,2,2,2,2,2,2,2,2,1,), (1,2,1,2,1,2,1,2,1,0,1,1,1, 1,1,1,1,1,2,1,), (1,2,1,2,1,2,1,2,1,0,0,0,0,0,0,0,0 ,0,2,1,), (1,2,1,2,1,2,2,2,1,0,1,1,1,1,1,1,0,1,2,1, ), (1,2,1,2,1,1,1,1,1,0,0,0,1,0,1,0,0,1,2,1,), (1,2, 1,2,2,1,0,0,1,1,1,0,0,0,1,0,1,1,2,1,), (1,2,1,1,2,1 ,1,0,0,0,0,0,1,0,1,0,0,1,2,1,), (1,2,1,1,2,1,0,0,1, 1,1,1,1,1,1,1,1,1,2,1,), (1,2,1,1,2,1,1,0,1,2,2,2,2 ,2,2,2,2,2,2,1,), (1,2,1,1,2,1,0,0,1,2,1,1,1,1,1,1, 1,1,1,1,), (1,2,1,1,2,1,0,1,1,2,1,1,1,1,1,1,1,1,2,2 ,), (1,2,1,1,2,1,0,0,1,2,1,1,2,2,2,2,2,2,2,1,), (1,2 ,1,1,2,1,0,1,1,2,1,1,2,1,1,1,1,1,1,1,), (1,2,1,1,2, 1,0,0,1,2,1,1,2,1,0,0,0,1,0,1,), (1,2,2,2,2,1,0,1,1 ,2,2,2,2,0,0,1,0,0,0,1,), (1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,))); // Два цикли - внутрішній і зовнішній, що здійснюють звернення до кожного елементу масиву for (int i = 0; i< 33; i++) //переключение по строкам { for (int j = 0; j < 20; j++)// переключение по столбцам if (mas[i][j] == 1) { // вывести два раза символ (номер которого 176 в таблице аски) в консоль cout << static_cast(176); cout<< static_cast(176); ) else cout<< " "; // вывести два пробела cout << endl; } return 0; }

Правильний і хибний шляхи можна було б позначати однією і тією ж цифрою, наприклад, нулем, але для наочності правильний шлях позначений цифрою 2. Ініціалізація масиву виконувалася вручну, тільки для того, щоб спростити програму. Так як у програмі виконується обробка двовимірного масиву, потрібні два цикли для перемикання між елементами двовимірного масиву. Перший цикл for виконує перемикання між рядками двовимірного масиву. Оскільки рядків у двовимірному масиві 33, то змінна-лічильник i інкрементується від 0 до 33, рядок 46. Всередині першого циклу стоїть цикл for, який перемикається між елементами рядка двовимірного масиву. У тілі другого циклу for всередині виконується унарна операція перетворення типу даних — static_cast<>() , яка друкує символ під номером 176. Операція перетворення типів даних дублюється для збільшення ширини лабіринту. Результат роботи програми (див. рисунок 6).

Малюнок 6 - Масиви в С++

Поломки