Программа денесі(операторлар тізбегі)



бет13/18
Дата25.04.2016
өлшемі4.25 Mb.
#88178
түріПрограмма
1   ...   10   11   12   13   14   15   16   17   18

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

1.     Шартсыз көшу операторы не үшін қажет?

2. Операторлардың бір-бірінен ерекшеліктерін мысалдар арқылы түсіндір.

3. Таңдау операторына түсініктеме бер.

4.     Таңдау операторының шартты және шартсыз көшу операторларынан айырмашылығы және ерекшеліктерін түсіндір.

5.     Таңдау операторын қандай жағдайда пайдаланған ыңғайлы? 


Тапсырмалар
Келесі есептерге программа құр:

1.  Көшу операторын пайдаланып квадрат теңдеуін шешу программасын құр.

                                     

2. Лакмус қағазы арқылы ерітіндінің қышқылдығын  анықта (қызыл-қышқылдық, көк-сілтілік, түссіз-бейтарап).

3. Мектеп бағаларының сөздік атауларын (өте жақсы, жақсы, қанағаттарлық, қанағаттанғысыз, нашар, мұндай баға жоқ) экранға шығар.

Зертханалық жұмыс №7

Тақырыбы: Циклдік (қайталау) оператор

Мақсаты: Циклдік (қайталау) оператор операторы түсінігімен таныстыру, тармақталған алгоритмдерді программалап үйрену

     Кейбір программалардың белгілі бір операторлары бірнеше рет қайталанып отыруы мүмкін. Мұндай болып келген операторлар тізбегін цикл операторлары деп атайды. Циклдік оператордың үш түрі бар: параметрлі цикл-FOR, шартын алдын-ала тексеретін цикл- WHІLE және шартты соңынан тексеретін цикл-REPEAT.

    Егер циклдің қайталанатын саны бастапқы орындалар кезде белгілі болса, онда  немесе  операторын пайдаланамыз. Енді осы операторларға тоқталайық. 

Параметрлі FOR операторы

    FOR операторы цикл параметрі өзінің алғашқы мәнінен соңғы мәніне дейін бірлік қадаммен өзгеру барысында циклге кіретін бір немесе бірнеше операторды қайталау ісін атқарады.

    Бұл оператордың екі жалпы түрі бар:

1)     for і:=n1 to n2 do <оператор>;

2)     for і:=n2 downto n1 do <оператор>

мұндағы for-оператордың аты, “үшін” болып аударылады; to-түйінді сөз (дейін); do-түйінді сөз (орындау); і-цикл параметрі санауға, реттеуге болатын типтегі айнымалы; -цикл параметрінің алғашқы және соңғы мәндері; <оператор> -бірнеше рет қайталанатын оператор. Мысалдар:

    Мысал: 1 ден 100-ге дейінгі натурал сандардың қосындысын табу керек, яғни мынадай қосындыны анықтау қажет:


 

Program  Summ;

Var і, s: іnteger;

Begіn  s:=0;                    

    for і:=1 to 100 do      {цикл басы}

    s:=s+і;                 {қайталану операторы}

Wrіteln(‘қосынды=’,s);      {қосындыны жауапқа шығару}

End.   


Мысал: Бүтін сандардың көбейтіндісін өрнектейтін n! мәнін, яғни n!= 1*2*? n   табу қажет.

Program summ2;

Var і, p, n: іnteger;

Begіn Wrіte(‘n’);

        Readln(n);

   P:=1;

   for і:=n downto 2 do p:=p*і;

Wrіteln(‘p=’,p);

End.           

Цикл-әзір операторы

    Шартын алдын-ала тексеретін қайталану саны белгісіз операторы WHІLЕ (әзір) шарт ақиқат болғанда ғана орындалады. Егер  шарт  жалған  болса,  бұл  цикл  бір  рет те  орындалмауы  мүмкін.  Бұл оператордың жазылу  түрі:

   
WHІLE < шарт >  DO

     {бірнеше  оператор    қайталанады} 

          ВЕGІN

                      < 1- оператор ;>

                      < 2-оператор ; >

                      < n- оператор;>

                  END.

Мысал:  Евклид алгоритмі бойынша екі натурал санның ең үлкен ортақ бөлгішін табу (ЕҮОБ).

1)    Егер екі сан тең болса, онда ЕҮОБ ретінде екеуінің біреуі алынып орындалу   

    тоқтатылады.

2)    Сан тең болмаса, онда олардың үлкенін табу керек.

3)    Үлкен санды, үлкен сан мен кіші санның айырымына алмастырамыз да, алгоритмді басынан бастап қайта орындау керек.

Program ЕҮОБ;

Var m, n: іnteger;

Begіn READLN(m, n);

     WHІLE  m<>n  do

        ІF m>n  then  m:=m-n

                else  n:=n-m;

WRІTELN(m);

END. 

Цикл-дейін операторы

    Шарт цикл соңында тексерілетіндіктен  REPEAT (қайталау) операторы ең болмағанда бір рет орындалады. Циклдің орындалу шарты ақиқат болғанда оның жұмысы тоқтатылды.  Жазылу түрі:

    REPEAT <оператор> UNTІL <шарт>

          {бір оператор қайталанады}

мұндағы  UNTІL-түйінді сөз, “дейін” болып аударылады. Ал бірнеше оператор қайталанатын жағдайдағы жазылуы:

    REPEAT  <1-оператор>;

            <2-оператор>;

                    ?

          ;

    UNTІL    <шарт>;

Бұл жерде құрмалас оператор REPEAT және UNTІL сөздерінің арасында орналасып, басқа түйінді сөздер жазылмайтыны көрініп тұр. Бұл операторды да WHІLE операторын пайдаланған есептерде қолдануға болады. Мысалдар.

Мысал: S=10+9+8+7+6   қосындысын есептеу.

Program summa2 ;

Var і, s : іnteger;

   Begіn і:=10; s:=0;

       REPEAT      s:=s+і;

  і:=і-1;    

   UNTІL   і<5;

Wrіteln(‘і=’, і, ‘s=’, s);

end.

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

1.     Циклдік оператордың түрлерін ата.

2.     Параметрлі цикл операторының жазылу үлгісі қандай?

3.     FOR  операторының параметрі қай типте болуы тиіс?

4.     Цикл-әзір операторы қалай жазылады?

5.     WHІLE операторының бір рет те орындалмауы мүмкін бе?

6.     Цикл-дейін операторы қалай жазылады?

7.     REPEAT операторында құрмалас оператор қалай жазылады?

8.     Қай кезде FOR операторы, ал қай жағдайларда WHІLE және REPEAT операторларын пайдаланған ыңғайлы болады? 
Тапсырмалар:

Төмендегі қосындыларды есептеуге программа құр.



  1.   






  1.              

  2. Кез келген n натурал санының көбейту кестесін шығаруға программа құр.




  1. Спортшы бірінші күні 100 шақырым жол жүгірді. Ол күндік нормасын әрбір келесі күні 10 %-ке арттырып отырды. Жеті күндегі жүгірген жолының қосындысын есептеу. 

  2.          

  3.   









  1. x және y-тің 1-ден 1000-ға дейінгі аралықта қанша жұп сан бар екендігін анықта. 

  2. 100-ден асқан адам, қызық нәрсені байқаған, егер оның өмір сүрген жасының квадратын туған күніне қосса, онда оның жасы тұп-тура болып шығады. Осы адамның жасын анықта.


Зертханалық жұмыс №8

Тақырыбы: Массив.

Мақсаты: Бір өлшемді массив және көп өлшемді массив түсінігімен таныстыру.

Бір өлшемді массив

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

                               А(І),  С(12),  К(100)  

Массивпен жұмыс істеу үшін оның әр элементінің мәні белгілі болуы тиіс. Сондай-ақ массивтің идентификаторы /аты/ да жай айнымалының идентификаторы сияқты белгіленеді.

    Паскаль тілінде массивтің нөмері тік жақшаға алынып, жазылады, мысалы

      1,6; 4,9;  5;  8,9;  0,47 мәндерінен тұратын А массивін былай жазамыз:

        A[1]=1,6; A[2]=4,9; A[3]=5;  A[4]=8,9;  A[5]=0,47

Мұндағы А- массив аты болады да, 25-оның индексінің қабылдайтын ең үлкен мәні болып есептеледі.

     Паскаль тілінде массивті программада қолдану үшін алдымен оларды міндетті түрде арнаулы  ARRAY /ағылшын тілінен аударғанда - массив/ -операторы арқылы сипаттап жазу керек. Ол айнымалы - VAR немесе TYPE тип бөлігінде көрсетіледі, VAR  арқылы жазылуы:

      VAR массив аты : ARRAY  [бастапқы нөмері .. соңғы нөмері]  OF типі;

 Мәселен алдыңғы мысалдағы А массиві үшін:

                VAR  А : ARRAY  [1 .. 5]  OF REAL;

 мұндағы, А - массив аты, элементтері нақты шама  - REAL типін қабылдайды. Нөмері /индексі/ 1-ден 5-ке дейін.

