8. Масиви

8.1. Едномерен масив
• Дефиниране на едномерен масив
• Извеждане елементите на едномерен масив
• Въвеждане елементите на едномерен масив
• Примери и задачи с едномерни масиви
8.2. Двумерен масив
• Дефиниране на двумерен масив
• Извеждане на двумерен масив
• Въвеждане на двумерен масив
• Примери и задачи с двумерни масиви

преди план следва
 
 

8. Масиви


Масивът е съвокупност от фиксиран брой елементи от един и същи тип, обединени по някакъв принцип. Броят на елементите на масива се задава при дефинирането му. Мястото на всеки елемент от масива в общата съвокупност се задава с индекси. В зависимост от броя на индексите, определящи мястото на елемента в масива, масивите се делят на едномерни, двумерни, тримерни и т.н.

8. 1. Едномерен масив

• Дефиниране на едномерен масив

тип_на_елементите aa променлива_масив [брой_на_елементите];

Типът на елементите може да бъде всеки стандартен или предварително дефиниран тип. Променливата_масив се задава с идентификатор. Броят на елементите на масива се задава с константен израз от целочислен тип с положителна стойност. Той се загражда в квадратни скоби. Броят на елементите на масива не може да се променя след дефинирането.

Примери:
int x[10];
double price[20];
enum color{red, blue, green}m[5];

Променливата х е едномерен масив. Тя се състои от 10 елемента от тип int: x[0], x[1], x[2],…,x[9]. Аналогично, променливата price се състои от 20 елементa - price[0], price[1],…,price[19]. Всеки от тези елементи може да съдържа само стойност от тип double. Променливата m се състои от 5 елемента: m[0],..,m[4]. Всеки от тях може да съдържа само стойност от типа color.

След дефинирането на масива в ОП се заделя памет /обикновено 4 байта/, в която се записва адресът на първия елемент от масива. Останалите елементи на масива се разполагат последователно след първия елемент. За всеки елемент на масива се отделя по толкова памет, колкото изисква типът на елементите.

Възможно е при дефинирането, елементите на масива да бъдат инициализирани, т.е. да получат начална стойност. Стойностите на елементите се заграждат в големи скоби и се отделят помежду си със запетая:

тип_на_елементите aa променлива_масив [брой на елементите] = { стойност1, стойност2,...};

Пример:
double q[5]={1.8, 2, 3.8, 5.5, 6};

След тази дефиниция елементите на масива q приемат следните начални стойности:
q[0] приема стойност 1.8, q[1] - a 2, q[2] – a3.8, q[3] – a5.5, q[4] – a6.0.

Елементите на масива се наричат още променливи с индекс или индексирани променливи. Индексът може да бъде израз с положителна стойност, по-малка от броя на елементите на масива. До всеки елемент на масива има пряк достъп. Достъпът се осъществява посредством индексa, който се загражда в квадратни скоби. Индексът е израз, имащ целочислена неотрицателна стойност. В езика С/C++ винаги първият елемент на масива има индекс нула.
Примери за индексирани променливи:
int x[10];
int j;
j=4;
x[j]=0;
x[j+2]=x[j];
x[(j+1)/2]=-6;

• Извеждане елементите на едномерен масив

Извършва се поотделно за всеки елемент. Най-удобно е да се организира цикъл с инструкцията for.
Пример:
double q[5] ={2, 4, -1.8, 6, 3};			  
   …………  										  
  for(  int i=0; i<5; i++)							  
         cout << "q[" << i << "] = " << q[i] << endl;				  
  }	
Извеждането cout << q; също е допустимо, но то ще изведе адреса на елемента q[0] в паметта. Както беше отбелязано, името на масива q съдържа адреса на първия елемент от масива - q[0]. Поради това не се допускат операции като присвояване, събиране, изваждане и сравнение между променливи от тип масив. Недопустим е също и операторът cin >> q;

• Въвеждане елементите на едномерен масив

Извършва се отделно за всеки елемент от масива: cin >> q[0]; cin >> q[1];… Най-удобно е да се организира цикъл с инструкцията for.
Пример:
double q[5];			 
  for(int i=0; i<5; i++)	 
  {								
         cout << " Въведете q[" << i << "] = ";
         cin >> q[i];							 
  }	
Възможни грешки при работа с масиви:

В езикът С/С++ не се прави проверка дали индексът на елемента е в допустимите граници от 0 до размерността на масива минус 1. Например, при дефиницията:
int t[10], x;
х=t[-1]; или х=t[10]; са допустими присвоявания, х ще получи случайна стойност от паметта, преди или след масива t, но грешка няма да се получи. Присвояването t[-1]=х или t[10]=x обаче, ще запише в тази памет нова стойност, което ще изтрие намиращите се там данни или инструкции и може да причини фатална грешка.
 
 
 
 
преди план следва