Инф олимпиада doc



бет23/66
Дата08.02.2022
өлшемі91,93 Kb.
#123795
1   ...   19   20   21   22   23   24   25   26   ...   66
Байланысты:
1544775476 (1)

Misal(10,5,K,I);
Программа орындалу барысында Misal(10,5,K,I) шақыру идентификаторын оқып, басқаруды Misal процедурасына жібереді де, төмендегідей әрекеттер орындалады:
1. Процедураның А,В,Х,Y формальды параметрлері 10,5,K,I нақты параметрлердің мәнін қабылдайды:
А=10, B=5, X=K, Y=I,;
2. Процедура денесіндегі операторлар орындалады:
S=10+5*5=35, X=35*35=1225,
Y=1225*1225=1500625;
3. VAR қызметші сөзінен кейін жазылған формальды Х және Y параметрлері процедураның орындалу барысында меншіктеген өздерінің жаңа мәндерін нақты K-мен I параметрлеріне бергеннен кейін, басқару Misal(10,5,K,I) шақыру идентификаторынан кейін тұрған операторға өтеді;
K=X=1225, I=Y=1500625.
4. Әрі қарай программаның есептеулерінде K және I айнымалылары жаңа меншіктеген мәндерімен қатысады.
1. Паскаль тілінде процедураның құрылымы негізгі программаның кұрылымымен бірдей. Процедура тақырыбынан соң (PROCEDURE атау) жаңа айнымалыларды (локальды айнымалыларды) бейнелейді, одан соң BEGIN және END операторлық жақша арасына процедура денесі (операторлар тізбегі) жазылады. Бірақ END қызмет сөзінен соң міндетті түрде ";" тұру қажет. Себебі процедурадан соң негізгі программаның операторлары жалғасады.
2. Процедура атауынан соң формальды параметрлер тізімінің болу, болмауы шарт емес. Онымен бірге процедура мәні белгілі сан болуы да шарт емес. Мысалы, арнайы белгілер көмегімен бірнеше (мысалы, үш) квадрат сызу қажет болсын. Оны мына программа арқылы орындауға болады.
1-мысал.
Program ВН;
Procedure КW;
Begin
Writeln(`* * * * *'); Writeln('* *'); Writeln('* *');
Writeln(`* * * *'); END;
Веgin
KW;
Writeln(*2жол қалдырылады*);
KW;
Writeln;
Writeln;
KW
END.
Программа орындалып болғанда экраннан араларында екі бос жолы бар, қабырғалары "*"-дан құралған мынадай үш квадрат шығады:
* * * * * *
**
* *
* *
* * * * * * *
Бұл программада Wrіlеln('* *') операторы үш рет қайталанып отыр, ал квадратты одан үлкен етіп жасау қажет болса, онда бұл жолмен процедура құру өте қолайсыз болады. Бұл кемшіліктен құтылу үшін параметрлі процедураны пайдаланған ыңғайлы. Бұны екі түрлі жолмен ұйымдастыруға болады:
а) глобальды немесе локальды айнымалыны пайдалану;
б) формальды параметрлерді пайдалану.
Бұған мысал ретінде төмендегі процедураны келтіруге болады.

2-мысал.
Procedure KW1;


Vаr і : integer;
Веgin
Ғоr і:=1 tо 5 do
Fоr і:=1 dо 3 do Writeln('* *');
Ғоr і:=1 to 5 dо Writeln('*');
Writeln;
END.
Бұл процедурада локальдық айнымалыны пайдаландық. Енді формальды параметрлерді пайдалану жолын қарастырайық.
3-мысал.
Program ВК;
Ргосеdure КW (LР : integer);
Vаг і, k : іntеgег;
Веgіn
For i:=1 tо LР-2 dо
Веgіn
Write('*');
For k:=1 tо LР-2 dо Write(' ');
Write1n ('*); (*ортасы сызылды*)
END;
Ғог і:=1 to LР dо Write('*');
Writeln; (*тљменгі қыры сызылды*)
END;
Веgіn
КW(3);
Writeln; Writeln; (*2 жол бос*); КW(5)
ЕND.
Бұл программа бойынша адыммен қабырғалары үште-үш "*"-дан тұратын квадрат сызылады. Себебі КW(3) деп берілген, бұл жағдайда LP=3, ал КW(5) арқылы қабырғалары 5x5 жұлдызшадан тұратын квадрат сызылады, себебі LР=5.
3. Процедураның формальды параметрлерінің типтері әр түрлі болуы мүмкін. Мысалы,
Ргосеdure ОW(а,b,с : іnteger;
D, Р1, F2 : геаl;
L, L2 : сһаг);
4. Процедураның параметрлері айнымалы түрінде берілуі мүмкін. Бұған мысал ретінде айнымалылардың мәндерін алмастыруға программа құрайық.
4-мысал.
Ргоgrаm АINА;
Vаr а, b : іnteger;
Ргосеdure АLМАSТRЏ (Vаr х, у : іnteger);
Vаr Н : іnteger;
Веgіn
Н:=х; х:=у; у:=Н
ЕND;
Веgіn
а:=1; b:=2;
Write1n(а,b);
АLМАSТRЏ(а,b);
Writeln(а,b);
АLМАSТRЏ(а,b)
Writeln(a,b)
ЕND.
Экраңда көрінетін нәтиже:
1 2
2 1
1 2
Бұл программада А және В айнымалыларына нақты 1 жѕне 2 деген сәйкес мәндер меншіктедік. Программа әмбебап болу үшін олардың мәндерін READ (немесе READLN) операторы арқылы беру дұрыс. Процедурада параметрлердің мәндерін X, Џ арқылы, ал негізгі программада олардың орына Х, Y А және В айнымалылары пайдаланылды. Бұдан ешнәрсе өзгермейді. Себебі процедураға оралғанда ALМАSТRЏ(А,В) дегендіктен, Х-ке А-ның, Џ-ке В-ның мәні меншіктеледі. Процедура денесіндегі операторлар былай орындалады:
Н:=А; А:=В; В:=Н
5. Процедураның параметрлері тұрақты, айнымалы типті арифметикалық өрнекті де алғашқы мән ретінде қабылдауы мүмкін. Мысалы:
а) Ргосеdure АҮDАN(а,b,с : геаі; Џаr 8 : геаі);
б) Ргосеdure MSAL (k:іnteger; Vаr Р : іnteger);
Алдында VAR қызмет сөзі пайдаланылмаған формальды параметрлер - мәндер деп аталады. Бірінші процедурадағы а,в,с - формальды параметрлері - мәндер болады да, ал S формальды параметрі - айнымалы, екінші мысалда сәйкес К формальды параметрі - мән, ал р формальды параметрі - айнымалы. Сондықган - процедураға былай оралуға болады:

АЏDAN (З.14, X, sqrt(10-sqr(х)), Џ)


Бұл жағдайда үшбұрыштың ауданын табу процедурасы төмендегідей болады.
5-мысал.
Рrосеdure АЏDAN(а,b,с : rеаl; Vаг S : rеal);
Vаг р : rеal;
Веgіn
Р:=(а+b+с)/2;
S:=sqrt(р*(р-а)*(р-b)*(р-с))
ЕND;

онда АЏDAN процедурасының операторларының орындалуы:


Веgіn а:=3.14; b:=х; с:=sqrt(10-sqr(х));
Р:=(а+b+с)/2;
у:=sqrt(р*(р-а)*(р-b)*(р-с))
END;
болады.
6. Процедурада тек қарапайым айнымалыларды ғана емес, индексті айнымалыларды (массивтерді) пайдалануға болады.
6-мысал. Нақты сандар тізбегі (бір љлшемді кесте) Аі, і=1,n берілген. Осы тізбектегі ең кіші элементті және оның нөмірін табуға процедураны пайдаланып программа құрайық.
Ргоgram ВК1;
Туре МА=arraу[1..50] оf real;
Vаr (*жалпы айнымальшар*)
А : МА; М:rеа1, (*мин.элемент*)
К : іntеgег; (*рет нљмірі*)
N : іntеgеr; (*массив љлшемін*)
J:intеgеr;(*параметр*)
Рrосеdure МІN;
Vаr і : іnteger; (*локальды параметр*)
Веgіn
М:=А[1]; К:=1;
Ғог і:=2 to N do
ІF А[і]<М then begin М:=А[і]; К:=1
END;
END;
Веgіn
Writeln ('N-массив љлшемін енгіз:');
Readln(N);
Writeln ('массив элем."ENTER" арқылы енгіз:');
For j:=1 to N readА[і];
МIN; (*МІN-поцедурасын шақыру*);
writeln;
Writeln('мин.элемент М=', М : 5 : 2);
Writeln('мин.элемент нљмірі К=', К : 3);
END.

Алгоритмдер кітапханасын қолдана отырып программалау


Жаңа алгоритмдер құрастырғанда бұрын құрастырылған алгоритмдер қолданыла алады. Көмекшіге сілтемесі бар алгоритм белгілі жағдайда өзі көмекші алгоритм рөліне түсе алады. Бұрын құрастырылған алгоритмдерді жаңаларын құрастыруда қолдану алгоритмдеу практикасында кеңінен таралған. Кейінгі қолданысқа тџсетін алгоритмдердің бәрі ерекше фондқа - алгоритмдер кітапханасына - біріктірілген.
Алгоритмдер кітапханасына ұқсас, қазіргі заман ЭЕМ - дерінің программалар жүйесінің бағыныңқы програмалар кітапханалары бар. Бұл COS(X), SIN(X) және т.б. функцияларын есептеуге арналған түрлі құрамдас программалар. Олар пайдаланушыдан нәтиже алу үшін тек Х аргументі мѕнѕн көрсетуді талап етеді. Осының арқасында пайдаланушы программаларды дайындау және жөндеуге жұмсайтын уақытын едәуір қысқартады.
7 - мысал: Алгоритмдер кітапханасынан ЕСУ алгоритмін (екі санның үлкені) көмекші ретінде қолданып, үш санның ішінен үлкенін таңдау.

Шешуі:
Орындалу хаттамасы


алг ЕСУ(арг зат C, D,
F нѕт.зат Х)
басы зат К
енгізу C, D, F C=15; D=1; F=8
ECY(C,D,K) K=Y (K=5)
ECY(K,F,X) X=Y (X=8)
шығару Х X=8
соңы

алг ЕСУ(арг зат А,В A=C (A=5) A=K (A=5)


нѕт.зат У) B=D (B=1) B=F (B=8)
басы
егер A>B 5>1?(ИЅ) 5>8?(жоқ)
онда Y:=A Y=5 Y=8
ѕйтпесе Y:=B
болды
соңы

ЕСУ алгоритмі Џ айнымалысына А және В сандарының үлкенін жазады.


Көмекші алгоритмді шақыру командасы:
ЕСУ (C, D, K)
ЕСУ алгоритмінің көмегімен С және шамаларының үлкенін анықтауға, нәтижесін К айнымалысына меншіктеуге мүмкіндік береді.

Команда:
ЕСУ (C, D, K)


ЕСУ алгоритміне қатынасып, оған К жѕне F - ні аргументтері ретінде табыс етеді және нәтижесін Х айнымалысына меншіктейді. Кестеде осы алгоритмнің орындалу хаттамасы келтірілген.
GOSUB, RETURN операторлары Basic - тің алғашқы нұсқаларында бағыныңқы программалар ұйымдастыру үшін қолданылады.
Мұндай алгоритмді іске асыратын программаны құрастырғанда, оны кішігірім тәуелсіз модульдерге - процедураларға бөлген жөн.
Оператор Жол пішіні АТЫ
CALL шақырудағы Процедура шақыру операторы
процедураның аты(apг1,apг2,...)
apг1,apг2,…-нақтылы параметрлер.
SUB Процедура аты (пар1, пар2,…) Процедура операторы
пар1, пар2,… - формальді параметрлер
END SUB END SUB Процедура соңы операторы

Алгоритм мен программаның процедуралармен әрекет принципі ұқсас:


алг ЕСУ(арг зат C, D, F нѕт.зат Х) DECLARE SUB BID (A!, B!, Y!)


басы зат К REM БИТ
енгізу C, D, F
ECY(C,D,K) INPUT C, D, F
ECY(K,F,X) CALL BID (C, D, K)
шығару Х CALL BID (K, F, X)
соңы PRINT X

алг ЕСУ(арг зат А,В, нѕт.зат У) SUB BID (A, B, Y)


басы
егер A>B IF Y>=B THEN Y=A ELSE Y=B
онда Y:=A
ѕйтпесе Y:=B
болды
соңы END

Жолдарын енгізген соң:


SUB BID (A, B, Y)
Qbasic жеке диалог терезесін ашады, онда процедураны құрайтын операторларды іске қосуға болады:
Просмотр SUBs командасы процедуралар мен негізгі программа (немесе F2 пернесін пайдалануға болады) арасында ауыстырып қосуға мүмкіндік береді.Егер негізгі программаның әлі аты жоқ болса, редактор оны Untitled (аты жоқ) деп жариялайды. Экранға пайдаланылған процедуралардың толық тізімі шығады.
Программаны дискіге сақтағанда QBasic редакторы негізгі программаның басында автоматты түрде DECLARE операторын қосады да, ол бағыныңқы программаның бар екені туралы хабарлайды.

Сұрақтар мен тапсырмалар:


1. Процедура қалай жасалып, қалай шақырылады?
2. Процедура ретінде шыршаны салу алгоритмін пайдаланып, шырша орманын салатын программаны жазу.
3. Екі санның џлкені процедурасын пайдаланып, 10 санның џлкенін анықтайтын Q Basic тіліндегі программаны жазу.
4. Қабырғалары мен бір сүйір ұшынан шығатын екі диагоналінің ұзындығы берілетін болса, "үшбұрыштың ауданы" процедурасын пайдаланып, бесбұрыштың ауданын табу программасын құрастыру.




Достарыңызбен бөлісу:
1   ...   19   20   21   22   23   24   25   26   ...   66




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

    Басты бет