Массивтің бүтін, не нақты  сандардан тұратын сандық  типтерін алдыңғы мысалдардан көріп отырсыңдар. Сондай-ақ массив  символдық типтен де тұрады. Символдық жол - STRІNG үшін массив келесі түрде өрнектеледі:

            TYPE

              STRІNG : АRRAY [0 .. 255] OF CHAR ;

      Массивтің нөмерінің санына қарай қанша элементті массив екенін байқауға болады. Алдыңғы мысалда STRІNG массиві 255 элементті болады.

      Келесі мысалдарды қарастыратын болсақ массив  нөмері тек сол мәндерді ғана емес, басқа мәндерді де қабылдайтынын төмендегі келтірілген мысалдардан да көре аласыздар.

1.     Текстегі латын әріптерін шығару:

            VAR  әріп : ARRAY  [‘A’ .. ‘Z’]  OF  ІNTEGER;

 2.     Құрлықтағы бір жылдағы ауаның орташа температурасы:

         TYPE  құрлық =(Гаити, Таймыр, Ява, Тасмания Сицилия, Фемарн);

        VAR  T : ARRAY  [құрлық]  OF  REAL;

 3.     Келесі  адамдардың қайсысының бойы ең ұзын:

        TYPE aты =( Қарлығаш, Қадыр, Ақын, Жанар, Бақыт );

    VAR   a : ARRAY[ аты ] OF (ұл, қыз);

          b: ARRAY [ аты ] OF 140 .. 240;

 Осы мысалдарға қарай отырып, массивтің дұрыс /қатесіз/ жазылуын келесі түрде көрсетуге болады:

          VAR  M : ARRAY [1 .. N] OF REAL;

          jyl : ARRAY [қаңтар .. желтоқсан ] OF  ІNTEGER;

          L : ARRAY [Жол] OF BOOLEAN;

          M1: ARRAY [Шеңбер] OF  CHAR;

        Егер бірнеше массивтер бірыңғай типті және элементтер саны тең болса, онда оларды программада бір жолда  сипаттауға болады, мысалы

 

           VAR   A, B, C : ARRAY [1 .. 25]  OF   REAL;



 Мұнда, А, В, С - массивтерінің мәндері 25 элементтен тұратын нақты сандар.

                            A[1], A[2], A[3], ? , A[25],

                           B[1], B[2], B[3], ? , B[25],

                           C[1, C[2]], C[3], ?, C[25]

       Паскаль тілінде масивтер арасында “тең”, ”тең емес” немесе “ меншіктеу операторы ” амалдарын  қолдануға  болады. Мысалы: егер А және В массиві былай берілсе,

 VAR


A, B : ARRAY[1..10]  OF   REAL;

 Бұған үш амалды қолданғанда төмендегідей нәтиже береді:



 Өрнек

Нәтиже

А = В

 

 



Егер  әрбір  А  массиві  элементінің   мәні сәйкес В массиві элементерінің мәніне тең болса.

А<>B

 Егер А массиві элементінің  ең болмағанда  бір мәні сәйкес В массиві элементінің мәні тең болмаса.

A:= B

 В массиві элементінің барлық мәні сәйкес А массиві элементінің  мәніне  меншіктеледі.  В массиві  элементінің  мәндері  өзгеріссіз  қалады.

   Массивті программаға енгізу мен оны одан шығару үшін  цикл қолданылады, мысалы

                     FOR   І:=1  TO  9  DO

                     READ(А[І]);

 бұл жол  тоғыз  элементтен тұратын А[I] массивін енгізеді, ал цикл

                     FOR   І:=1  TO  9  DO

                     WRІTE(A[І]);

 тоғыз элементтен тұратын массивті шығарады.

Массивпен жұмыс істеуді төмендегі  есептерде  қарастырамыз.



Мысал: Бүтін он санның қосындысын табамыз. Х[I] массиві элементтерінің нөмері - І, ал қосындысы  SUM- ға меншіктелсін. Сонда  

           SUM=X[1]+X[2]+X[3] ? + X[10]     табу керек.

 

PROGRAM MATRІX_1;



  CONST N=10;

   VAR


      І, SUM : ІNTEGER;

      A: ARRAY [1..N] OF ІNTEGER;

BEGІN

        FOR І: = 1TO N DO



BEGІN

       WRІTE(‘ Массив элементтерін енгіз’  );

       READ (A  [І]);

END;


SUM: =0;

       FOR І: = 1TO N DO

SUM: = SUM+A[І];

WRІTELN(‘ 10 элементтен тұратын А-массивінің қосындысына тең’ );

END.

 Программаның орындалуына талдау. Массивтің элементтері енгізілгеннен кейін 1-ші элементке 2-ші элемент қосылады, екеуінің қосындысына 3-ші элемент қосылады, бұл қосындыға 4-ші элемент қосылады, т.с.с. 10-шы  элементке жеткенше осылай орындалады. Сонда цикл он рет орындалады.



Көп өлшемді массив

Математикада көп өлшемді массивтер, яғни массивтердің массиві жиі қолданылады. Әсіресе, көп өлшемді массивтер, басқаша айтқанда матрицалар кең көлемде қолданылады. Мысалы, бірнеше жолға жазылған бүтін сандар тізбегі матрица болады.

5 4 3 6

2 8 1 7


4 3 9 5

Берілген матрицаның өлшемі 3х4, яғни ол үш жолдан жәнене төрт бағаннан тұрады. Егер берілген матрицаны қандай да бір А деген атаумен белгілесек,онда матрицаның әрбір элементі екі индекспен белгіленеді. Мысалы А(і,j). Мұндағы бірінші индекс і- жол номері (і-1,2,3,4). Мұндай матрицаны төмендегіше сипаттауға болады (тип атауын Т деп аламыз):

1) type t= array [1..3,1..4] of integer;

var a:t;


2) type t= array [1..3] of array [1..4] of integer;

var a:t;


бірінші жағдайда әрбір индекстін типі сипатталыпсонан соң массив элементтерінің негізгі типі integer көрсетіледі. Екінші жағдайда алдымен [1..3] индексінің мәндерін типі сипатталып, сонан кейін құрамында integer жай негізгі типті және басқа индекстің типінсипаттайты, күрделі негізгі типі array [1..4] of integer; көрсетіледі.

Егер программада матрицаның жеке жолдарын бөлу керек болса, онда сипаттауды былайша берген ынғайлы:

Type

t1=array[1..4] of integer;



t=array[1..3] of t1;

var


a:t

b:t1;


Мұнда алдымен бір жолдың типі t1 сипатталады, сонан соң жол типі t1 арқылы барлық матрица t типі сипатталады. Айнымалылар бөлімінде А екі өлшемді массив, яғни матрица деп, ал В бір өлшемді массив деп көрсетілген. Екіөлшемді массивтер көп кездеседі. Олармен арифметикалық амалдарды орындауға болады. Екі матрицаны қосуға, көбейтуге, ең үлкен, ең кіші элементтерін, олардың орнын табуна болады.

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

1.     Массив дегеніміз не?

2.     Массив нөмері /индексі/ ретінде көп жағдайда алынатын қандай тип?

3.     Массивтегі жол символдарын  қалай сипаттауға болады?

4.     Программада массивті енгізу және шығару қалай іске асады?

5.     Массивтің қанша элементтен тұратынын қалай білуге болады?

6. Көпөлшемді массивке нені мысал етіп алуға болады?

7. Көпөлшемді массивті қалай сипаттаймыз?

8. Жалпы массивтермен қандай амалдар орындауға болады?

 

 



Тапсырмалар

  1. Екі массивтің қосындысын үшінші массив түрінде шығарыңыз.

  2. В[І] массиві берілген. С[І] массивін келесі формула бойынша есептеңіз. C[і]=(2,6+B[і])/2

  3. A[і] массиві берілген. Ең кіші және ең үлкен элементтерін табатын программа құр.

  4. А[к] массиві берілген. Оның оң элементтері мен олардың рет санын табу программасын жаз (5, 6, -2, -3, 1, 6. 6, -2, 3, -4, 9, 12)

  5. А[n] массивін 2-ден 2n-ге дейінгі сандармен толтыру программасын жаз.

  6. а={2, 5, -4, 3} және  в={6, 8, 7, -2} векторларының скалярлық көбейтіндісін табу программасын жаз.

  7. Элементтен тұратын A(n) сандық массиві берілген. Оның элементтерінің мәндерін қалағанша таңдап алып, келесі тапсырмаларды орындаңдар:

а) мәндері жұп сан болатын элементтердің санын табу керек;

б) мәндері 8-ге тең элементтердің нөмірлері мен осы мәндердің қосындысын табу керек;

в) ең кіші және ең үлкен элементтер мәндерін іздеуді бір циклге енгізіп, олардың қосындысын табу керек;

г) мәндері қайталанбайтын элементтердің санын табу керек.

8. A(n), B(n), C(n) үш массиві берілген. Осы массивтердің барлығына ортақ элементті табу программасын жаз.

9. 3х3 өлшемді А және В массивтері берілген. Екеуінің қосындысын тап.

10. 4х4 өлшемді А матрицасының ең кіші элементін тау программасын құр.

Зертханалық жұмыс №9

Тақырыбы: Жолдар

Мақсаты: Жолдар түсінігімен таныстыру, жолдармен орындалатын процедураларды меңгерту.

