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. За да се изясни теорията на масивите ще демонстрираме как работи тя с една програма.
Contents |
[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.
[edit] Задача 1
Да се напише програма, която въвежда масив от 20 числа и извежда сумата на всички елементи, броя на положителните, отрицателните и равните на 0 елементи. За примерното решението е нужно да се спомене функцията на командите inc() и dec(). Първата увеличава стойността на променлива с едно, тоест inc(i); е равностойно на i:=i+1;, а dec() намалява с едно, тоест dec(i); е равностойно на i:=i-1;
var a:array[1..20] of integer; i, sum, pol, otr, nul:integer; begin writeln('Vavedete 20 chisla:'); for i:=1 to 20 do readln(a[i]); sum:=0; pol:=0; otr:=0; nul:=0; for i:=1 to 20 do begin sum:=sum+a[i]; if (a[i]>0) then inc(pol) else if (a[i]<0) then inc(otr) else inc(nul); end; writeln('Sumata e: ', sum); writeln('Broya na polozhitelnite chisla e: ', pol, ', na otricatelnite: ', otr, ', a na nulevite: ', nul); readln; end.
[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] Двумерни масиви
Както става ясно от името двумерните масиви имат две измерения, което ги прави много подходящи за съхраняване на информация в табличен вид.