Есеп. Фирма 25 пен 40 жас арасындағы қызметкерлерді жұмысқа алуда. Адамның жасын енгізіп, оны фирмаға алуға болатындығы немесе болмайтындығы туралы мәлімет шығару («болады» немесе «болмайды» деген жауап шығару).
Ерекшелігі: екі шарттың бір мезгілде орындалатынын немесе орындалмайтынын тексеру.
Белгілі әдістермен шешуге бола ма?
?
Нұсқа 1. Алгоритм
басы
енгізу x
‘болады'
жоқ
иә
жоқ
x >= 25?
иә
жоқ
x <= 40?
'болмайды'
‘болмайды'
Нұсқа 1. Программа
program qq;
var x: integer;
begin
writeln(‘Жасты енгіз');
read ( x );
if x >= 25 then
if x <= 40 then
writeln (‘Болады')
else writeln (‘Болмайды')
else
writeln (‘Болмайды');
end.
Нұсқа 2. Алгоритм
басы
енгізу x
‘болады'
иә
жоқ
x >= 25 және
x <= 40?
'болмайды'
соңы
Вариант 2. Программа
күрделі шарт
program qq;
var x: integer;
begin
writeln(‘Жасты енгіз');
read ( x );
if (x >= 25) and (x <= 40) then
writeln ('Болады')
else writeln ('Болмайды')
end.
Күрделі шарттар
Күрделі шарт – бір-бірімен логикалық операциялардың көмегімен байланысатын бірнеше қарапайым шарттардан (қатынастардан) тұрады:
not – ЕМЕС (терістеу, инверсия)
and – ЖӘНЕ (логикалық көбейту, конъюнкция, шарттардың бір мезгілде орындалуы)
or – НЕМЕСЕ (логикалық қосу, дизъюнкция, ең болмағанда бір шарттың орындалуы)
xor – арифметикалық НЕМЕСЕ (екі шарттың екеуін емес, біреуін ғана орындау)
Қарапайым шарттар (қатынастар)
< <= > >= = <>
тең
тең емес
Күрделі шарттар
Орындау тәртібі
жақша ішіндегі өрнектер
not
and
or, xor
<, <=, >, >=, =, <>
Ерекшелігі – қарапайым шарттардың әрқайсысын жақшамен жабу.
Мысал:
4 1 6 2 5 3
if not (a > b) or (c <> d) and (b <> a)
then begin
...
end
a := 2; b := 3; c := 4; болған жағдайда ақиқат немесе жалған:
not (a > b)
(a < b) and (b < c)
not (a >= b) or (c = d)
(a < c) or (b < c) and (b < a)
(a < b) xor not (b > c)
x-тің қандай мәндерінде шарт ақиқат болады:
(x < 6) and (x < 10)
(x < 6) and (x > 10)
(x > 6) and (x < 10)
(x > 6) and (x > 10)
(x < 6) or (x < 10)
(x < 6) or (x > 10)
(x > 6) or (x < 10)
(x > 6) or (x > 10)
Күрделі шарттар
True
True
FALSE
(-, 6)
(6, 10)
(10, )
(-, 10)
(-, 6) (10,)
(-, )
(6, )
x < 6
x > 10
x < 10
x > 6
True
True
Тапсырмалар
"4": Айдың нөмірін енгізу арқылы, жыл мезгілінің атауын шығару.
Мысал:
Ай нөмірін енгіз:
4
көктем
Паскаль тілінде программалау
Тақырып 4. Циклдер
Циклдер
Цикл – белгілі бір әрекеттер тізбегінің бірнеше рет қайталанып орындалуы.
қадамдар саны белгілі цикл
қадамдар саны белгісіз цикл (шартты цикл)
Есеп. 1-ден 8-ге дейінгі бүтін сандардың квадраттары мен кубтарын есептеп шығару (a-дан b-ға дейін).
Ерекшелігі: бірдей амалдар 8 рет орындалады.
Белгілі әдістермен шешуге бола ма?
?
Алгоритм
басы
i, i2, i3
соңы
жоқ
иә
i <= 8?
i := 1;
i := i + 1;
i2 := i * i;
i3 := i2 * i;
цикл айнымалысының бастапқы мәнін көрсету
барлығы да атқарылды ма? соны тексеру
квадрат пен куб-ты есептейміз
нәтижесін шығару
келесі i-ге өту
Алгоритм ("цикл" блогімен)
басы
i, i2, i3
соңы
i2 := i * i;
i3 := i2 * i;
i := 1,8
«цикл»блогі
цикл денесі
Программа
program qq;
var i, i2, i3: integer;
begin
for i:=1 to 8 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end.
цикл айнымалысы
бастапқы мән
ең соңғы мән
Айнымалысы кеміп отыратын цикл
Есеп. 8-ден 1-ге дейінгі бүтін сандардың квадраттары мен кубтарын есептеп шығару (кері қарай есептеу).
Ерекшелігі: цикл айнымалысы кеміп отыруы керек.
Шығарылуы:
for i:=8 1 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
downto
Айнымалысы бар цикл
for <айнымалы> := <алғашқы мән> to
<ең соңғы мән> do begin
{цикл денесі}
end;
Айнымалының 1-ге артуы:
for <айнымалы> := <алғашқы мән> downto
<ең соңғы мән> do begin
{цикл денесі}
end;
Айнымалының 1-ге кемуі:
Айнымалысы бар цикл
Ерекшеліктері:
цикл айнымалысының мәні бүтін болуы керек (integer)
цикл айнымалысының өзгеру қадамы қашанда 1-ге (to) немесе -1-ге (downto) тең
егер цикл денесінде бір ғана оператор болса, begin мен end сөздерін жазбай кетуге болады:
егер соңғы мән алғашқы мәннен кіші болса, (to) циклы бірде бір рет орындалмайды (шартты циклдың басында тексеру, шартты алдын ала тексеретін цикл)
for i:=1 to 8 do
writeln('Привет');
Айнымалысы бар цикл
Ерекшеліктері:
Цикл денесінде цикл айнымалысын өзгертуге рұқсат етілмейді (неліктен?)
Алғашқы және соңғы мәндер өзгертілгенімен цикл ішіндегі қадамдар саны өзгермейді:
n := 8;
for i:=1 to n do begin
writeln('Салем');
n := n + 1;
end;
мүдіріп қалу жоқ
Цикл неше рет орындалған?
a := 1;
for i:=1 to 3 do a := a+1;
a = 4
a := 1;
for i:=3 to 1 do a := a+1;
a = 1
a := 1;
for i:=1 downto 3 do a := a+1;
a = 1
a := 1;
for i:=3 downto 1 do a := a+1;
a = 4
for i:=1 to 9 do begin
if ??? then begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end;
Қадамдарды қалай өзгертуге болады?
Есеп. Экранға 1-ден 9-ға дейінгі тақ сандардың квадраттары мен кубтарын есептеп шығару.
Ерекшелігі: цикл айнымалысы 2-ге артып отыру керек.
Мәселе: Паскальде қадамдар саны 1 немесе -1 болуы мүмкін.
Шығарылуы:
i mod 2 = 1
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
Тек қана тақ i-лермен орындалады
Қадамдарды қалай өзгертуге болады? – II
Идея: Тек 5 санды ғана шығару керек, k айнымалысы 1-ден 5-ке дейін өзгереді. i-дің бастапқы мәні 1-ге тең, циклдың әр қадамы сайын i 2-ге артып отырады.
Шығарылуы:
???
for k:=1 to 5 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
???
end;
i := i + 2;
i := 1;
Қадамдарды қалай өзгертуге болады? – III
Идея: Тек 5 санды ғана шығару керек, k айнымылысы 1-ден 5-ке дейін өзгереді. k-ны біле отырып, i-ді есептеу қажет.
Шығарылуы:
k
1
2
3
4
5
i
1
3
5
7
9
i = 2k-1
for k:=1 to 5 do begin
???
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
i := 2*k – 1;
Тапсырмалар
"4": a мен b-ны енгізіп, осы екеуінің арасындағы сандардың квадраттары мен кубтарын есептеп шығару.
Мысал:
Интервал шекараларын енгіз:
4 6
4 16 64
5 25 125
6 36 216
"5": 1, 2, 4, 7, 11, 16, … тәртібімен орналасқан 10 санның квадраттары мен кубтарын есептеп шығару
Мысал:
1 1 1
2 4 8
4 16 64
...
46 2116 97336
Паскаль тілінде программалау
Тақырып 5. Шартты циклдер
Қадамдар саны белгісіз цикл
Мысал: Бөренеден ағаштың бұтағын кесіп алу керек. Қолараны әрі-бері неше рет қозғалтуымыз керек,. ?
Есеп: (<2000000) бүтін сан енгізіп, ондағы цифрлардың санын анықтау.
Шығару амалы: Ең соңғы орналасқан цифрларды кезекпен алып тастай отырып, санаушыны арттырамыз.
Мәселе: неше қадам жасау керектігі белгісіз.
Шығарылуы: n = 0 болғанда тоқтау керек, яғни "n <> 0" болғанша орындай беру керек.
n
count
123
0
12
1
1
2
0
3
Алгоритм
басы
count
соңы
жоқ
иә
n <> 0?
count := 0;
count := count + 1;
n := n div 10;
цифрлардың санаушысын нөлге теңестіру
енгізу n
“n <> 0“ болғанша орындай беру
Программа
program qq;
var n, count: integer;
begin
writeln(’Бүтін сан енгіз’);
read(n);
count := 0;
while n <> 0 do begin
count := count + 1;
n := n div 10;
end;
writeln( ’cанында’,count, ’цифр табылды’);
end.
while n <> 0 do begin
count := count + 1;
n := n div 10;
end;
, n1: integer;
n1 := n;
n1,
"n <> 0“ болғанша орындай беру
Шартты цикл
while <шарт> do begin
{цикл денесі}
end;
Ерекшеліктері:
күрделі шарттарды қолдануға болады:
егер цикл денесінде бір ғана оператор болса, begin мен end сөздерін жазбай кетуге болады:
while (a
{цикл денесі}
end;
while a < b do
a := a + 1;
Шартты цикл
Ерекшеліктері:
циклге кірген сайын шарт есептеліп отырады
егер шарт циклге кіруде жалған болса, цикл бірде-бір рет орындалмайды
егер шарт түбінде жалған болмайтын болса, программаның жұмысы дағдарысқа ұшырайды (тоқтаусыз орындала береді)
a := 4; b := 6;
while a > b do
a := a – b;
a := 4; b := 6;
while a < b do
d := a + b;
Цикл неше рет орындалған?
a := 4; b := 6;
while a < b do a := a + 1;
2 рет
a = 6
a := 4; b := 6;
while a < b do a := a + b;
1 рет
a = 10
a := 4; b := 6;
while a > b do a := a + 1;
0 рет
a = 4
a := 4; b := 6;
while a < b do b := a - b;
1 рет b = -2
a := 4; b := 6;
while a < b do a := a - 1;
дағдарысқа ұшырау
For-ны while-ға ауыстыру және керісінше
for i:=1 to 10 do begin
{цикл денесі}
end;
i := 1;
while i <= 10 do begin
{цикл денесі}
i := i + 1;
end;
for i:=a downto b do
begin
{цикл денесі}
end;
i := a;
while i >= b do begin
{цикл денесі}
i := i - 1;
end;
while-ды for-ға , циклдегі қадамдар саны алдын ала белгілі болған жағдайда ғана ауыстыруға болады.
for-ны while –ауыстыруға қашанда болады.
Тапсырмалар
"4": Бүтін сан енгізіп, ондағы цифрлардың қосындысын табу.
Мысал:
Бүтін сан енгіз:
1234
1234 санындағы цифрлардың қосындысы 10-ға тең.
"5": Бүтін сан енгізіп, оның жазылуында бірдей цифрларлардың бар-жоғын анықтау.
Мысал:
Бүтін сан енгіз: Бүтін сан енгіз:
1234 1224
Жоқ. Бар.
Тізбектер
Мысалдар:
1, 2, 3, 4, 5, …
1, 2, 4, 7, 11, 16, …
1, 2, 4, 8, 16, 32, …
an = n
a1 = 1, an+1 = an+1
a1 = 1, an+1 = an + n
an = 2n-1
a1 = 1, an+1 = 2an
b1 = 1, bn+1 = bn+1
c1 = 2, cn+1 = 2cn
Тізбектер
Есеп: модулі бойынша 0,001-ден асып түсетін
тізбектегі барлық элементтердің қосындысын табу:
Тізбек элементтері (№2-ден бастап ):
n
1
2
3
4
5
...
b
1
2
3
4
5
...
c
2
4
8
16
32
...
z
-1
1
-1
1
-1
...
b := b+1;
c := 2*c;
z := -z;
Алгоритм
басы
S
соңы
жоқ
иә
|a| > 0.001?
S := S + a;
S := 0; b := 1; c := 2; z := -1; a := 1;
бастапқы мәндер
a := z*b/c;
b := b + 1; c := 2*c; z := -z;
бірінші элемент
a := 1;
S := 0;
жаңа элемент
өзгеріс
Қайта қою керек пе?
?
Программа
program qq;
var b, c, z: integer;
S, a: real;
begin
S := 0; z := -1;
b := 1; c := 2; a := 1;
while abs(a) > 0.001 do begin
S := S + a;
a := z * b / c;
z := - z;
b := b + 1;
c := c * 2;
end;
writeln('S =', S:10:3);
end.
z := - z;
b := b + 1;
c := c * 2;
келесі қосылғышқа өту
S := 0; z := -1;
b := 1; c := 2; a := 1;
бастапқы мәндер
қосындының артуы
тізбек элементін есепке алу
Тапсырмалар
"4": Тізбектегі элементтердің қосындысын 0,001 дәлдікпен табу :
Жауап:
S = 1.157
"5": Тізбектегі элементтердің қосындысын 0,001 дәлдікпен табу :
Жауап:
S = 1.220
Соңғышартты цикл
Есеп: Бүтін оң сан енгізіп(<2000000), ондағы цифрлардың санын анықтау.
Мәселе: Теріс санның немесе нөлдің енгізілмеуін қалай қадағалауға болады?
Шығарылуы: Егер бұрыс сан енгізілсе,берілгендерді енгізу үшін кері оралу (цикл!).
Ерекшелігі: Цикл денесі кемінде бір рет орындалады. => шартын тексеруді циклдың соңында орындау керек. (соңғышартты цикл).
Соңғышартты цикл – шарттың тексерілуі циклдың соңында орындалатын цикл түрін айтады.
Соңғышартты цикл: алгоритм
басы
соңы
иә
жоқ
n > 0?
цикл денесі
ШЫҒУДЫҢ шарты
«типтік процесс» блогі
енгізу n
негізгі алгоритм
Программа
program qq;
var n: integer;
begin
repeat
writeln('Введите положительное число');
read(n);
until n > 0;
... { негізгі алгоритм }
end.
repeat
writeln(‘Оң сан енгіз');
read(n);
until n > 0;
until n > 0;
ШЫҒУДЫҢ шарты
Ерекшеліктері:
цикл денесі кемінде бір рет орындалады
until ("…болмайынша") сөзінен кейін циклдан ШЫҒУДЫҢ шарты қойылады
Цикл неше рет орындалған?
a := 4; b := 6;
repeat a := a + 1; until a > b;
3 рет
a = 7
a := 4; b := 6;
repeat a := a + b; until a > b;
1 рет
a = 10
a := 4; b := 6;
repeat a := a + b; until a < b;
Мүдіріп қалу
a := 4; b := 6;
repeat b := a - b; until a < b;
2 рет
b = 6
a := 4; b := 6;
repeat a := a + 2; until a < b;
Мүдіріп қалу
Тапсырмалар (бұрыс енгізуден қорғау)
"4": Натурал сан енгізіп, сол сандағы цифрлардың қосындысы 10-ға тең екендігінің дұрыстығын анықтау.
Мысал:
>= 0 сан енгіз: >= 0 сан енгіз:
-234 1233
Оң сан енгізу керек. Жоқ
>= 0 сан енгіз:
1234
Иә
"5": Натурал сан енгізіп,қандай цифрлардың бірнеше рет кездесетіндігін анықтау.