3-сабақ.
Шартты оператор
Турбо Паскальда тармақталған алгоритмдер шартты
операторды жүзеге асыруға мүмкіндік береді. Шартты оператор кейбір шарттарды
тексеруге және тексеріс нәтижесіне байланысты белгілі бір әрекет орындауға
жағдай туғызады.
Шартты оператор құрылымы келесі түрде болады:
IF шарт THEN 1-оператор
ELSE 2-оператор;
Алдымен шарт есептеліп, егер нәтиже – TRUE
(ақиқат) болса, онда 1-оператор орындалады, егер нәтиже FALSE (жалған) тең
болса, онда керісінше 2-оператор орындалады.
Шартты операторда then кейін және else кейін
синтаксис бойынша тек бір оператор ғана тұра алады. ELSE сөзінің алдында
нүктелі үтір ешқашан қойылмайды. Егер берілген шартты орындау (немесе
орындамау) кезінде бір емес, бірнеше әрекет орындау қажет болса, онда оларды
бір құрама операторға, яғни бұл әрекеттер тізбегін begin... end операторлар
жақшасына алу керек.
Команда
форматы:
BEGIN оператор; оператор; ... оператор END;
Мысалы:
If a<b then
begin
R:=a;
A:=b
B:=r
End;
Блок-схемада шартты оператор келесі түрде болады:
Мысал 1: Екі
сан енгізу, оларды салыстыру, нәтижені мына түрде шығарыңыз: a<b? a=b,
a>b
Program chisla;
Var a,b:integer;
Begin
Readln(a,b);
If a<b then
writeln(a,'<',b)
else if a=b then
writeln(a,'=',b) else writeln(a,'>',b);
End.
Шартты оператордың қысқартылған түрі бар:
IF условие THEN оператор1;
Мысал 2: Сан
енгізу, егер ол оң болса, оны 2 есе арттыру.
Program chislo2;
Var a:integer;
Begin
Writeln('а санын
енгізіңіз');
Readln(a);
If a>0 then
a:=a*2;
Writeln(a);
Readln;
End.
Логикалық операциялар және амалдар.
Егер шарт орындалса, сәйкес амал ақиқат деп айтылады,
егер орындалмаса – амал жалған. Күрделі шартарды құру үшін Паскальда төрт
логикалық операциялар бар:
NOT – терістеу (ЕМЕС),
AND – логикалық көбейту (ЖӘНЕ),
OR – логикалық қосу (НЕМЕСЕ),
XOR – ариметикалық "немесе".
Әр түрлі мәндегі операторлар үшін логикалық
операциялар нәтижесі кестеде келтірілген, мұндағы Т- true (ақиқат), F - false (жалған),
ал А және В қатынас операциялар нәтижесі.
A
|
B
|
Not
A
|
A
and B
|
A
or B
|
A
xor B
|
T
|
T
|
F
|
T
|
T
|
F
|
T
|
F
|
F
|
F
|
T
|
T
|
F
|
F
|
T
|
F
|
F
|
F
|
F
|
T
|
T
|
F
|
T
|
T
|
Логикалық операциялар приоритеті: 1) not;
2) and; 3) or; 4) xor.
Логикалық амалдар мысалдары:
a) (0<x) AND (x<=1)
b) (a=0) OR (abs(x)<5)
c) NOT (x=y)
Қатынас операциялардың приритеті логикалық операция
приоритетінен төмен, сондықтан оларды логикалық операциялармен бірге қолданған
кезде жақшаға алған жөн.
Айнымалылар, константалар, салыстырулар, логикалық
операциялар мен жақшалардан логикалық амалдар құруға болады.
Келесі есепті қарастырайық:
а және b қабырғалы тікбұрышты саңылау мен х, у, z
қабырғалы кірпіш бар. Кірпіш саңылаудан өте ала ма, соны анықтау қажет.
Шешуі.
Кірпіштің әрқайсысын 90 градусқа бұруға болатын 3 қыры
бар, яғни әр қыр үшін екі жағдайды тексеру қажет. Барлығы алты. Мынадай шарттар
аламыз:
(a>x)and(b>y)
or (b>x) and (a>y) or
(a>x)
and(z>y) or (z>x) and(a>y) or
(b>x)
and(z>y) or (z>x) and(b>y)
Бағдарлама коды:
Program
prim_8;
Var
a,b,x,y,z:integer;
F:boolean;
Begin
Write('Саңылау
өлшемін енгізіңіз ');
Readln(a,b);
Write('Кірпіш
өлшемін енгізіңіз ');
Readln(x,y,z);
If
(a>x)and(b>y) or (b>x)and(a>y) or (a>x)and(z>y) or
(z>x)and(a>y)
or (b>x)and(z>y) or (z>x)and(b>y)
then
Writeln ('Кірпіш саңылауға өте алады')
Else
Writeln ('Кірпіш саңылауға өте алмайды');
Readln;
End.
Таңдау операторы Case.
Берілген оператор бірнеше (екіден артық) мүмкін болу
шешімдері бар жағдайда мүмкін болу нұсқаларының ішінен біреуін таңдауды жүзеге
асырады. Айнымалы мәніне байланысты сәйкес константамен белгіленген оператор
орындалады. Егер ешбір константа сәйкес келмесе, else кейін
жазылған оператор орындалады.
Case операторының форматы мынадай:
Case реттік
айнымалы of
1_мән:
1_оператор;
2_мән:
2_оператор;
…
n_мән:
n_оператор;
Else
оператор;
End;
Else жолы жоқ сase
операторының қысқартылған түрін қолдануға болады. Бұл жағдайда басқару, егер
ешбір мән реттік айнымалы мәнімен сәйкес келмесе, end кейінгі
операторға беріледі.
Егер бірнеше мән үшін бір оператор орындау қажет
болса, онда оларды үтір арқылы немесе диапазонын көрсетіп жазуға болады.
Мысал 1
Case i of
1,3,5,7:Writeln('Тақ сандар');
2,4,6,8:Writeln('Жұп сандар');
10..100:
Writeln('10-нан 100-ге дейінгі сандар');
End;
Саse операторының блок-схемасы:
Мысал 2: Апта
нөмірін енгізу, нөмірге байланысты «дүйсенбі», «сейсенбі» және т.б. атауларды
шығару, егер нөмір 7-ден көп немесе 1 аз болса, онда «мұндай апта күні жоқ» деп
шығару керек.
Program den;
Var n:integer;
Writeln('Апта
нөмірін енгізіңіз');
Readln(n);
Case n of
1: writeln ('дүйсенбі');
2: writeln ('сейсенбі');
3: writeln ('сәрсенбі');
4: writeln
('бейсенбі');
5: writeln
('жұма');
6: writeln
('сенбі');
7: writeln
('жексенбі');
Else
writeln ('мұндай
апта күні жоқ');
End;
Есептерді шешу:
Шартты оператор қолдануы мысалы ретінде екі санның
ең үлкенін табу есебін қарастырайық.
Берілген есептің алгоритмін құрайық:
Берілгені:
a,b – деректер типі (?) – мысалы
бүтін сандар
Шешуі:
Егер a>b онда Жауап шығару:’Екі санның үлкені а’
Әйтпесе Жауап шығару:’ Екі санның үлкені b’
1-тапсырма
1. Turbo
Pascal бағдарламалау ортасын ашу.
2. Берілген
алгоритм бойынша бағдарлама теру.
3. Бағдарламаны
компиляциядан өткізу, орындауға жіберу.
4. Барлық
жағдайлар үшін бағдарлама жұмысын тексеру.
program
Number;
var
a,b:integer;
Begin
Writeln('Екі
a және b санын енгізіңіз:');
Readln(a,b);
If
a>b
then
Writeln(' Екі санның үлкені а=',a)
else
Writeln(' Екі санның үлкені b=',b);
end.
Сұрақ: Біздің бағдарлама бізді барлық жағынан
қанағаттандыра ма?
Біздің бағдарламаның кішкене кемшілігі бар – мұнда екі
мән тең болу жағдайы қарастырылмаған. Бірдей мән енгізген кезде, экранда не
шығатынын қарайық. Бірдей мән болу мүмкіндігін ескеріп, бағдарламаға өзгеріс
енгізу қажет: әйтпесе
Егер a=b
Онда Жауап
шығару «Сан a=b»
program
Number;
var
a,b:integer;
Begin
Writeln('a
және b бүтін сандарын енгізіңіз:');
Readln(a,b);
If a>b
then
Writeln('Екі санның үлкені а=',a)
else
if a=b
then
Writeln('Сан a=b=',a)
else
Writeln('Екі санның үлкені b=',b);
end.
Тапсырмалар
1. Нәтижесі
дұрыс есептелген амалдарды белгілеңіз:
a) 60>20 = true
b) not (30> 10) = false
c) (3>2) and (5>6) = true
d) (60>70) or (100<90) = true
e) (60>70) and (100<90) = true.
2. А:=5; B:=10; C:=15 деп алайық. (true, false) амалының нәтижесін есептеңіз:
Амал
|
Нәтиже
|
Амал
|
Нәтиже
|
(А=В) or (A<=B)
|
|
Not
(A>=5)
|
|
(А=В) and (A<=B)
|
|
(С=А+В) or
(B>C)
|
|
not(A=B)
and (A<B)
|
|
(С<=А-В) or
(B<C)
|
|
(В<=12)ог(С=15)
|
|
(С<=А+В) or
(B>C)
|
|
(B<=12)and(C=15)
|
|
(С=А+В) and(B<C)
|
|
3. Әр сөйлем
үшін логикалық амал жазыңыз:
А (18; 80) диапазонында жатады ___________________________________
А [18; 80) диапазонында жатады ___________________________________
А (-10; 18) диапазонында жатады __________________________________
А [-10; 18] диапазонында жатады
__________________________________
А -1 кіші немесе 1 артық__________________________________________
А [18; 80) диапазонында жатпайды
__________________________________
А 0 артық
және 10
тең емес_________________________________________
А
4 және 5 еселі (mod
қолданыңыз)_________________________________
4. Алгоритм
үзіндісінің сөздік сипаттауын Паскаль тілінде жазыңыз:
1)
Егер Х саны 47 тең болса,
онда айнымалы Х 15 арттыру,
әйтпесе 36 азайту;
2)
Егер айнымалы S
21 тең болмаса, онда
айнымалы S 6 есе көбейту , әйтпесе
53 кеміту;
3)
Егер айнымалы U тақ
болса, онда оны 8 арттыру,
әйтпесе 53 есе көбейту;
4)
Егер Z саны 48 үлкен болса,
онда 51 арттыру,
әйтпесе 51 кеміту;
5)
Егер X 15 кіші болса, онда
Y мәніне X/2 меншіктеу, ал Z мәніне
15/ X меншіктеу, әйтпесе
Y мәніне X*2
меншіктеу, ал Z мәніне 15- X
меншіктеу.
5. ах=b
теңдеуінің шешімін табатын бағдарлама шығатындай бағдарлама жолдарын дұрыс
ретпен орналастырыңыз:
1) writeln(‘шешімі
жоқ’)
|
|
2) a,x,b:real;
|
|
3) if
|
|
4)
writeln(‘x=’,b/a);
|
|
5) a<>0
|
|
6) begin
|
|
7) then
|
|
8) readln(a,b)
|
|
9) end.
|
|
10) else
|
|
6. Берілген
бағдарламаны орындағаннан кейін экранға не шығады:
a=8,
n=5
|
a=3,
n=3
|
Program Primer;
Var x,
y:integer;
Begin
Read(a,n);
if a<=10
then writeln(a*2)
else
writeln(n*2);
End.
|
Program Primer;
Var x,
y:integer;
Begin
Read(a,n);
If a mod
3<>0
then
writeln(a+5)
else
writeln(n+2);
End.
|
7. Кестені
толтырыңыз:
Program Primer;
x
|
y
|
a
|
19
|
10
|
|
6
|
44
|
|
100
|
49
|
|
55
|
22
|
|
Var a, x,
y:integer;
Begin
Read(x,y);
If (x+y>50) or
(y>100) Then
A:=x+y
Else
A:=2*x+y;
Write(a);
End.
8. Бағдарлама
фрагментін блок-схема түрінде көрстеңіздер:
а)
IF a>b THEN
k:=k+l
ELSE
IF b>c THEN
k:=k+2
ELSE
k:=k+3;
Writeln(k)
9.
Берілген CASE
операторына эквивалентті IF
операторын жазыңыздар:
CASE x OF
2, 5 : writeln ('Тең түсу');
7..11: writeln ('Жеңіс')
ELSE
writeln ('Жеңіліс')
END;
10. Бағдарлама
фрагментін орындағаннан кейін экранға не шығатынын анықтаңыз:
k:=10;
CASE k mod 3 OF
0:
writeln('k=4m');
1:
writeln('k=4m+l');
2:
writeln('k=4m+2');
3:
writeln('k=4m+3');
END;
|
d:=30;
s:=1000;
Case d of
1..5: s:=15;
6..10: s:=36;
11..25: s:=30;
End;
Writeln(s);
|
11. Берілген IF операторына
эквивалентті CASE
операторын жазыңыздар:
……………………….
If
(x>=a) and (x<=b) then
writeln ('Жақсы')
else
If (x = d) or (x = f) then
writeln
('Нашар')
else
writeln
('Қате енгізу');
……………………….
12. Келесі есептер
үшін бағдарлама құрыңыз:
Есептер
|
Белгі
|
Х саны берілген. х2+1,
если х <0
1) Функция мәнін есептеу: У=
x-2,1,если
х>
sin x, если 0х
|
|
2) Мектепте
оқитын енгізген жылы бойынша (1-ден 11 дейін
сан)
«Сәлем, k-сыныптық!»
хабарламасын шығару. Мысалы, егер k=1, «Сәлем, бірінші
сыныптық!»
|
|
Бағдарлама құру:
1. Функция
мәнін есептейтін блок-схема және бағдарлама құру.
2. Бүтін сан
берілген. Егер ол оң болса, 1 қосу; әйтпесе 2 азайту. Нәтижені шығару.
3. Бүтін сан
берілген. Егер ол оң болса, 1 қосу; егер теріс болса, 2 азайту; егер нөлге тең
болса, 10 ауыстыру. Нәтижені шығару.
4. Бүтін үш
сан берілген. Жиын ішінде оң сандар санын табу.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.