6 апта
Тақырып 5. Шартсыз және шартты көшу операторлар және тармақталған құрылым алгоритмдерін программалау
Дәріс жоспары
Құрамды оператор.
Шартсыз көшу операторы.
Шартты көшу операторы.
case…of таңдау операторы.
Сабақ мақсаты
Білімділік
Студенттерге шартты және таңдау операторлары жайлы жалпы мағлұмат беру.
Шартты және таңдау операторларын жазу әдістерін көрсету.
Тармақталған құрылым алгоритмдерін программалауды үйрету.
Дамытушылық
Студенттердің операторларды қолдана отырып программалар құра алатынын қадағалау және өздігінен тапсырмаларды орындауы
Әрбір оператордың жазылу формасын білу.
Студенттердің қабілетін дамыту.
І. Шартты оператор
Паскаль тілінде тармақталудың негізгі алгоритмдік құрылымының жүзеге асыратын екі операторы бар. Олар шартты оператор және таңдау операторы.
Шартты оператор. «Иә» немесе «Жоқ» деп жауап беруге болатын белгілі бір логикалық шартты тексереді. Егер оның нәтижесі ақиқат, яғни құптарлық болса, онда бір программалық тармақ орындалады. Тексеру нәтижесі жалған болған жағдайда, программаның басқа бір тармағы жүзеге асырылады. Мұнда есептің шартына байланысты тармақталу алгоритмдерінің «Таңдау» не «Аттап өту» мүмкіндіктерінің бірі орындалуы тиіс. Бұл оператордың жазылу түрі төмендегі төрт үлгінің біріне сәйкес келуі қажет:
а) If <шарт> then <1-оператор>;
{шарт орындалмағанда <1-оператор>-ды аттап өту}
ә) If <шарт> then <1-оператор>else <2-оператор>;
{<1-оператор> және <2-оператор>-дың бірін таңдау}
б) If <шарт> then {шарт орындалғанда}
begin {құрмалас операторлар}
<1-оператор>; {орындалып, шарт орындал-}
<2-оператор> {маса, оларды аттап өту}
…
end;
в) If <шарт> then {шарттың орындалуы немесе}
begin {орындалмауына байланысты}
<1-оператор>; {құрмалас операторлардың}
<2-оператор>; {бірін таңдап, ал}
… {екіншісін аттап өту}
end
else
begin
;
;
…
end;
Мұндағы if – оператордың аты (егер); then – түйінді сөз (онда); else – түйінді сөз (әйтпесе); <шарт> - логикалық өрнек; <1-оператор>,..., , ,..., - кез келген орындалатын оператор.
Мысал 1:
Берілген a, b, c сандарының ең кішісін табу қажет болсын.
иә жоқ иә иә
жоқ жоқ
иә
жоқ
1.1-сурет
Есепті шешудің алғашқы тәсілінің блок-схемасы 1.1-суретте көрсетілген. Бұл тәсіл онша ықшам болмағанымен түсінуге ыңғайлы. Паскаль тілінің мүмкіндіктерін толық көрсету үшін осы алгоритмнің басқа жолдары да түсіндірілген.
2-блок пернелер тақтасынан кез келген үш санды енгізу жұмысын атқарады. 3-, 4- және 5-блоктар шарттарды тексере отырып, ең кіші санды анықтайды. 6-дан 9-блокқа дейін min айнымалысына ең кіші мән меншіктеледі. 10-блок нәтижені экранға шығарып, 11-блок тағы да үш сан енгізу қажет болған жағдайда, «Y» (Yes-Иә) немесе алгоритм жұмысын аяқтау үшін «N» (No-Жоқ) әріптерін енгізуді өтінеді. Келесі блок енгізілген t айнымалысының мәнін тексеріп, қажет болса алгоритмді қайта орындайды. Осы блок-схемаға сәйкес келетін программа мәтіні төменде көрсетілген:
Program min (input, output);
Label 10;
Var a, b, c, min: real;
t: char;
begin
10:write(‘бос орындармен бөлінген 3 сан енгізіңіз:’);
readln(a, b, c);
if a
if a
else min:=c
else
if b>c then min:=b
else min:=c;
writeln(‘Ең кіші сан:’, min:8:2);
write(‘Тағы енгізесіз бе? («Yes»-иә, «No»-жоқ)’);
readln(t);
if (t=’Y’) or (t=’y’) then goto 10
end.
Осы есепті шығарудың мұнан гөрі қысқалау екінші тәсілі 1.2-суретте көрсетілген Бұл схемаға сәйкес программа мәтіні төмендегідей болады:
Program min (input, output);
Label 10;
Var a, b, c, min: real;
t: integer;
begin
10:write(‘a, b, c=’); readln(a, b, c);
{3 санды енгізy}
if a
if c
Writeln(‘үш санның кішісі:’,min:6:2);
Write ('тағы енгізесіз бе? (1-иә,
0-жоқ)’);
Read(t); if t=1 then goto 10
End.
1.2-сурет
Программаның ең ықшам түрі төмендегідей болады:
Program min;
Label 10; Var a, b, c, min: real; t: integer;
begin
10:write(‘a, b, c='); readln(a, b, c); {3 сан енгізy}
min:=a;
if b
writeln(‘үш санның кішісі:’, min:6:2);
end.
Мысал 2: Санды кез келген бүтін оң дәрежеге (n) шығаратын программа құру қажет. Бұл есепті де бірнеше тәсілмен шығаруға болады.
Бірінші тәсіл:
Program stepen;
Label 10, 20;
Var n,i: integer;
a, p: real;
begin
write(‘санды және бүтін оң дәрежені енгізіңіз’);
readln(a, n);
p:=1; i:=1;
if n=0 then goto 10;
20: p:=p*a; i:=i+1;
if i<=n then goto 20;
10:writeln(a:8:3, n:4, ‘дәреже’,`````p:12:4)
end.
Екінші тәсіл (1.3-сурет):
Program stepen;
Label 10;
Var n,i: integer;
a, p: real;
begin
write(‘a санын енгізіңіз:’); readln(a); 1.3-сурет
write(‘n оң бүтін дәрежені енгізіңіз:’); readln(n);
p:=1; i:=1;
10: if i<=0 then
begin
p:=p*a; i:=i+1; goto 10
end;
writeln(‘p=’, p:8:3)
end.
Енді n оң не теріс бүтін сан болған жағдайды, яғни үшінші тәсілді қарастырайық.
Program stepen;
Label 10, 20, 30;
Var n,i: integer; a, p: real;
begin
write(‘a,n=’); readln(a, n);
p:=1; i:=1;
if n>=0 then
begin
if n>0 then
begin
10: p:=p*a; i:=i+1;
if i<=n then goto 10
end
else goto 30
end
else
begin
20: p:=p/a; i:=i+1;
if i<=abs(n) then goto 20
end;
30: writeln(‘p=’, p:8:3)
end.
ІІ. Таңдау операторы
Таңдау операторы (case) бірнеше операторлардың ішінен таңдау жолымен көп тарамды тармақталуды ұйымдастырады. Тармақталу берілген шартты тексеруден басталады, шарт мәндері таңдап алынған типтердің бірі болатын бүтін, символдық, логикалық өрнек түрінде жазылады. Бұл өрнек оператор орындалар кезде белгілі бір мәнге ие болуы тиіс. Сол мән оған байланысты орындалатын оператордың белгісі рөлін атқарады. Егер өрнектің есептелген мәні көрсетілген мәннің біріне сәйкес келсе, сол қатардағы оператор орындалады. Жазылу форматы
Case <өрнек> of
C1: <1-оператор>;
C2: <2-оператор>;
...
CN: ;
[else ]
END;
мұндағы <өрнек>-тексерілетін шарт не таңдау индексі; С1,..., CN-тұрақтылар, яғни өрнектің мүмкін мәндері; <1-оператор>, <2-оператор>,..., -тілдің кез келген операторлары; -өрнектің мәні көрсетілген мәндерден басқаша болғанда орындалатын тілдің кез келген операторы. Тік жақшаның ішіндегі сөз тіркесі болмауы да мүмкін, ондай жағдайда, яғни өрнектің мәні көрсетілген тұрақтылардың ешбір мәніне сәйкес келмесе, операторды орындау бірден аяқталады. Сонымен, таңдау операторы селектор мен тұрақты мәндерінің сәйкес келуіне байланысты бір ғана операторды орындауы тиіс. Кейде өрнектің мәні тұрақтының көрсетілген мәндерінің аралығында болуы ықтимал, мұндайда тұрақтының мәні кесінді тәрізді сандар бірлігін қамтуы тиіс.
Мысал 1:
PROGRAM DAY;
VAR kyn: integer; {Бұл программада бірден}
BEGIN {жетіге дейінгі кез келген}
Read(kyn); { сан енгізіліп, егер ол}
Case kyn of
1: Writeln(‘дүйсенбі’); {1-ге тең болса, “дүйсенбі”}
2: Writeln(‘сейсенбі’); {2-ге тең болса, “сейсенбі”}
3: Writeln(‘сәрсенбі’); {3-ке тең болса, “сәрсенбі”}
4: Writeln(‘бейсенбі’); {4-ке тең болса, “бейсенбі”}
5: Writeln(‘жұма’); {5-ке тең болса, “жұма”}
6: Writeln(‘сенбі’); {6-ға тең болса, “сенбі”}
7: Writeln(‘жексенбі’); {7-ге тең болса, “жексенбі”}
end {деген сөз жазылып шығады}
END.
Мысал 2. Келесі программада 1917 жылдан 1992 жылға дейінгі сандар енгізіліп, сол жылдары бұрынғы КСРО-да кімнің ел басқарғаны анықталды. Мұнда өрнектің мәні белгілі бір кесіндіге кіретін сан болатыны тексеріліп, сол арқылы бір оператор таңдап алынып отыр.
PROGRAM god;
VAR god: integer;
BEGIN
Write(‘жыл мөлшерін енгізіңіз:’);
Readln(god);
Write(god:4, ‘жылы’);
Case god of
1917..1924: Writeln(‘Ленин басқарды’);
1925..1953: Writeln(‘Сталин басқарды’);
1954..1956: Writeln(‘Маленков басқарды’);
1957..1964: Writeln(‘Хрущев басқарды’);
1965..1985: Writeln(‘Брежнев басқарды’);
1985..1991: Writeln(‘Горбачев басқарды’);
1991..1992: Writeln(‘Ельцин басқарды’)
end
END.
Мысал 3. Кез келген жыл мерзімін енгізіп, сол жылдың шығыс каленьдары (қазақша жыл санау) бойынша қай жануардың атына сәйкес келетінін анықтау программасы төмендегідей болады:
PROGRAM gil;
VAR
gil: integer;
BEGIN
Write(‘жыл мөлшерін енгізіңіз:’); readln(gil);
Write(gil:4, ‘жыл’);
Case (gil mod 12) of
0: write(‘мешін’);
1: write(‘тауық’);
2: write(‘ит’);
3: write(‘доңыз’);
4: write(‘тышқан’);
5: write(‘сиыр’);
6: write(‘барыс’);
7: write(‘қоян’);
8: write(‘ұлу’);
9: write(‘жылан’);
10: write(‘жылқы’);
11: write(‘қой’)
end;
writeln(‘жылы болды’)
END.
Мысал 4. Кез келген айдың бірінші жұлдызы аптаның қай күні екені белгілі болғанда, сол айдың енгізілген күнінің аптаның қандай күні болатынын анықтау керек.
PROGRAM casel;
Label 10;
Const k=1; {айдың бірі дүйсенбі болған}
{егер айдың бірі сейсенбі болса, k=2, егер айдың бірі сәрсенбі болса, k=3 т.с.с.}
VAR den, n: integer;
t: char;
BEGIN
10: write(‘айдың күнін енгізіңіз:’); readln (den);
n:=den mod 7+k-1; if n>7 then n:=n-7;
write(‘айдың’, den:3, ‘күні’);
CASE n of
1: write(‘дүйсенбі’);
2: write(‘сейсенбі’);
3: write(‘сәрсенбі’);
4: write(‘бейсенбі’);
5: write(‘жұма’);
6: write(‘сенбі’);
7: write(‘жексенбі’)
end;
writeln(‘болады’);
writeln(‘тағы енгізесіз бе? (иә-«у», жоқ-«n»)’);
readln(t);
if (t=’Y’) or (t=’y’) then goto 10
END.
ІІІ. Тармақталған құрылым алгоритмдерін программалау
Тармақталу операторына мысал келтірейін:
Квадрат теңдеуді шешу үшін арналған программаны құру (1.4-суретте блок-схемасы көрсетілген)
PROGRAM М1 (input, output);
VAR X1, X2, X, D, a, b, c:REAL;
BEGIN
WRITELN(‘a, b, c коэффициенттерін енгіз’);
READLN(A, B, C);
D:=SQR(B)-4*a*c;
IF D<0 THEN WRITELN(‘түбірі жоқ’);
IF D=0 THEN BEGIN
X:=(-b)\(2*A);
WRITELN(‘X=’,X);
END;
IF D>0 THEN BEGIN
X1:=(-b+SQRT(D))\(2*a);
X2:=(-b-SQRT(D))\(2*a);
WRITELN(‘X1=’,X1, ‘X1=’,X2);
END;
END.
жоқ иә
1.4-сурет
0>
Достарыңызбен бөлісу: |