You are on page 1of 20

Програмування

на мові С++

Масиви
2
Заповнення випадковими числами
#include <stdlib.h> // випадкові числа
#include <ctime> // містить time()
RAND_MAX – максимальне випадкове ціле число
(зазвичай RAND_MAX = 32767)
Випадкове ціле число в інтервалі [0,RAND_MAX]
x = rand(); // перше число
x = rand(); // уже друге число

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


програми:
srand(time(NULL));//параметром є поточний системний час
Масштабування діапазону генерації випадкових чисел:
random_number = firs_value + rand() % last_value;
// де firs_value - мінімальне число з бажаного діапазону
// last_value - ширина вибірки
Приклад генерації випадкових чисел
#include <iostream> #include <iostream>
#include <stdlib.h> #include <stdlib.h>
#include <ctime>
using namespace std;
using namespace std;
int main(int argc, char** argv)
{ int main(int argc, char** argv) {
cout << srand(time(NULL));
RAND_MAX<<endl; cout <<RAND_MAX<<endl;
int x=rand(); int x=rand();
cout << x<< endl; cout << x<< endl;
x=rand(); x=rand();
cout << x<< endl; cout << x<< endl;
x=rand() % 3 +1; x=rand() % 3 +1;
cout << "x="<< x << endl; cout << "x="<< x << endl;
system("pause"); system("pause");
return 0;
return 0; }
}
Приклад генерації чисел в різному інтервалі
1. #include <iostream>
2. #include <stdlib.h>
3. #include <ctime>
4. #include <iomanip> Результат
5. using namespace std;
6. int main(int argc, char** argv)
7. { int x;
8. srand(time(NULL));
9. for (int i=1; i<=50; i++){
10. x=rand()%10-10; // [-10; -1]
11. cout << "x1="<<setw(3) <<x;
12. x=rand()%5+1; //[1; 5]
13. cout << " x2="<<setw(3) <<x;
14. x=rand() % 5 -1; // [-1; 3]
15. cout << " x3="<<setw(3) << x ;
16. x=rand() % 21 -10; // [-10; 10]
17. cout << " x4="<< setw(3) <<x ;
18. x=rand() % 7 -1; // [-1; 5]
19. cout << " x5="<< setw(3) <<x << endl;
20. }
21. system("pause");
22. return 0;
23. }
5

Масиви
Масив – це група однотипних елементів, які мають загальне ім'я
та розміщуються в пам'яті поряд.
Особливості:
• всі елементи мають один тип
• весь масив має одне ім'я
• всі елементи розміщуються в пам'яті поряд
Створення масиву
тип ім’я [к-сть_елементів]
тип - будь- який із вам відомих типів. Визначає, елементи
якого типу будуть зберігатися у масиві.
ім’я – аналогічно зі змінними. По цьому імені створюються
звернення до окремих елементів.
Н-д: int a [100], bool apple1[1000]
Потрібно пам’ятати:
1. К-сть елементів завжди є натуральним числом.
2. Замість кількості елементів не можна писати змінні.
Масиви
Ім'я масиву

Для указання елемента


c[0] -45
• Назва масиву c[1] 6
c[2] 0
• Номер позиції c[3] 72

Формат: c[4]
c[5]
1543
-89
ім'я масиву [ номер позиції ] c[6] 0

• Перший елемент на позиції 0 c[7]


c[8]
62
-3
• n елементів в массиві c: c[9] 1
c[10] 6453
c[ 0 ], c[ 1 ]...c[ n – 1 ] c[11] 78

Номер позиції
6
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; A[0] = 5
for(i=0;i<5;i++){ A[1] = 7
cout<<"a["<<i<<"]="; A[2] = 3
cin>>a[i]; A[3] = 4
}
A[4] = 8
Поелементні операції:
for( i=0; i < N; i++ ) a[i] = a[i]*2;

Результат:
10 14 6 8 16
Вивід на екран мовою С
1 спосіб виводу:
printf ("1 Output array:\n");
for(i=0;i<5;i++){
printf ("a[%d]= %d",i, a[i]);
}

