Короткі теоретичні відомості. М е т а р о б о т и : вивчення засобів роботи з масивами в C++

Лабораторна робота №9

СТРУКТУРОВАНІ ТИПИ ДАНИХ

РЕГУЛЯРНІ ТИПИ - МАСИВИ

(Варіант № 8)

 

 

М е т а р о б о т и : вивчення засобів роботи з масивами в C++. Практичне засвоєння методів обробки інформації із застосуванням масивів.

 

Короткі теоретичні відомості

 

1. Структуровані типи

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

В різних мовах програмування можуть підтримуватися такі структуровані типи:

- масиви (регулярні структури);

- записи (комбіновані структури);

- списки (документи);

- таблиці (з полями різних типів);

- сторінки (статичні й динамічні);

- множини;

- послідовності (або файли).

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

Засобами мови програмування С++ можна реалізувати будь-які структури даних. В даній роботі розглядаються масиви – такі набори інформації, в яких всі складові відносяться до одного типу даних.

2. Регулярні типи (масиви)

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

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

           
   
   
 
 
 
Кількість елементів
Константа

 


Об’ява масиву
Тип компонентів масиву
Ім’я масиву

 

 


Приклади об’яв масивів згідно синтаксичній діаграмі:

Приклад 1. Об’яви масивів.

int Mas1[256] ;// зовнішній масив із 256 елементів

void main(void)

{

double Mas2[100] ;// масив із 100 чисел типу double

static char Mas3[20] ;// статичний рядок із 20 символів

extern Mas1[] ;// зовнішній масив, описаний вище

int Mas4[3][4] ;// двовимірний масив із чисел типу int

}

В даному прикладі квадратні дужки [] означають те, що ідентифікатор, після якого вони стоять, є ім’ям масиву. Число в дужках визначає кількість елементів (або компонентів) масиву. Нумерація елементів (індекс) масиву починається з 0, а закітчується n-1, де n – кількість елементів у масиві.

 

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

Характеристики масива:

- тип – загальний (або базовий) тип елементів;

- ранг (розмірність) – число індексів масива;

- діапазон – кількість допустимих значень кожного індекса;

- форма – сукупність розмірності і діапазонів.

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

В операторі присвоєння можна використовувати не тільки окремі елементи масиву, але й масиви в цілому - ідентифікатор масиву без індексів у прямокутних дужках. Ім’я масиву без індексів може також зустрічатися в списках фактичних параметрів при визовах підпрограм. В усіх цих випадках повинна бути повна еквівалентність типів. Більше в жодній операції, або виразі масив, як єдина конструкція (без списка індексів) використовуватись не може.

 
 


Завдання 9-1

Скласти й відлагодити програму, яка створює (в пам’яті ЕОМ) квадратну матрицюпорядка n (n задавати константою).

 

Програма

1. /*Обява бібліотек*/

2. include<iostream.h>

3. #include<conio.h>

4. #include<math.h>

5. int main() //головна функція

6. {

7. clrscr(); //очищення єкрану

8. double a,b,c; //обява зміних

9. float d,x1,x2; //обява зміних

10. /*Виведення информаціі про програму*/

11. cout<<"\n Programa obchislenia nerivnosti axэ+bx+c>0 \n";

12. cout<<"\n\t\t Var.Nю2\n";

13. cout<<"\n Vykonav: Pradedov V.V.\n";

14. cout<<"\n";

15. cout<<"\n Vvedit znachinia nerivnosti: \n a=";

16. cin>>a; // Ввeдeння змінних

17. cout<<"\n b=";

18. cin>>b;

19. cout<<"\n c=";

20. cin>>c;

21. /*Oбчиcлeння по основних формулах*/

22. b*=b;

23. d=(b-4)*a*c;

24. x1=-b+sqrt(d)/2*a;

25. x1=-b-sqrt(d)/2*a;

26. /*Умова нерівності*/

27. if (x1<0 || x2>0)

28. cout<<"\n Nerivnost mae rozviazok.";

29. if (x1>0 || x2<0)

30. cout<<"\n Nerivnost nemae rozviazku.";

31. getch(); //Затримка програми(для продовжиня натисніть Enter).

32. return 0;

33. }

 


 

Завдання 9-2

Скласти програму, яка утворює матрицю (n×n) випадкових дійсних чисел, знаходить найбільше значення серед елементів заштрихованої частини матриці та найменше – в незаштрихованій і виводить на екран матрицю та знайдені числа:

 

 

Програма

 

#include<iostream.h>

#include<conio.h>

#include<math.h>

int x,y,x1,y1;

int main()

{

clrscr();

 

M: cout<<"Vvedite koordynaty damky:\n\tx= ";

cin>>x;

cout<<"\ty= ";

cin>>y;

cout<<"Vvedite koordynaty inshoi shashky:\n\tx= ";

cin>>x1;

cout<<"\ty= ";

cin>>y1;

 

//corectnost' danyh

if(x<0 || x>8 || y<0 || y>8) {

cout<<"Vvedit korektno dani!\n";

goto M;

}

 

//shashky na odniy pryamiy

if(x==x1 || y==y1) {

cout<<"Damka NE MOGE pobyty shashky!";

goto end;

}

 

//kray polya

if(x1==1 || x1==8 || y1==1 || y1==8) {

cout<<"Damka NE MOGE pobyty shashky!";

goto end;

}

 

if(abs(x-x1)==abs(y-y1)) { cout<<"Damka MOGE pobyty shashky :)"; }

else { cout<<"Damka NE MOGE pobyty shashky!"; }

 

end:

getch();

return 0;

}

Завдання 9-3

Циклічно пересунути рядки матриці вгору на два рядки.

Програма

 

#include<iostream.h>

#include<conio.h>

int main()

{

clrscr();

int x,y;

cout<<"\n Programa obchislenia nerivnosti axэ+bx+c>0 \n";

cout<<"\n\t\t Var.Nю2\n";

cout<<"\n Vykonav: Pradedov V.V.\n";

cout<<"\n";

cout<<"\n Vvedit znachenia x,y:";

x1: cout<<"\n x=";

cin>>x;

if(x!=0 && x!=1 && x!=2 && x!=3){

cout<<"\n Vvedit concretno x";

goto x1;}

 

y1: cout<<"\n y=";

cin>>y;

if(y!=0 && y!=1 && y!=2 && y!=3){

cout<<"\n Vvedit concretno y";

goto y1;}

if(x==2 && y!=0) {cout<<"f=0";}

else if(x==2 &&y==0) {cout<<"\n f=1";}

 

switch(x){

case 0: switch(y){

case 0: cout<<"f=1";break;

case 1: cout<<"f=2";break;

case 2: cout<<"f=3";break;

case 3: cout<<"f=0";break;

}break;

 

 

case 1: switch(y){

case 0: cout<<"f=4";break;

case 1: cout<<"f=2";break;

case 2: cout<<"f=6";break;

case 3: cout<<"f=0";break;

}break;

 

case 3: switch(y){

case 0: cout<<"f=2";break;

case 1: cout<<"f=0";break;

case 2: cout<<"f=1";break;

case 3: cout<<"f=0";break;

}break;

}

getch();

return 0;

}