Паскаль-программалау тілі (авторы:В.Н.Кирнос)

Аудармашы Бексарыұлы.М

 

§8. Бір өлшемді жиымдар

 

Паскальда Бейсиктегі сияқты жиымдарды пайдалануға болады. Оларды алдынала программа басында сипаттау қажет(программа-да қолданылатын айнымалылармен бірге). Жиым-бұл бір атпен бел-гіленген шамалардың реттелген тізбесі екендігін еске саламыз. Жиым элементтері болып табылатын мәліметтер индекс түрінде беріліп, белгілі бір ретпен орналасады.

Біз Бейсикте бір және екі өлшемді жиымдарды оқып үйрендік. Паскальда да ондай мүмкіндіктер бар және мұнда жиымдардың үлкен өлшемдерін(үш өлшемді және т.б) беруге болады. Алайда біз, бір және екі өлшемді жиымдармен шектелеміз.

Бір өлшемді жиымды сипаттау былай жүргізіледі:

     var жиым аты array[1..жиым ұзындығы] of типі

мұнда жиым аты-Паскальда қолдануға болатын кезкелген атау(бір-іншісі әріп болатын, латынның 8 әрпі мен цифрынан аспайтын).

Жиым ұзындығы – берілген жиымда қанша элемент болатындығын көрсететін сан, типі – Паскальда қолданылатын(real, integer,char т.б) кезкелген тип. Жиым индекстері тік жақшаға алынып жазылады.

 

8.1-мысал. ai = i2, b1 = 1, bi = b[i/2] + bi -1, I = 2,3,…10 ережесі арқылы

               жасалатын a1,a2,…,a10 және b1,b2,…,b10  тізбектерін есептеп

               шығару, мұнда [i/2] жазбасы i/2-нің бүтін бөлігін білдіреді.

Program mys8_1;

var i:integer; a,b:array[1..10] of real;

begin b[1]:=1; a[1]:=1;

       writeln(‘a[1]=’,a[1],’b[1]=’,b[1]);

        for i:=2 to 10 do

             begin

                a[i]:=sqr(i); b[i]:=b[i div 2]+b[i-1];

                writeln(‘a[‘,i,’]=’,a[i],’b[‘,i,’]=’,b[i]);

             end

end.

 


Паскальда, Бейсиктен өзгеше, жиымның өлшемін(сырттан енгізіп) өзгертуге болмайды. Бұл Паскальдың Бейсиктен басты ерекшелігі-не негізделген. Бейсик – интерпретатор, сондықтан ол программа-ны жол бойынша біртіндеп орындайды, ал Паскаль – транслятор, ал ол алдымен бүкіл программаны машиналық тілге «аударады»(яғни трансляция кезінде жиым үшін жадыдан орын бөледі), содан соң ғана оны орындай бастайды.

Алайда жеке жағдайда бұл проблеманы реттеуге болады. Ол үшін тұрақтылар қолданылады, оны программа басында (белгіден кейін, бірақ айнымалы мен жиым типін сипаттаудан бұрын) сипаттау керек. Тұрақты былай сипатталады:

        const тұрақты аты = тұрақты мәні

тұрақты аты  әдеттегіше (айнымалы аты сияқты) беріледі. Берілген тұрақтының мәнін программа ішінде өзгертуге болмайды!

 

8.2-мысал. 8.1-мысалындағы берілген тізбектерді тұрақтыны

                   қолданып есептеу.

Program mys8_2;

const n=10;

var i:integer; a,b:array[1..n] of real;

begin b[1]:=1; a[1]:=1; writeln;

       writeln(‘a[1]=’,a[1],’b[1]=’,b[1]);

        for i:=2 to n do

             begin

                a[i]:=sqr(i); b[i]:=b[i div 2]+b[i-1];

                writeln(‘a[‘,i,’]=’,a[i],’b[‘,i,’]=’,b[i]);

             end

end.

 

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

Бақылау сұрақтары

1.Жиым деген не?

2.Паскальда бір өлшемді жиым қалай сипатталады?. Жиымның өл-

   шемін сырттан мән енгізу арқылы неге өзгертуге болмайды?

3.Тұрақты деген не және ол қалай сипатталады?

Практикалық тапсырмалар

8.1. n элементтен тұратын жиым берілген.Тақ нөмірлі элементтерді

       квадрат дәрежеге шығарыңыз.

8.2. n элементі бар жиым берілген. Жұп нөмірлі элементтер мен тақ

       нөмірлі элементтердің қосындыларын бөлек-бөлек табыңыз.

