Слайд 2
Що є масив?
Масив являє собою сукупність даних,
що
організована певним чином.
Тобто масив – це структура даних.
Слайд 3
Властивості масивів(1)
масив складається з елементів, які мають однаковий
тип;
елементи масиву послідовно, без проміжків, розташовані в одній ділянці
оперативної пам’яті;
кожен з елементів масиву має свій порядковий номер, що зветься індексом;
нумерація елементів починається з 0;
до елементів масиву можна звертатися використовуючи ім’я масиву і індекс у квадратних дужках.
Слайд 4
Властивості масивів(2)
масив може бути одновимірним, або багатовимірним,
У
двовимірному масиві кожний з елементів є одновимірним масивом;
У тривимірному
масиві кожний з елементів є двовимірним масивом;
Слайд 5
Оголошення одновимірного масиву
Приклади оголошень масивів:
int arr [10]
;
int A [10] ={2,5,10};
int A [] ={2, 5,
10, 3, 6, 0, 9, 4, 5, 7};
Слайд 6
Доступ до елементів масиву
Для доступу до елементів масиву
використовується синтаксична конструкція, що складається з імені масиву та
індексу, який записується у квадратних дужках.
Наприклад, A[i], A [0], A [9].
Індексовані елементи масиву можуть бути використані так само, як і прості змінні. Вони можуть бути операндами у виразах, їм можна присвоювати значення, відповідні їх типу.
Слайд 7
Доступ до елементів масиву
int arr[ ] ={2, 5,
10, 3, 6, 0, 9, 4, 5, 7};
Слайд 8
Масиви символів
У мові С символьний рядок розглядається як
масив символів.
Для масиву символів у пам’яті виділяється ділянка, розмір
якої на один байт більше, ніж кількість символів у рядку.
У цей додатковий байт записується ознака кінця рядка - символ ‘\0’.
Слайд 9
Оголошення рядка символів
Приклад:
char str[80] ;
char str[10] ={‘H’, ‘e’,
‘l’, ‘l’, ‘o’, ‘!’, ‘\0’} ;
char str[10] =”Hello!”;
char str[]
=”Hello!”;
Слайд 10
Особливості роботи з масивами
в С, С++
Ніякого контролю
за значеннями індексів, що використовуються для доступу до елементів
масиву, нема.
Ви можете звернутися до «елементу масиву» з номером, який більше максимального, але отримаєте невідомо що.
Ще гірше, якщо ви щось напишете за цим номером
Слайд 11
Масиви і функції
У мовах С, С++не існує такого
типу як «масив». Не можна написати, наприклад, int[ ],
як тип.
З цієї причини у функції не можна вказати масив, як тип того, що повертається функцією.
Але масив можна повернути через параметри функції.
Слайд 12
Масиви, як параметри функцій
Масив, як формальний параметр
функції, оголошується майже так само, як і проста змінна,
але після імені параметру
слід поставити пусті квадратні дужки.
Тип цього параметру має співпадати з типом елементів масиву.
Слайд 13
Масиви, як параметри функцій
Масиви у функції завжди передаються
за посиланням.
Але символ & ставити не потрібно,
бо ім’я
масиву і так є адресом першого елементу масиву.
Слайд 14
Масиви, як параметри функцій
Масив «не знає», скільки у
нього елементів.
Передаючи масив до функції слід передавати і
кількість елементів масиву, що має бути оброблена.
Це число не повинно перевищувати кількість елементів під які виділено пам’ять під час оголошення масиву.
Слайд 15
Приклад функції
для створення масиву
чисел Фібоначі
void fibo(int
ar[], int size){
ar[0] = 0;
ar[1] = 1;
for (int i=2 ; i ar[i] = ar[i - 2] + ar[ i - 1 ];
}
Слайд 16
Виклик функції з масивом
#define MAX 100
void fibo(int
ar[], int size);
int main() {
int fiboArray[MAX];
cout
сформувати: ";
int n; cin>>n;
fibo(fiboArray,n);
for(int i = 0; i < n; i++)
cout<}
Слайд 18
Формування масиву
випадкових чисел
void createRndAr(int ar[], int size,
int mod){
for(int i=0; i
Слайд 19
Операції над масивами
формування масиву випадкових чисел;
введення/виведення масиву чисел;
пошук
суми елементів масиву;
пошук максимального та мінімального елементів масиву та
їх індексів;
пошук індексу елементу масиву за його значенням;
Слайд 20
Введення чисел з консолі(1)
void }
getArFromConByStep(int ar[], int
&n){ coutn;
for(int i=0; i
i++){ cout<<"Введіть число № “
< ";
cin>>ar[i];
}
}
Слайд 21
Введення чисел з консолі (2)
void }
void getArFromConAsLine(int
ar[], int &size){
char s[80];
cout
cin.getline(s,80); //gets(s);
strToArr(s,ar,size);
}
Слайд 22
Перетворення рядка у масив
void strToArr(char s[], int ar[],
int &size){
int i(0); size=0;
forever{
//Цикл пошуку цифри
while(
s[i] != '\0‘ && !isdigit(s[i])) i++;
if(s[i]=='\0') return;
//Формуємо наступне число
for(ar[size]=0; isdigit(s[i]); i++ )
ar[size]=ar[size]*10+(s[i]-48);
size++;
}
}
Слайд 23
Осбливості використання
cin.getline() та gets()
forever{
system("cls");
cout
cout
getchar();
switch(v){
…
case 2: getArFromConAsLine(arr, size);
arToConsole(arr,size);
break;
…
Слайд 24
Виведення масиву на консоль
void arToConsole(int ar[], int size){
for(int i=0; i
}
Слайд 25
Обчислення
суми елементів масиву
int sumAr(int ar[ ],int n)
{
int sum=0;
for (int i = 0; i
< n; ++i) {
sum+=ar[ i ];
}
return sum;
}
Слайд 26
Пошук найбільшого елементу
у масиві
int maxInAr(int m[], int
size){
int mx=INT_MIN;
for(int i=0; imx) mx=m[i];
return mx;
}
Слайд 27
Ще раз про виклик функції
void getArFromConAsLine(int m[], int
&size);
int maxInAr(int m[], int size);
int main(){
int arr[100], sizeArr;
getArFromConAsLine(arr, sizeArr);
cout<<“Найбільше число у масивi: “
< return 0;
}
Слайд 28
Пошук найменшого елементу
у масиві та його індексу
void
idxMn(int m[], int size, int &mn, int &idx){
mn=INT_MAX;
idx= -1;
for(int i=0; i if (m[i] mn=m[i];
idx = i;
}
}
}
Слайд 29
І знов про виклик функції
void idxMn(int m[], int
sz, int &mn, int &idx);
int main(){
int arr[100], sizeArr;
getArFromConAsLine(arr, sizeArr);
int mn, idx;
idxMn(arr, sizeArr, mn, idx);
cout<<"min="< <<"; index="< return 0;
}
Слайд 30
Визначення позиції елементу у масиві
int findPos(int x, int
m[], int size){
for(int i=0; i
return -1;
}
Слайд 32
Вилучення елементу із масиву
void delElement(int element, int ar[],
int &size){
int i=0;
while(i < size){
if(ar[i] ==
element) {
size = size - 1;
for(int j = i; j ar[ j ] = ar[ j+1 ];
}
else i++;
}
}
Слайд 33
Вставка елементу до масиву
void insert(int x,int pos, int
ar[], int &size){
if(possize)return;
for(int i=size;i>pos;i--)
ar[i]=ar[i-1];
ar[pos]=x;
size++;
}
Слайд 34
Переворот масиву
void transArray(int ar[], int size){
for(int i=0;
i
= tmp;
}
}
Слайд 35
Циклічний зсув масиву праворуч
void shiftRight(int ar[], int size){
int buf=ar[size-1];
for(int i=size-1;i>0;i--)
ar[i]=ar[i-1];
ar[0]=buf;
}
Слайд 37
Масив у ролі лічильника
// Тут ми підраховуємо скільки
разів з'явиться // кожне з10 (від 0 до 9)
випадкових чисел
//у вибірці обсягом v
void arrayAsCount(int ar[], int v){
for(int i=0;i<10;i++)
ar[i]=0;
for(int i=0;i ar[rand()%10]++;
}
Слайд 38
Масив накопичених значень
(інтеграл по індексу)
void accumAr(int ar[], int
size){
for(int i=1; i
Слайд 40
Операції над рядками символів
Пошук позиції символу у рядку;
пошук
позиції під рядка у рядку;
копіювання частини рядка;
вилучення частини рядка;
вставка
підрядка у рядок;
перетворення числа у рядок символів;
перетворення рядка символів у число.
Слайд 41
Пошук позиції символу у рядку
int posChar(char str[], char
ch){
for(uint i=0; str[i] != '\0'; i++)
if(str[i]==ch) return
i;
return -1;
}
Слайд 42
Пошук позиції під рядка
у рядку
int posSubstr(char str[],
char sub[]){
for(uint i=0; i
if (j==strlen(sub))return i;
}
return -1;
}
Слайд 43
Копіювання частини рядка
void subStr(char str[], char sub[],
uint
pos, uint n){
//Якщо позиція за межами рядка
if (pos>strlen(str)) n=0;
//Якщо
кількість більша за можливе
else if(pos+n > strlen(str))
n=strlen(str)- pos;
for(uint i=0; i sub[i]=str[pos+i];
sub[n] = '\0';
}
Слайд 44
Вилучення частини рядка
void del(char str[], uint pos, uint
n){
//Якщо позиція за межами рядка
if (pos>=strlen(str)) return;
//Якщо кількість більша
за можливе
if(pos+n > strlen(str))
n = strlen(str) - pos;
for(uint i=pos+n; i<=strlen(str); i++)
str[i-n]=str[i];
}
Слайд 45
Вставка під рядка у рядок
void insert(char str[],char sub[],
uint pos){
//Якщо позиція за межами рядка
if (pos>strlen(str)) return;
//Зсув праворуч частини рядка
for(uint i=strlen(str); i>=pos ;i--)
str[i+strlen(sub)]=str[i];
//Вставка
for(uint i=0; i str[pos+i]=sub[i];
}
Слайд 46
Ціле число у рядок символів
void intToStr(int x, char
str[]){
int i=0, z=abs(x); str[0]='\0';
do{ //Звільняємо місце для цифри
for(int
j=i++; j>=0; j--) str[j+1]=str[j];
str[0]=z%10+48; //Наступна цифра
}while(z/=10);
if(x<0){
for(int j=i; j>=0; j--) str[j+1]=str[j];
str[0]='-';
}
}