Pascal/Масиви

From Wikiversity
Информатика

Уроци
Урок 1 :Въведение
Урок 2 :Променливи и типове
Урок 3 :Условия
Урок 4 :Цикли
Урок 5 :Масиви
Урок 6 :Константи
Урок 7 :Процедури и функции
Упражнение
Упражнение :Упражнения І


Масивите са поредици от променливи е едно и също име и тип, последвано от индекс. Те са начин за програмите да се справят с информация в табличен вид. Така например може в една променлива да се запамети таблица с две колонки със следния вид:


Индекс Ден от седмицата
1 Понеделник
2 Вторник
3 Сряда
4 Четвъртък
5 Петък
6 Събота
7 Неделя

Масивите се декларират като се зададе името им, последвана от двуеточие и дума обозначаваща, че променливата е масив (array[]), като в скобите се отбелязва с колко елемента е масива, и индикация от какъв тип са променливите в масива - of <ТИП> (например: var dni:array[1..7] of string;, тоест променлива на име dni, която е масив с елементи от 1 до седем от тип string - низ от букви). Стойността на всеки елемент от масива може да се извика, като след името на масива се изписва индекс на съответния елемента в средни скоби: например dni[3] е елемента от масива dniв индекс 3. За да се изясни теорията на масивите ще демонстрираме как работи тя с една програма.

Едномерен масив[edit]

Ще демонстрираме програма, която въвежда от потребителя число и изписва как се казва съответния ден от седмицата. Програмата използва масива dni, както е деклариран, по-горе, и променлива i, която въвежда от клавиатурата число и програмата изписва съответния ден. Програмата започва с присвояване на имената на дните на съответните елементи от масива.

var dni:array[1..7] of string;
    i:integer;
begin
 dni[1]:='Ponedelnik';
 dni[2]:='Vtornik';
 dni[3]:='Sryada';
 dni[4]:='Chetvartak';
 dni[5]:='Petak';
 dni[6]:='Sabota';
 dni[7]:='Nedelya';
 write('Vavedete chislo mezhdu 1 i 7:');
 readln(i);
 if ((i<1) or (i>7)) then writeln('Chisloto ne e mezhdu 1 i 7!')
 else writeln(dni[i]);
 readln;
end.

Задача 1[edit]

Да се напише програма, която въвежда масив от 20 числа и извежда сумата на всички елементи, броя на положителните, отрицателните и равните на 0 елементи. За примерното решението е нужно да се спомене функцията на командите inc() и dec(). Първата увеличава стойността на променлива с едно, тоест inc(i); е равностойно на i:=i+1;, а dec() намалява с едно, тоест dec(i); е равностойно на i:=i-1;

Сортиране на едномерни масиви[edit]

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

Метода на мехурчето[edit]

Методът на мехурчето е метод на сортиране, при който цикълът се повтаря n² пъти, където n е броя на елементите на масива. При този метод в рамките на един цикъл се проверява дали променливата от цикъла със съответния индекс е по-голяма от съседната по индекс променлива, и ако са в неправилен ред да ги размени.

var i, j, temp, n:integer;
    a:array[1..20] of integer;
begin
 randomize;
 n:=20;
 for i:=1 to n do a[i]:=random(100);
 for i := 1 to n do
  for j := 1 to n do
   if (a[j]>a[j+1]) then
    begin
     temp:=a[j];
     a[j]:=a[j+1];
     a[j+1]:=temp;
    end;
end.

Този алгоритъм би могъл да се измени частично, така че да не се налага цикъла да се повтаря n² пъти, като се промени по следния начин:

 for i := 1 to n-1 do
  for j := 1 to n-i do
   begin
    ...
   end;

Както става ясно от примера е възможно цикъла с променлива j да повтаря с един пъти по-малко при всяко следващо повторение на цикъла с променлива i. Това е възможно, защото при първото повторение на цикъла най-голямата променлива в цикъла стига до променливата от маива с последен индекс и повече не се налага да се сравнява с нея, а при останалите повторения се подреждат и следващите по големина числа.

Двумерни масиви[edit]

Както става ясно от името двумерните масиви имат две измерения, което ги прави много подходящи за съхраняване на информация в табличен вид.