Низови у Pascal-у

Поред стандардних типова података у паскалу (integer, real, boolean, char и string) постоје и нестандардни типови података (кориснички дефинисани). У такву категорију спадају тзв. структуирани типови – низови, скупови, слогови, датотеке, показивачи… Карактеристично за ове типове је то што њихове компоненте чине стандардни типови који су по неком критеријуму обједињени у целину.

Низовни тип

Низ чини скуп компоненти истог типа чијим се вредностима приступа путем индекса (позиција компоненте у низу). Оваква структура се користи када је потребно упамтити” већу количину података истог типа (нпр. вредности просечних дневних температура у току месеца, оцена из предмета, имена и презимена ученика…). Предност коришћења низова у односу на стандардне типове огледа се у томе што није унапред потребно дефинисати тачан број променљивих које ћемо користити за дати програм већ је довољно навести максималан број компоненти које неки низ мора да садржи.

Нпр. потребно је уписати оцене за предмет Рачунарство и информатика за ученике једног одељења. Проблем који би смо у овом случају имали да не користимо низове био би следећи: „За колико ученика је потребно уписати оцене?”. Ако одељење има 32 ученика у програму би дефинисали 32 целобројне променљиве и овако дефинисан програм би био употребљив само у одељењима који броје 32 ученика. За сваки други број ученика морали би се писати посебни програми или исправљати већ написан програм. Коришћењем низова оваква врста проблема се решава тако што се наведе максималан број ученика (нпр. 50), а затим корисник програма у току рада одређује за колико ученика ће уписати вредности.

Овакав начин рада има и својих недостатака. Наиме одређивањем максималног броја компоненти низа у меморији се резервише одређени простор не водећи рачуна о томе колики део простора ће бити стварно коришћен у самом програму.

Да би се некој променљивој могао доделити тип низ он претходно мора бити дефинисан. Дефиниција типа низ, као и свих других нестандардних типова врши се у TYPE секцији. Општа дефиниција типа низ врши се на следећи начин:

TYPE
  imeTipa=ARRAY [intervalIndeksa] OF tip;

где imeTipa представља било које име које је написано у складу са правилима за именовање у паскалу; ARRAY је кључна реч којом се означава низовни тип података; intervalIndeksa представља опсег индекса којима ће се приступати компонентама, а као вредности могу се навести цели бројеви, знакови и логичке вредности; OF кључна реч којом се указује на тип компоненти низа; tip представља тип компоненти низа и може бити било који од стандардних типова података.

Пример дефиниције низа који се састоји од највише 50 целобројних компоненти:

TYPE
  niz=ARRAY [1..50] OF integer;

Наравно, након дефиниције типа неопходно је дефинисати и саму променљиву која ће се користити у програму. За претходни пример желимо да дефинишемо променљиву X која је типа niz:

VAR
  X:niz;

Компонентама низа могуће је приступити тако што се наведе име низа (за наш пример то је променљива X), а затим се у угластим заградама неведе индексна вредност компоненте којој се жели приступити (нпр. са X[36] приступа се компоненти низа X чији је индекс 36)

Пример: Нацртати алгоритам и написати програм који уноси елементе целобројног низа од највише 100 компоненти а затим их исписује.

07 - AlgoritamUnosIspisNiz

program UpisIspisNiza;
type
   niz=ARRAY [1..100] of integer;
var
   x:niz;
   i,n:integer;
begin
    write('Unesi broj komponenti niza:');
    readln(n);
    writeln('Unos komponenti niza');
    for i:=1 to n do
      begin
          write('Unesi x[',i,']=');
          readln(x[i]);
      end;
    writeln('Ispis komponenti niza');
    for i:=1 to n do
      writeln('x[',i,']=',x[i]);
    readln;
end.

Изглед радног екрана након извршења програма:

слика 2

слика 2

Начин извршења програма:

  • дефиницијом

type niz=ARRAY [1..100] of integer;

указујемо да желимо да за име типа користимо niz; да се ово име односи на низовни тип компоненти са индексима од 1 до 100 (дакле низ има највише 100 компоненти) и да су компоненте целобројне вредности.

  • у Var секцији дефиницијом x:niz у меморији рачунара одвојено је сто места за упис целобројних вредности (слика 3)

слика 3

слика 3

овим је само извршена „резервација” места у меморији. Вредности компоненти су и даље празне!

  • командом readln(n); тражимо од корисника да одреди колико компоненти низа жели да користи, односно у који део од 100 резевисаних места ће уписати вредности (за пример извршења са слике 2 за n је унета вредност 6).

  • низом команди

