Автор работы: Пользователь скрыл имя, 22 Ноября 2013 в 17:54, курсовая работа
Осыған дейінгі қарастырылып келген мәлімет типтері қарапайым болып есептеледі. Себебі олар тек бір ғана обЪектіге яғни бір ғана санға немесе символға қатысты ғана қолданылады. Turbo Pascal-да бір типке жататын бірнеше элементтерден тұратын обектілерді де пайдалануға болады. Массив осындай бір типке жататын элементтерден құралатын құрылымдық тип болып табылады.
Жалпы Паскаль тілі программа құрушыларға өте ыңғайлы тіл. Оның логикалық құрылымы әр түрлі есептерді дәл шешуге көмегін тигізеді. Turbo Pascal тілін оқытып – үйретуден бастап, программалаудың қыр-сырын меңгертудің маңызы зор. Кез келген тілді үйрену оның алфавитінен басталады.
..............................
K: =1;
While K=<N do
Begin Write(A[K], ' '); K:=K+1 End;
..............................
Кейбір есептеулерде белгілі бір шарттың орындалуына байланысты массив элементтерін іздеп табу керек болады. Ол үшін цикл арқылы массивтің барлық элементтерін берілген шамамен салыстыру процесін ұйымдастыру керек. Егер циклдің әр орындалуында массивтің жаңа элементі берілген шартты қанағаттандырса, онда бұл элемент ізделінген элемент болып табылады. Мысалы:
1. Массивтің 5-ке тең элементтерін экранға шығару:
…….If A[K]=5 Then Write(A[K], ' ');……
2. Массивтің жұп элементтерінің нөмірлерін (индекстерін) шығару:
…….If A[K] Mod 2=0 Then Write('K=', К, ' ')…….
3. Массивтің 7-ден үлкен және 15-тен кіші элементтерінің санын табу:
N:=0; .... If (A[K]>7) And (A[K]< 15) Then N:=N+1; …….
Writeln('N=', N);
4. Массивтің 10-нан үлкен элементтерінің қосындысын табу:
S:=0; ……. If A[K]>10 Then S:=S+A[K]; …….
Writeln('S=', S );
5. Массивтің 5-тен кіші элементтерінің көбейтіндісін табу:
Р:=1; ……. If A[K]<5 Then P:=P*A[K]; …….
Writeln ('P=', P);
Сұрыптау – қазіргі заманда мәліметерді өңдеу процессінің кең тараған түрлерінің бірі. Сұрыптау деп – массив элементтерін белгіленген ережелер бойынша орналастыру болып табылады. Мысалы, массивті өсуі не кемуі бойынша сұрыптау.
Алгоритм 1-ші мен 2-ші элементтерді салыстырудан басталады. Егер 2-ші элемент 1-шіден кіші болса, онда оларды орындарымен алмастырылады. Бұл процесс қатар тұрған әр жұп элементтері үшін қайталанады, процесс бүкіл N элементтері өңделмейінше қайталанады. Массивтің бір «өтімінен» кейін ең үлкен элемент ең артқы (N-ші) орынға тұрғызылады. Алгоритм жалғаса береді, сонда p-ші өтім кезінде алғаш (N-p) элементтері оң жақтағы көрші элементтерімен салыстырылады. Егер келесі бір өтімде алмастырулар болмаса, алгоритм өз жұмысын тоқтатады. Соңында ең «жеңіл» элементтер алгоритм орындалуы барысында біртіндеп «қалқып шығады».
for i := 1 to n-1 do
for j := n-1 downto i do
if a[j] > a[j+1] then begin
x := a[j];
a[j] := a[j+1];
a[j+1] := x;
end;
Басында алғаш тұрған екі элемент сұрыпталады. Олар сұрыпталған S жиынын құрайды. Келесі элемент алынып, сұрыпталған S жиынына сол жағындағы элементтері одан кіші етіліп, ал оң жағынан артық болып қойылады. Берілген элементті жиынға тұрғызу орны – аралықты жартыға бөлу арқылы табылады. Алгоритм өз жұмысын аяқтайды сол жағдайда, қашан N-ші орында тұрған элемент өңделіп болады.
N элементтерден құралған массивінің ең үлкен элементі табылады (ол p нөмерінде тұр делік), ол N-ші орында тұрған элементімен орындарын ауыстырылады, мұнда бір шарт сақталуы тиіс: N <> p, яғни олар тең болмауы керек. Қалған (N-1) элементтерден тағы да ең үлкені таңдап алынады да, N-1 орында тұрған элементпен алмастырылады. Өз жұмысын алгоритм 1-ші және 2-ші орындарда тұрған элементтер сұрыпталғаннан кейін ғана өз жұмысын тоқтатады. Ол үшін N-1 өтім керек болады екен. Осылай ең кіші элементтерді сұрыптауға да қолдануға болады.
for i := 1 to n-1 do begin
k := i; x := a[i];
for j := i+1 to n do
if a[j] < x then begin
k := j;
x := a[j];
end;
a[k] := a[i];
a[i] := x;
Екі өлшемді массив деп – элементі массивтің жол мен бағанында тұрған орнына тәуелді болатын массив. Жалпы түрде матрицаның элементтері былай белгіленеді A(I,J), мұндағы A – массивтің аты, I - жолдың индексі (нөмері), J – бағанның индексі (нөмері).
Turbo Pascal тілінде екі өлшемді немесе көпе өлшемді массивтермен жұмыс істеу үшін, олар сипаттау бөлімінде көрсетілуі тиіс.
Екі өлшемді массивті немесе матрицаны екі түрлі тәсілмен жазуға болады:
A [n, m] массивін сипаттау жолы:
i | ||||||
А массиві: |
1 |
2 |
3 |
... |
n | |
1 |
||||||
2 |
||||||
. |
||||||
.. |
||||||
m |
var
A: array [1..n, 1..m] of integer;
Екі өлшемді массивті енгізу:
FOR I := 1 TO N DO
FOR J := 1 TO M DO
READ(A[I, J]);
Мысал. Берілген жиырма бес элементтен тұратын B[5, 5] екі өлшемді массивке бөлшек сандар енгізіп, оларды дисплейге кесте түрінде шығару бағдарламамасы:
{$R}
PROGRAM MAS; {Бағдарламама атауы}
Type {Типтерді сипаттау бөлімі}
Max = array [1..5, 1..5] of real; {Шарт бойынша массив типі}
Var {айнымалыларды сипаттау бөлімі}
В: Mas; {Mas типті В - массиві}
I, J: integer; {циклды басқару айнымалылары}
BEGIN {негізгі бағдарламама басы}
WRITELN(‘В –
массивінің элементтерін
FOR I := 1 TO 5 DO {I – бойынша циклі}
FOR I := J TO 5 DO {J – бойынша циклі}
READ(A[I, J]); {B[I, J] массивіне нақты
сандарды
енгізу операторы}
FOR I := 1 TO 5 DO {I – бойынша циклі}
BEGIN
FOR I := J TO 5 DO {J – бойынша циклі}
WRITE(B[I, J], ‘ ‘); {B[I, J] массивінің элементін дисплейге шығару операторы}
WRITELN;
END;
END. {негізгі бағдарламама соңы}
Квадрат матрицада индекстердің ара қатынасы
I=J – матрицаның
элементтері бас диагональ
I<J – элементтер
бас диагональдың үстінде
I>J - элементтер
бас диагональдың астында
I+J=N+I – элементтер
қосалқы диагональ бойында
I+J<N+I – элементтер қосалқы диагональдың үстінде орналасқан.
I+J>N+I – элементтер қосалқы диагональдың астында орналасқан.
Массивтерді қолдану ережелері
Анализ кезінде келесі екі сұраққа жауап беру керек:
Массивті қолдану керек пе?
Бірінші сұрақтың мәні мынада: массивті тек қана ең керекті жағдайларда ғана қойдалану тиімді. Осыған үш себеп бар:
Бағдарламаманың үлкею, яғни қиындау барысында, көп массивті қолдана отырып, индекстері де өсе береді. Сонда қателер саны де көбейе бастайды. Бағдарламаманың кодын оқу қиынға түседі.
Массив үлкен көлемдерге өте тез жетеді және жадыдан көп орынды қажет етеді. Мысалы, T(50, 50) массивінде 2500 ұяшық болады, әрбіреуі 4 байт орынды алып отырады. Сонда Т массиві 10 Кб орынға ие. Мұндай жады жұмсау әрине тиімді болмайды, әсіресе, компьютерлік жүйелері әлсіз жадыларда.
Массивсіз есепті шешу кезінде, кейбір жағдайларда өте көп уақыт кетуіне әкеп соқтырады. Мысалы, Т(I,J):=4 меншіктеу операторы. Оны орындау үшін, алдымен бірінші мәнде (I) табу үшін жадыға жүгініп, екінші мәнді табу үшін, оған тағы да орындау керек. Орында тапқан соң, оған 4 деген мәнді енгізу үшін жадыға үшінші рет жүгіну пайда болады.
Массивтің көлемі қандай болуы керек?
Мұндай сұрақ міндетті түрде қойлыуы тиіс, себебі массив дәл мәндермен сипатталуы керек. Т массивінде алғашқыда белгісіз элементтер саны болсын делік. Ол 60 немесе 80 мәнге ие бола алсын. Яғни мұнда ол 100-ден артық мәнге ие бола алмайды, осыдан былай жазсақ, 40 ұяшық босқа қалады. Бірақ, егер берілген өлшемге бір орын жетпей қалса, онда әрине біз оған өкінеміз.
Мысал. Натурал сандардан тұратын N*M матрицасы берілген. Одан ең кіші элементті және оның алатын орнын табыңдар. Мұндай элементтер бірнешеу болса, онда экранға әрқайсысының алатын орнын шығарыңдар.
Бұл есептің шешуінің бірнеше жолы бар. Айталық, массив элементтеріне параллель баруға және бірнеше рет қарап шығуға болады, матрицаны екі рет қарап шығуды да ұйымдастырылуы да мүмкін. Бір қарағанда ең кіші элементті табамыз, егер осындай элементтер бірнешеу болса, онда екінші қарап шығарда олардың орнын анықтаймыз.
PROGRAM MATTR 8:
CONST t=100; s=100;
VAR A :ARRAY [1..T,1..S] OF INTEGER;
N,M, IM,JM,I,J,MIN,K:INTEGER;
BEGIN
WRITE( ‘Жол санын енгіз’);
READLN(N);
WRITE(‘Бағана санын енгіз’);
READLN (M);
FOR i=1 TO N DO
BEGIN
WRITELN (‘Сандарды бос орын арқылы енгіз’,M);
FOR j:=1 TO M DO
READ(A[i,j])
END;
MIN:=A[1,1];
IM:=1;JM:=1;K:=O ;
FOR i:=1 TO N DO
FOR j:=1 TO M DO
IF MIN >A[i,j] THEN
BEGIN
k:=1; im:=i; jm:=j
min:=A[i,j]
END
ELSE
If min =A[i,j] THEN k:=k+1;
If k=1 THEN
BEGIN
WRITELN (‘матрицада бір ең кіші элемент =’,min);
WRITELN (‘B’,im,’жол,B’,jm,’бағана’)
END
ELSE
BEGIN
WRITELN (‘матрица’,k,’ ең кіші элемент =’,min);
FOR i:=im TO N DO
FOR j:=1 TO M DO
IF min=A[i,j] THEN WRITELN(‘жолда’,i,’бағанада’, j)
END;
END.
Есепті шешу үшін:
* айнымалыларды сипаттаймыз;
* А массив ұзындығы
мен массив элементтерінің
* массив элементтеріне
қарап, ең кіші мәнін іздейміз
және мәнін индекс есіне
* ең кіші элементтер санын есептейміз;
Барлық ең
кіші элементтер туралы
* К-нің санына қарай
не бір ғана ең кіші элемент
туралы информацияны шығарамыз,
Айнымалылар:
А – екі өлшемді массив;
N,M- массивтің жолдары мен бағаналар саны;
I,J-(массивтің) циклдің айнымалылары;
К- ең кіші элементтер саны;
IM,JN-ең кіші элементтің жолы мен бағанасы;
MIN-ағымдағы минимум;
Осы есепті матрицаны бір қарап өтіп те шешуге болады. Мұндай жағдайды көмекші екі сөйлемді массив енгізу қажет. Массивке ең кіші элементтердің жолдары мен бағандардың мәні енгізіледі;
program MATTRS-2;
const t=100; s=100;
var A: ARRAY[1..t,1..S] of integer;
B: ARRAY[1..t*s,1..2] of integer;
N,M,IM,JM,i,j,min, K:integer;
begin
write(‘жол санын енгіз’);
readln(N);
write (‘бағана санын енгіз’);
readln (M);
for i:=1 to N do
begin Writeln(‘сандарды енгіз’,M);
for j:=1 to M do
read (A[i,j])
end;
Min:=A[1;1];
K:=1
for i:=1 to N do
for j:=1 to M DO
if min >A[i,j] then
begin
K:=1;
Â[1,1]:=i;
B[1,2]:=j;
Min: =A[i, j]
end
else
if min =A[i, j] then
begin
K:=K+1;
B[K,1]:=i;
B[K,2]:=j
end
if K=1 then
begin
writеln (' жол’,im,’бағана, jm);
end
else
begin
writеln ('матрицада‘,k,’минимумдер MIN=',MIN);
for i:=1 to K do
writеln ('жол',B[1,1], 'бағана', b[1,2])
end;
end.
Есепті шешу үшін:
* айнымалыларды сипаттаймыз;
* А массив ұзындығы мен массив элементтерінің мәнін енгіземіз
* массив элементтеріне
қарап, ең кіші элементтерін
іздейміз және көмекші В
* ең кіші элементтер санын есептейміз;
* К-ға қарай не бір ғана ең кіші элемент туралы информацияны шығарамыз, не барлық ең кіші элементтер туралы информацияны шығару үшін В массивін қайта қарауды ұйымдастырамыз;
Айнымалылар: