Құрылымды мәліметтер типі

Автор работы: Пользователь скрыл имя, 22 Ноября 2013 в 17:54, курсовая работа

Краткое описание

Осыған дейінгі қарастырылып келген мәлімет типтері қарапайым болып есептеледі. Себебі олар тек бір ғана обЪектіге яғни бір ғана санға немесе символға қатысты ғана қолданылады. Turbo Pascal-да бір типке жататын бірнеше элементтерден тұратын обектілерді де пайдалануға болады. Массив осындай бір типке жататын элементтерден құралатын құрылымдық тип болып табылады.
Жалпы Паскаль тілі программа құрушыларға өте ыңғайлы тіл. Оның логикалық құрылымы әр түрлі есептерді дәл шешуге көмегін тигізеді. Turbo Pascal тілін оқытып – үйретуден бастап, программалаудың қыр-сырын меңгертудің маңызы зор. Кез келген тілді үйрену оның алфавитінен басталады.

Прикрепленные файлы: 1 файл

Курстық жұмыс.doc

— 174.50 Кб (Скачать документ)

...................................

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.5  Массивтерді сұрыптау  әдістері.

     Сұрыптау – қазіргі заманда мәліметерді өңдеу процессінің кең тараған түрлерінің бірі. Сұрыптау деп – массив элементтерін белгіленген ережелер бойынша орналастыру болып табылады. Мысалы, массивті өсуі не кемуі бойынша сұрыптау.

1.6.  Ауыстырмалы сұрыптау («көпіршік»  тәсілі)

     Алгоритм 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;

1.7.  Қойылымды сұрыптау

     Басында алғаш тұрған екі элемент сұрыпталады. Олар сұрыпталған S жиынын құрайды. Келесі элемент алынып, сұрыпталған S жиынына сол жағындағы элементтері одан кіші етіліп, ал оң жағынан артық болып қойылады. Берілген элементті жиынға тұрғызу орны – аралықты жартыға бөлу арқылы табылады. Алгоритм өз жұмысын аяқтайды сол жағдайда, қашан N-ші орында тұрған элемент өңделіп болады.

1.8.  Таңдап алу арқылы сұрыптау

     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;

1.9.   Екі өлшемді массивтер  (матрица)

     Екі өлшемді массив деп – элементі массивтің жол мен бағанында тұрған орнына тәуелді болатын массив. Жалпы түрде матрицаның элементтері былай белгіленеді A(I,J), мұндағы A – массивтің аты, I - жолдың индексі (нөмері), J – бағанның индексі (нөмері).

     Turbo Pascal тілінде екі өлшемді немесе көпе өлшемді массивтермен жұмыс істеу үшін, олар сипаттау бөлімінде көрсетілуі тиіс.

      Екі өлшемді массивті немесе матрицаны екі түрлі тәсілмен жазуға болады:

    1. <матрицаның аты>: array[жол саны] of array[баған саны] of <айнымалының типі>;
    2. <матрицаның аты>: array[<жол саны>, <баған саны>] of <айнымалының типі>.

A [n, m] массивін сипаттау жолы:

  i

А массиві:

1

2

3

...

n

  j

1

         

2

         

.

         

..

         

m

         

                                     1-ші сызбанұсқа

         

          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 – элементтер  қосалқы диагональдың астында  орналасқан.

 

Массивтерді қолдану ережелері

Анализ кезінде  келесі екі сұраққа жауап беру керек:

  1. Берілген есепті шешу үшін массив керек пе?
  2. Егер керек болса, онда оның көлемі қандай болуы керек?

Массивті қолдану  керек пе?

     Бірінші сұрақтың мәні мынада: массивті тек қана ең керекті жағдайларда ғана қойдалану тиімді. Осыған үш себеп бар:

     Бағдарламаманың үлкею, яғни қиындау барысында, көп массивті қолдана отырып, индекстері де өсе береді. Сонда қателер саны де көбейе бастайды. Бағдарламаманың кодын оқу қиынға түседі.

     Массив үлкен көлемдерге өте тез жетеді және жадыдан көп орынды қажет етеді. Мысалы, 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.

 

Есепті шешу үшін:

* айнымалыларды сипаттаймыз;

* А массив ұзындығы мен массив элементтерінің мәнін енгіземіз

* массив элементтеріне  қарап, ең кіші элементтерін  іздейміз және көмекші В массивтің  индекс мәндерін есте сақтаймыз;

* ең кіші элементтер  санын есептейміз;

* К-ға қарай не бір  ғана ең кіші элемент туралы информацияны шығарамыз, не барлық ең кіші элементтер туралы информацияны шығару үшін В массивін қайта қарауды ұйымдастырамыз;

Айнымалылар:

Информация о работе Құрылымды мәліметтер типі