for i:=1 to n do
   begin
      write('Unesi x[',i,']=');
      readln(x[i]);
   end;

врши се упис вредности елемената низа на следећи начин:

      • променљива i добија вредност 1 и од корисника се тражи да унесе x[i] (readln(x[i])), како i има вредност 1 уноси се компонента x[1] (за пример са слике 2 унета је вредност 1).

      • променљива i добија вредност 2 и од корисника се тражи да унесе x[i] (readln(x[i])), како i има вредност 2 уноси се компонента x[2] (за пример са слике 2 унета је вредност 554).

      • променљива i добија вредност 3 и од корисника се тражи да унесе x[i] (readln(x[i])), како i има вредност 3 уноси се компонента x[3] (за пример са слике 2 унета је вредност -6981).

      • променљива i добија вредност 4 и од корисника се тражи да унесе x[i] (readln(x[i])), како i има вредност 4 уноси се компонента x[4] (за пример са слике 2 унета је вредност 112).

      • променљива i добија вредност 5 и од корисника се тражи да унесе x[i] (readln(x[i])), како i има вредност 5 уноси се компонента x[5] (за пример са слике 2 унета је вредност 0).

      • променљива i добија вредност 6 и од корисника се тражи да унесе x[i] (readln(x[i])), како i има вредност 6 уноси се компонента x[6] (за пример са слике 2 унета је вредност -6687123).

ВАЖНА НАПОМЕНА: овај низ команди НЕОПХОДАН је у сваком програму који користи низове јер се њиме обезбеђује унос вредности компоненти низа!!!

  • низом команди

for i:=1 to n do
   writeln('x[',i,']=',x[i]);

обезбеђује се испис компоненти низа. Овај део користимо увек када је потребно исписати вредности компоненти након измена над низом. Испис се врши на следећи начин:

    • променљива i узима вредности 1 извршава се команда writeln(‘x[‘,i,’]=’,x[i]) исписује се стринг x[, затим вредност променљиве i (односно исписује се број 1), затим исписује стринг ]= и на крају вредност компоненте низа x са индексом 1 (x[1]) односно за наш пример са слике 2 вредност 1 (коначан испис x[1]=1).

    • променљива i узима вредности 2 извршава се команда writeln(‘x[‘,i,’]=’,x[i]) исписује се стринг x[, затим вредност променљиве i (односно исписује се број 2), затим исписује стринг ]= и на крају вредност компоненте низа x са индексом 2 (x[2]) односно за наш пример са слике 2 вредност 554 (коначан испис x[2]=554).

    • променљива i узима вредности 3 извршава се команда writeln(‘x[‘,i,’]=’,x[i]) исписује се стринг x[, затим вредност променљиве i (односно исписује се број 3), затим исписује стринг ]= и на крају вредност компоненте низа x са индексом 3 (x[3]) односно за наш пример са слике 2 вредност -6981 (коначан испис x[3]=-6981).

    • променљива i узима вредности 4 извршава се команда writeln(‘x[‘,i,’]=’,x[i]) исписује се стринг x[, затим вредност променљиве i (односно исписује се број 4), затим исписује стринг ]= и на крају вредност компоненте низа x са индексом 4 (x[4]) односно за наш пример са слике 2 вредност 112 (коначан испис x[4]=112).

    • променљива i узима вредности 5 извршава се команда writeln(‘x[‘,i,’]=’,x[i]) исписује се стринг x[, затим вредност променљиве i (односно исписује се број 5), затим исписује стринг ]= и на крају вредност компоненте низа x са индексом 5 (x[5]) односно за наш пример са слике 2 вредност 0 (коначан испис x[5]=0).

    • променљива i узима вредности 6 извршава се команда writeln(‘x[‘,i,’]=’,x[i]) исписује се стринг x[, затим вредност променљиве i (односно исписује се број 6), затим исписује стринг ]= и на крају вредност компоненте низа x са индексом 6 (x[6]) односно за наш пример са слике 2 вредност -6687123 (коначан испис x[6]=-6687123).

Сада наш низ у меморији има изглед као на слици 4

слика 4

слика 4

Наш низ и даље заузима одређену количину меморије и ако нам је у овом програму било неопходно свега 6. Остатак низа и даље постоји али вредности компоненти су и даље недефинисане.

Categories: трећа година | Постави коментар

Кретање чланака

Постави коментар

Блог на WordPress.com.