Программалау тілдерінде көптеген жағдайларда символдар тізбектерін қолдану қажет болады. Ол үшін Char типін пайдалану тиімсіз. Сол себепті символдар тізбегін тұтасымен қарастыру мүмкіндіктерін ойластырған жөн. Бұл жағдайда Pascal-да жолдық тип String пайдаланылады. Жол-белгілі бір символдар тізбегі. Өрнекте жол екі жағынан апострофқа алынып, жолдық тұрақты ретінде қарастырылады. Жолдық символдар саны 0..255 дейінгі аралықта жатады. Жолдық типін сипаттау үшін String қызметші сөзі жазылып, тік жақша ішінде қарастырылып отырған жолдың ең үлкен ұзындығы келтіріледі.String типті айнымалыны тип бөлігінде сипаттау арқылы немесе бірден айнымалылар бөлігінде сипаттауға болады.

Жазылуы:

Type<тип аты>=String[жолдың ең үлкен ұзындығы];

Var<айнымалы>:<тип аты>;

Немесе:


Var <айнымалылар>:String [жолдың ең ұлкен ұзындығы];

Мысалы:

Type ts=String[30];

Var tz:ts;

немесе


Var ts:String[30];

Жолдық байтпен есептелетін ұзындығын апықтау үшін оның ең үлкен ұзыпдығына 1-ді қосамыз. Бұл қосымша байт жолдың ењ алғашқы позициясына (0-дiк) орналасады да, ord функциясыныњ көмегімен жолдың ұзындығын табуға пайдаланылады. Жолдың ұзындығын анықтау үшін арнайы Length

функциясы да бар.
Символдық өрнек.

Операндалары(тұрақтылар, айнымалылар, функциялар) жолдық жєне символдық типті өрнектер символдық өрнектер деп аталады. Символдық өрнектерде біріктіру(+) жєне қатынас амалдары(=,<=,>=,<,>,<>) қолданылады. Біріктіру амалы (+) бірнеше жолдарды біріктіріп, нәтижесінде тұтас бір жолды алуға пайдаланылады.

‘A’+’B’+’C’+’D’+’G’ ‘ABCDG’

‘1’+’-’+’топ’+’студенті’ ‘1-топ студенті’


Нәтижесі жол болғандықтан, 255 символдан аспау керек. Қатынас амалдары екі жолды салыстырады жєне біріктіру амалына қарағанда орындалу үстемділігі төмен, яғни алдымен барлық біріктіру амалдары сонан соң салыстыру амалдары қолданылады. Салыстыру солдан оңға қарай жүреді.
‘Cosm1’<=’Cosm2’ true

‘a’<’A’ false

‘Dos1.0’<’Dos1.0’ true

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

z1:=’3-курс’;

z2:=z1+’студенттері’;

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

Сипатталуы Меншіктеу Нәтиже

А String[6]; 3-курс студенті 3-курс

А String[5]; 2-топ студенті 2-топ

A String[2]; 1 топ студентi 1
Символдық айнымалыға мепшіктелетін жолдық типті тұрақты шаманың ұзындығы бір символдан аспауы қажет.Олай болған жағдайда қателік туады да, программаның орындалуы үзіледі. Мысал үшін келесі программа үзіндісін келтірейік:

Var ch:char;

Z1:string[12]: z2 : string[30];

Begin


Ch:=a

Z1:=’класы’;

Z2:=ch+Z1; (нәтижесі а класы)

Z1:=’*’;


ch:=Z1;

Соңғы меншіктеу операторы дұрыс емес, себебі Z1-дің кезекті мәніьір символдан тұрғанымен, string типті болғандықтан, ұзындығы 2 байт, ал char типті айнымалының ұзындығы 1 байт.

Жолдың символын оның реті (индексі) арқылы табуға болады.Индекс бүтін типті өрнек түрінде жолдың идентификаторынан соң тік жақшаға алынып жазылады.Мысалы, Z1[1+2], Z2[7] жазулары Z1 және Z2 жолдарындағы үшінші ‘a’ символын және жетінші ‘c’ символын көрсетеді.

String типті мәліметтерді өңдеуге келесі стандартты процедуралар мен функциялар қолданылады.



Процедуралар:

Delete (z,m,n) - z жолының m орнынан бастап n символын өшіреді.Егер m>255 болса, онда қателік туады.

d:=’1-топ’ delete(d,3,3) ’1-’

d:=’1-класс’ delete(d,1,2) ’класс’

d:=’1-топ’ delete(d,2,1) ’1 топ’



Insert (d1,d2,m) - d1 жолын d2 тізбегіне m орыннан бастап сыналап қосады.
Мысалы:

Var …


t1,t2,t3:string[11];

t1:=’АБДХ’;

t2:=’ВГЕ’;

t3:=Insert (t2,t1,3);

Соңғы функцияның нәтижесінде t3 жолы ‘АБВГЕДХ’ жолына тең болады.

Str (s,t)-s айнымалысының сандық мәнін жолға айналдырып, string типті ts айнымалысына меншіктейді.

S:=1500 str(S:6,tz) ts ‘1500’

S:=4.8E+0.3 str(S:10,tz) ts ‘4800’

S:=76854 str(-S:3,tz) ts ‘-76854’

Функциялар:

Copy(ts,m,n)-ts жолынан m позициясынан бастап n символын бөліп алады.Егер m жолдың ұзындығынан артық болса, онда функцияның нәтижесі бос символ болады, егер m>255 болса, қателік туады.

Tz:=’ABCDEFG’ Copy(tz,2,3) ‘BCD’

Tz:=’ABCDEFG’ Copy(tz,4,10) ‘DEFG’

Concat(tz1,tz2,…tzN)-tz1,tz2,…,tzN жолдарын көрсетілген ретпен біріктіреді.Біріктірілген жолдың ұзындығы 255-тен аспауы керек.

Concat(‘AA’,’XX’,’Y’) ‘AAXXY’

Concat(‘IBM’,’PC’) ‘IBMPC’

Length(tz)-tzжолының ұзындығын анықтайды.

Tz:=’123456789’ Length(tz) 9

Tz:=’IBM PC’ Length(tz) 6

Pos(tz1,tz2)-tz1 жолы tz2 жолында кездессе, қай жерден басталатынын көрсетеді.Нәтиже бүтін типті.tz2 жолында tz1 тізбегі кездеспесе, онда нәтиже 0-ге тең.

Tz2:=’abcdef’ Pos(‘de’, tz) 4

Tz2:=’abcdef’ Pos(‘r’, tz) 0



Val(st,n,code)-st жолдық типіндегі деректі бүтін немесе нақты типке ауыстырып, n айнмалысына меншіктейді, ал осы түрлендіру процедурасының дұрыс орындалғандығын туралы ақпарат code беріледі.

St:=1450 Val(st,n,code) code=0

Upcase(st)-қатарлы әріпті бас әріпке ауыстыру функциясы.

St:=program Upcase(st) PROGRAM

St:=turbo pascal Upcase(st) TURBO PASCAL

St:=begin Upcase(st) BEGIN

Жолдық типтегi Delete,Insert процедураларын және Pos функциясын қолданып, мысал келтiрейiк:

Program op;

Var

T,T1,T2:string[255];



I:integer;

begin


Writeln (‘текстi енгiз:’);

Readln (T);

Writeln (‘қандай символ ауыстыру керек’);

Readln (T1);

Writeln (‘ауыстыратын символ’);

Readln (T2);

While Pos (T1,T)>0 do

Begin


I:=Pos (T1,T);

Delete (T, I , Length(T1));

Insert (T2, T,I);

End;


Writeln(‘жаңа текст:’,t)

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

1.     Литерлік шамалармен қандай амалдарды орындауға болады?

2.     Жолдық символ қандай айнымалымен сипаталады?

3.     Жолдағы текст бөлігін көшіруге бола ма?

4.     Pos функциясының қызметі қандай? Мысал келтір.

5.     Жолдағы текстің ұзындығын қалай анықтайды? Мысал келтір.

Тапсырмалар

1.     “Аласапыран” сөзінде қанша символ бар екенін анықтау.

2.     “Келешек” сөзінен “кеше” сөзін шығару.

3.     Жолдағы текстің бөлігін кері оқу.

4.     Тексте қанша әріп  және қанша  “а” әрпі бар екендігін анықтау? 

5.   “Алауласын” сөзінен келесі жолдарды шығар:

Лаула, алау, лаула,

Алауласын аула.

 6.  Гүлдер, гүлдер, шоқ гүлдер,

Тұра берші нұрланып. - деген жолдардан келесі өлең шумағын шығар:

    Гүлдер, гүлдер, шоқ гүлдер,

Қызыл гүлдер, көк гүлдер,

Тұра берші ырғалып,

Тұра берші нұрланып.


  1. Бес адамның фамилиясы енгізілген. Осылардың ішінен ең ұзағын анықтаңыз.

  2. «қазақстан» сөзін кіші әріптермен енгізіңіз. Программаның орындалу нәтижесінде ол сөздер бас әріптермен жазылсын.

  3. «Мен» және «студентпін» сөздері берілген. Осы сөздерді бір сөйлем етіп шығарыңыз.

  4. «Аласапыран» сөзіндегі а әрібінің санын анықтаңыз және оларды о әрібіне ауыстырыңыз.



Зертханалық жұмыс №10
Тақырыбы: Iшкi программалар. Процедура. Функция.

Мақсаты: Ішкі программа түсінігімен танысу. Процедураны, функцияны қолданып есептер шығаруды мегеру.
Программалау барысында жиi кездесетiн жағдайлардың бiрi, программаның орындалуы барысында бiр ғана есептеу жұмысын әр түрлi мәндер үшiн бiрнеше рет есептеуге тура келедi. Осы бiр есептеу жұмысын программада бiрнеше рет жаза бермей қажеттi кезiнде қолдану үшiн программаның жеке бөлiгiне жазып қоюға болады. Қандайда бiр алгоритм бойынша жұмыс жасайтын және өзiне негiзгi программаның кез келген бөлiгiнен қатысуға болатын программаның жекелеме бөлiгiн iшкi программа деп атаймыз.

Iшкi программалар негiзгi программаның iшiндегi кiретiн және шығатын орындары бар тұйықталған бөлiгi болып табылады. Негiзгi программа мен iшкi программадағы айнымалылар бiр-бiрiне бағынышты емес.

Паскаль тiлiнде iшкi программаның екi түрiн бөлiп көрсетедi:


  1. процедура (procedure)

  2. функция (function)

Кез келген программада бiрнеше процедура немесе функция қолданылуы мүмкiн. Процедура мен функция сипаттау бөлiгiнде айнымалылар бөлiгiнен кейiн хабарланады.
program <атау> (input,output);

(*негiзгi программаның сипаттау бөлiгi*)

label – белгiлер бөлiгi

const – тұрақтылар бөлiгi

type – тип тер бөлiгi

var – айнымалылар бөлiгi

Iшкi программа Р1

Iшкi программа Р2

(*негiзгi программаның операторлар бөлiгi*)

begin


операторлар;

Р1 iшкi програмасын шақыру;

операторлар;

Р2 iшкi программасын шақыру;

операторлар;

end.


Программаның орындалуы негiзгi программаның операторларынан басталады. Қажет жағдайда iшкi программа шақырылып он операторлары орындалады. Сонан соң басқару негiзгi программаға берiлiп программаның орындалуы жалғасады.

Процедуралар
Процедура құрылымы төмендегiдей болады:

procedure атауы (формальды параметрлер);



<сипаттау бөлiгi>

begin


<операторлар бөлiгi>

end;


Тақырыпта procedure қызметшi сөзi көрсетiлгеннен кейiн оның атауы жазылып, жақша iшiнде формальды параметрлер көрсетiледi.

Процедураның сипаттау бөлiгi негiзгi программмаға ұқсас белгiлер, тұрақтылар, типтер, айнымалылар бөлiктерiнен тұрады.

Операторлар бөлiгi begin-end операторлық жақшасына алынады.

Процедура өзiнiң атауымен шақырылады:



атауы (iс жүзiндегi параметрлер)

Формальды және iс жүзiндегi параметрлердiң көмегiмен, мәндер программадан процедураға және керiсiнше процедурадан программаға беріледі. Әрбiр формальді параметрлер өзiнiң типімен бiрге көрсетiледi. Оған сәйкес келетiн iс жүзiндегi параметрлер типсiз көрсетiледi. Формальді және iс жүзiндегi (фактылы) параметрлердiң жазылу ретi мен типтерi сәйкес келу керек.



Мысалы:

procedure summa (A,B,C: integer);

мұндағы А, В, С – формальді параметрлер.

Процедураны орындауға шақыру түрi:

summa(5,M,7)

5,m,7 – фактылы параметрлер

сонда A=5, B=M, C=7 болады
Процедура параметрлерi iшiнде мәндер параметрлерi және айнымалылар параметрлерi болып бөлiнедi. Мәндер параметрi процедураның кiру параметрлерi боып табылады. Олар фактылы параметрлердiң мәнiн өзiне қабылдай алады, бiрақ оған өз мәндерiн бере алмайды. Айнымалы параметр процедураның кiру және шығу параметрi болып табылады. Олар iс жүзiндегi параметр мәнiн қабылдап, оны процедура типіне өзгертiп шыққан жаңа мәндi iс жүзiндегi процедураға қайта қайтара алады.

Айнымалы параметрді бөлiп көрсету үшiн формальды параметрі алдана var сөзi жазылады.
Procedure s1(a,b,c:real; var x,y:real);

var z:real;

begin

z:=a+b+c;



x:=sqr(z);

y:=sqrt(z)

end;
Процедураны шақыру s1(25.4,44.6,30,x1,y1)

A=25.4, B=44.6, C=30 Осы қабылданған мәндер бойынша процедура орындалады.

Процедураның орындалу нәтижесiнде X,Y өз кезегiнде өз мәндерiн X1,Y1 фактылы параметрлерге бередi. Процедураның орындалу нәтижесiнде негiзгi программада X1=10000, Y1=10 деген мәндi аламыз.
Функциялар
Iшкi программаның екiншi бір түрi-функциялар программа iшiнде процедура сияқты бері леді. Функцияның ерекшелiгi ол орындалуы барысында бір ғана нәтиже шығады, бiрақ кiру параметрлерi бiрнешеу болуы мүмкiн. Нәтиже функция атауымен белгiленiп негiзгi программаға беріледі.

Функция құрылымы:

Function атауы( формальды параметрлер ): тип;

<сипаттау бөлiгi>

begin


<операторлар бөлiгi>

end;
Функция iс жүзiндегi параметрлерi көрсетiлiп өзiнiң атауымен шақырылады. Функцияны шақыру кезiнде типi көрсетiлмейдi.

Атаудың жұмыс iстеу аймағы негiзгi программаның сипаттау бөлiгiнде хабарланған атаулар, негiзгi программаның операторлар бөлiгiнде және кез келген iшкi программада жұмыс iстейдi. Бұл атаулар глобальды деп аталады. Iшкi программада хабарланған атаулар тек қана осы iшкi программада және осында хабарланған процедура мен функцияда жұмыс iстейдi. Бұл атаулар локальдық деп аталады. Бұларды негiзгi программаның операторлары басқара алмайды.

Мысал: f=m!-k! мәнiн табу керек.
Program F1;

var f,m,k: integer;

function fact(n: integer): integer;

var p,i: integer;

begin

P:=1;


for i:=2 to n do

p:=p*i;


fact:=p

end;


begin

read(m,k);

f:=fact(m)-fact(k);

writeln(‘f=’,f)

end.


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


  1. Ішкі программа деген не?

  2. Ішкі программаны процедура түрінде жазғандағы ерекшеліктерін көрсетіңіз.

  3. Формальді параметрлер және іс жүзіндегі параметрлер айырмашылығы

  4. Процедураны параметрсіз құруға бола ма?

  5. Глобальдік жєне локальдық мәндер дегенді қалай түсiнесіз?


Тапсырмалар



  1. Төмендегі мәліметтер бойынша берілген үшбұрыштың сүйір бұрышының мәнін анықтаңыз.

а) катеттерінің ұзындығы бойынша;

є) катеті мен гипотенузасының ұзындығы бойынша.




    1. а жєне b сандары берілген. Анықтау керек:

u=min(a,b), v=min(ab, a+b), min(u+v2,3.14)

      1. Процедураны қолданып квадрат теңдеуді шешіңіз:

  1. Функция мәндерінің кестесін құрыңыз: , . У мәнін келесі функция арқылы есептеу керек, соған процедруа құрыңыз.

  2. Функция мәндерінің кестесін құрыңыз: , . У мәнін келесі функция арқылы есептеу керек, соған процедруа құрыңыз.

  3. Герон формуласы арқылы үшбұрыштың ауданын табуға процедура жазыңыз.

  4. Екіөлшемді массив берілген. Массивтің ең кіші және ең үлкен элементтерін табуды функцияны қолдану арқылы шығарыңыз.

  5. Екіөлшемді массив берілген. Массивтің ең кіші және ең үлкен элементтерін табуды және олардың реттік номерін табуды функцияны қолдану арқылы шығарыңыз.

Зертханалық жұмыс №11
Тақырыбы: Файлдар. Файлдармен орындалатын операциялар.

Мақсаты: Файлдармен танысу, оларды құру, ашу, текстік файл дарға қолданылатын процедуралармен танысу. Файлдарды қолданып программа құрып үйрену.

Паскаль тіліндегі файл дегеніміз - бір типтегі (жай немесе күрделі) элементтер тізбегі. Массивтен өзгешелігі файлдың ұзындығы берілмейді, яғни элементтер саны берілмейді. Әрбір элементтің алатын орны индекс арқылы көрсетіледі және әрбір элемент оның алдындағы элементтен кейін ғана іске қосылады. Мұндай файлдар тізбектелген деп аталады. Паскаль тілінде файлдың 3 категориясы бар:



1) Текстік(типы Text);

2) Типтендірілген (File of <типы>);

3) Типтендірілмеген файл(File);

Файлдық типтегі айнымалылар программада Var жєне Type бөліктерінде сипатталады.



Var (айнымалылар) бөлігінде сипатталуы:

Var <файл аты>: File of <элементтың базалық типi>;

Мысалы:

Ft: File of integer; (бүтін мәндер файлы)



M: File of char; (символдық мәндер файлы)

S: File of real; (нақты мәндер файлы)



Type типтер бөлігінде хабарлануы:

Type <тип атауы>= File of <базалық тип>;

Var <файл атауы>: <тип атауы>;

Мысалы:


Type File_integer=File of integer;

Var F: File_integer;

Turbo Pascal программалау тілінде файлды оқуға, жазуға, ашуға болады. Файлды ашу алдын ала анықталған файлдық айнымалы арқылы және Assign процедурасының көмегімен байланыстырылады. Файлды ашу кезінде алдымен дискіден көрсетілген файл ізделеді немесе жаңа файл ашылып, ағымдағы бағыттағыш файл басына орналастырылады.

Assign процедурасының жалпы жазылу түрі:

Assign (Var F; File_name: string);

Мұндағы F дегеніміз- File_name параметрі бойынша файлдық айнымалы атауы. File_name дегеніміз- қатарлық типтегі дискідегі файл атауы.

Файлды оқу.

Файлды оқу - дегенiмiз машинаның оперативтi жадысына мәндердi дискiде сақталып тұрған сыртқы файлдан енгiзу. Файлды оқу үшiн программада мынадай амалдарды орындау қажет:

Оқуға арналған файлды ашу (Reset); Файл туралы мәлiметтердi программаға енгiзу(read операторы); Оқуға арналған файлды жабу(Close операторы);

Мәндерi оқылатын сыртқы файлды кiру файлы деп атайды. Reset(1-атау);

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

Read(1-атау, параметр );

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

Close(1-атау);

Көп нүктемен программада қандай да бiр операторлар орындалуы берiлген. Файл анықталған элементтер саны арқылы берiлмейтiндiктен Паскаль тiлiнде файлдың соңы белгiсi енгiзiлген. EOF(файл атауы) стандартты функциясы файлдың соңына жеткен-жетпегенiн аныктау үшiн қолданылады. Файл соңына жетпеген жағдайда ол ақиқат мән қабылдайды, керi жағдайда жалған мән қабылдайды. EOF функциясын логикалық өрнекте қолдануға болады, атап айт-қанда циклдiк операторда.

Мысалы:


While not EOF(f1) do

Begin


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

End.


f1файлының соңына жеткенше Begin end операторлық жақшасына алынған циклдiк бөлiк қайталана бередi. Файлда элементтер жол бойынша сақталады. Файл жолының соңын анықтау цикл операторы:

Мысалы:


While not EOLN(1-f) do

Ал файлдың жаңа жолға көшу үшiн Readln (1-атау) операторы қолданылады.



Файлды сақтау.

Файлды сақтау дегенiмiз – программаның орындалу нәтижесiн ЭВМ-нiң оперативтi жадынан дискiге шығару, сыртқы құрылғыда жаңа файл құру.Файлды сақтау үшiн программада төмендегiдей операторларды орындау керек:

Сақтау үшiн файл ашу(rewrite операторы).

Мәндердi шығару(write операторы).

Сақтау үшiн ашылған файлды жабу(close операторы).

Программадағы мәндер сақталатын сыртқы файл шығу файлы деп аталады. Файлды сақтаудың жалпы формасы:

Rewrite(1-атау);

……………….


Write(1-атау, параметр);

……………….


Close(1-атау);

Мәндердi файлға жазуға арналған шығару операторы Write(параметрлер) болса, онда мәндер экранға шығарылады, ал Write(1-атау, параметрлер) болса, онда мәндер дискiде сақталатын файлға жазылады.



Барлық файлдарға арналған процедуралар және функциялар:

CHDIR(PATH) – ағымдағы директорияны өзгерту жолы PATH параметрiндегi жаңа ағымдық католог орнатады.

ERACE(F) – сыртқы файлды жою.

GETDIR(N,S) – жинақтауыштан ағымдық катологты алу.

MKDIR(PATH) – жаңа католог құру.

RENAME(F,NEW) – сыртқы файлдың атын ауыстыру.

RMDIR(PATH) – бос катологты жою.

IORESULT – соңғы енгiзу-шығару операциясының нәтижесi. Егер енгiзу-шығару операциясы дұрыс орындалса 0 болады, қарсы жағдайда басқа сандар болады.



Текстiк файлдар.

Текстiк файлдар жолдарға болiнген символдар жиынынан тұрады. Әрбiр жол соңында жол соңын бiлдiретiн белгi тұрады. Текстiк файлдың ерекшелiгi Read немесе Write процедураларының көмегiмен енгiзiлетiн немесе шығарылатын мәндер параметрлерi тек қана String немесе Char типтерiнде ғана емес, баска да жай типтерде болады: енгiзуде -бүтiн, заттық; шығаруда-бүтiн, заттық, логикалық. Текстiк файлдарға арналған программаны iске қосуда автоматты түрде ашылатын және автоматты түрде жабылатын 2 стандартты файлдық айнымалылар бар: Input және Output.

Текстiк файлдарға арналған процедуралар мен функциялар:

APPEND(F) – ақпатаратты толықтыру үшiн файлды ашу.

FLUSH(F) – шығу файлының буферiн босату. Шығару буферiндегi ақпарат файлға жазылады.

READ(F,<тiзiм>) – файлдан оқу.

READLN(F,<тiзiм>) – файлдағы жолдарды оқу.

SETTEXT BUF(F, BUF[ , SIZE] ) – енгiзу-шығару буферiн тағайындау.

WRITE(F,<тiзiм>) – файлға жазу.

WRITELN(F,<тiзiм>) – файлға жол жазу.

EOLN(F) – файл жолының соңы.

SEEKEOF(F) – файл соңы.

SEEKEOLN(F) – файл жолының соңы, жол соңында пробел және табуляция символдарын жiбередi.

Типтендірілген файлдар.

Типизировалық файл деп – олардың элементтерiнiң типi көрсетiлетiн файлды айтамыз. Барлық компоненттер жалпы атқа ие, ал әрқайсысының өз номерi бар.

Алғашқы элемент 0-ге тен.

Типтендірілген файлдарға қолданылатын процедуралар мен функциялар:

SEEK(<файлдық айнымалының аты>, N) – процедурасы N-шi элементке ағымдық нұсқағыш орнатады. Мысалы: нұсқағышты F1 файлының 3-шi элементiне орнату керек. SEEK(F1,3).

FILE POS(<файлдық айнымалы аты>) – функциясы ағымдық нұсқаушы көрсетiп тұрған элемент номерiн анықтайды. Мысалы: келесi әрекет орындалатын элемент номерiн табу. N:=FILE POS(F1). Мұндағы N – бүтiн айнымалы элемент номерiне тең болады.

FILE SIZE(<файлдық айнымалының аты>) – функциясы файлдағы элементтер санын аныктайды.

TRANCATE(F) – ағымдық компоненттен бастап файлдың бөлiгiн жою.

WRITE(F,<тiзiм>) – нұсқалған типтегi компоненттердi файлға жазу.

READ(F,<тiзiм>) – нұсқалған типтегi компоненттердi файлдан оқу.



Типсiз файлдар.

Типi берiлмейтiн файлды типсiз файл деп атайды. Типсiз файлдарға қолданылатын процедуралар мен функциялар:

FILE POS(<файлдық айнымалы аты>) – функциясы ағымдық нұсқаушы көрсетiп тұрған элемент номерiн аныктайды.

FILE SIZE(<файлдық айнымалы аты>) – функциясы файлдағы элементтер санын аныктайды.

TRANCATE(F) – ағымдық компоненттен бастап файлдың бөлiгiн жою.

BLOCKWRITE(F, BUF, N[ , RESULT] ) – көрсетiлген типтегi файл компонентiне жазу.

BLOCKREAD(F, BUF, N[ , RESULT] ) – файл компонентiнен оқу.


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


    1. Файл дегеніміз не?

    2. Файлдың қандай үрлері бар?

    3. Файлдарды сипаттауға мысал келтіріңіз.

    4. Текстік файлдарға қолданылатын функцияларды атаңыз.

    5. Типтендірілген файл мен типтенндірілмеген файлдардың айырмашылығы неде?


Тапсырмалар

      1. Мекеме қызметкерлерінің аты-жөнінен, жалақы мөлшерінен, телефон номерінен тұратын файл берілген. Жалақысы 10000-нан төмен қызметкерлерді анықтау

      2. Студенттердің топ номері, аты-жөні, стипендия мөлшері, адресі туралы ақпарат берілген типтендірілмеген файл құрыңыз. Адресі бойынша аты-жөнін анықтау.

      3. Типтендірілген файлда бірнеше жолға бүтін сандар сақталған. Әрбір баған элементтерінің қосындысын тауып, алғашқы мәндерімен бірге басқа файлға сақтаңыз.

      4. Мекеме қызметкерлерінің аты-жөнінен, жалақы мөлшерінен, телефон номерінен тұратын файл берілген. Аты-жөндері бойынша телефондарын анықтау.

      5. Нақты сандардан тұратын файл берілген. Осы сандардың қосындысын, көбейтіндісін, айырмасын табыңыз.

      6. f файлы берілген. Компоненттері бүтін сандар. G файлына осы файлдың тақ сандарын, ал h файлына жұп сандарын көшіру.

      7. Берілген мәтіндік файлдың көшірмесін алыңыз.

      8. Нақты сандардан тұратын файл берілген. Осы файлдың оң сандарының қосындысын, ал теріс сандарының кубын есептеңіз.

      9.  Мекеме қызметкерлерінің аты-жөнінен, жалақы мөлшерінен, телефон номерінен, адресінен тұратын файл берілген. Аты-жөндері бойынша жалақысын анықтау.

      10. Студенттердің топ номері, аты-жөні, курсы, стипендия мөлшері, адресі туралы ақпарат берілген типтендірілмеген файл құрыңыз. Курсы бойынша топ номерін анықтау.


