Программирование. 3

    Мазмұны 
 

Кіріспе.....................................................................................................................3

І. ПАСКАЛЬ ТІЛІНДЕГІ  МОДУЛЬДЕР

1.1. Модулдер  туралы жалпы түсінік...................................................................5

1.2. Пернетақтаны  басқару функциялары............................................................9

1.3.  Экранға  мәтін шығару процедуралары мен  функциялары........................11

1.4.   Дыбыс генераторын программалау............................................................16   ІІ. ПАСКАЛЬ ТІЛІНДЕ СТАНДАРТТЫ МОДУЛЬДЕРДІ ҚОЛДАНУ

2.1. Турбо Паскальдың  стандарт модулдеріне шолу.........................................18

2.2 Стандартты  модульдерді сұрыптау...............................................................19

2.3.Graph  модулінің  жалпы сыпаттамсы............................................................22

ІІІ . МОДУЛЬДЕР, МОДЕЛЬДЕР ҚҰРУ

3.1. Модельдер  кезінде дедуктивті және индуктивті  тәсілдер..........................25

3.2. Құрылымды және модульді  программалау.................................................26

ҚОРЫТЫНДЫ.......................................................................................................30

ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР .................................................................32 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

КІРІСПЕ 

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

          Паскаль тілін Швейцария ғалымы  Никлаус Вирт 1971 жылы АЛГОЛ алгоритмдік  тілінің негізінде жасап шығарды. Тілдің атауы алғашқы есептеу машинасын жасап шығарған француз математигі, әрі физигі Блез Паскалдің құрметіне қойылған. Оның соңғы нұсқалары икемді және жан-жақты қызмет атқара алатын жоғары деңгейдегі тілге айналды. Borland  фирмасы Паскаль тілінің стандартын кеңейтіп Турбо Паскаль тілінің 6 версиясын өмірге әкелді. Оның соңғы Турбо Паскаль 7.0 версиясы – құрылымды программаларды жасақтауға жарамды әмбебап интегралдық ортасы бар, объект-бағдарлы және модулді программалау принциптерін пайдалана алатын, көптеген қуатты стандартты модулдері бар күрделі жүйе. Программалау процесінде MS DOS операциялық жүйесінің командаларын, компьютердің динамикалық жадын және рекурсивтік ішкі программаларды толық пайдалануға болатындығы, тілдің   мүмкіндігінің зор екендігін дәлелдейді.

           Турбо Паскаль 7.0 ортасы негізінде  1996 жылдары Borland фирмасы Delphi программалау  жүйесін жасап шығарды. Жүйе  пайдаланатын Object Pascal программалау  тілінде Турбо Паскалдің негізгі  қағидалары сақталған. Жаңа Class типін  енгізу нәтижесінде ол өзгеше принциптер мен тәсілдермен толықтырылған. Delphi жүйесін пайдаланып, әртүрлі мақсатта қолдануға жарамды, бүгінгі талапқа сай, жоғары сапалы Windows жалғамаларын жасақтауға әбден болады. Турбо Паскаль ортасында программалауды жете меңгерген  адам Delphi жүйесін де тез меңгереді.

           Менің жұмысымның мақсаты стандартты  модульдерді қарастырып жазу.

   Бірінші бөлімде программалық модульдер туралы және оларды пайдалану принциптері сөз етіліп жазылды. Crt және Graph модульдерінің мүмкіндіктері арнайы сөз етіліп, көптеген программалау үлгілері берілген. Турбо Паскаль 7.0 интегралдық ортасында жұмыс жасауға қажетті анықтамалық ақпарат берілген. Паскаль графикасын пайдаланып әртүрлі есептерді шығаруға баса назар аударылған.        

     Паскаль тілінде кез-келген процедура (ішкі программа), шартты түрде, оператор деп есептелінеді. Күні бұрын сипатталған арнайы процедуралар стандартты модулдар (System, Dos, Crt, Printer, Graph, Overlay, Turbo3, Graph3) мен арнайы кітапханаларда жинақталады.

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

   І . ПАСКАЛЬ ТІЛІНДЕГІ МОДУЛЬДЕР 

   1.1. Модулдер туралы жалпы түсінік 

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

   Модуль  дегеніміз өз алдына компиляцияланатын, сипаттаудың әртүрлі компоненттерін (типтер, тұрақтылар, айнымалылар, процедуралар және функциялар) енгізу арқылы құрылатын жеке программалық бірлік. Модулдер қолданбалы программалар кітапханасын жасақтаудың және модулдік программалаудың қуатты тетігі болып табылады. Модулдің негізгі ерекшелігі сол, Турбо Паскаль компиляторы оның программалық кодын компьютер жадының 64 Кбайттан тұратын жеке бөлігінде сақтайды. Модуль тақырыптан және үш құрамды бөліктен құралуы тиіс: 

     
 
 
 

          

     Модуль тақырыбы  UNIT қызметші  сөзінен және модуль атынан  тұрады. Модуль аты оның коды  сақталатын диск файлының атымен  бірдей болуы тиіс. Мысалы, модуль тақырыбы  

                                    UNIT  Modul1; 

   болса, онда оның мәтіні  Modul1.pas файлында сақталуы керек деген сөз.

          Модуль аты оны негізгі программамен немесе басқа модулдермен байланыстыру үшін өте қажет. Бұл байланыс 

                                   USES  <модул аттарының тізімі> 

   анықтауы арқылы жүзеге асырылады. Мысалы: 

                                         USES  CRT, Graph, Modul1; 

   USES анықтауын негізгі программаның анықтау бөлімінің басында, ал модулдерде  не INTERFACE, не IMPLEMENTATION  қызметші сөздерінен кейін жазуға болады (2 рет жазуға да рұқсат етіледі).

            Анықтау (интерфейс) бөлімі INTERFACE қызметші сөзімен ашылады. Онда  осы модулдің негізгі программа  мен басқа да модулдерден көрінетін барлық жаһандық объектілері (типтері, тұрақтылары, айнымалылары мен ішкі программалары) анықталады. Анықтау бөлімінде процедуралар мен функциялардың тақырыптары ғана жазылады.

             Орындау  бөлімі IMPLEMENTATION қызметші  сөзімен басталады. Онда INTERFACE  бөлімінде анықталған процедуралар мен функциялар сипатталады. Қажет болған жағдайда дайындау бөлімінде пайдаланылатын модулдің жергілікті объектілерін (типтерін, тұрақтыларын, айнымалылары мен блоктарын) осы бөлімде анықтауға болады. Егер анықтау бөлімінде ішкі программалардың тақырыптары толық сипатталған болса, онда орындау бөлімінде  олардың аттарын ғана жазуға рұқсат етіледі.

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

   Ескерту:  Модулдің анықтау (орындау) бөлімі бос болуы да мүмкін.

     Модулдарды пайдалану үшін оларды компиляциялап алу керек. Компиляция нәтижесі TRU-файлдарда сақталады. Мысалы, Modul1.pas модулін компиляция-лағанда жаңа Modul1.tru файлы пайда болады. Негізгі программаны не модулді компилациялау үшін Турбо Паскаль ортасының MAKE режимін пайдалану өте ыңғайлы екенін ескерген жөн.

     Үш өлшемді векторлық кеңістікте  екі векторды қосу және алу,  векторды санға көбейту, вектор  модулін табу және екі векторды скаляр көбейту амалдарын орындайтын процедуралары мен функциялары бар Vector модулін құрайық: 

   UNIT  Vector;

   INTERFACE

     type

        vect = record

            x, y, z : real;

        end;

      Procedure  SumV(a,b: vect; var c: vect);

      Procedure  SubV(a,b: vect; var c: vect);

      Procedure  MulV(k: real; a: vect; var c: vect);

      Function  ModV(a: vect): real;

      Function  ScMulV(a,b: vect): real;

      INPLEMENTATION

      Procedure SumV;

        begin

            c.x:=a.x+b.x;    c.y:=a.y+b.y;    c.z:=a.z+b.z;

        end; 

      Procedure SubV;

        begin

            c.x:=a.x-b.x;    c.y:=a.y-b.y;    c.z:=a.z-b.z;

        end; 

      Procedure MulV;

        begin

            c.x:=k*a.x;    c.y:=k*a.y;    c.z:=k*a.z;

        end; 

      Function ModV;

        begin

            ModV:=sqrt(sqr(a.x)+sqr(a.y)+sqr(a.z));

        end; 

      Function ScMulV;

        begin

            ScMulV:=a.x*b.x+a.y*b.y+a.z*b.z;

        end; 

   END. 

   Мұнда  SumV процедурасы екі векторды қосу, SubV - азайту, MulV –векторды санға көбейту  амалдарын орындаса, ModV функциясы  вектордың модулін, ал  ScMulV - екі  вектордың скаляр көбейтіндісін  табады. Модулдің мәтінін Vector.pas файлында сақтасақ, оны компиляциялау нәтижесінде Vector.tru файлын аламыз. Осы модулді пайдалану арқылы оңай шешілетін  белгілі есептің программасын құрайық. 

         векторлары  берілген.  және векторларының арасындағы бұрышты есептеңдер. 

   Program Prost_51;

   uses  Vector;

      var  a, b, c, d, m, n: vect;

             ax, ay, az, bx, by, bz, ur, ug: real;

   begin

      Write('a  векторының координаталарын енгіз: '); Readln(ax,ay,az);

      Write('b  векторының координаталарын енгіз: '); Readln(bx,by,bz);

      MulV(3,a,c);  MulV(4,b,d);  SumV(c,d,m);

      MulV(5,a,c);  MulV(7,b,d);  SubV(c,d,n);

      ur:=argtan(sqrt(sqr(ModY(m)*ModY(n))/sqr(ScMulV(m,n)) - 1);

      ug:=ur*180/Pi;

      Write('Бұрыш ',ug:6:2,'  градусқа тең';

      Readln;

   end. 
 

1.2. Пернетақтаны  басқару функциялары 

   MS-DOS операциялық жүйесінде көпшілік  пернелер (Shift,Ctrl,Alt,Caps Lock, Num Lock, Scroll Lock басқа)  арнайы символдар болып есептеледі. Осы пернелердің  кезкелгенін  басқан сәтте оның кеңейтілген  коды арнайы пернетақта буферіне жазылып отырады. Буферде соңғы басылған 16  перненің коды ғана сақталады және программа орындалу кезінде оны оқуға болады. Кеңейтілген кодтар 2 байттан тұрады. Көптеген пернелердің кодтары 1-ші байтқа (алфавитті-цифрлы түймелер), ал кейбіреуі 2-ші байтқа (1-ші байты 0) жазылады. Кейбір жиі қолданылатын пернелердің кеңейтілген кодтарын төмендегі кестеден көруге болады: 

   Код    Перне    Код    Перне
   1-ші  байт    2-ші  байт    1-ші  байт    2-ші  байт
   8    -    Backspace    0    59..68    F1..F10
   9    -    Tab    0    71    Home
   13    -    Enter    0    72    ↑
   27    -    Esc    0    73    PageUp
   32    -    Үзік    0    75    ←
   42,43,45,47    -    *   +   -    /    0    77    →
   44,46    -    ,    .    0    79    End
   48..57    -    0..9    0    80    ↓
   60,62    -    <   >    0    81    PageDown
   65..90    -    A..Z    0    82    Insert
   97..122    -    a..z    0    83    Delete
 

   KeyPressed функциясы Boolean типті - пернетақта буферінің бос не бос емес-тігін білдіреді. Егер функция орындалғанға дейін бірде-бір түйме басылмаса, онда мәні False, әйпесе мәні True болады. Ерекшелігі, фунция  программаның орындалуын кідірпейді.

   ReadKey функциясы Char типті- мәні пернетақта буферінен оқылған символ.  Егер функция орындалғанға дейін бірде бір  перне басылмаған болса, онда программаның орындалуы кезкелген бір перне басылғанша кідіртіледі. ReadKey функциясының жәрдемімен кезкелген перненің кодын оқуға болады. Символы бірінші байтқа жазылған перненің кодын оқу үшін ReadKey функциясын  1 рет, ал қалғандарына 2 рет қолдану керек.

      Кезкелген перненің кеңейтілген  кодын анықтауға мүмкіндік беретін  программа құрыңыз. Программаны  аяқтау үшін "Үзік" пернесін  (коды -  #32) басу қажет болсын.

   Program  Prost_52;

       uses  CRT;

        var  ch : char;

   begin

        repeat

           ch := ReadKey;

           if  ch = #0  then  ch := ReadKey;

           Writeln(ord(ch));

        until ch = #32;

   end.

   1.3.  Экранға мәтін шығару процедуралары мен функциялары

 

   1982 жылдан бастап IBM фирмасы CGA (Color Graphics Adapter) түсті графикалық адаптерін пайдаланатын дербес компьютерлерді шығара бастады. Бұл адаптер монитор экранына 16 түспен мәтіндік режимде 40х25 не 80х25 символ, ал графикалық режимде 320х200 не 640х200 пиксел (нүкте) шығаруға мүмкіндік берді. CGA-ның мәтіндік мүмкіндіктері IBM фирмасының кейінгі буын адаптерлерінде (EGA, MCGA, VGA, SVGA)  стандарт ретінде сақталған. CRT модулі осы типті адаптерге қатысты мүмкіндіктерді қарастырады. 

          TextMode процедурасы адаптердің жұмыс режимін анықтайды. Процедура тақырыбы:

   Procedure  TextMode (TM: Word); 

          Мұнда TM - мәтіндік режимнің коды. CRT модулінде оның негізгі 4 тұрақты мәні бар:

   

       const

          BW40    =  0;   { 40х25  ақ-қара режим }

          Co40      =  1;   { 40х25  түсті режим }

          BW80    =  2;   { 80х25  ақ-қара режим }

          Co80      =  3;   { 80х25  түсті режим }

           

   TextMode  процедурасымен  қойылған  соңғы режимнің коды LastMode жаһанды айнымалысында сақталады.  Оны экранның бұрынғы қалпын қайтару үшін пайдаланады. TextMode  процедурасы орындалғанда  экран тазаланып, оның бұрынғы түсі жойылады және көрсеткіш экранның сол жақ жоғарғы бұрышына қойылады. Мәтіндік режимде экранда бейнеленетін әрбір символдың позициясы жатық (x) және тік (y) кординаталарымен анықталады. Экранның сол жақ жоғарғы бұрышының координаталары (1,1) болады да, x оңға қарай, y төмен қарай өседі:   

          TextColor  процедурасы экранда бейнеленетін символдың түсін анықтайды. Процедура тақырыбы: 

                                Procedure  TextColor (Color: Byte); 

          TextBackground  процедурасы экран (символ) төсегінің түсін анықтайды. Процедура тақырыбы: 

   Procedure  TextBackground (Color: Byte); 

   Мұнда Color - түс коды. CRT модулінде оның  17 тұрақты мәні бар:

       const 

         Black    =    0    {қара}
         Blue    =    1    {көк}
         Green    =    2    {жасыл}
         Cyan    =    3    {көгілдір}
         Red    =    4    {қызыл}
         Magenta    =    5    {күлгін}
         Brown    =    6    {қоңыр}
         LightGray    =    7    {сұрғылт}
         DarkGray    =    8    {сұр}
         LightBlue    =    9    {ашық  көк}
         LightGreen    =  10    {ашық  жасыл}
         LightCyan    =  11    {ашық  көгілдір}
         LightRed    =  12    {алқызыл}
         LightMagenta    =  13    {қызғылт}
         Yellow    =  14    {сары}
         White    =  15    {ақ}
         Blink    =128    {жыпылықтау}
 

          ClrScr процедурасы экранды (терезені) тазалайды және оны TextBackground  процедурасы анықтаған төсек түсімен толтырады. Көрсеткіш экранның сол жақ жоғарғы бұрышына қойылады. Мысал: 

        Экран төсегінің түсін өзгерте  отырып, түсті мәтін  шығару.  

Program Prost_53;

   uses CRT;

      var ch: char;

   begin

      TextBackground(1); ClrScr;

      TextColor(14); Writeln('Алгоритм'); Ch:=ReadKey;

      TextBackground(6); ClrScr;

      TextColor(3); Writeln('Программа');

      Ch:=ReadKey;

      TextBackground(0); ClrScr;

   end. 

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

                              Procedure  Window (x1, y1, x2, y2: Byte); 

         Мұнда (x1, y1) - терезенің сол жақ  жоғарғы, ал (x2, y2) - оң жақ төменгі  бұрышының экрандық координаталары. Процедура орындалғанда экрандық  координаталар соңғы терезеге  қатысты өзгереді. Яғни, терезенің  сол жақ жоғарғы бұрышының координаталары (1,1), ал оң жақ төменгі бұрышының координаталары  (x2-x1, y2-y1)   болады. CRT модулінде ең соңғы ашылған терезенің (x1, y1)  координаталары WindMin, ал (x2, y2) - WindMax жаһанды айнымалыларында сақталады. 

          GotoXY процедурасы көрсеткішті экранның (терезенің) берілген позиция-сына қояды. Процедура тақырыбы:

                           

   Procedure  GotoXY (x, y: Byte); 

         Мұнда (x, y) -  көрсеткіштің жаңа  координаталары. Берілген координаталар  экранның (терезенің) шекарасынан шығып кеткен жағдайда процедура орындалмайды.

         WhereX және WhereY функциялары (типтері: Byte)  көрсеткіштің ағымдық x және y  координаталарын береді.

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

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

          InsLine процедурасы экранның (терезенің) көрсеткіш тұрған позициясына жаңа жол енгізеді, көрсеткіш тұрған жолдан бастап төменгі жолдардың барлығы бір позицияға төмен түседі.

          LowVideo, NormVideo, HighVideo процедураларының көмегімен символдарды экранға сәйкес төменгі, қалыпты және жоғарғы жарықтылықпен шығаруға болады.

          AssignCRT процедурасы f файлдық айнымалысын экранмен (видеожадына тікелей қатысу арқылы) байланыстырады. Процедура тақырыбы: 

   Procedure  AssignCRT  (f: Text); 

         Экранда әуелі, ақ түспен "МАТЕМАТИКА" сөзі жазылған жасыл терезе, кейін сары түспен "ИНФОРМАТИКА" сөзі жазылған күлгін терезе шығару.

Program Prost_54;

        uses CRT;

        var

           ch: char;

   begin

         TextBackground(2);  TextColor(15);

         Window(15, 5, 45, 13); ClrScr;

         GotoXY(7, 5);  Write('М А Т Е М А Т И К А');

         Ch:=ReadKey;

         TextBackground(5); TextColor(14);

         Window(30, 11, 62, 19); ClrScr;

         GotoXY(7, 5); Write('И Н Ф О Р М А Т И К А');

         Ch:=ReadKey;

         TextBackground(0); ClrScr;

   end. 

   1.4.   Дыбыс генераторын программалау 

          Дербес компьютердің дыбыс шығару мүмкіндіктерін программада пайдалану оның дыбыстық жиіліктегі электромагниттік тербелістер  шығара алатын  дыбыс генераторының  жұмысын басқаруға негізделген. CRT модулінде дыбыстарды программалауға арналған 3 процедура бар. 

          Sound  процедурасы  берілген жиілікпен дыбыс шығаратын ДК динамигін іске қосады.  Процедура тақырыбы: 

                                Procedure Sound  (F: Word); 

           Мұнда F- герцпен берілген дыбыс жиілігі. Процедура программаның орындалуын жалғастыра береді және динамиктің дыбыс шығаруы NoSound  процеду-расы орындалғанша тыйылмайды. 

          NoSound  процедурасы  динамиктің  дыбыс шығаруын  тияды.

          Delay процедурасы программаның орындалуын берілген уақытқа кідіртеді. Процедура тақырыбы: 

   Procedure  Delay (T: Word); 

          Мұнда T - миллисекундпен берілген  уақыт. Әртүрлі жиіліктегі дыбыстарды  белілі бір ұзақтықпен шығару  үшін, әдетте, Sound - Delay - NoSound схемаcы пайдаланылады.  Мысал: 

      4 октавадан тұратын музыкалық гамманы ілгері және кейін орындау.

   Program  Prost_55;

   uses CRT;

      const

         F: array[1..12] of real = (130.8, 138.6, 146.8, 155.6, 164.8, 174.6,

                                                185.5, 196.0, 207.7, 220.0, 233.1, 246.9);

         temp=100;

      var   i, j:  integer;

   begin

       for i:=0 to 3 do

          for j:=1 to 12 do

      begin

             Sound(Round(F[j]*(1 shl i)));

             Delay(temp);

             NoSound;

          end;

       for i:=4  downto  1  do

       for j:=12  downto  1  do

      begin

             Sound(Round(F[j]*(1 shl i)));

             Delay(temp);

             NoSound;

          end;

   end. 
 
 
 
 
 
 
 
 

   ІІ. ПАСКАЛЬ ТІЛІНДЕ СТАНДАРТТЫ МОДУЛЬДЕР 

   2.1. Турбо Паскалдың стандарт модулдеріне  шолу 

   Турбо Паскалда көптеген әртүрлі типтерді, тұрақтыларды, процедуралар мен функцияларды жинақтап сақтайтын 8 стандартты модулдер бар. Олар: SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3  және GRAPH3. Турбо Паскаль 7.0 пакетінде GRAPH, TURBO3  және GRAPH3 модулдері бөлек-бөлек TRU-файлдарда жазылған, ал қалғандары TURBO.TPL кітапханалық файлдың құрамына кіреді.  Ескеретін бір жағдай, SYSTEM модулінен басқа модулдерді пайдаланғанда міндетті түрде USES анықтауын қолдану керек. Стандартты модулдерді қысқаша сипаттап өтейік.

Программирование. 3