Pascal/Масиви
Урок 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;
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]Както става ясно от името двумерните масиви имат две измерения, което ги прави много подходящи за съхраняване на информация в табличен вид.