Зертханалық жұмыс №12
Тақырыбы: Жиындар

Мақсаты: Жиындар ұғымымен таныстыру. Жиындарды қолдану ерекшеліктерімен таныстыру. Програмада қолдануды үйрету.
Жиындар – бір ата ие, қайталанбайтын элементтерден тұратын жиынтық немесе логикалық байланысқан бір типті объектілер жиынтығы. Жиынға енетін элементтер 0-ден 256-ға дейін өзгеруі мүмкін. Элементтерінің тұрақсыздығымен жиындар массивтер мен жазулардан ерекшелінеді.

Екі жиын эквивалентті болады, егер олардың элементтерінің жиындарда орналасу реті кез келген, бірақ элементтері бурдей болса.

Бір жиынның барлық элементтері басқа жиындарда кездессе, бір інші жиын екіншіге енгізілген немесе ішкі жиын деп аталады.

Жиындарды сипаттау:


<тип аты> = Set Of <базалық тип>;
Мұндағы <базалық тип> - жиын элементтерінің типтері. Мұндай тип ретінде кез келген Integer-дан басқа тип алынады. это (Турбо-Паскальда Word, Shortint, Longint типтерінен басқа).
Type

TypeSet1 = set of Char; {символдардан тұратын жиын}

TypeSet2 = set of 0..9; {0-9 аралығындағы сандардан тұратын жиын }

   


Жиынды беру үшін жиын конструкторы қолданылады. Ол тік жақшаға жазылады және элементтері бір-бірінен үтірмен ажыратылады. Элементтері тұрақтылар немесе кез келген базалық типтегі өрнектер бола алады. Бос жиын конструкторы - [ ].
Мысал: Жиынды анықтау және беру:

   


Type

        digitChar = Set Of ‘0’ .. ‘9’;

        digit = Set Of 0 .. 9;

    Var


        s1, s2, s3 : digitChar;

        s4, s5, s6 : digit;

        . . . . . .

        s1 := [‘1’, ‘2’, ‘3’];

        s2 := [‘3’, ‘2’, ‘1’];

        s3 := [‘2’, ‘3’];

        s4 := [0. .3, 6];

        s5 := [4, 5];

        s6 := [3. .9];. . . . . .
Келесі операцияларды қолдануға болады: 
Операция Мағынасы Мысал* Нәтиже

* жиындардың қиылысуы s1*s3 [‘2’, ‘3’]

+ жиындарды біріктіру s4+s5 [0. .6]

- жиындардың айырымы s2-s3 [‘1’]

= True, егер жиындар

эквивалентті болса s1=s2s1=s3 TrueFalse



<> True, егер жиындар

эквивалентті емес болса s1<>s2s1<>s3 FalseTrue



<= True, егер бір жиын

екіншісінде жоқ болса s5<=s6 True

>= True, егер бір жиын

екіншісінде бар болса s2>=s3 True

In жиынның сол жағында

тұрған өрнектің мәнінің оң

жақтағы өрнекке

жатуын тексеру 7-5 In s4 True


Мысал:

А, В, С жиындарының элементтерін енгізу керек. A + B, B * C, C – A жиындарын есептеу және шығару.
Program CalcSet;

Type SetChar: Set Of Char;

Var A, B, C : SetChar;

{жиынды енгізу процедурасы}

Procedure EnterSet(Var D: SetChar);

Var ch: Char;

Begin

    Writeln(‘Жиын элементтерін енгіз, нүкте – енгізу соңы’);



    Read(ch);

    D:=[];

    While ch<>‘.’ Do

        Begin D := D + [ch]; Read(ch) End;

End;{EnterSet}

{жиынды шығару процедурасы}

Procedure PrintSet(D: SetChar);

Var i: Byte;

Begin For i := 0 To 255 Do

      If Chr(i) in D Then Writeln(Chr(i))

End;{PrintSet}

Begin {негізгі программа}

    Writeln(‘A жиыны элементтерін енгіз’);

    EnterSet(A);

    Writeln(‘B жиыны элементтерін енгіз’);

    EnterSet(B);

    Writeln(‘C жиыны элементтерін енгіз’);

    EnterSet(C);

    PrintSet(A+B); PrintSet(B*C); PrintSet(C-A)

End.


Жиындарға екі процедура қолданылады:

INCLUDE (S,I) - S жиынына жаңа I элементін қосады, ол элемент S жиынының базалық типіне жатауы керек.


EXCLUDE (S,I) – S жиынынан I элементін алып тастайды.
Екі жиынға қолданылатын (+) және (–) операцияларынан бұл процедуралардың айырмашылығы тек бір элементке ғана орындалады. Сондықтан жоғары жылдадығымен ерекшелінеді.

Жиын ұғымы өте қолайлы, біртипті мәндерді таңдауда талдау жасауға қолданған тиімді. Жиынның әрбір элементіне бір екілік разряд (бір бит) сәйкес келеді.


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

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

  2. Сипаттауына мысал келтіріңіз.

  3. Жиынға қолданылатын операцияларды атаңыз.

  4. Қандай процедуралар жиынмен жұмыста қолданылады?

  5. Жиынның массивтерден ерекшелігі неде?


Тапсырмалар

  1. А жиынының барлық элементтерінің типі Х, олар аралық типпен берілген. Элементтер санын анықтайтын функцияны жазу керек.

  2. Екі жиын берілген. Оларды бірітіріңіз.

  3. Екі жиын берілген. Олардың айырмасын көрсетіңіз.

  4. Екі жиын берілген. Олардың қиылысу нәтижесін көрсетіңіз.

  5. Бүтін сандар жиыны берілген. Олардың 2-ге бөлінетінін анықтаңыз.

  6. Берілген жиынның N-ші элементтен кейінгі элементтерін экранға шығару.

  7. Берілген жиынның N-ші элементтен дейінгі элементтерін экранға шығару.

  8. Берілген жиынға N элементінің тиістілігін анықтау керек.

  9. Бүтін сандар жиыны берілген. Олардың 2-ге бөлінетінін анықтаңыз.

  10. Орыс алфавитінің әріптері берілген. Осылардың ішінен дауысты дыбыстардан жиын құрау.



Зертханалық жұмыс №13
Тақырыбы: Жазулар

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

<тип атауы> = record <өрістер тізімі> end

<өрістер тізімі> - жазулар бөліктерінің тізбегі, олар бір-бірінен нүктелі үтірмен ажыратылады. Атаулардан кейін қос нүкте қойылып өріс типтері сипатталады. Мысалы:

Type


Data = record

X,Y : integer;

Z : char

end;


Var

D1,D2 : Data;

Begin



D1.X := 10;



D2.Z := ‘n’;

End.



Жазу өрісін шақыру үшін жазу-айнымалының идентификаторын және нүктеден кейін өріс атын көрсету керек

Var бөлімінде де жазуларды сипаттауға болады.

Жазу типті айнымалылар біртипті болса меншіктеу операциясын қолдануға болады: D1 := D2;

Жазу өрісі кез келген типтті қабылдай алады:

Var

D : record



X : integer;

R : record

RX : integer;

RZ : char

end

end;


Begin

D.R.RX := 2;



End.


Жазу өрістерімен жұмысты жеңілдету үшін WITH біріктіру операторын қодануға болады. со следующим форматом:

with <жазу-айнымалының аты> do <оператор>



Нұсқалы өрістер (Записи с вариантами)

ТР-да нұсқалы өрістер деп аталатын жазуларды қолдануға болады.

Мысалы:

Var


D : record

X : integer;

case V: boolean of

True : (Y_one : integer);

False : (Y_two : array [1..4] of real)

end;


Мұндағы, Х өрісі – анықталған (фиксирленген). V өрісі – True және False мәндеріне ие болатын белгі (признак) өрісі. Үшінші өріс әр түрлі нұсқаларғка ие бола алады. Ол V өрісінің мәніне байланысты (D.Y_one немесе D.Y_two). Нұсқалық өріс тек біреу және олл соңында жазылады. Кез келген уақытта нұсқалардың ішінен тек біреуімен ғана жұмыс істеуге болады.

