І.6. Массивтер
Паскаль тілінде жеқе айнымалыларды ғана өңдеп қоймай, айнымалылардың жиынын (тобын) да өңдеуге болады.
Массив дегеніміз - бір типтегі берілгендер жиыны. Басқаша айтқанда, массив - бір атауға біріктірілген айнымалылардың реттелген тізбегі. Айнымалылардың - массив элементтерінің типтері бірдей болады. Массив бір ғана атпен белгіленеді. Мысалы, нақты сандардан құрылған тізбекті К атаулы массив деуге болады.
Мысалы:
1.6, 14.9, -5.0, 8.5, 0.46 - ны бір өлшемді массив деп, оған А деп атау беруге болады. Массивтің әр элементі массивтің атымен белгіленеді де, оның индексі қойылады. Массив элементтері индекстері бойынша реттеліп жазылады. Мысалы, А,, А2,...,Аn немесе жалпы түрде Аj,i=1,2,...,n. Паскаль тілінде массив элементтерінің индексі алгоритмдік тілдегі тәрізді тік жақшаға алынып жазылады, мысалы, А[і]. Жоғарыдағы массивте А[1]=1.6, А[2]=14.9 және т.с.с. мәндер қабыддайды.
Сөйтіп, Паскаль тіліндегі массив ұғымы алгоритмдік тіддегі таблица үғымына сәйкес келеді. Алгоритмдік тілдегі ТИП АТАУ өлшем (мысалы, нақ таб А[1:14]) орнына Паскаль тілінде атау : массив [индекстердің алғашқы .. соңғы мәні] ОF элемент типі - түрінде жазылады.
Егер программада массив пайдаланылатын болса, онда ол айнымалы VАR бөлігінде немесе тип ТҮРЕ бөлігінде бейнеленуі қажет.
Массив айнымалы бөлігінде былай бейнеленеді:
VАR массив аты : ARRAY[t1] ОҒ t2;
Мұндағы ARRAY (массив), ОF (одан) - қызмет сөздері, t1-REAL, INTEGER базалық типінен өзге кез келген стандартты тип. Индекстің типі ретінде шектелген, саналатын, логикалық жѕне литерлік типтер пайдаланылады. Мысалы,
Vаг lit=аrrау[сhаr] оf геаl; оgr=аггау[5..15] оf сhаr; bоl=аrrау[bоо1еаn] оf іnteger;
t2-құраушылар типі, Паскаль тілінде пайдалануға болатын массив элементтерінің типі. Мұны пайдалансақ, жоғарыдағы мысалдағы массивті айнымалы бөлігінде былай бейнелеуге болады:
Vаr а : аrrау[1..5] оf real;
Мұндағы А - элементтері, REAL типтегі массив аты, ал индекс 1-ден 5-ке дейін өзгереді.
Индекс типі стандартты, бүтін немесе нақты бола алмайды. Сондықтан бейнелеуді былай жазуға болмайды:
VAR а : аггау[1..5] оf real;
немесе
VAR а : arrау[integer] оf real;
Массивтерді дұрыс жазуға мысалдар келтірейік:
VAR mas: аrrау[1..n] оf real;
жыл : аrrау[қаңтар.. желтоқсан] оf integer;
L: аrrау[жол] оf boolean;
М1 : аrrау[сhаr] оf шеңбер;
Егер бірнеше массив бірдей базалық, жѕне индекстік типте болса, онда оларды бейнелегенде бір массив ретінде үтір арқылы бөліп жазуға болады. Мысалы:
Vаr а, b, с : аrrау[1..10] оf real;
мұнда әрбір А,В,С - массивтері, элемент - типтері нақты болатын 10 элементтен тұрады.
Программада "индекс" және "индекстің типі" ұғымдарын шатастыруға болмайды.
Индекс типі массивті бейнелегенде пайдаланылса, индекс массив элементтерін белгілеу үшін операторлық бөлікте пайдаланылады. Индексті бейнелегенде қандай тип берілсе, индекс сол типте ғана болуы қажет.
Индекс өрнек, айнымалы немесе тұрақты болып берілуі мүмкін.
Сондықтан да көп жағдайларда массивтерді индексті айнымалылар деп те атайды. Ал индекссіз айнымалыларды массивтерден ажырату үшін қарапайым айнымалылар дейді. Базалық типтегі айнымалыларға қандай амалдар қолданылса, массив элементтеріне де сондай амалдарды қолдануға болады.
Мысалы, программаның операторлық бөлігінде массив элементтеріне мынадай амалдар:
А[3]:=С[4]+5;
S:=S+Х[К];
Р:=Х[3*і+1];
және т.с.с. қолданылады.
Егер массив атауында бір ғана индекс болса, онда ол массивті бір өлшемді, ал екі индекс болса - екі өлшемді және т.с.с. п индекс болса, n өлшемді массив дейді. Бір өлшемді массив вектор элементтері, ал екі өлшемді массив матрица деп аталады.
Массив элементтерін енгізу немесе шығару бөліктерін программа үзінділері арқылы көрсетейік:
А)енгізу:
For і:=1 tо n do геаd(A[i]);
Ә)шығару:
Foг і:=1 tо n dо
Write (A[i],' ' );
--------------------
Массив элементтерін кездейсоқ сандармен де енгізуге болады. Мысалы, массив өлшемі алдын ала енгізіледі де, 100-ге дейінгі сандардан кездейсоқ түрде массив элементтері енгізіледі:
For і:=1 tо n dо
с[і]:=random(100);
Мысал. 13 бүгін саннан тұратын тізбектің (массивтің) арифметикалық орташасын және әр элементтің арифметикалық орташадан өзгерісін табуға программа құрайық.
Program ВОL1;
Vаг х : аrrау[1.13] оf integer;
і : іnteger;
S : геаl;
Веgin
S:=0;
Writeln('сандарды бос орын қалдырып енгіз:');
For i:=1 to 13 do
bеgin
read(х[і]);
S:=S+х[і];
End;
Writeln;
S:=S/13;
Writeln('S=', S:8:4);
For і:=1 tо 13 dо
Writeln(S-х[і])
END.
Массивтің тип бөлігіндегі жазылуы. Массив тип бөлігінде былай бейнеленеді:
TYPE тип аты= ARRAY[T1] OF T2
VAR массив аты : тип аты;
Мұнда тип ТҮРЕ бөлігінде массивтің типі көрсетіледі де, одан соң айнымалы VAR бөлігінде осы типке жататын массивтер көрсетіледі. Массивті ТҮРЕ бөлігінде бейнелеу, бейнелеулер бөлігінің көлемін үлкейтеді, бірақ программаны тез жөндеуге, Программада кљп қате жібермеуге көмектеседі.
Мысалы, программада нақгы 40 элементтен тұратын А массив пайдаланылатын болса, онда оны тип бөлігінде былай өрнектейді:
ТҮРЕ m=аrrау[1..40] оf геаl;
VAR а : m;
Мұндай бейнелеудің тиімділігі сонда, егер программада типі М болатын бірнеше массив А,В,С,В пайдаланылатын болса, онда олар үшін:
VAR А, В, С, В : m;
түрінде жазса жеткілікті.
Мысал. Мына заңдылыққа ai= a[i/2]+ai-1; a1=1,2,...,20 бағынатын а1, а2, ... , а20 тізбегін құруға программа жазайық.
Шешуі.
Ргоgram ВОL2 ;
Туре р=аггау[1..20] оf integer;
Vаг a, р, і :integer;
Веgіn
a[1]:=1;
Writeln(a[1]);
Fог і:=2 tо 20 dо
Begin
A[i]:=a[i div 2]+a[i-1];p
Writeln(а[і])
End
ЕND.
Енді масив элементтеріне қолданылатын амалдарға мысалдар қарастырайық.
Массивті толтыру. Массивті мына формула бойынша толтырайық: с[і]=а*і2.
Program summa ;
Uses crt;
Vаг с:аrrау[1..100] оf word;
і,n:integer;
а:іnteger;
Веgin
Write('n=');
Readln(n); Write('а='); Readln(а);
Fоr і:=1 tо n do c[і]:=а*sqr(і);
Fоr і:=1 to n do
Writeln('c[',i,']=' ,c[i], ' ');
Repeat until keypressed
END.
Массив элементтерін алмастыру.
Бүтін сандардан құрылған екі өлшемді массив берілген. Массив элементтерінің арифметикалық ортасынан кіші болатын барлық элементтерін бүтін мәніне дейін дөңгелектелінген арифметикалық орта мәнімен алмастыратын программа кұру. Массив 0-ден 100-ге дейінгі сандармен кездейсоқ түрде толтырылады.
Ргоgrаm almastyru;
Uses crt
Vаг с:аrrау[1.. 100,1. .100] оf word;
і:іnteger; а:геаl;
Веgіn
Writeln('n='); Readln(n);
а:=0;
Fоr і:=1 tо n dо
For j:=1 tо n dо
Bеgіn
с[і,j]:=гаndom(100);
а:=а+с[i,j]
end;
Fоr і:=1 tо n dо
For j:=1 to n dо
writeln('c[' ,i, ' ,'j,']',c[i,j],' ');
а:=а/n;
Writeln('arif.orta=,' a:5:2);
Fоr і:=1 to n dо
Fоr j:=1 to n do
If c[i,j]Fоr і:=1 to n do
For j:=1 to n do
Repeat until keypressed;
END.
Массив элементтерін өшіру. Бүтін сандардан құрылған сызықтық массив берілген. Массивтің к-сыншы элементін өшіретін программа құру.
Ргоgram Misal;
Uses Crt;
vаr с:аrraу[1..100] of integer;
і,n,l:integer;
Begin
Randomize;
Write('n='); {массив өлшемін енгізу}
геаdln(n);
(массивті толтыру}
For і:=1 tо n dо
с[і]:=random(100);
For і:=1 tо n dо (алғашқы массив элементтін шығару}
read(i);
{көрсетілген элементті өшіру}
For і:=1 tо n do
{көрсетілген элемент өшірілгеннен кейінгі массивті шығару}
Ғоr і:=1 tо n-1 do
writeln (c[i]);
end.
Массивке элементтер қосу. Массивке элемент қосқанда қандай да бір мән қойылатын орыннан бастап, массив элементтері оңға жылжиды. Бұдан массивтің ұзындығы 1-ге артады.
Бүтін сандардан құрылған к-сыншы элементінің орнына массивтің ең кіші элементіне тең мәнді қоятын программа құру.
Элементтерінің саны алдын-ала белгілі бір типті индексті айнымалылардың жиынтығын массив деп атайды. Массивтің типі күрделі болып табылады. Массивтерді программада қолдану үшін, оларға белгілі бір ат беріледі. Содан соң программаның VAR немесе TYPE бөлімінде ARRAY қызметші сөзімен сипаттап, компьютердің жадынан массив элементтеріне орын бөледі. Жалпы жазылу түрі төмендегідей:
TYPE “массив атауы”=ARRAY[X1]OF X2;
VAR “массив атауы”:ARRAY[X1]OF X2; мұндағы:
“массив атауы” – массивті белгілеген идентификатор, X, A, MAS т.б.
ARRAY – массив ұғымын білдіретін қызметші сөз.
OF – қызметші сөз(бұл жерде жалғауларын білдіреді, мысалы бүтін шамалардан)
X1 – массив индексінің типі, нақтыдан басқа барлық типтер қолданылады.
X2 – массив элементінің негіздік типі.
Программада массивтерді сипаттаудың бірнеше жолдары бар. Алдымен типтер бөлімінде массивті бір идентификатор арқылы сипаттап алып, кейін айнымалылар бөлімінде массив атауын сол идентификатор арқылы сипаттауға болады. Сондай-ақ бірден айнымалылар бөлімінде де массивті толық сипаттап кетуге де болады.
Егер программада бірнеше массивтің индекстері мен негіздік типтері бірдей болса, онда оларды бір тізімге біріктіріп жазып сипаттауға болады, төмендегі мысалдарда элементтері нақты сан болатын А, В, С массивтерінің бәріне де компьютердің жадынан 100 элемент бөлінген, сондықтан олар бір тізімге біріктіріліп сипатталған.
Массивтердің типтер бөлімінде сипатталуы:
CONST N=100; {N-элементтер саны}
TYPE Mas=Array[1..N] Of Real;
Element=(Ge,C,O,N,Na,K,Li,Cu,Zn);
Gaz=Array[Ge..N] Of Integer;
VAR A,B,C:Mas; X:Gaz;
Массивтердің айнымалылар бөлімінде сипатталуы:
CONST N=100;
VAR A,B,C:Array[1..N] Of Real;
D,E:Array[1..5] Of Char;
Mezgil:Array[1..10]Of String;
Y,Z:Array[1..20] Of Byte;
R:Array[‘A’..’Z’] Of Char;
P:Array[1..10] Of String;
Жоғарыда сипатталған массивтердің барлығының да элементтерінің бір индексі бар. Бұндай массивтерді бір өлшемді массивтер дейді.
Есептеулерде бір өлшемді массивтермен қатар көп индексті массивтер де кездеседі. Оларды индексінің санына қарай - өлшемді массивтер деп атайды. Солардың ішінде Паскаль программаларында екі индексті массивтер кеңінен қолданылады. Оларды көбінесе матрицалар деп атайды. Матрица элементтерінің бірінші индексі қатардың , екіншісі – бағанның нөмірін білдіреді.
Екі өлшемді массивтердің типтер бөлімінде сипатталуы:
CONST N=100; M=100;
TYPE Mas=Array[1..N, 1..M] Of Real;
VAR A:Mas;
Екі өлшемді массивтердің айнымалылар бөлімінде сипатталуы:
CONST N=100; M=50;
VAR A:Array[1..N, 1..M] Of Real;
B:Array[1..3, 1..7] Of Integer;
Массивтермен амалдар орындау.
Массивтердің өзімен жұмыс істеу үшін массивтің өз атауы қолданылады. Массивтің өзі тек қана “тең ”, “тең емес” және меншіктеу амалдарына ғана қатыса алады. Бұл амалдарға қатысатын массивтердің типтері мен элементтер саны бірдей болуы керек.
Мысалы мынадай массивтер берілсе:
VAR X,Y: Array[1..5] Of Byte;
Бұл массивтерге келесі амалдар қолданғанда:
X=Y – егер массивтердің индекстері сәйкес элементтері тең болсатең болса, онда нәтиже “ақиқат” болады(True).
X<>Y – егер массивтердің индекстері сәйкес элементтерінің кемінде біреуі тең болмас, онда нәтиже “ақиқат” болады(True).
X:=Y – X массиві Y массивінің барлық элементтерін меншіктейді, ал Y массивінің элементтері өзгеріссіз қалады.
Массив элементтерімен амалдар орындау.
Массивті сипаттап болғаннан кейін, операторлар бөлімінде массив элементтеріне жай айнымалылармен орындалатын әртүрлі амалдар қолдануға болады. Оларды әртүрлі өрнектерде операндалар орнына, For, While, Repeat операторларының параметрлерінде, логикалық амалдарда салыстыау элементі ретінде пайдалануға болады. Программалық тексте массивтің әр элементі массивтің аты мен индексі арқылы жазылады. Элементтер индекстің мәндері арқылы реттеледі. Бір ескеретіні “индекс” және “индекстің типі” түсініктерін араластыруға болмайды. “Индекстің типі” түсінігі тек массивті сипаттайтын бөліктерде ғана қолданылады. Ал “индекс” түсінігі операторлар бөлігінде массив элементтерін белгілегенде қолданылады. Индекс ретінде әртүрлі өрнектер қолдануға болады. Көбінесе өрнектердің қарапайым бір түрі ретінде тұрақтылар мен айнымалылар қолданылады. Сондықтан да массив элементтерін басқаша индексті айнымалылар деп атайды. Егер математикада индекс жай жақшаға алынып немесе төменгі регистрде жазылса, Паскаль программаларында массив индекстері тік жақшаларға алынып жазылады.
Массив элементтері программадағы өрнектер мен меншіктеу операторларының сол жағында да, оң жағында да тұруы мүмкін. Массив элементтерінің негіздік типіне қолдануға болатын амалдарды массив элементтеріне қолдануға болады, мысалы:
А(51, -15, 5.5, -8.1, 15, 0, 8) – А массиві 7 элементтен тұрады, элементтердің программада сипатталуы мен жазылуы:
VAR A:ARRAY[1..7] Of Real;
A[1]= 51; A[2]= -15; A[3]= 5.5; A[4]=-8.1; A[5]=15; A[6]= 0;A[7]=8
Массив элементерінің индекстері өрнектер мен операторларда тік жақшаларға алынып жазылады:
Y:=5*A[1]+SQR(A[2]+A[3]); X:=COS(A[5])+Sin(A[5]);
For k:=1 To 10 Do Begin
Read(A[k]); Writeln(A[k]); A[k]:=A[k+1];
If A[k]<5 Then S:=S+A[k];
While A[k]>=80 Do Begin S:=S+A[k]; k:=k+1 End; End;
Массив элементтерін ендіру және шығару.
Массив элементтерін ендіру және шығару цикл арқылы жүзеге асырылады. Егер элементтеді ендіру үшін Read операторы қолданылса, онда элементтер бір қатарға жазылып ендіріледі. Ал Readln операторы қолданылса, онда әр элементті жаңа қатардан енгізу керек.
........................................
Readln(N);
For K:=1 To N do Read(A[K]);
…………………………………..
Readln(N); K:=1;
Repeat Read(A[K]); K:=K+1
Until K>N;
…………………………………..
Readln(N); K:=1;
While K=Rеadln(A[K]); K:=K+1 End;
…………………………………..
Програманың орындалу нәтижесінде N элементтен тұратын массив эементтерін клавиатурадан ендіруді ұйымдастырады, программа циклді оқығанда Read операторын N рет оқып тоқтап, массив элементтері мәндерін қашан клавиатурадан енгізілген күтіп тұрады, бұл жерде К айнымалысы цикл параметрі қызметімен қоса массив индексі ретінде де қолданылып тұр.
Кейде программаның әр орындалуында массив элементтерінің мәндерін қайта-қайта клавиатурадан енгізу керек болады, бұл әсіресе енгізілетін элементтер саны өте көп болған кездерде программа орындаушы кісіні жалықтырып жібереді, сондықтан бұндай жағдайларда оларды бірден тұрақтылар (CONST) бөлімінде енгізіп қойса да болады:
CONST N=5; A:ARRAY[1..N] OF REAL=(40.5, 48, 47.1, 52.3, 11.2);
B:ARRAY[1..9] OF REAL=(31, 25, 40, 1.5, 48, 54.7, 12.3, 54.5, 21);
Массив элементтерін шығару процесі де ендіруге ұқсайды. Егер цикл денесінде элементтерді ығару үшін Write операторы қолданылса, онда массив элементтері экранға бір қатарға бір-біріне жабысып жазылып шығады. Бұл жағдайда нәтиженің көрнекілігін арттыру үшін Write операторында массивтен кейін бос орын жазылады, Ал Writeln операторы қолданылса, онда массивтің әрбір элементі жаңа қатарға жазылып шығады.
................................................
For K:=1 To N Do Write(‘A[‘,K,’]=’,A[K], ‘ ‘);
……………………………………..
K:=1;
Repeat Writeln(A[K]; K:=K+1
Until K>N;
…………………………………......
K:=1;
While K=Begin Write(A[K], ‘ ‘); K:=K+1 End;
……………………………………..
Программаның орындалу нәтижесінде N элементтен тұратын массив элементтері экранға шығады, бұл жерде де K айнымалысы цикл параметрі қызметімен қоса массив индексі ретінде де қолданылып тұр.
Екі өлшемді массивтердің элементтерін ендіру немесе шығару үшін екі цикл ұйымдастырылады, сыртқы цикл – қатарлар бойынша және ішкі цикл – бағандар номері бойынша.{ N – қатарлар саны, М – бағандар саны}
......................................
Readln(N,M);
For K:=1 To N Do
For I:=1 To M Do // матрица элементтерін ендіру циклі
Read(A[K,I]);
……………………….
………………….
Readln(N,M);
For K:=1 To N Do
For I:=1 To M Do // матрица элементтерін шығару циклі
Write(A[K,I]);
...................................................
бұл жерде K,I айнымалылары йикл параметрлері мен массив индекстерінің қызметтерін атқарып тұр.
5>
Достарыңызбен бөлісу: |