SlideShare a Scribd company logo
1 of 27
Класифікація структур даних
1. Прості (базові) структури даних
2. Інтегровані (структуровані)
Типи зв’язків між структурами
даних
Операції над структурами даних
Створення полягає у виділенні пам’яті для зберігання структури
даних.
Знищення структур даних протилежна до операції створення – вона
звільнює пам’ять, яку займала структура, для подальшого використання.
Вибору використовується програмістами для доступу до даних в
самій структурі.
Поновлення дозволяє змінити значення даних в структурі даних.
Масиви
5
Масиви
Масив – це група однотипних елементів, які мають загальне ім'я та
розміщуються в пам'яті поряд.
Особливості:
• всі елементи мають один тип
• весь масив має одне ім'я
• всі елементи розміщуються в пам'яті поряд
Створення масиву
тип ім’я [к-сть_елементів]
тип - будь- який із вам відомих типів. Визначає, елементи якого
типу будуть зберігатися у масиві.
ім’я – аналогічно зі змінними. По цьому імені створюються
звернення до окремих елементів.
Н-д: int a [100], bool apple1[1000]
Потрібно пам’ятати:
1. К-сть елементів завжди є натуральним числом.
2. Замість кількості елементів не можна писати змінні.
6
Масиви
Для указання елемента
• Назва масиву
• Номер позиції
Формат:
ім'я масиву [ номер позиції ]
• Перший елемент на позиції 0
•n елементів в массиві c:
c[ 0 ], c[ 1 ]...c[ n – 1 ]
Ім'я масиву
Номер позиції
c[6]
-45
6
0
72
1543
-89
0
62
-3
1
6453
78
c[0]
c[1]
c[2]
c[3]
c[11]
c[10]
c[9]
c[8]
c[7]
c[5]
c[4]
7
Оголошення масивів
Приклад оголошення:
int X[10], Y[10];
float zz, A[20];
char s[80];
Оголошення з присвоєнням початкових значень:
int A[4] = { 8, -3, 4, 6 };
float B[2] = { 1.2 };
char C[3] = { 'A', '1', 'Ю' };
int В[4] = { 8, -3, 4, 6, 5 };
Інші
нульові!
Синтаксична
помилка
Якщо не вказано розмір, він визначається
ініціалізацією
int n[ ] = { 1, 2, 3, 4, 5 };
розмір масиву буде 5
8
Масиви
Оголошення:
Ввід з клавіатури:
Поелементні операції:
const int N = 5;
int A[N], i;
cout<<"Input 5 elements:"<<endl;
for(i=0;i<5;i++){
cout<<"a["<<i<<"]=";
cin>>a[i];
}
A[0] =
A[1] =
A[2] =
A[3] =
A[4] =
5
7
3
4
8
for( i=0; i < N; i++ ) a[i] = a[i]*2;
Результат:
10 14 6 8 16
Вивід на екран
1 спосіб виводу:
cout<< "1 Output array:"<<endl;
for(i=0;i<5;i++){
cout<<"a["<<i<<"]="<< a[i]<<endl;
}
2 спосіб виводу:
cout<< "1 Output array:"<<endl;
for(i=0;i<5;i++){
cout<< a[i]<<”t”;
}
cout<< endl;
10
Заповнення масиву випадковими числами
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
Int main()
{
const int N = 30;
int A[N], i;
cout << "Іnitial array:"<<endl;
for (i = 0; i < N; i++ ) {
A[i] = rand ()% 10 + 50;
cout<< A[i]<<endl;
}
return 0;
}
Який інтервал?
?
[ 50 … 59 ]
11
Сортування
Сортування – це розміщення елементів масиву в
заданому порядку (за зростанням, за спаданням).
Задача: переставити елементи масиву в порядку
зростання.
Алгоритми:
• прості і зрозумілі, але неефективні для великих масивів
 метод бульбашок
 метод вибору
 метод вставки
• складні, але ефективні
 «швидке сортування» (Quick Sort)
 сортування «кучею» (Heap Sort)
 сортування злиттям
 пірамідальне сортування
