Автор работы: Пользователь скрыл имя, 21 Октября 2012 в 19:35, курсовая работа
Спортлото ойыны адамдарға кеңінен танымал ойындардың бірі. Ойынның шарты бойынша 1-мен 36-ның арасындағы 5 санды адам енгізуі керек. Содан соң компьютер сол енгізілген 5 санды кездейсоқ ойлайды. Егер кездескен сандар болса сіздің ұтысыңыз есептеледі.
Кіріспе .…..............................................................................................................5
1. Құрылымды мәліметтер типі …......................................................................8
1.1 Бір өлшемді массивтер.................................................................................. 8
1.2. Массивтермен амалдар орындау.................................................................11
1.3. Массив элементтерімен амалдар орындау.................................................11
1.4. Массив элементтерін енгізу және шығару................................................ 12
2. Массивтерді сұрыптау әдістері. …...............................................................15
2.1. Ауыстырмалы сұрыптау («көпіршік» тәсілі)........................................... 15
2.2. Қойылымды сұрыптау................................................................................ 15
2.3. Таңдап алу арқылы сұрыптау..................................................................... 16
2.4. Екі өлшемді массивтер (матрица)............................................................. 16
2.5 Спортлото ойыны.........................................................................................24
Қорытынды......................................................................................................... 27
Пайдаланылған әдебиеттер …...........................................................................30
Қосымша ….........................................................................................................31
Массив элементтерінің
Ү: =5*А[ 1]+SQR(A[2]+A[3]); X:=COS(A[5])+Sin(A[5]);
Fork:=1 To 10 Do Begin
Read(A[k]); Writeln(A[k]); A[k]:=A[k+1];
lfA[k]<5 Then S:=S+A[k];
While A[k]> =80 Do Begin S: =S+A[k]; k: =k+1 End; End;
1.4. Массив элементтерін енгізу және шығару
Массив элементтерін енгізу және шығару цикл арқылы жүзеге асырылады. Егер элементтерді ендіру үшін 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= Readln(A[K]); K:=K+1 End;
..............................
Бағдарламаның орындалу нәтижесінде N элементтен тұратын массив элементтерін пернетақтадан ендіруді ұйымдастырады, бағдарламада циклді оқығанда Read операторын N рет оқып тоқтап, массив элементтері мәндерін қашан пернетақтадан енгізгенше күтіп тұрады, бұл жерде К айнымалысы цикл параметрі қызметімен қоса массив индексі ретінде де қолданылып тұр.
Кейде бағдарламаның әр орындалуында массив элементтерінің мәндерін қайта-қайта пернетақтадан енгізу керек болады, бұл әсіресе енгізілетін элементтер саны өте көп болған кездерде бағдарлама орындаушы кісіні жалықтырып жібереді, сондықтан бұндай жағдайларда оларды бірден тұрақтылар бөлімінде енгізіп қойса да болады:
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], ’ ‘);
… … … … … … … … … … … … … …
К: =1;
Repeat Writeln(A[K]); K:=K+1
Until K>N;
..............................
K: =1;
While K= 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 );
2. Массивтерді сұрыптау әдістері.
Сұрыптау – қазіргі заманда мәліметерді өңдеу процессінің кең тараған түрлерінің бірі. Сұрыптау деп – массив элементтерін белгіленген ережелер бойынша орналастыру болып табылады. Мысалы, массивті өсуі не кемуі бойынша сұрыптау.
2.1 Ауыстырмалы сұрыптау («көпіршік» тәсілі)
Алгоритм 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;
2.2 Қойылымды сұрыптау
Басында алғаш тұрған екі элемент сұрыпталады. Олар сұрыпталған S жиынын құрайды. Келесі элемент алынып, сұрыпталған S жиынына сол жағындағы элементтері одан кіші етіліп, ал оң жағынан артық болып қойылады. Берілген элементті жиынға тұрғызу орны – аралықты жартыға бөлу арқылы табылады. Алгоритм өз жұмысын аяқтайды сол жағдайда, қашан N-ші орында тұрған элемент өңделіп болады.
2.3 Таңдап алу арқылы сұрыптау
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;
2.4 Екі өлшемді массивтер (матрица)
Екі өлшемді массив деп – элементі массивтің жол мен бағанында тұрған орнына тәуелді болатын массив. Жалпы түрде матрицаның элементтері былай белгіленеді A(I,J), мұндағы A – массивтің аты, I - жолдың индексі (нөмері), J – бағанның индексі (нөмері).
Turbo Pascal тілінде екі өлшемді немесе көпе өлшемді массивтермен жұмыс істеу үшін, олар сипаттау бөлімінде көрсетілуі тиіс.
Екі өлшемді массивті немесе матрицаны екі түрлі тәсілмен жазуға болады:
I. <матрицаның аты>: array[жол саны] of array[баған саны] of <айнымалының типі>;
II. <матрицаның аты>: array[<жол саны>, <баған саны>] of <айнымалының типі>.
A [n, m] массивін сипаттау жолы:
i
А массиві: 1 2 3 ... n
j
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 I>J - элементтер бас диагональдың астында орналасқан
I+J=N+I – элементтер
қосалқы диагональ бойында
I+J I+J>N+I – элементтер қосалқы диагональдың астында орналасқан.
Массивтерді қолдану ережелері
Анализ кезінде келесі екі сұраққа жауап беру керек:
1) Берілген есепті шешу үшін массив керек пе?
2) Егер керек болса, онда оның көлемі қандай болуы керек?
Массивті қолдану керек пе?
Бірінші сұрақтың мәні мынада: массивті тек қана ең керекті жағдайларда ғана қойдалану тиімді. Осыған үш себеп бар:
Бағдарламаманың үлкею, яғни қиындау барысында, көп массивті қолдана отырып, индекстері де өсе береді. Сонда қателер саны де көбейе бастайды. Бағдарламаманың кодын оқу қиынға түседі.
Массив үлкен көлемдерге
өте тез жетеді және жадыдан
көп орынды қажет етеді.
Массивсіз есепті
шешу кезінде, кейбір
Массивтің көлемі қандай болуы керек?
Мұндай сұрақ міндетті түрде қойлыуы тиіс, себебі массив дәл мәндермен сипатталуы керек. Т массивінде алғашқыда белгісіз элементтер саны болсын делік. Ол 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-ағымдағы минимум;
Осы есепті матрицаны бір қарап өтіп те шешуге болады. Мұндай жағдайды көмекші екі сөйлемді массив енгізу қажет. Массивке ең кіші элементтердің жолдары мен бағандардың мәні енгізіледі;