Лекция. Модульдік программалау концепциясы 10 страница



 

 

     
 

 


       1-сурет

                                                                                                   2-сурет

 

 


                                                       жоқ

 

 

                       иә

 

                                                                                   3-сурет

 

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

Таңдау құрылымы қандайда бір шаманың мәніне тәуелді бірнеше нұсқалардың бірін таңдауға мүмкіндік береді (4-сурет).

Дейін циклі циклдың соңында тексерілетін қандайда бір шарт орындалғанға дейін қайталанатын іс-әрекеттерді сипаттайды (5-сурет).

Параметрлі цикл қандай да бір іс-әрекеттердің саны белгілі рет қайталанатын процестерді сипаттайды (6-сурет).

 

           

                          4-сурет                                                                   5-сурет

 

 

              

   6-сурет

 

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

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

Құрылымдық бағдарламалау көзқарасы тұрғысынан бағдарламаны алгоритм-схема түрінде кескіндеудің мынадай екі кемшілігі бар:

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

v құрылымдық емес тәсілдерді пайдалануға мүмкіндік береді. Бұл алгоритмнің схемасында оларды әлдеқайда қарапайым сияқты етіп көрсетеді.

Келесі суретте іздеуге арналған циклді ұйымдастырудың құрылымдық және құрылымдық емес нұсқалары келтірілген.

 

 

      

 

7а-сурет. Құрылымдық емес                                  7б-сурет. Құрылымдық

 

Алгоритмдерді схемалар арқылы сиптталудың псевдокодтар, flow-формалар және Насси-Шнейдерманн диаграммалары деп аталатын түрлері де кездеседі.

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

 

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

 

 

      і :=1

       әзір (i≤n ЖӘНЕ A(i)≠y)

      I:=I+1

Цикл соңы

Егер i≤n

Онда шығару “элемент табылды”

әйтпесе шығару “элемент табылған жоқ”

Егер –соңы

 

Flow-формалар. Flow-формалар құрылымдық алгоритмдерді сипаттаудың графиктік нотациясы болып табылады. Олар құрылымдардың күрделілігін кескіндейді.

Flow-формадағы әрбір символ басқарушы құрылымға сәйкес келеді және тіктөртбұрыш түрінде кескінделеді. Құрылымдардың күрделілігін көрсету үшін Flow формадағы символдар басқа кез келген символдың тіктөртбұрышты облысына орналасуы мүмкін. Символдардың тіктөртбұрыштағы мәтіні табиғи немесе математикалық нотация түрінде беріледі.

Тіктөртбұрыштың өлшемдері оның ішіне енгізілген мәтін мен басқа тіктөртбұрыштың ұзындығы арқылы анықталады. Негізгі және қосымша басқару құрылымдарына сәйкес келетін Flow-форма символдары келесі суретте белгіленеді.

Тањдау <код>   Код 1   Код 2  …   Єйтпесе
 

<1 іс-әрекет>
<2 іс-әрекет>
<3 іс-әрекет>
Егер <шарт>
1 іс-єрекет
Онда

                              

2 іс-єрекет
әйтпесе                  

 

2 іс-єрекет
1-іс-єрекет

 


Сызықтық

 

                                                Тармақталу

 

                                                                                                                    таңдау құрылымы

 

     

“Әзір” циклы               “Дейін” циклы                    “Үшін ” циклы

 


Келесі суретте жоғарыда келтірілген іздеу циклының Flow-форма көмегімен жазылуы келтірілген

і :=1
Әзір i≤n және A[i]≠y
I:=I+1  

Егер i≤n
Шыѓару элементі табылды
Онда

Шыѓару элементі табылѓан жоќ
Әйтпесе

 


Насси-Шнейдерман диаграммалары Flow-форманың дамыған түрі. Олардың Flow-формасынан негізгі айырмашылығы – мұнда таңдау және тармақталу нұсқаларын үшбұрышты облыс түрінде белгілейді. Бұлайша кескіндеу алгоритмінің көрнектілігін арттырады.

 

<1 іс-әрекет>
<2 іс-әрекет>
<3 іс-әрекет>
 

                                  

                                  <шарт>

     иә                                                 Жоқ

<1 іс-әрекет> <2 іс-әрекет>

 

 

                                                                       

                                                            Код

1                       2                                                   N

<1 іс-әрекет> <2 іс-әрекет> <N іс-әрекет>

 

іс-єрекет
    Дейін <шарт>
Єзір <шарт>
    Дәл                                                                                             

іс-єрекет

 


Дәл псевдокодтарды қолданғандағы сияқты, Flow-форма, Насси-Шнейдерманн диаграммаларын пайдалана отырып құрылымдық емес алгоритмдерді сипаттау мүмкін емес, бірақ соңғы екі тәсіл псевдокодтарға қарағанда құрылымдардың күрделілігін әлдеқайда тиімді сипаттайды. Соңғы екі тәсілге ортақ кемшілік символдарды кескіндеудің күрделілігі болып табылады. Бұл – осы нотациялардың үлкен алгоритмдерге қолданылуына едәуір қиындық туғызады.


18-лекция. Тізбектерді өңдеудің негізгі алгоритмдері

Жоспар:

1. Си тілінде тізбектерді өңдеу алгоритмдерін бейнелеу құралдары.

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

Түрлі айнымалылардың, тұрақтылар мен операция символдарының қандай да болмасын бір жинақ түрінде жазылуы өрнек деп аталады. Си тілінде өрнек соңына нүктелі үтір (;) символы қойылып жазылады. Осы түрде жазылған өрнек не функция оператор делінеді. Мысалы, операторлар:

z = (3 * x+y + 5); y = sin (x);

Сипаттаманың соңына да нүктелі үтір қойылып жазылады, сондықтан ол да оператор. Мысалы: float y, z; сипаттамасы — оператор. Бір символдық оператор мәні бір не бірнеше қатарларда жазылуы мүмкін, тек онда пайдаланатын символдар саны байтпен көрсетілген аралықтан аспаса болғаны.

Функция да C және C++ тілдерінде түрлі ұғымды білдіреді. Мысалы:

1) блок басында сипатталатын айнымалы;

2) программа ішінде орындалатын блок;

3) арнайы ат беріліп, кітапханада мәнін есептейтін ішкі программа бойынша жазылып сақталған функция, (мысалы, sin (), sqrt (),т.б.).

Мысалдар:

int radius (x);  тип, функция аты және аргумент
{ Операторлар }    құрама оператор – функция
float x, y; тип, айнымалылар аттары. Сипаттамаға сәйкес x, y айнымалыларының мәндері үшін алты мәндік ондық цифрлар алынады.  
y=sin (6.5)+3; оператор; sin() функциясының мәні үшін арнайы стандартты кітапхана шақырылып, мәні автоматты түрде есептеледі.

 

(Си тілінде тригонометриялық функциялардың мәндері радиан арқылы өлшенеді).

Мұндағы ескеретін жайт: соңғы өрнек — оператор. Оның соңына қойылған қойылатын нүктені үтір алып тасталған кезде қалған бөлігі (y = sin 6.5 + 3) — функция, ал sin () — осы функция ішіндегі стандартты фун кц ия. sin (6.5) — өрнегі функц ия ны шақыру деп аталады.

 

Блоктық функциялармен жұмыс

Программа құруда алдыңғы тақырыптарда тек негізгі баскарушы main() функциясы пайдаланылып келді. C және C++ тілдерінде программаға main() функциясынан басқа функциялардың (блоктардың) енгізілуі де мүмкін. Олар, Турбо Паскаль тіліндегі сияқты, ішкі программалар ретінде орындалады. Мұндағы ескеретін жайт: олардың әркайсысының соңына баскарушы функцияға қайту командасын орындайтын return; операторын жазып қою керек.

Turbo C, Turbo C++ тілдерінде мұндай функциялардың мәтіні main() функциясының алдында енгізіледі, Borland C++ тілінде оларды main() функциясынан соң блок түрінде енгізе беру мүмкін.

Мысал. Turbo C++ тілінде программаның басқарушы функция блогында Мен студентпін сөйлемі енгізіліп, экранға шығарылсын, Программаға екі қосымша блоктық функция да енгізілсін. Олардың біріншісі Ура! сөзін, екіншісі y = 2( x +7) функциясының мәнін есептеп шығаратын болсын (x, y - int типті айнымалылар).

# include <stdio.h>

# include <conio.h>

# include <string.h>                                        (1)

void blokl(void)

puts("Уpa! ");

return;                          /* негізгі программаға қайту */

void blok2(void)

int x, y;

printf("x=?"); scanf("%d\n", &x);

y = 2*(x+7);

printf("y=%d", y);

return;                          /* негізгі программаға қайту */

}

main ()

{

char sl[25]; clrscr();

puts("cөйлем: s1-?"); gets(sl);

printf("s1=%s\n", s1);

blokl();                         /* blok l-ді шақыру */

blok2();                        /* blок 2-ні шакыру */

getch(); return 0;

} // Нәтиже: sl-?

Мен студентпін

Ура!

x=? 5 y=24

Блоктар соңына енгізілген return ; операторы басқаруды main () функциясына қайтарады да, функцияны шақыру операторының орнына осы функция орындап шығатын нәтижелік мән жазылады. Программада шақырылған функциялар тақырыптары void blok ( void ) сияқты түрде жазылған. Мұндағы void аргументі шақыру функциясында жіберілетін аргументтер жоқ екенін білдіреді, функция алдына енгізілген void типі шақырылған блокта есептелетін мәндердің алдын ала типі көрсетілмегенін білдіреді. Бұл кезде қажетті тип блок ішінде жергілікті айнымалы түрінде сипатталады (жергілікті айнымалылар блоктан шығу кезінде жойылып кетеді. Яғни, мұндай блокты пайдалану жолы Турбо Паскальдағы параметрсіз процедураны пайдалану тәсілі сияқты).

Ескерту. (1)-программаны мынадай құрылымдық түрде жазуға да болады:

{ Препроцессор нұскаулары }

blokl();

blok2();

main() (252)

{ функция денесі; }

blokl()

{ блок денесі; return; }

blok2()

{ блок денесі; return; }

Ескерту. Құрылымға енгізілген денелердің орнына (1) — программада жазылған денелерді кірістіру керек.

 


Дата добавления: 2019-02-12; просмотров: 228; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!