2 спосіб виводу:
printf ("2 Output array:\n");
for(i=0;i<5;i++){
printf ("%d\t",a[i]);
}
Вивід на екран мовою С++
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<<"]="<< a[i]<<endl;
}
11

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


#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
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;
}
12

Як переставити елементи?

Задача: поміняти місцями 2


вміст двох чашок. 1

3
Задача: поміняти місцями вміст двох комірок
пам’яті. x y
c = x; 4
6 2 6
4
x = y;
x = y;
y = x;
y = c;
1

3
? Можна обійтись без c? ?
4
c
13

Реверс масиву
Задача: переставити елементи масиву в
зворотньому порядку (виконати інверсію).
0 1 … N-2 N-1 0 1 … N-2 N-1

3 5 … 9 7 7 9 … 5 3

сума індексів N-1


Алгоритм:
поміняти місцями A[0] і A[N-1], A[1] і A[N-2], …
Псевдокод:
for ( i = 0; i < N;
N /i++
2 ; )i++ )
// поміняти місцями A[i] і A[N-1-i]
14

Програма
main()
{
const int N = 10;
int A[N], i, c;
// заповнити масив
// вивести початковий масив
for ( i = 0; i < N/2; i++ ) {
c = A[i];
A[i] = A[N-1-i];
A[N-1-i] = c;
}
// вивести отриманий масив
}
15

Циклічний зсув
Задача: зсунути елементи масиву вліво на 1 комірку,
перший елемент стає на місце останнього.
0 1 2 3 … N-2 N-1

3 5 8 1 … 9 7

5 8 1 … 9 7 3

Алгоритм:
A[0]=A[1]; A[1]=A[2];… A[N-2]=A[N-1];
Цикл: чому не N?

for ( i = 0; i < N-1; i ++)


A[i] = A[i+1];
16

Програма
main()
{
const int N = 10;
int A[N], i, c;
// заповнити масив
// вивести початковий масив
c = A[0];
for ( i = 0; i < N-1; i ++)
A[i] = A[i+1];
A[N-1] = c;
// вивести отриманий масив
}
17

Максимальний елемент
Задача: знайти в масиві максимальний елемент.
Псевдокод:
max=A[0];
for ( i=1; i < N; i++ )
if ( A[i] > max )
max=A[i];// запам‘ятати новий максимальний елемент A[i]
Задача: знайти в масиві максимальний елемент і його індекс
Псевдокод:

max=A[0];iMax=0;
for ( i=1; i < N; i++ )
if ( A[i] > max ){
max=A[i];
iMax=i;}

? Чому цикл від i=1?


18

Максимальний елемент

За номером елемента iMax завжди можна знайти


його значення A[iMax]. Тому всюди меняємо max
на A[iMax] і забираємо змінну max.

iMax = 0;
for ( i=1; i < N; i++ )
if ( A[i] > A[iMax] ) {
iMax = i;
}
19

Формування масиву за умовою


Задача – знайти в масиві елементи, які задовільняють
деяку умову (наприклад, від’ємні), і скопіювати їх в
другий масив.
Примітивне рішення: A B
0 1 ?
const int N = 5;
int A[N], B[N]; 1 -5 -5
?
// тут заповнити масив A 2 3 ?
for( i = 0; i < N; i ++ ) 3 -2 -2
?
if( A[i] < 0 ) B[i] = A[i]; 4 5 ?

• вибрані елементи не поряд, не на початку


масиву
• незрозуміло, як з ними працювати
20

Формування масиву за умовою


Рішення: ввести лічильник знайдених елементів
count, черговий елемент ставиться на місце
B[count].
int A[N], B[N], count = 0;
A B
// тут заповнити масив A -5
0 1 ?
for( i = 0; i < N; i ++ )
1 -5 -2
?
if( A[i] < 0 ) {
2 3 ?
B[count] = A[i];
3 -2 ?
count ++;
}
4 5 ?
// вивід масиву B
for( i = 0; i < count
count; i ++ )
cout<< B[i]<<endl;

You might also like