Есеп. Фирма 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-ден 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 санның квадраттары мен кубтарын есептеп шығару