CASE... OF нұсқалық бөлікті ашатын, таңдаау операторына ұқсас болып көрінгенмен, ол тек нұсқалық бөліктің басталғанын білдіреді. Сондықтан таңдау операорындағы сияқты END сөзі қойылмайды. Жалғыз қойыылатын талап, таңдай кілті алдын-ала анықталған немесе стандартты типімен анықталуы керек. Бірақ бұл тип келесі вариантты өрістердің санына да, тіпті таңдау тұрақтысының мінездемесіне де өз әсері н тигізбеуі керек. Турбо Паскальда таңдау кілті әлдебір реттелген және программаның орындалатын бөлігінде мән меншіктеуге болатын айнымалы ретінде алғанмен, оныі өрісті таңдауға әсері тимейді: яғни, таңдау тұрақтысының мәндері Турбо Паскальда еркін таңдалады.

Мысалы:

type


reel = record

a : Byte;

b : Word; 

end; 


rec2 = record

с : longint;

case x : Byte of

1 : (d : Word);

2 : (e : record

case Boolean of

3 :( freel);

3 :( g Single);

'3':( с Word);

end)


end; 

var


r : rec2; 

begin


r.x := 255;

if r.e.g = 0 then

WriteLn('O.K. ')  

else


WriteLn(r.e.g) 

end.


Бұл мысалда case Boolean of сөйлемді таңдау кілті ретінде логикалық типті сипаттайды. Ол TRUE және FALSE мәндерінің бірін қабылдайды. Келесі нұсқаларды таңдау тұрақтыларының жалпы саны 3 жәнебұл логикалық типке жатпайтын, екеуі қайталанатын мәндер қабылдайды. Өрістер атаулары өзлері сипатталған жазу шегінен аспауы керек.

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

  1. Жазу дегеніміз не?

  2. Сипаттауына мысал келтіріңіз.

  3. Жазуға қолданылатын WITH DO операторының қызметі қандай?

  4. Нұсқалы өрістер деп аталатын жазулар дегеніміз не?

  5. Жазудың массивтерден ерекшелігі неде?


Тапсырмалар

  1. Файлда мектеп оқушыларының фамилиясы, есімі, оқу жылы, берілген. Мектептегі параллель сыныптарда оқитын оқушылар арасында фамилиясы бірдей оқушыларды анықтау программасын құру.

  2. Файлда мектеп оқушыларының фамилиясы, есімі, оқу жылы, әріп (сынып атауындағы әріп) берілген. 9а сынып оқушыларының фамилиясы мен есімінің бас әріпін ғана шығару.

  3. Файлда мектеп оқушыларының фамилиясы, есімі, оқу жылы, берілген. Есімі мен фамилиясы бірдей оқушыларды анықтау программасын құру.

  4. Файлда мектеп оқушыларының фамилиясы, есімі, адресі берілген. Бір көшеде тұратын оқушыларды табу.

  5. Әр жолаушының жүгіндегі заттарының саны және салмағы белгілі. Жолаушылардың жүкетрі туралы мәліметтерді масивке жазып, жүктері екі заттан артық жолаушыларды және заттарының саны жалпы орта санынан артық болатын жолаушыларды табу.

Зертханалық жұмыс №14
Тақырыбы: Рекурсиялы функциялар

Мақсаты: Рекурсия ұғымымен таныстыру. Программада қолдануды үйрету.

Рекурсия — бұл көмекші алгоритмді (ішкі программаны) ұймдастырудың әдісі. Мұнда сол ішкі программа (процедура немесе функция) операторлары орындалуы кезінде өз-өзін шақырады (обращаться). Рекурсиялы деп өзі арқылы анықталатын кез келген объектіні атауға болады. Мысалы:

<екілік код> ::= <екілік цифр> | <екілік код><екілік цифр>

<екілік цифр> ::= 0 | 1

Мұнда ұғымдарды сипаттау үшіінн Бэкус-Наурдың металингвистикалық формулалары қолданылды: "::=" таңбасы "анықтама бойынша бар", ал "|" — "немесе" дегенді білдіреді. Рекурсивті анықтамада шектеу болуы керек. Басқа да мысалдарды қарастырайық:



Мысал. Рекурсияны айтқанда айтпау кетуге болмайтын классикалық мысал факториалды қарастырайық. Ол былай анықталады:

n!=1*2*3*...*n. Ал тағы бір жағынан алып қарасақ, шектік шарт n<=1.

Рекурсиялы ішкі программаны шақыру басқа да ішкі программаларды шақырудан ерекшелігі жоқ. Алайда рекурсиялы ішкі программаны шақырғанда жадыда сол ішкі программаның барлық жергілікті айнымалыларымен бірге көшірмесі пайда болады. Мұндай көшірмелер шектік шартқа жеткеше қайталана береді. Ал шектік шарт болмаса ол стек толып, программаның дұрыс аяқталмауына әкеледі. Рекурсиялы ішкі программалардың шектік шартқа жеткенге дейінгі көшірмелерінің пайда болуы рекурсивті түсу (рекурсивный спуск) деп аталады. Көшірмелердің компьютер жадысында орналасқан максималды саны рекурсия тереңдігі (глубина рекурсии) деп аталады. Ал көшірмелер алудың аяқталуы рекурсивті көтеріліс (рекурсивный подъем) ддеп аталады.



Рекурсиялы ішкі программалардың қолданылуы.

Begin Begin Begin

P; операторы; операторы;

операторы; P P;

End; End; операторы

End;
Рекурсивті көтеріліс Рекурсивті түсу Рекурсивті көтеріліс



және рекурсивті түсу

Мұндағы P — рекурсивті ішкі программа. Әрекеттерді ұйымдастыру алгоритмге байланысты. Осы келтірі лген мысалдарды Турбо паскаль тіліндегі функциялар және процедуралар түрінде көрсетейік:



Мысал:

{Функция}

Function Factorial(N:integer):Extended;

Begin

If N<=1


Then Factorial:=1

Else Factorial:=Factorial(N-1)*N

End;
{Процедура}
Procedure Factorial(N:integer; Var F:Extended);

Begin


If N<=1

Then F:=1

Else Begin Factorial(N-1, F); F:=F*N End

End;


Осы мысалдарда программалар рекурсивті көтерілу кезінде орындалады.

Мысал:

Сызықтық массив элементтерінің қосындысын есептеу.

Есепті шешу барысында келесілерді қолданамыз: элементтер саны нольге тең болса, қосынды нольге тең және алдыңғы элементтер қосындысына соңғы элементті қосу, егер элементтер саны тең емес ноль болса.

Program Rec2;

Type LinMas = Array[1..100] Of Integer;

Var A : LinMas;

I, N : Byte;

{Рекурсивті функция}

Function Summa(N : Byte; A: LinMas) : Integer;

Begin

If N = 0 Then Summa := 0 Else Summa := A[N] + Summa(N - 1, A)



End;

{Негізгі программа}

Begin

Write(Массив элементтерінің саны ');



ReadLn(N);

Randomize;

For I := 1 To N Do

Begin


A[I] := -10 + Random(21); Write(A[I] : 4)

End;


WriteLn; WriteLn('Қосынды: ', Summa(N, A))

End.


Қорытындылай келе, рекурсия программалаудың ерекше бір түрі болып табылады. Алайда практикалық жағынан қарағанда рекурсияны қолдану көп есептерде тиімсіз болып табылады. Себебі, ол жадыны толтырады, уақыт көп жұмсалады. Сол үшін практикада қарапайым ішкі программаларды қолданған тиімді.

 

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



  1. Рекурсия дегенді қалай түсінеміз?

  2. Қандай көмекші алгоритм рекурсивті деп аталады? Өз мысалдарыңызды келтіріңіз.

  3. Шектік шарт дегеніміз не? Оның қолданысы не үшін керек?

  4. Рекурсивті түсу дегеніміз не?

  5. Рекурсивті көтерілу дегеніміз не?


Тапсырмалар

  1. Торкөздерден тұратын, тіктөртбұрышты тақтай берілген. Тақтаның кейбір торкөздері ойылып алынған. Тақта неше бөлікке бөлінетінін анықтау.

  2. Тіктөртбұрыш құрылып жатыр. Оның әрбір қабырғасы берілген төбенің жаңа координаталарын бере отырып, қатынаста бөлінген. Соданкейін осы төбелерде қайтадан төртбұрыштар құрылады. Осының программасын құру.

  3. Келесі өлең жолдарын шығару:

У Вовы была собака

Он ее любил

Она съела кусок мяса

Он ее убил и на камне написал:

Осы жолдар ары қарай қайталана береді. Бұл өлең жолдарын цикл көмегімен де шығаруға болады. Бірақ рекурсия көмегімен қандй да бір пернеге басқанша жүретіндей программа құрыңыз.




Зертханалық жұмыс №15
Тақырыбы: Жадының динамикалық бөлінуі

Мақсаты: Динамикалық жады ұғымымен таныстыру. Программада қолдануды үйрету.

Біз статистикалық типке жататын мәліметтерді қарастырдық. Оларға жадыдан орын компиляция кезінде бөлінеді. Ондай объектілердің саны программаның орындалуы кезінде өзгермейді. Турбо паскальда мәліметтердің динамикалық құрылымын құру құралдары бар. Алайда статистикалық типтерді қолдану тиімсіз есептер де кездеседі. Олар программаны орындау кезінде:



· объектілер құруға;

· оларға жады бөлуге;

· олардың қажеттілігі болмаған кезде жоюға;

Динамикалық жадының басқаша атауы – топ (куча). Динамикалық жадының бөлінуі туралы жақсы түсіну үшін Турбо паскаль тіліндегі программа орындалу кезіндегі жады құрылымымен танысу керек. ке Паскаль (Сурет 1).

Динамикалық жадыда мәліметтерді көрсеткіштер (указатели) көмегімен орналастырады.

Көрсеткіш – жадының анықталған ұяшығына сілтеме. Мұндай типтегі мәліметтер сілтемелі деп те аталады.

Сілтемелі типтегі мәліметтерді сипаттау параметрлері:

Type <көрсеткіш типі> = ^ <тип идентификаторы>,

Көрсеткіш қандай да бір типпен байланыстырылған, сондықтан ол типтендірілген деп аталады.

Мысал:

Type


  p1=^integer;

  p2=^real;

Var

  A,B,C:p1;



  X,Y,Z:p2;

  P:^char;

Сілтемелі айнымалылар A, B, C динамикалық бүтін типті объектілерге нұсқайды, X,Y,Z – нақты тип, P - символдық. Сілтемелі айнымалының мәні болып, ерекшеленген динамикалық жадыдағы адрес табылады. Мұнда осы типтегі объект сақталады.


Жүйелік облыс (Паскаль кітапханасы, компилятор, интерфейс, қатліктер туралы хабарлама жіберетін файл)

Программа

Динамикалық жады

Жүйелік облыс

Сурет 1. Программа орындалуы кезіндегі жады құрылымы

Сілтемелі айнымалыны шақыру үшін келесі “ A^ ” жазуы қолданылады. Ол жазу «А сақталып тұрған адрес бойынша жүру» дегенді білдіреді.

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

1. Көрсеткішті жариялау;

2. Программаның орындалуы кезінде жады бөлінетін динамикалық мәліметтердің құрылуы.

Көрсеткіштермен жұмыста келесі процедуралар қолданылады:

New(P) – динамикалық жадыда жаңа айнымалы құратын процедура. Р – қандай типті айнымалы құру керек болса, сол типті айнымалы құратын көрсеткіш.

Dispose(P) – топқа (куча) Р көрсеткішті объекті алып тұрған жады бөлігін қайтаруға мүмкіндік беретін процедура.

Бұл процедуралар параметрлері тек типтендірілген бола алады. Аол типтендірілмеген көрсеткіштермен жұмыста да осындай процедуралар қолдануға болады. Олар:



GetMem(P,Size) – жадыны резервке алу;

FreeMem(P,Size) – жадыны босату.

Мұндағы, Р – типтендірілмеген көрстекіш, Size – топтың байтпен берілген бөлігінің өлшемі ( до 65521 байт). Көрсеткіштерге теңдік пен меншіктеуге тексеру операцияларын да қолдануға болады.



Мысал:

Var x,y:^integer;

Begin

  new(x); {бүтін типті динамикалық объект құрамыз}



  x^:=13; {х адресі бойынша 13 мәнін егіземіз}

  y:=x; { у-ке де сол адресті енгіземіз}

  writeln(y^);

end.


Сілтемелі айнымалы «бос» мән қабылдай алады. Ол nil қызметші сөзімен ерекшелінеді. Бұл меншіктеуді new процедурасы орындалғанға дейін жүргізуге болады. Nil мәні - бұл екі нольдік сөз. Ол кез келген типтегі көрсеткішке меншіктелінеді. Динамикалық орналастырылған мәліметтерді программаның кез келген жеріне орналастыруға болады. Мысалы:

Var a, b, c : ^ real;

Begin a^ := sqr(b^)+c^-17;

a:=sqr(b^) деп жазуға болмайды, себебі, көрсеткішке нақты мәндегі өрнекті меншіктеуге болмайды.



Мысал:

64 Кб өлшемді мәтіндік файл берілген. Әр жолда бір нақты сан орналасқан. Файл мазмұнын динамикалық жадыға орналастыра отырып, массивке жазу керек. Массив элементтерінің орташа мәнін табу керек. 10000 өлшемді бүтін массив құру керек. Оны -100-ден 100-ге дейінгі кездейсоқ сандармен толтыру керек және орташа мәнін есептеу қажет.

Program Srednee;

Const NMax = 10000;

Type Diapazon = 1..NMax;

MasInt = Array[Diapazon] Of Integer;

MasReal = Array[Diapazon] Of Real;

Var PIint : ^MasInt; PReal : ^MasReal;

I, Midint : longInt; MidReal : Real; T : Text; S : string;

Begin

Write('Файл атын енгізіңіз: '); ReadLn(S);



Assign(T, S); Reset(T); MidReal := 0; MidInt := 0;

Randomize;

NEW(PReal); {Нақты массивке жады бөлу}

{Нақты массивті енгізу және қосындысын есептеу}

While Not Eof (T) Do

Begin ReadLn(T, PReal^[I]); MidReal := MidReal + PReal^[I] End;

DISPOSE(PReal); {Нақты массивті жою}

NEW(PInt); {Бүтін массивке орын бөлу}

{ Бүтін массивті енгізу және қосындысын есептеу }

For I := 1 To NMax Do

Begin PInt^[I] := -100 + Random(201); MidInt := MidInt + PInt^[I] End;

{Орташа мәндерін шығару }

WriteLn('орташа бүтін мән: ', MidInt Div NMax);

WriteLn('орташа нақты мән: ', (MidReal / NMax) : 10 : 6)

End.

Сызықтық тізімдер. Стек. Реттер.

Көрсеткіштер тізім түріндегі құрылымдарды құрудың тиімді түрі болып табылады. Оларға тізімдерді де жатқызуға болады.



Сызықтық тізім – ол тораптардың айнымалы сандарынан тұратын жиын X[1], X[2], ... , X[n].
Мұндай тізімдердің құрылымы:

1. Егер n>0, онда Х[1] бірінші торап;


2. Егер 1
3. Х[n] соңғы торап болып табылады.

Осындай тізімдердің ішінен арнайы тізімдерді де бөліп алуға болады.



Стек – сызықтық тізім. Онда қосуда, алып тастауда тізім соңында орындалады.

Стектерге мысал: асханадағы табақтар тобы т.б. Стектерді рекурсивті алгоритмдерде қолданған тиімді. Стек соңын стек төбесі деп атайды. Стектің жұмыс істей принципі: «бірінші келіп, бірінші шығу».

Реттер (очередь) – бас жағынан элемент қосылып жатса, соңынан элементтер жойылып жататын сызықтық тізім. Жұмыс істеу принципі: «бірінші келіп, бірінші шығу».
Бақылау сұрақтары


  1. Статистикалы және динамикалық өлшемдердің айырмашылықтары неде?

  2. Динамикалық бөлетін жады қалай аталады?

  3. Көрсеткіш дегеніміз не?

  4. Стектер мен реттердің бір-бірінен айырмашылықтар және ұқсастықтары?

  5. Айнымалы адресі қалай анықталады?

Тапсырма

1. Екібағытты тізім келесі түрде жарияланған:

Type BT = Byte;

U = ^Zveno;

Zveno = Record Inf : BT; Pred, Next: U End;

Мұндағы, Pred, Next — тізім элементтеріне көрстекіштер. Осындай тізім жұмысын қамтамасыз ететін ішкі программаларды құрыңыз.



  1. Мәліметтер типтерінің біреуіне динамикалық жадыда сызықтық байланысқан тізім құру (жолдық, символдық, бүтінсанды, нақты).

  2. Тізім элементтерінің саны белгісіз. Тізім құру, соңы қандай да бір шартты символ енгізу (тізім басына, тізім соңына)

  3. Динамикалық жадыда тізім құру. Бір байланысты элементтерді сәйкес екі байланысы бар элементтер бойынша іздеуді орындау.

  4. Динамикалық жады түрінде жолдар картасын құру. Картаға кіру нүктесі ретінде қалалар адрестерінің массивін енгізу.

  5. Бинарлық ағаш құру (жолдық , бүтінсанды, символдық типтердің біріне).



Зертханалық жұмыс №16
Тақырыбы: Графикалық режимде жұмыс. Графикалық объектілерді салу.

Мақсаты: Графикалық режиммен танысу. Графикалық объектілерді салатын процедуралармен жұмыс жасауды үйрену, программада қолдануды меңгеру.
    Турбо Паскальда графикамен жұмыс істеу үшін графиктік операторларды (Uses), драйверлерді   (GraphDrіver),   модульдерді (Crt, Graph),  режимдерді (GraphMode, CloseGraph) қосуымыз қажет.

    Арнайы графиктік оператор Uses болып табылады.

    Турбо Паскальда графикалық бейнелерді салу үшін стандартты кітапханалық Graph модулі арналған. Ол әр түрлі адаптерлі дисплейлерде графикалық режимдерді толығымен басқаруды қамтамасыз ететін программалардың кітапханасы. Ал Crt модулі экранға ақпарттарды шығаруды, пернетақтадан берілгендерді енгізуді, сол сияқты терезелермен жұмыс істеуді, дыбыстық сигналдар мен түрлі-түсті текстік жолдарды экранға шығаруды қамтамасыз етеді.

 



Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   18




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет