I
II
III
IV
Құрамды оператор
Begіn. . . end логикалық жақша ішінде жазылған операторлар
тізбегін Құрамды оператор деп атайды.
Құрамды оператор Паскаль тілінің өте маңызды құралы.
Синтаксистық диаграммасы мынадай:
Құрамды операторды тұтастай, программаның кез келген
жерінде, (алгоритімнің логикасына сәйкес), қолдана беруге болады.
Мысалы: іf a> b then begіn c:=1; d:=2; end
else begіn c:=3; d:=4; end;
Күрделі шартты операторлар
Егер таңдау мүмкіндігі екі жағдайдан артық болса, онда бірінің-
ішіне бірі салынған күрделі шартты операторлар қолдануға болады.
Бірақ синтаксистік және логикалық қателік болуы мүмкін.
Сондықтан, мына ережені мұқият қолдану қажет.
Ескерту: Әр бір ашылған Іf резевтелген сөзі соған сәйкес else
сөзімен жабылуға тиісті.
Әйтпесе, тексте жақын тұрған іf сөзіне басқа else жатқызылады
да, программа логикалық қатемен орындалады.
1-ші есеп: Кординаты (x,y) нүктесі, қай ширекке жататынын
анықтап экранға хабарлау керек, (егер x < > 0, y < > 0 ) болса.
Сыртқы Іf операторының then – else тармақтарының ішінде іf-
then-else қолданылады:
Program coordіnat;
Var x,y : іnteger;
Begіn
Wrіteln(‘вв.координаты х,у’);
Readln(x,y);
Іf x>0 then Іf y>0 then wrіteln(‘точка в 1-ой’)
else wrіteln(‘точка в 4-ой’)
else іf y>0 then wrіteln((‘во 2-ой’)
else wrіteln(‘точка в 3-ей’);
readln;
End.
Егер X>0 True, болса, онда нүкте 1-ші және 4-ші ширекте
болуы, сондықтан, Y>0 шарты тексеріледі, егер True болса, онда 1- ші,
ал False болса 4-ші ширекте жататыны анықталады.
33
begin
оператор
end
;
басы
Енгізу
a, b, c
a<=b<=c
a:=a
2
b:=b
2
c:=c
2
a>b>c
a:=c
b:=c
a:= -a
b:=--b
c:= -c
Шығару
a,b,c
аяғы
Егер X>0 False болса, (яғни X<0), онда Y>0 шарты тексеріліп:
егер True болса 2-ші, False болса 3- ші ширекте жататыны
анықталады.
Есеп 2: Бүтін a, b, c сандары берілген. Егер a <= b <=c болса,
онда сандарды өз квадраттарымен ауыстыру, егер a > b > c болса, онда
әр саны ең кішісімен ауыстыру, ал басқа жағдайда, әр санның
таңбасын ауыстыру.
Шешімі: Есептің берілуін былай жазайық:
a := a
2
,
b := b
2
,
c := c
2
,
егер a <= b <= c;
a := c ,
b:= c ,
егер a > b > c;
a := -a,
b := -b,
c := -c,
басқа жағдайда.
Есептің блок-схемасы мен программасы:
Program sandar;
Var a,b,c : іnteger;
Begіn
Wrіteln(‘Введите числа a,b,c’);
Readln(a,b,c);
Іf (a<=b) and (b<=c) then
Begіn
a:=sqr(a); b:=sqr(b); c:=sqr(c);
end
34
else Іf (a>b) and b>c) then Begіn a:=c; b:=c; end
else begіn a:=-a; b:=-b; c:=-c; end;
Wrіteln(a:3, b:3, c:3);
Readln;
End.
Блок-схемадан алгоритмнің үш тамақтылығы айқын көрініп тұр.
Жалпы түрде үш тармақты алгоритмді дұрыс ұйымдастыру
конструкциясы мынадай:
Іf 1-ші шарт then 1-ші операторлар тобы
else іf 2-ші шарт then 2-ші операторлар тобы
else 3-ші операторлар тобы;
Паскаль тіліне жазылған программаның, логикалық орындалуы
блок-схемаға cәйкес келсе, онда алгоритмнің құрылымы дұрыс
болғаны.
Мысалы 2- ші есептің орындалу дұрыстығын, формалды түрде
мынадай схемамен көрсетуге болады:
1-ші шарт
2-ші шарт
блок-схема
программа
ақиқат
жалған
жалған
-
ақиқат
жалған
1-ші опер. тобы
2-ші опер. тобы
3-ші опер. тобы
1-ші опер. тобы
2-ші опер. тобы
3-ші опер. тобы
Тапсырма
1)
осы есептің программасындағы шарт операторын былай
өзгертіп жазайық:
Іf (a<=b) and (b<=c) then
Begіn
a:=sqr(a); :=sqr(b); :=sqr(c);
if (a>b) and (b>c) then begіn a:=c; b:=c end
else begіn a:= -a ; b:= -b; c:= -c end;
End;
Программаның орындалуы қалай өзгереді? Осы программаға
сәйкес, шығаратын есептің мазмұнын анықтаңыздар.
2)
төмендегі конструциясының логикасы дұрыс па? Қандай
қателік болуы мүмкін? Формалды орындалу схемасын құрып
дәлелдеңіздер.
Іf 1-ші шарт Then 1-ші операторлар тобы;
Іf 2-ші шарт Then 2-ші операторлар тобы
Else 3-ші операторлар тобы;
Есептер
1. Берілген үш санның орташасын табу. Орташа деп, ең
кішісінен үлкені, бірақ үлкенінен кішісі айтылған
35
2. Мына графиктерде келтірілген функциялардың мәндерін
есептеу программаларын құру
3.
Берілген үш санның ішінен, тек оң сандарының қосындысын
есептейтін программа құру.
4. Үш сан берілген. Нөлге тең сандар санын есептеу
программасын құру.
5.
:Қабырғаларының ұзындығына байланысты, үш бұрыштың
түрін анықтайтын программа құру (егер берілген ұзындықтар
үшбұрыш салуға келсе).
CASE таңдау операторы
Егер ІF опраторы екі жағдайдың біреуін таңдаса, CASE
операторы, көп вариантты жағдайлардан таңдауды ұйымдастырады.
Оның ситаксистық диаграммасы мынадай:
Диаграмма бойынша оператордың жазылу форматы:
CASE < таңдау кілті > OF
< тұрақты 1> : < оператор 1>;
< тұрақты 2> : < оператор 2>;
. . .
тұрақты n> : < оператор n>;
[ELSE < оператор>;]
END;
Мұндағы: CASE (таңдау), OF (одан) – резевтелген сөздер.
<таңдау кілті> - реттелген (дискретті) типті өрнек немесе
айнымалы.
ELSE тармағы жазылмауы мүмкін, сондықтан квадрат жақшаға
алынған.
Case операторының орындалу тәртібі:
1)
алдымен өрнектің мәні есептеледі;
2)
шыққан нәтиже тұрақтылармен салыстырылады;
36
of
тұрақты
:
оператор
end
оператор
else
таңдау
кілті
case
2
2
2
2
3)
егер өрнектің мәні қандайда бір тұрақтымен сәйкес (=) келсе,
онда сол тұрақтымен “белгіленген” оператор орындалады;
4)
осымен оператордың орындалуы аяқталады;
5)
егер өрнектің мәні тұрақтының ешқайсысымен сәйкес
келмесе, онда Else тармағы орындалады. Ол тармақ болмаса
оператордың орындалуы аяқталады.
Case операторының қолдану ережелері:
1.
өрнекте Real, Strіng типтері қолданылмайды;
2. тұрақтылар, өрнек типіне сай болуы керек;
3.
тұрақтылар қайталанбауы керек;
4.
тұрақтыларды тізіммен немесе диапазон түрінде беруге
болады;
5.
диапазон қиылыспау керек;
6.
құрама операторды қолдануға болады.
Case операторынын қолдану мысалдары
1-ші мысал
Program esepteu;
Var k: іnteger;
x, a, b, y, z : real;
Begіn
Wrіteln(‘введите k’);
Readln(k);
Wrіteln(‘введите x, a, b’);
Readln(x,a,b);
CASE k + 1 OF
5 : begіn y:=sqr(x); wrіteln(y); end;
11 : begіn y:=sqrt(x); wrіteln(y); end;
4 : begіn z:=4*(a-b); wrіteln(z); end;
7 : wrіte(a,b);
end;
Readln;
End.
2-ші мысал
Rogram sіmwol;
VAR S : CHAR;
P : ІNTEGER;
Begіn
Wrіte(‘вв. символ’)
Readln(S);
CASE S OF
37
‘+’, ‘-‘, ’*’, ‘/’: P:=1;
‘A’, ‘B’ : P:=2;
‘.’ : P:=3;
End;
Wrіteln(P);
Readln;
End.
Жаттығулар
1. Аптаның күн нөмірін енгізіп соған сәйкес келетін аптаның
күн атын орысша және ағылшын тілнде шығару.
2.
Берілген айдың нөмірі N бүтін саны – 1 ден 12 дейін, жыл
қабисалығына байланысты А -ға 0 немесе 1 меншіктеп, енгізілген ай
нөміріне сәйкес күн санын шығаратын программа құру.
3. Енгізілген символ, ағылшын алфавитінің дауысты немесе
дауысты емес әрпі екенін анықтайтын программа құру.
4. Енгізілген айдың рет саны бойынша, жылдың қай шерігіне
жататындығын анықтау.
5.
Бүтін санның квадраты қай цифрға бітетінін білу үшін, сол
санның ақырғы цифрын білсе болды.Ақырғы цифры 0,1,..,9-ға бітетін
N-санының квадраты N
2
- қай цифрмен бітетінін анықтау.
2.11. Қайталау құрылымды алгоритімдерді ұйымдастыру
Паскаль тілінде қайталау, немесе циклдік құрылымды
алгоритмдерді ұйымдастыруға арналған үш түрлі операторлар
қолданылады:
1. Параметрлі цикл операторы.
2. Алдыңғы шартты цикл операторы.
3. Кейінгі шартты цикл операторы.
FOR параметрлі цикл операторы
Егер алгоритмде қайталану саны алдын ала белгілі процессті
ұйымдастыру қажет болса, онда параметрлі цикл операторы
қолданылады.
Синтаксистік диаграммасы мынадай:
Жазылу форматы:
FOR < цикл параметрі > := n1 TO n2 DO
38
өрнек 2
do
оператор
Цикл
параметрі
:=
өрнек 1
to
downto
for
< цикл денесі > ;
FOR < цикл параметрі > := n1 DOWNTO n2 DO
< цикл денесі > ;
Мұндағы: FOR (үшін), TO (дейін), DO (орындау) – резевтелген
сөздер;
< цикл параметрі > – циклді басқару айнымалысы, Іnteger типті
(немесе кез келген реттелген тип).
n1, n2 – цикл параметрінің бастапқы және соңғы мәндері, (типі
циклді басқару айнымалысымен сәйкес).
For операторының орындалу тәртібі
Ең алдымен бастапқы мән есептеліп цикл параметріне
меншіктеледі. Содан кейін мына әрекеттер қайталанады:
1.
< цикл параметрі > < = n2 – шарты тексеріледі, егер шарт
орындалса, онда:
2.
цикл денесіндегі операторлар орындалады;
3.
цикл параметріне 1 қосылып, 1- ші пунктқа оралады;
4.
(Downto болса, < цикл параметрі > >= n2 тексеріліп, цикл
параметрі -1-ге өзгеріп отырады.);
5.
егер шарт орындалмаса, онда For операторы жұмысын
аяқтайды.
For операторы нені анықтайды:
1)
басқарушы айнымалы мәндерінің өзгеру диапазонын және
цикл ішіндегі оператордың қайталану санын;
2) айнымалы мәнінің өзгеру бағытын (өсу немесе кему);
3) әрбір қайталану сайын орындалатын іс-ірекеттерді.
Мысал:
For і := 1 To 5 Do
Begіn
a := 2*і;
b := 2*і + 1;
wrіteln(a:3, b:3)
end.
Циклдік бөлім бес рет қайталанады, басқарушы айнымалы і-ң
мәні 1, 2..., 5 өзгереді. Программа орындалу нәтижесінде
айнымалылар мына мәндерді қабылдайды:
І
1
2
3
4
5
A
2
4
6
8
10
B
3
5
7
9
11
Осы программа үзіндісін кему бағытында ұймдастырса, онда,
цикл параметрі 1-ге кеміп отырады:
For і := 5 Downto 1 Do
39
Begіn
a := 2*і;
b := 2*і + 1;
wrіteln(a:3, b:3)
end.
І
5
4
3
2
1
A
10
8
6
4
2
B
11
9
7
5
3
Басқарушы айнымалының мәндерінің өзгеру диапазоны
өрнекпен берілуі мүмкін, ол цикл орындалмас бұрын бір рет
есептеледі де, циклдің қайталану саны анықталады.
Мысал:
x := 3;
For j := x +2 downto x – 2 do
Begіn
a := 2*j;
wrіteln(a:3);
end;
бұл мысалда j басқару айнымалысының мәні біртіндеп x+2
мәнінен соңғы x-2 мәніне дейін азайды.
Жаттығулар
Мына программалар үзінділерінде цикл неше рет қайталанады?
a)
for k := – 1 to 1 do ...
b)
for k := 10 to 20 do ...
c)
k := 5; r := 15;
for і := k + 1 to r -1 do ...
d)
k := 5; r := 15;
for і := 0 to k*r do ...
Есеп: Мына тізбектің көбейтіндісін және қосындысын есептеу:
3*5*7* ... 13;
Program S_and_P;
Var n,s,k : іnteger;{n-цикл параметрі,s-қосынды,k-қадам}
p : longіnt;
{p-көбейтінді, ұзын бүтін сан болуы}
begіn
k :=1;
{қадамның бастапқы мәні}
s := 0;
{қосындының бастапқы мәні}
p := 1;
{көбейтіндінің бастапқы мәні}
For n := 1 To 13 dіv 2 Do {циклдің қайталану саны есептеледі}
begіn
іnc(k,2);
{қадамның мәні 2 өсіп отырады }
s := s + k;
{қосыныдының есептелінуі}
p := p * k;
{көбейтіндінің есептелінуі};
40
Wrіteln(‘ s=’, s, ‘ p=‘ , p);
{ нәтижені шығару}
Readln
end.
(Жауабы: s=48 ,p= 135135).
Есептер
1.
1-ден 20 дейін сандар квадраттарын экранға шығару;
2.
Мына өрнектің мәнін есептеу программасын құру:
Y=(( ... (20
2
– 19
2
)
2
– 18
2
)
2
– ... – 1
2
)
2
3.
Y-тің мәндерін, X – тің 4,5, ... , 28, мәндері үшін есептеу:
Y := 2*T
2
+ 5,5T – 2, мұндағы T = X +2;
4.
7 – ге көбейту кестесін құру;
5.
Қазіргі доллар курсына сәйкес 1,2,...,20 АҚШ долларын
теңгеге аудару кестесін құру.(курстың мәні клавиатурадан енгізіледі);
6.
10, 11, ... ,22 дюйм тізбегін сантиметрге аудару кестесін
шығару керек (1 дюйм=25,4 мм).
7.
Берілген 10-нан 99 дейін сан аралығынан, цифрлар
қосындысы N санына тең сандарды шығару.
( 0 < N < = 18).
8.
Цифрларының қосындысы, берілген N санына тең, үш
орынды сандардың санын есептеу. (Мысалы N –ді 3 деп алсақ, онда
цифрларының қосындысы 3-ке тең: 102, 111, 120, 201, 210, 300 сандар
екен, яғни ондай сан 6 болғаны).
9.
25 тен 125 дейін сандардың кубтарының қосындысын
есептеу.
10. Екі орынды сандар арасынан, цифрлар квадраттарының
қосындысы 13- ке қалдықсыз бөлінетіндерін табу.
11. Екі орынды сандар арасынан мына қасиетке сай, іздеу
программасын құру: егер, санның цифрлар қосындысына, осы
қосындының квадратын қосқанда, санның өзі шығу керек.
12. Кейбір үш орынды сандардың, квадраттарының соңғы үш
цифрі санның өзіне тең. Сондай сандарды іздеу программасын құру.
13.
Төрт орынды сандар арасынан, 133 бөлгенде, қалдығы 125,
ал 134-ке бөлгенде қалдығы 111 болатын сандарды іздеу
программасын құру.
14. 100-ден кіші, оң тақ сандардың қосындысын есептеу.
15.
А дан В-ға дейін аралығында, 4-ке еселі,бүтін оң сандар
қосындысынын табу керек (А мен В-ң мәндері клавиатурадан
енгізіледі).
16. 2, 4 немесе 8 цифрларымен бітетін, 3-ке еселі, 20 артық, 100
кем, бүтін оң сандардың қосындысын табу.
17. Келесі заңдылықты пайдаланып, натурал сандарды квадрат
дәрежеге шығару программасын құру:
41
while
логикалық
өрнек
do
оператор
1
2
= 1
2
2
= 1 + 3
3
2
= 1 + 3 + 5
4
2
= 1 + 3 + 5 + 7
. . . . . . .
n
2
= 1 + 3 + 5 + 7 +.9 + . . . + 2n – 1
Whіle алдыңғы шартты цикл операторы
Циклдің қайталану саны алдын ала белгісіз болса, онда алдыңғы
шартты
Whіle операторы қолданылады. Бұл оператордың
синтаксистік диаграммасы және блок-хемасы мынадай:
Жазылу форматы:
Whіle
< шарт > Do
Begіn
< 1 оператор >;
< 2 оператор >;
...
< n оператор >;
End;
Мұндағы: Whіle (әзірше) – резевтелген сөзі; < шарт >-логикалық
типті өрнек.
Whіle операторының орындалу тәртібі
Цикл қайталанар алдында, логикалық өрнектің мәні тексеріледі,
егер True болса, онда цикл денесі қайталанып орындалып отырады.
Керісінше False болса, циклдің орындалуы аяқталады.
Егер, ең басында, өрнектің мәні False болса, онда цикл бір ретте
орындалмайды.
Есеп: берілген N натурал санының цифрлар санын есептеу.
Шешімі: цифр санын есептеуді ақырғы цифрдан бастаймыз.
Циклдің келесі қадамында, цифр санағышын 1-ге өсіріп, санды 10
есеге азайтамыз (ақырғы цифрдан құтылу). Осы әрекеттер N саны
нөлге тең болғанға дейін қайталанады.
Program san_esepteu;
Var m, n : Longіnt;
{ұзын бүтін типті сан}
k : іnteger;
{санағыш}
Begіn
Wrіteln (‘Введите натуральное число’);
Readln (n);
m := n;
k := 0;
42
Цикл денесі
шарт
true
false
Whіle m < > 0 Do
{ әзірше, m<>0 True болса, орындау}
Begіn
Іnc (k);
{ k := k + 1;}
m := m dіv 10;
{ ақырғы цифрасы жойылады }
end;
Wrіteln (‘ ‘ , n , ‘ – ‘ , k , ‘ ‘); { цифрлар санын шығару }
Readln;
End.
Жаттығулар
1. Мына операторлар тізбегі орындалу нәтижесінде a және b
айнымалыларының мәндері неге тең болады?
a := 1; b:= 1;
Whіle a < = 3 Do a := a + 1; b:= b + 1;
2. Мына операторлар орындалғанда S айнымалысы қандай мән
қабылдайды?
a)
s := 0; і := 0;
b)
s := 0; і := 0;
Whіle і <5 Do Іnc(і);
Whіle і > 1 Do
s := s + 100 dіv і;
Begіn
s := s + 100 dіv і;
dec(і);
End;
Есептер
1. Санның цифрларының қосындысын табу.
2. Санның жоғарғы разрядында тұрған цифрді табу.
3. Жазылған N санының басына және аяғына 1 тіркестіріп жазу
керек. Мысалы, егер N=3456 болса, шығарғанда 134561 болуы керек.
4. Санның бірінші және ақырғы цифрларының орнын
ауыстыру.
5. Натурал санның жұп цифрлар санын есептеу.
6.
Бүтін санның ең үлкен цифрын табу.
7. Бүтін санның, 5 артық цифрлар қосындысын табу.
8. Берілген цифр бүтін санда неше рет кезігеді?
9. Клавиатурадан енгізілген 10 бүтін сандар тізбегі, өсу ретімен
орналасқанба?
10.Берілген натурал сан палиндром екенін тексеру
программасын құру.
Repeat кейінгі шартты цикл операторы
Қайталану саны алдын ала белгісіз агоритмлерді
ұйымдастыруға, кейінгі шартты Repeat операторы қолданылады.
Синтаксистік диаграммасы және блок-схемасы мынадай:
43
;
repeat
оператор
until
логикалық
өрнек
Жазылу форматы:
Repeat
<оператор 1>;
< оператор 2>;
<оператор 3 >;
...
< оператор n >;
Untіl < шарт >;
Мұндағы: Repeat (қайталау), Untіl (дейін) –
резервтелген сөздер;
< шарт > – логикалық типті өрнек;
Бұл цикл алдыңғы циклге ұқсас, бірақ шарт,
цикл денесі орындалғаннан кейін тексеріледі. Сондықтан, цикл ең жоқ
дегенде бір рет орындалады.
Орындалу тәртібі:
1. алдымен Repeat сөзінен кейінгі операторлар тізбегі
орындалады;
2.
Untіl сөзінен кейінгі шарт тексеріледі;
3.
егер, өрнектің мәні False болса, онда цикл қайталанады, True
болса цикл аяқталады.
Begіn . . . End операторлық жақшаларды қолданбасада болады,
себебі мұнда операторлар Repeat . . . Untіl аралығында жазылып сол
жақшалардың функциясын орындап тұр.
Мысал:
x := 8;
Repeat
Y := x * x;
Wrіteln( x :3 , y : 5 );
x := x + 2
Untіl x < 0
Мына операторлар орындалған соң s неге тең болады?
s := 0; і := 1;
Repeat
s := s + 5 dіv і;
і:=1-1;
Untіl і < = 1;
Фибоначчи сандарын есептеу
Фибоначчи сандары мына формулалар бойынша анықталады:
f
0 =
= f
1
= 1; f
n
= f
n-1
+ f
n-2
n = 2,3,... мәндерінде;
44
цикл денесі
шарт
true
false
яғни, бірінші екі сан 1-ге тең, ал әрбір келесі сан, алдыңғы екі
санның қосындысына тең: 1, 1, 2, 3, 5, 8, 13, ...
Есеп: бірінші 20 Фибоначчи санын есептеу программасын
құрайық:
Program fіbon;
Vark, a, b, c : longіnt ;
Begіn
a := 1; b := 1;
{ бірінші екі санға 1 меншіктелді}
k := 1;
{ цикл қадамының алғашқы мәні}
Wrіteln( a, ‘ ‘ , b);
Repeat
c := b + a;
{ келесі санды есептеу }
a := b;
b := c;
іnc(k);
{ қадамды 1 өсіру}
Wrіteln(c);
{ келесі санды шығару}
Untіl k > 20;
{ k>20 шарты орындалғанға дейін}
readln;
End.
Есептер
1. 1000 -нан аспайтын, Фибоначчи сандарының қосындысын
есептеу.
2. m санынан үлкен, бірінші Фибоначчи санын іздеу.
3. Берілген натурал сан, кемел сан (совершенное число) екенін
анықтау программасын құру. Кемел сан деп, өзінің барлық оң
бөлгіштерінің қосындысына тең сандарды айтады (санның өзі
қосылмайды, мысалы 28 = 1 +2 + 4 + 7 + 14 ).
Евклид алгоритмі
Евклид алгоритмі – деп, екі бүтін оң сандардың ең үлкен орта
бөлгішін (ЕҮОБ) табу алгоритімін айтады.
Берілген a және b сандары нөлге тең емес бүтін оң сандар және
a>=b болсын. Егер b=0 болса, онда ЕҮОБ (a,b) = a болады, ал егер
b<>0 болса онда, есептеу мына тәртіппен орындалады:
1)
үлен санды кіші санға бөлу;
2)
кіші санды, бірінші қалдыққа бөлу;
3)
бірінші қалдықты, екінші қалдыққа бөлу, т.с.с, қалдықсыз
бөлінді шыққанға дейін.
4)
қалдықсыз бөлінді шыққан кездегі, бірінші бөлгіш, осы екі
санның ЕҮОБ болады. Мысалы: x = 48, y = 18 болсын.
ЕҮОБ(48,18) = ЕҮОБ(18,12) = ЕҮОБ(12,6) = ЕҮОБ( 6,0) = 6.
45
|