8.3. n элементі(натурал сандар) бар жиым берілген. Ондағы жұп

       сандарды 0-мен, тақ сандарды (-1)-мен ауыстырыңыз.

       Қорытынды жиымды басып шығарыңыз.

8.4. n элементі бар(n-жұп) жиым берілген. Оларды мына ретпен:

       a1,an,a2,an-1,…,an/2,an/2+1 басып шығарыңыз.

8.5. n элементі бар(n-жұп) жиым берілген. Мұндағы жұп және тақ

       нөмірлі элементтердің орнын былайша: а1 мен а2-ні, а3-пен а4-ті

       т.с.с ауыстырыңыз. Қорытынды жиымды шығарыңыз.

8.6. Әрқайсысы n элементтен тұратын екі жиым берілген.

       Құрамына кезекпен 1-жиым, сосын 2-жиым элементтері енетін

       3-жиым құрып оны баспаға шығарыңыз.

8.7. n элементі бар(n-жұп) жиым берілген. Элементтері берілген

       жиымның 1-і мен соңғысының және 2-і мен соңғының алдында-

       ғы элементтерінің т.с.с қосындыларынан тұратын екі есе кіші

       жиым құрыңыз. Қорытынды жиымды басып шығарыңыз.

8.8. n элементі(натурал сандар) бар жиым берілген. Мүшелері тақ

       сан болатын элементтер санын анықтаңыз.

8.9. n элементі(натурал сандар) бар жиым берілген. 3-ке еселі

       элементтер санын анықтаңыз.

8.10. n элементі(натурал сандар) бар жиым берілген. Реттік нөмірі

        жұп және өзі тақ сан болатын элементтердің санын анықтаңыз.

8.11. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі

         элементтердің қосындысын анықтаңыз.

8.12. n элементі(бүтін сандар) бар жиым берілген. Тақ және теріс

         мәнді элементтердің қосындысын анықтаңыз.

8.13. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі,

         бірақ 10-ға еселі емес элементтердің арифметикалық орта

         шамасын анықтаңыз.

8.14. n элементі(натурал сандар) бар жиым берілген. Берілген р

         санына  еселі элементтердің көбейтіндісін анықтаңыз.

8.15. n элементі(натурал сандар) бар жиым берілген. 3-ке еселі,

         бірақ  5-ке еселі емес элементтер санын анықтаңыз.

8.16. n элементтен тұратын жиым берілген. Оларды мына ереже

         бойынша түрлендіріңіз (- жиымның түрлендіргеннен

         кейінгі k-шы элементінің мәні):

         а) 1<=i<=k болғанда=max xi ;

         б) жиым элементтерін кері ретпен орналастырыңыз;

         в) жиым элементтерін солға циклді түрде бір позицияға

             жылжытыңыз: =, =, k=1,2,…n-1.

8.17. Кемуі бойынша реттелген екі Х және У жиымдары берілген.

         Оларды бір Z жиымына тағы да кемуі бойынша орналасатын-

         дай етіп біріктіріңіз.

 

 

Есептердің шешуі.

 

§8. Бір өлшемді жиымдар

 

8.1. n элементтен тұратын жиым берілген.Тақ нөмірлі элементтерді

       квадрат дәрежеге шығарыңыз.

Есепті шешу программасы:

program e8_1;

const n=5;

var a:array[1..n] of integer; i:integer;

begin

    for i:=1 to n do

    begin

        write(i,‘-нөмірлі элементті енгізіңіз:’); readln(a[i]);

    end;

    for i:=1 to n do if i mod 2=1 then write(‘ ’,a[i]*a[i])

end.

 

8.2. n элементі бар жиым берілген. Жұп нөмірлі элементтер мен тақ

       нөмірлі элементтердің қосындыларын бөлек-бөлек табыңыз.

program e8_2;

const n=5;

var a:array[1..n] of integer; i,s1,s2:integer;

begin

    for i:=1 to n do

    begin

        write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

    end;

     s1:=0; s2:=0;

    for i:=1 to n do if i mod 2=0 then s2:=s2+a[i] else s1:=s1+a[i];

    writeln;

    write(‘жұп нөмірлі элементтер қосындысы =’,s2);writeln;

    write(‘тақ нөмірлі элементтер қосындысы =’,s1)

end.

 

8.3. n элементі(натурал сандар) бар жиым берілген. Ондағы жұп

       сандарды 0-мен, тақ сандарды (-1)-мен ауыстырыңыз.

       Қорытынды жиымды басып шығарыңыз.

program e8_3;

const n=5;

var a:array[1..n] of integer; i:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        for i:=1 to n do

             if a[i] mod 2=0 then a[i]:=0 else a[i]:=-1;

        writeln;

        for i:=1 to n do write(‘ ’,a[i]);

end.

 

8.4. n элементі бар(n-жұп) жиым берілген. Оларды мына ретпен:

       a1,an,a2,an-1,…,an/2,an/2+1 басып шығарыңыз.

program e8_4;

const n=6;

var a:array[1..n] of integer; i:integer;

begin

    for i:=1 to n do

    begin

        write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

    end;

    for i:=1 to n do

        write(‘ ’,a[i],’ ’,a[n-1+1])

end.

 

8.5. n элементі бар(n-жұп) жиым берілген. Мұндағы жұп және тақ

       нөмірлі элементтердің орнын былайша: а1 мен а2-ні, а3-пен а4-ті

       т.с.с ауыстырыңыз. Қорытынды жиымды шығарыңыз.

program e8_5;

const n=6;

var a:array[1..n] of integer; i,x:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        for i:=1 to n-1 do

        if i mod 2=1 then

              begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x end;

        for i:=1 to n do write(‘ ’,a[i]);

end.

 

8.6. Әрқайсысы n элементтен тұратын екі жиым берілген.

       Құрамына кезекпен 1-жиым, сосын 2-жиым элементтері енетін

       3-жиым құрып оны баспаға шығарыңыз.

program e8_6;

const n=5;

var a,b:array[1..n] of integer; c:array[1..2*n] of integer; 

          i,k:integer;

begin

    for i:=1 to n do

    begin

      write(i,‘-нөмірлі a және b элементін енгізіңіз:’); readln(a[i],b[i]);

    end;

    for i:=1 to n do begin

               k:=k+1; c[k]:=a[i];

               k:=k+1; c[k]:=b[i]

               end;

    for i:=1 to n*2 do

    write(‘ ‘,c[i]);

end.

 

8.7. n элементі бар(n-жұп) жиым берілген. Элементтері берілген

       жиымның 1-і мен соңғысының және 2-і мен соңғының алдында-

       ғы элементтерінің т.с.с қосындыларынан тұратын екі есе кіші

       жиым құрыңыз. Қорытынды жиымды басып шығарыңыз.

program e8_7;

const n=6;

var a:array[1..n] of integer; b:array[1..n div 2] of integer; i:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        for i:=1 to n div 2 do b[i]:=a[i]+a[n-i+1]     

        for i:=1 to n div 2 do write(‘ ’,b[i]);

end.

8.8. n элементі(натурал сандар) бар жиым берілген. Мүшелері тақ

       сан болатын элементтер санын анықтаңыз.

program e8_8;

const n=5;

var a:array[1..n] of integer; i,s:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        s:=0;

        for i:=1 to n do

             if a[i] mod 2=1 then s:=s+1;

        write(‘тақ элементтер саны =’,s)

end.

 

8.9. n элементі(натурал сандар) бар жиым берілген. 3-ке еселі

       элементтер санын анықтаңыз.

program e8_9;

const n=5;

var a:array[1..n] of integer; i,s:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        s:=0;

        for i:=1 to n do

             if a[i] mod 3=0 then s:=s+1;

        write(‘3-ке еселі элементтер саны =’,s)

end.

 

8.10. n элементі(натурал сандар) бар жиым берілген. Реттік нөмірі

        жұп және өзі тақ сан болатын элементтердің санын анықтаңыз.

program e8_10;

const n=5;

var a:array[1..n] of integer; i,s:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        s:=0;

        for i:=1 to n do

             if (i mod 2=0) and (a[i] mod 2=1) then s:=s+1;

        write(‘Нөмірі жұп, өзі тақ элементтер саны =’,s)

end.

 

8.11. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі

         элементтердің қосындысын анықтаңыз.

program e8_11;

const n=5;

var a:array[1..n] of integer; i,sum:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        sum:=0;

        for i:=1 to n do

             if a[i] mod 5=0 then sum:=sum+a[i];

        write(‘5-ке еселі элементтер саны =’,sum)

end.

 

8.12. n элементі(бүтін сандар) бар жиым берілген. Тақ және теріс

         мәнді элементтердің қосындысын анықтаңыз.

program e8_12;

const n=5;

var a:array[1..n] of integer; i,s:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        s:=0;

        for i:=1 to n do

             if (a[i] mod 2=1) and (a[i]<0) then s:=s+a[i];

        write(‘тақ және теріс элементтер саны =’,s)

end.

 

8.13. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі,

         бірақ 10-ға еселі емес элементтердің арифметикалық орта

         шамасын анықтаңыз.

program e8_13;

const n=5;

var a:array[1..n] of integer; i,s,k:integer; c:real;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        s:=0; k:=0;

        for i:=1 to n do

             if (a[i] mod 5=0) and (a[i] mod 10<>0) then

                  begin s:=s+a[i]; k:=k+1 end;

        c:=s/k;

        write(‘5-ке еселі, бірақ 10-ға еселі емес элементтердің  

арифметикалық ортасы =’,c)

end.

 

8.14. n элементі(натурал сандар) бар жиым берілген. Берілген р

         санына  еселі элементтердің көбейтіндісін анықтаңыз.

program e8_14;

const n=5;

var a:array[1..n] of integer; i,kob,p:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        pr:=1; write(‘p-ны енгізіңіз:); readln(p);

        for i:=1 to n do

             if a[i] mod p=0 then kob:=kob*a[i];

        write(‘p-ға еселі элементтердің көбейтіндісі =’,kob)

end.

 

8.15. n элементі(натурал сандар) бар жиым берілген. 3-ке еселі,

         бірақ  5-ке еселі емес элементтер санын анықтаңыз.

program e8_15;

const n=5;

var a:array[1..n] of integer; i,s:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]);

        end;

        s:=0;

        for i:=1 to n do

             if (a[i] mod 3=0) and (a[i] mod 5<>0) then s:=s+1;

        write(‘3-ке еселі, бірақ 5-ке еселі емес элементтер саны =’,s)

end.

 

8.16. n элементтен тұратын жиым берілген. Оларды мына ереже

         бойынша түрлендіріңіз (- жиымның түрлендіргеннен

         кейінгі k-шы элементінің мәні):

         а) 1<=i<=k болғанда=max xi ;

         б) жиым элементтерін кері ретпен орналастырыңыз;

         в) жиым элементтерін солға циклді түрде бір позицияға

             жылжытыңыз: =, =, k=1,2,…n-1.

a) program e8_16a;

const n=5;

var x:array[1..n] of integer; i,k,max:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(x[i]);

        end;

        for k:=1 to n do

             begin

                    max=x[k];

                    for i:=1 to k do

                         if x[i] >max then max:=x[i];

                         x[k]:=max;

              end;

        for i:=1 to n do write(‘ ’,x[i])

end.

б) program e8_16b;

const n=5;

var x:array[1..n] of integer; i,z:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(x[i]);

        end;

        for i:=1 to n do

             begin

                    z=x[i];

                    x[i]:=x[n-i+1];

                    x[n-i+1]:=z

              end;

        for i:=1 to n do write(‘ ’,x[i])

end.

в) program e8_16v;

const n=5;

var x:array[1..n] of integer; i:integer;

begin

       for i:=1 to n do

       begin

            write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(x[i]);

        end;

        z:=x[n];

        x[n]:=x[1];

        for i:=1 to n-2 do x[i]:=x[i+1];

        x[n-1]:=z;

        for i:=1 to n do write(‘ ’,x[i])

end.

8.17. Кемуі бойынша реттелген екі Х және У жиымдары берілген. Оларды бір Z жиымына тағы да кемуі бойынша орналасатындай етіп біріктіріңіз.

program e8_17;

const n=5;

var x,y:array[1..n] of integer; z:array[1..2*n] of integer; 

          i,j,k,m:integer;

begin

    for i:=1 to n do

    begin

    write(i,‘-нөмірлі X және Y элементін енгізіңіз:’); readln(x[i],y[i]);

    end;

     k:=0;

    for i:=1 to n do

               begin

                   k:=k+1; z[k]:=x[i];

                   k:=k+1; z[k]:=y[i];

               end;

     for i:=1 to n do

               begin

                    m:=z[i]; k:=i;

                    for j:=1 to n do

                        if z[j]>m then

                         begin

                             m:=z[j]; k:=j

                         end;

                             y:=z[i]; z[i]:=z[k]; z[k]:=y

                end;

    for i:=1 to n do

    write(‘ ‘,z[i]);

end.

 

                           

 

 

 

 

 

 

 

 

 

Hosted by uCoz