складність
O(N2)
складність
O(N·logN)
время
N
O(N2)
O(N·logN)
12
Метод бульбашок
Ідея – бульбашка повітря в стакані води піднімається з дна
наверх.
Для масивів – самий маленький («легкий») елемент
переміщається наверх («вспливає»).
5
2
1
3
5
2
1
3
5
1
2
3
1
5
2
3
• починаючи знизу, порівнюємо
два сусідніх елементи; якщо вони
стоять «неправильно», міняємо їх
місцями
• за 1 прохід по масиву один
елемент (самий маленький) стає
на своє місце
1
5
2
3
1
5
2
3
1
2
5
3
1-ий прохід
2-ий прохід 3-ій прохід
1
2
5
3
1
2
3
5
Для сортування масиву з N
елементів потрібен
N-1 прохід (достатньо
поставити на свої місця N-
1 елементів).
13
Програма (1-ий прохід)
5
2
…
6
3
0
1
…
N-2
N-1
порівнюються пари
A[N-2] і A[N-1],
A[N-3] і A[N-2]
…
A[0] і A[1]
A[j] і A[j+1]
for( j = N-2; j >= 0 ; j-- )
if ( A[j] > A[j+1] ) {
c = A[j];
A[j] = A[j+1];
A[j+1] = c;
}
0
14
Програма (наступні проходи)
2-ий прохід
A[0] уже на своєму місці!
!
for ( j = N-2; j >= 1 ; j-- )
if ( A[j] > A[j+1] ) {
c = A[j];
A[j] = A[j+1];
A[j+1] = c;
}
1
(i+1)-ий прохід
for ( j = N-2; j >= i ; j-- )
...
i
1
5
…
3
6
0
1
…
N-2
N-1
15
Програма
main()
{
const int N = 10;
int A[N], i, j, c;
// заповнити масив
// вивести початковий масив
for (i = 0; i < N-1; i ++){
for (j = N-2; j >= i ; j --)
if ( A[j] > A[j+1] ) {
с = A[j];
A[j] = A[j+1];
A[j+1] = с;
}
}
// вивести отриманий масив
}
Чому цикл для i < N-1,
а не i < N?
?
елементи вище
A[i] уже
поставлені
i
міняємо
A[j] і
A[j+1]
16
Метод бульбашок з прапорцем
Ідея – якщо при виконанні метода бульбашок не
було обмінів, масив уже відсортовано і інші
проходи не потрібні.
Реалізація: змінна-прапорець, показує, чи був
обмін; якщо вона дорівнює 0, то вихід.
do {
flag = 0; // скинути прапорець
for (j = N-2; j >= 0; j --)
if ( A[j] > A[j+1] ) {
с = A[j];
A[j] = A[j+1];
A[j+1] = с;
flag = 1; // установити прапорець
}
}
while ( flag ); // вихід при flag = 0
flag = 0;
flag = 1;
( flag );
int flag;
2
1
4
3
1
2
3
4
17
Метод бульбашок з прапорцем
i = 0;
do {
flag = 0; // скинути прапорець
for ( j = N-2; j >= i ; j -- )
if ( A[j] > A[j+1] ) {
с = A[j];
A[j] = A[j+1];
A[j+1] = с;
flag = 1; // установити прапорець
}
i ++;
}
while ( flag ); // вихід при flag = 0
i = 0;
i
i ++;
18
Метод вибору
Ідея:
• знайти мінімальний елемент і поставити на перше
місце (поміняти місцями з A[0])
• з тих елементів, що залишились знайти
мінімальний елемент і поставити на друге місце
(поміняти місцями з A[1]), і т.д.
4
3
1
2
1
3
4
2
1
2
4
3
1
2
3
4
19
Метод вибору
N
for( i = 0; i < N-1 ; i ++ ) {
nMin = i ;
for ( j = i+1; j < N; j ++)
if( A[j] < A[nMin] ) nMin = j;
if( nMin != i ) {
c = A[i];
A[i] = A[nMin];
A[nMin] = c;
}
}
N-1
потрібно N-1
проходів
пошук мінімального
від A[i] до A[N-1]
якщо потрібно,
переставляємо
Чи можна забрати if?
?
i+1
i
20
Матриці
Матриця –це прямокутна таблиця однотипних елементів.
Матриця – це масив, в якому кожен елемент має два індекси
(номер рядка і номер стовбця).
1 4 7 3 6
2 -5 0 15 10
8 9 11 12 20
0
1
2
0 1 2 3 4
A
7
0
11
2 -5 0 15 10
12
рядок 1
стовбець 2
комірка A[2][3]
21
Матриця
Оголошення:
const int N = 3, M = 4;
int A[N][M],B[3][4];
float a[2][2] = {{3.2, 4.3}, {1.1, 2.2}};
char sym[2][2] = { 'a', 'b', 'c', 'd' };
int mas [2][5] ={ 1, 5, 3, 7, 4,10, 11, ІЗ, 14, 25 };
int mas [ ][5] ={ 1, 5, 3, 7, 4, 10, 11, 13, 14, 25};
int mas [ ][5] ={ { 1, 5, 3, 7, 4 },{10, 11, 13, 14, 25} };
Ввід з клавіатури:
for ( i = 0; i < N; i ++ )
for ( j = 0; j < M; j ++ ) {
cout<<“A[“<<i<<“][“<<j<<“]=“;
cin>>A[i][j] ;
} 54
A[0][0]=25
A[0][1]=14
A[0][2]=14
...
A[2][3]=
i j
22
Матриці
Вивід на екран
for ( i = 0; i < N; i ++ ) {
for ( j = 0; j < M; j ++ )
cout<<setw(5)<< A[i][j];
cout<<endl;
}
12 25 1 13
156 1 12 447
1 456 222 23
Результат
23
Обробка всіх елементів матриці
Задача: заповнити матрицю з 3 рядків і 4 стовбців випадковими
числами і вивести її на екран. Знайти суму елементів
матриці.
Int main()
{
const int N = 3, M = 4;
int A[N][M], i, j, S = 0;
... // заповнення матриці і вивід на екран
for ( i = 0; i < N; i ++ )
for ( j = 0; j < M; j ++ )
S += A[i][j];
cout<<"Сума елементів матриці =”<< S <<endl;
}
for ( i = 0; i < N; i ++ )
for ( j = 0; j < M; j ++ )
S += A[i][j];
24
Операції з матрицями
Задача 1. Вивести на екран головну діагональ квадратної
матриці з N рядків і N стовбців.
A[0][N-1]
A[1][1]
A[2][2]
A[N-1][N-1]
for ( i = 0; i < N; i ++ )
cout << A[i][i] << endl;
Задача 2. Вивести на екран другу діагональ.
A[N-1][0]
A[N-2][1]
A[1][N-2]
сума номерів рядка і стовбця N-1
A[0][0]
for ( i = 0; i < N; i ++)
cout << A[i][ N-1-i ]<< endl;
25
Операції з матрицями
Задача 3. Знайти суму елементів, які стоять на головній
діагоналі і нижче неї.
рядок 0: A[0][0]
рядок 1: A[1][0]+A[1][1]
...
рядок i: A[i][0]+A[i][2]+...+A[i][i]
S = 0;
for ( i = 0; i < N; i ++ )
for ( j = 0; j <= i; j ++ )
S += A[i][j];
цикл за всіма рядками
додаємо потрібні
елементи рядка i
26
Завдання
Заповнити матрицю з 7 рядків і 7 стовбців випадковими
числами в інтервалі [ 1, 9] і вивести її на екран. Обнулити
елементи, які відмічено зеленим фоном, і вивести отриману
матрицю на екран.
«Задача 4»: «Задача 5»:
Задача 4 Задача 5

More Related Content

Similar to Масиви Структури даних (1).ppt

Завдання олімпіади
Завдання олімпіадиЗавдання олімпіади
Завдання олімпіадиoksana oksana
 
IT Talks The approach for solving impossible tasks (dynamic programming)
IT Talks The approach for solving impossible tasks (dynamic programming)IT Talks The approach for solving impossible tasks (dynamic programming)
IT Talks The approach for solving impossible tasks (dynamic programming)Vadym Muliavka
 
лекція 8
лекція 8лекція 8
лекція 8cit-cit
 
лекція 8
лекція 8лекція 8
лекція 8cit-cit
 
Учень, як вчений
Учень, як вченийУчень, як вчений
Учень, як вченийCveldulf
 
Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...
Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...
Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...Вероника Черепинец
 
1218562
12185621218562
1218562nsahar
 
лекції 7
лекції 7лекції 7
лекції 7cit-cit
 
фкз лекція 15
фкз лекція 15фкз лекція 15
фкз лекція 15cit-cit
 
Розв’язування систем лінійних рівнянь
Розв’язування систем лінійних рівняньРозв’язування систем лінійних рівнянь
Розв’язування систем лінійних рівняньInna Gornikova
 
Lecture 13 Local Optimization on Mobile Devices
Lecture 13 Local Optimization on Mobile DevicesLecture 13 Local Optimization on Mobile Devices
Lecture 13 Local Optimization on Mobile DevicesMaksym Davydov
 
Графік функції франгмент
Графік функції франгментГрафік функції франгмент
Графік функції франгментAnnaTimohovich
 
мпр т 9
мпр т 9мпр т 9
мпр т 9Ivan
 
презентація моя 23 06-2016
презентація моя 23 06-2016презентація моя 23 06-2016
презентація моя 23 06-2016GTM_NUFT
 
мпр т 8
мпр т 8мпр т 8
мпр т 8Ivan
 

Similar to Масиви Структури даних (1).ppt (20)

Завдання олімпіади
Завдання олімпіадиЗавдання олімпіади
Завдання олімпіади
 
IT Talks The approach for solving impossible tasks (dynamic programming)
IT Talks The approach for solving impossible tasks (dynamic programming)IT Talks The approach for solving impossible tasks (dynamic programming)
IT Talks The approach for solving impossible tasks (dynamic programming)
 
масиви
масивимасиви
масиви
 
лекція 8
лекція 8лекція 8
лекція 8
 
лекція 8
лекція 8лекція 8
лекція 8
 
Matrici
MatriciMatrici
Matrici
 
Учень, як вчений
Учень, як вченийУчень, як вчений
Учень, як вчений
 
Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...
Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...
Синтез оптимального керування для систем диференціальних рівнянь с нефіксован...
 
1218562
12185621218562
1218562
 
лекції 7
лекції 7лекції 7
лекції 7
 
фкз лекція 15
фкз лекція 15фкз лекція 15
фкз лекція 15
 
Розв’язування систем лінійних рівнянь
Розв’язування систем лінійних рівняньРозв’язування систем лінійних рівнянь
Розв’язування систем лінійних рівнянь
 
Lecture 13 Local Optimization on Mobile Devices
Lecture 13 Local Optimization on Mobile DevicesLecture 13 Local Optimization on Mobile Devices
Lecture 13 Local Optimization on Mobile Devices
 
Графік функції франгмент
Графік функції франгментГрафік функції франгмент
Графік функції франгмент
 
мпр т 9
мпр т 9мпр т 9
мпр т 9
 
Python
PythonPython
Python
 
презентація моя 23 06-2016
презентація моя 23 06-2016презентація моя 23 06-2016
презентація моя 23 06-2016
 
Модулі Python
Модулі PythonМодулі Python
Модулі Python
 
Less37
Less37Less37
Less37
 
мпр т 8
мпр т 8мпр т 8
мпр т 8
 

Recently uploaded

Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...JurgenstiX
 
Р.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняР.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняAdriana Himinets
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяAdriana Himinets
 
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»tetiana1958
 
Хімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класХімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класkrementsova09nadya
 
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»tetiana1958
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfssuser54595a
 

Recently uploaded (10)

Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
Принципові відмінності досконалої (повної) конкуренції від інших форм організ...
 
Р.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповіданняР.Шеклі "Запах думки". Аналіз оповідання
Р.Шеклі "Запах думки". Аналіз оповідання
 
Її величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptxЇї величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptx
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. Біографія
 
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
 
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
 
Хімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 класХімічні елементи в літературних творах 8 клас
Хімічні елементи в літературних творах 8 клас
 
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
Відкрита лекція на тему «Контроль бур'янів в посівах соняшника»
 
Віртуальна виставка нових надходжень 2-24.pptx
Віртуальна виставка нових надходжень 2-24.pptxВіртуальна виставка нових надходжень 2-24.pptx
Віртуальна виставка нових надходжень 2-24.pptx
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
 

Масиви Структури даних (1).ppt

  • 1. Класифікація структур даних 1. Прості (базові) структури даних 2. Інтегровані (структуровані)
  • 2. Типи зв’язків між структурами даних
  • 3. Операції над структурами даних Створення полягає у виділенні пам’яті для зберігання структури даних. Знищення структур даних протилежна до операції створення – вона звільнює пам’ять, яку займала структура, для подальшого використання. Вибору використовується програмістами для доступу до даних в самій структурі. Поновлення дозволяє змінити значення даних в структурі даних.
  • 5. 5 Масиви Масив – це група однотипних елементів, які мають загальне ім'я та розміщуються в пам'яті поряд. Особливості: • всі елементи мають один тип • весь масив має одне ім'я • всі елементи розміщуються в пам'яті поряд Створення масиву тип ім’я [к-сть_елементів] тип - будь- який із вам відомих типів. Визначає, елементи якого типу будуть зберігатися у масиві. ім’я – аналогічно зі змінними. По цьому імені створюються звернення до окремих елементів. Н-д: int a [100], bool apple1[1000] Потрібно пам’ятати: 1. К-сть елементів завжди є натуральним числом. 2. Замість кількості елементів не можна писати змінні.
  • 6. 6 Масиви Для указання елемента • Назва масиву • Номер позиції Формат: ім'я масиву [ номер позиції ] • Перший елемент на позиції 0 •n елементів в массиві c: c[ 0 ], c[ 1 ]...c[ n – 1 ] Ім'я масиву Номер позиції c[6] -45 6 0 72 1543 -89 0 62 -3 1 6453 78 c[0] c[1] c[2] c[3] c[11] c[10] c[9] c[8] c[7] c[5] c[4]
  • 7. 7 Оголошення масивів Приклад оголошення: int X[10], Y[10]; float zz, A[20]; char s[80]; Оголошення з присвоєнням початкових значень: int A[4] = { 8, -3, 4, 6 }; float B[2] = { 1.2 }; char C[3] = { 'A', '1', 'Ю' }; int В[4] = { 8, -3, 4, 6, 5 }; Інші нульові! Синтаксична помилка Якщо не вказано розмір, він визначається ініціалізацією int n[ ] = { 1, 2, 3, 4, 5 }; розмір масиву буде 5
  • 8. 8 Масиви Оголошення: Ввід з клавіатури: Поелементні операції: const int N = 5; int A[N], i; cout<<"Input 5 elements:"<<endl; for(i=0;i<5;i++){ cout<<"a["<<i<<"]="; cin>>a[i]; } A[0] = A[1] = A[2] = A[3] = A[4] = 5 7 3 4 8 for( i=0; i < N; i++ ) a[i] = a[i]*2; Результат: 10 14 6 8 16
  • 9. Вивід на екран 1 спосіб виводу: cout<< "1 Output array:"<<endl; for(i=0;i<5;i++){ cout<<"a["<<i<<"]="<< a[i]<<endl; } 2 спосіб виводу: cout<< "1 Output array:"<<endl; for(i=0;i<5;i++){ cout<< a[i]<<”t”; } cout<< endl;
  • 10. 10 Заповнення масиву випадковими числами #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; Int main() { const int N = 30; int A[N], i; cout << "Іnitial array:"<<endl; for (i = 0; i < N; i++ ) { A[i] = rand ()% 10 + 50; cout<< A[i]<<endl; } return 0; } Який інтервал? ? [ 50 … 59 ]
  • 11. 11 Сортування Сортування – це розміщення елементів масиву в заданому порядку (за зростанням, за спаданням). Задача: переставити елементи масиву в порядку зростання. Алгоритми: • прості і зрозумілі, але неефективні для великих масивів  метод бульбашок  метод вибору  метод вставки • складні, але ефективні  «швидке сортування» (Quick Sort)  сортування «кучею» (Heap Sort)  сортування злиттям  пірамідальне сортування складність O(N2) складність O(N·logN) время N O(N2) O(N·logN)
  • 12. 12 Метод бульбашок Ідея – бульбашка повітря в стакані води піднімається з дна наверх. Для масивів – самий маленький («легкий») елемент переміщається наверх («вспливає»). 5 2 1 3 5 2 1 3 5 1 2 3 1 5 2 3 • починаючи знизу, порівнюємо два сусідніх елементи; якщо вони стоять «неправильно», міняємо їх місцями • за 1 прохід по масиву один елемент (самий маленький) стає на своє місце 1 5 2 3 1 5 2 3 1 2 5 3 1-ий прохід 2-ий прохід 3-ій прохід 1 2 5 3 1 2 3 5 Для сортування масиву з N елементів потрібен N-1 прохід (достатньо поставити на свої місця N- 1 елементів).
  • 13. 13 Програма (1-ий прохід) 5 2 … 6 3 0 1 … N-2 N-1 порівнюються пари A[N-2] і A[N-1], A[N-3] і A[N-2] … A[0] і A[1] A[j] і A[j+1] for( j = N-2; j >= 0 ; j-- ) if ( A[j] > A[j+1] ) { c = A[j]; A[j] = A[j+1]; A[j+1] = c; } 0
  • 14. 14 Програма (наступні проходи) 2-ий прохід A[0] уже на своєму місці! ! for ( j = N-2; j >= 1 ; j-- ) if ( A[j] > A[j+1] ) { c = A[j]; A[j] = A[j+1]; A[j+1] = c; } 1 (i+1)-ий прохід for ( j = N-2; j >= i ; j-- ) ... i 1 5 … 3 6 0 1 … N-2 N-1
  • 15. 15 Програма main() { const int N = 10; int A[N], i, j, c; // заповнити масив // вивести початковий масив for (i = 0; i < N-1; i ++){ for (j = N-2; j >= i ; j --) if ( A[j] > A[j+1] ) { с = A[j]; A[j] = A[j+1]; A[j+1] = с; } } // вивести отриманий масив } Чому цикл для i < N-1, а не i < N? ? елементи вище A[i] уже поставлені i міняємо A[j] і A[j+1]
  • 16. 16 Метод бульбашок з прапорцем Ідея – якщо при виконанні метода бульбашок не було обмінів, масив уже відсортовано і інші проходи не потрібні. Реалізація: змінна-прапорець, показує, чи був обмін; якщо вона дорівнює 0, то вихід. do { flag = 0; // скинути прапорець for (j = N-2; j >= 0; j --) if ( A[j] > A[j+1] ) { с = A[j]; A[j] = A[j+1]; A[j+1] = с; flag = 1; // установити прапорець } } while ( flag ); // вихід при flag = 0 flag = 0; flag = 1; ( flag ); int flag; 2 1 4 3 1 2 3 4
  • 17. 17 Метод бульбашок з прапорцем i = 0; do { flag = 0; // скинути прапорець for ( j = N-2; j >= i ; j -- ) if ( A[j] > A[j+1] ) { с = A[j]; A[j] = A[j+1]; A[j+1] = с; flag = 1; // установити прапорець } i ++; } while ( flag ); // вихід при flag = 0 i = 0; i i ++;
  • 18. 18 Метод вибору Ідея: • знайти мінімальний елемент і поставити на перше місце (поміняти місцями з A[0]) • з тих елементів, що залишились знайти мінімальний елемент і поставити на друге місце (поміняти місцями з A[1]), і т.д. 4 3 1 2 1 3 4 2 1 2 4 3 1 2 3 4
  • 19. 19 Метод вибору N for( i = 0; i < N-1 ; i ++ ) { nMin = i ; for ( j = i+1; j < N; j ++) if( A[j] < A[nMin] ) nMin = j; if( nMin != i ) { c = A[i]; A[i] = A[nMin]; A[nMin] = c; } } N-1 потрібно N-1 проходів пошук мінімального від A[i] до A[N-1] якщо потрібно, переставляємо Чи можна забрати if? ? i+1 i
  • 20. 20 Матриці Матриця –це прямокутна таблиця однотипних елементів. Матриця – це масив, в якому кожен елемент має два індекси (номер рядка і номер стовбця). 1 4 7 3 6 2 -5 0 15 10 8 9 11 12 20 0 1 2 0 1 2 3 4 A 7 0 11 2 -5 0 15 10 12 рядок 1 стовбець 2 комірка A[2][3]
  • 21. 21 Матриця Оголошення: const int N = 3, M = 4; int A[N][M],B[3][4]; float a[2][2] = {{3.2, 4.3}, {1.1, 2.2}}; char sym[2][2] = { 'a', 'b', 'c', 'd' }; int mas [2][5] ={ 1, 5, 3, 7, 4,10, 11, ІЗ, 14, 25 }; int mas [ ][5] ={ 1, 5, 3, 7, 4, 10, 11, 13, 14, 25}; int mas [ ][5] ={ { 1, 5, 3, 7, 4 },{10, 11, 13, 14, 25} }; Ввід з клавіатури: for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) { cout<<“A[“<<i<<“][“<<j<<“]=“; cin>>A[i][j] ; } 54 A[0][0]=25 A[0][1]=14 A[0][2]=14 ... A[2][3]= i j
  • 22. 22 Матриці Вивід на екран for ( i = 0; i < N; i ++ ) { for ( j = 0; j < M; j ++ ) cout<<setw(5)<< A[i][j]; cout<<endl; } 12 25 1 13 156 1 12 447 1 456 222 23 Результат
  • 23. 23 Обробка всіх елементів матриці Задача: заповнити матрицю з 3 рядків і 4 стовбців випадковими числами і вивести її на екран. Знайти суму елементів матриці. Int main() { const int N = 3, M = 4; int A[N][M], i, j, S = 0; ... // заповнення матриці і вивід на екран for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S += A[i][j]; cout<<"Сума елементів матриці =”<< S <<endl; } for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S += A[i][j];
  • 24. 24 Операції з матрицями Задача 1. Вивести на екран головну діагональ квадратної матриці з N рядків і N стовбців. A[0][N-1] A[1][1] A[2][2] A[N-1][N-1] for ( i = 0; i < N; i ++ ) cout << A[i][i] << endl; Задача 2. Вивести на екран другу діагональ. A[N-1][0] A[N-2][1] A[1][N-2] сума номерів рядка і стовбця N-1 A[0][0] for ( i = 0; i < N; i ++) cout << A[i][ N-1-i ]<< endl;
  • 25. 25 Операції з матрицями Задача 3. Знайти суму елементів, які стоять на головній діагоналі і нижче неї. рядок 0: A[0][0] рядок 1: A[1][0]+A[1][1] ... рядок i: A[i][0]+A[i][2]+...+A[i][i] S = 0; for ( i = 0; i < N; i ++ ) for ( j = 0; j <= i; j ++ ) S += A[i][j]; цикл за всіма рядками додаємо потрібні елементи рядка i
  • 26. 26 Завдання Заповнити матрицю з 7 рядків і 7 стовбців випадковими числами в інтервалі [ 1, 9] і вивести її на екран. Обнулити елементи, які відмічено зеленим фоном, і вивести отриману матрицю на екран. «Задача 4»: «Задача 5»: