СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ
Благодаря готовым учебным материалам для работы в классе и дистанционно
Скидки до 50 % на комплекты
только до
Готовые ключевые этапы урока всегда будут у вас под рукой
Организационный момент
Проверка знаний
Объяснение материала
Закрепление изученного
Итоги урока
Информатика 9 сынып Паскаль слайд. Слайд Паскаль тілі бойынша толық материалдан тұрады.
Паскаль тілінде программалау
Паскаль тілінде программалау
Тақырып 1. Кіріспе
Алгоритм
Алгоритм – атқарушы орындайтын амалдардың тиянақты жоспары.
Алгоритм қасиеттері
Программа
Программа дегеніміз -
Команда – компьютер орындауға міндетті әрекеттің өрнектелуі.
Программалау тілдері
Паскаль тілі
1970 – Никлаус Вирт (Швейцария)
Есеп
Бағыныңқы есеп3
Бағыныңқы есеп 2
Бағыныңқы есеп1
3 .3
3 .2
2 .3
2 .2
2 .1
1.3
1.2
1.1
3 .1
6
6
Программа қандай бөліктерден тұрады?
program ;
const … ; { тұрақтылар }
var … ; { айнымалылар }
begin
… { негізгі программа }
end.
{ процедуралар мен функциялар }
фигуралық жақшаның ішінде орналасқан түсініктемелер программамен өңделмейді
6
6
Программа қандай бөліктерден тұрады?
Тұрақты – өз атауы болатын, өзгермейтін шама, .
Айнымалы – өз атауы (жад ұяшығы)болатын, өзгеретін шама.
Процедура – кейбір әрекеттерді сипаттайтын қосалқы алгоритм (мысалға шеңберді салу).
Функция – есептеулерді орындайтын қосалқы алгоритм (квадрат түбірді табу, sin ) .
6
6
Программалар, тұрақтылар, айнымалылар атауы
Атауларды сипаттағанда
қолдануға болады
Бас әріптер мен кіші әріптердің арасында айырмашылық болмайды
Атаулар санмен басталмауы керек
Атауларды сипаттағанда
қолдануға болмайды
Қай атаулар дұрыс жазылған?
AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B
6
6
Тұрақтылар
const
i2 = 45; { бүтін сан }
pi = 3.14; { нақты сан }
qq = ' Вася '; { символдар қатары }
L = True; { логикалық шама }
бүтін және бөлшек бөліктері нүктемен ажыратылады
орыс, қазақ әріптерін қолдануға болады!
екі мән қабылдай алады:
6
6
Айнымалылар
Айнымалы – аты, типі және мәні болатын шама. Айнымалының мәнін программаның жұмысы кезінде өзгертіп отыруға болады.
Айнымалылардың типі:
Айнымалыларды сипаттау ( жад бөлу ) :
var a, b: integer;
Q: real;
s1, s2: string;
6
6
Айнымалының мәнін қалай өзгертуге болады?
Оператор – жоғары деңгейлі программалау тілінің командасы.
Меншіктеу операторы айнымалының мәнін өзгерту үшін қолданылады.
Мысал:
program qq;
var a, b: integer;
begin
a := 5;
b := a + 2;
a := (a + 2)*(b – 3);
end.
a
5
?
5
b
7
5+2
?
a
5
7*4
28
6
6
Меншіктеу операторы
Жалпы құрылымы:
айнымалы атауы := өрнек ;
Арифметикалық өрнектің құрамында
+ - * / div mod
көбейту
бүтінді бүтінге бөлу
бөлу
бөлуден қалған қалдық
6
6
Қай операторлар дұрыс жазылмаған?
program qq;
var a, b: integer;
x, y: real;
begin
a := 5;
10 := x;
y := 7 , 8;
b := 2.5;
x := 2*(a + y);
a := b + x;
end.
айнымалы атауы := белгісінің сол жағында болуы керек
бүтін мен бөлшектің арасы нүктемен ажыратылуы керек
нақты мәнді бүтін айнымалыға меншіктеуге болмайды
6
6
Амалдарды орындау тәртібі
2 3 5 4 1 7 8 6 9
z := ( 5*a*c+3*(c-d))/a*(b-c)/ b;
2 6 3 4 7 5 1 12 8 11 10 9
x:= ( a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));
6
6
Екі санды қосу
Есеп. Екі бүтін санды қосып, қосындысын экранда шығару.
Шығарылуы:
program qq;
var a, b, c: integer;
begin
read ( a, b );
c := a + b;
writeln ( c );
end.
6
6
Енгізу операторы
read ( a ); { а айнымалысының мәнін енгізу }
read ( a, b ); { а және b айнымалыларының мәндерін енгізу }
Екі санды қалай енгізуге болады?
бос орын арқылы:
25 30
Enter арқылы :
25
30
a
25
b
30
a
25
b
30
17
17
Шығару операторы
write ( a ); { a айнымалысының мәнін шығару }
write ln ( a ); {a айнымалысының мәнін шығарып, келесі жолға көшу }
writeln ( ‘ Салем! ' ); { мәтінді шығару }
writeln ( ‘ Жауап: ', c ); { мәтінді және c айнымалысының мәнін шығару }
writeln ( a, '+', b, '=', c );
17
17
Шығару форматтары
program qq;
var i: integer;
x: real;
begin
i := 15;
writeln ( '', i, '
writeln ( '', i:5, '
x := 12.345678;
writeln ( '', x, '
writeln ( '', x:10, '
writeln ( '', x:7:2, '
end.
барлық символдар саны
15
15
1.234568E+001
1.23E+001
12.35
барлық символдар саны
бөлшек бөлігіндегі символдар саны
17
17
Толық шығарылуы
program qq;
var a, b, c: integer;
begin
writeln(‘ Екі бүтін сан енгізіңіз ');
read ( a, b );
c := a + b;
writeln ( a, '+', b, '=', c );
end.
бұны компьютер шығарады
Протокол :
Екі бүтін сан енгізіңіз
25 30
25+30=55
бұны программа жазушы өзі енгізеді
17
17
Сызықтық алгоритмның блок-схемасы
«басы» блогі
басы
енгізу a , b
«енгізу» блогі
c := a + b;
«процесс» блогі
шығару c
«шығару» блогі
соңы
«соңы» блогі
17
17
Тапсырмалар
"4": Үш сан енгізіп,олардың қосындысын және көбейтіндісін табу.
Мысал:
Үш сан енгіз:
4 5 7
4+5+7=16
4*5*7=140
"5": Үш сан енгізіп, олардың қосындысын, көбейтіндісін және арифметикалық ортасын табу.
Мысал:
Үш сан енгіз:
4 5 7
4+5+7=16
4*5*7=140
(4+5+7) / 3 =5.33
17
17
Паскаль тілінде программалау
Тақырып 2. Тармақталу
Тармақталу алгоритмдері
Есеп. Екі бүтін сан енгізіп,экранға олардың үлкенін шығару.
Шығару амалы: бірінші сан екінші саннан үлкен болса, біріншісін, ал егер кіші болса екіншісін экранға шығару.
Ерекшелігі: атқарушының әрекеті кейбір шарттардың орындалуына байланысты болады ( егер …әйтпесе … ).
Қадамдардың тізбектеп орындалуы кейбір шарттарға байланысты болатын алгоритмдерді тармақталу алгоритмдері деп атайды.
Нұсқа 1. Блок-схема
басы
«таңдау» блогі
енгізу a,b
Тармақталудың толымды түрі
иә
жоқ
a b?
max:= a;
max:= b;
шығару max
соңы
?
Егер a = b?
25
25
Нұсқа 1. Программа
program qq;
var a, b, max: integer;
begin
writeln(‘ Екі бүтін сан енгіз ');
read ( a, b );
if a b then begin
end
else begin
end ;
writeln (‘ Екі санның үлкені ', max);
end.
шартты оператордың толымды түрі
max := a ;
max := b ;
25
25
Шартты оператор
if then begin
{ егер шарт орындалса , не істеу керек }
end
else begin
{ егер шарт орындалмаса , не істеу керек }
end ;
Ерекшеліктері:
25
25
Қай жері дұрыс емес?
if a b then begin
a := b;
end
else
b := a;
end ;
if a b then begin
a := b;
else begin
b := a;
end ;
end
begin
if a b then begin
a := b;
end;
else begin
b := a;
end ;
if a b then begin
a := b;
end
else b a begin
b := a;
end ;
end
begin
25
25
Нұсқа 2 . Блок-схема
басы
енгізу a,b
max:= a;
тармақталудың толымсыз түрі
иә
жоқ
b a?
max:= b;
шығару max
соңы
29
29
Нұсқа 2. Программа
program qq;
var a, b, max: integer;
begin
writeln(‘ Екі бүтін сан енгіз ');
read ( a, b );
max := a;
if b a then
max := b;
writeln (‘ Екі санның үлкені ', max);
end.
шартты оператордың толымсыз түрі
29
29
Нұсқа 2Б. Программа
program qq;
var a, b, max: integer;
begin
writeln(' Екі бүтін сан енгіз ');
read ( a, b );
max := b;
if ??? then
???
writeln ( ' Екі санның үлкені ' , max);
end.
a b
max := a;
29
29
Қай жері дұрыс емес?
if a b then begin
a := b;
end;
else b := a;
if a b then begin
a := b;
else b := a;
a := b
end
if a b then
a := b;
else b := a; end;
if a b then
else begin
b := a;
end ;
if b = a then
b := a;
a := b
29
29
Тапсырмалар
"4": Үш сан енгізіп олардың үлкенін табу.
Мысал:
Үш сан енгіз:
4 15 9
Ең үлкен сан 15
"5": Бес сан енгізіп олардың үлкенін табу.
Мысал:
Бес сан енгіз:
4 15 9 56 4
Ең үлкен сан 5 6
29
29
Паскаль тілінде программалау
Тақырып 3. Күрделі шарттар
Күрделі шарттар
Есеп. Фирма 25 пен 40 жас арасындағы қызметкерлерді жұмысқа алуда. Адамның жасын енгізіп, оны фирмаға алуға болатындығы немесе болмайтындығы туралы мәлімет шығару («болады» немесе «болмайды» деген жауап шығару ) .
Ерекшелігі: екі шарттың бір мезгілде орындалатынын немесе орындалмайтынын тексеру.
?
Белгілі әдістермен шешуге бола ма ?
35
35
Нұсқа 1. Алгоритм
басы
енгізу x
иә
жоқ
x = 25?
иә
жоқ
x
‘ болмайды '
‘ болады '
' болмайды '
жоқ
35
35
Нұсқа 1. Программа
program qq;
var x: integer;
begin
writeln(‘ Жасты енгіз ');
read ( x );
if x = 25 then
if x
writeln (‘ Болады ')
else writeln (‘ Болмайды ')
else
writeln (‘ Болмайды ');
end.
35
35
Нұсқа 2. Алгоритм
басы
енгізу x
x = 25 және
x
жоқ
иә
' болмайды '
‘ болады '
соңы
38
38
Вариант 2 . Программа
program qq;
var x: integer;
begin
writeln(‘ Жасты енгіз ');
read ( x );
if (x = 25) and (x
writeln (' Болады ')
else writeln (' Б олмайды ')
end.
күрделі шарт
38
38
Күрделі шарттар
Күрделі шарт – бір-бірімен логикалық операциялардың көмегімен байланысатын бірнеше қарапайым шарттардан (қатынастардан) тұрады:
Қарапайым шарттар (қатынастар)
= =
тең
тең емес
38
38
Күрделі шарттар
Орындау тәртібі
Ерекшелігі – қарапайым шарттардың әрқайсысын жақшамен жабу.
Мысал:
4 1 6 2 5 3
if not (a b) or (c d) and (b a)
then begin
...
end
38
38
Күрделі шарттар
a := 2; b := 3; c := 4; болған жағдайда ақиқат немесе жалған:
not (a b)
(a
not (a = b) or (c = d)
(a
(a c)
x -тің қандай мәндерінде шарт ақиқат болады :
(x
(x 10)
(x 6) and (x
(x 6) and (x 10)
(x
(x 10)
(x 6) or (x
(x 6) or (x 10)
True
True
True
True
FALSE
(- , 6)
x
(6, 10)
x 10
(10, )
(- , 10)
x
(- , 6) (10, )
(- , )
x 6
(6, )
Тапсырмалар
"4": Айдың нөмірін енгіз у арқылы , жыл мезгілінің атауын шығару.
Мысал:
Ай нөмірін енгіз:
4
көктем
Паскаль тілінде программалау
Тақырып 4. Циклдер
Циклдер
Цикл – белгілі бір әрекеттер тізбегінің бірнеше рет қайталанып орындалуы.
Есеп. 1-ден 8-ге дейінгі бүтін сандардың квадраттары мен кубтарын есептеп шығару ( a -дан b -ға дейін ).
Ерекшелігі: бірдей амалдар 8 рет орындалады.
?
Белгілі әдістермен шешуге бола ма ?
45
45
Алгоритм
басы
цикл айнымалысының бастапқы мәнін көрсету
i := 1;
барлығы да атқарылды ма? соны тексеру
жоқ
i
соңы
квадрат пен куб-ты есептейміз
иә
i2 := i * i;
i3 := i2 * i;
нәтижесін шығару
i, i2, i3
келесі i -ге өту
i := i + 1;
45
45
Алгоритм ( "цикл" блогімен)
«цикл»блогі
басы
i := 1,8
соңы
i2 := i * i;
i3 := i2 * i;
цикл денесі
i, i2, i3
45
45
Программа
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.
бастапқы мән
цикл айнымалысы
ең соңғы мән
45
45
Айнымалысы кеміп отыратын цикл
Есеп. 8-ден 1-ге дейінгі бүтін сандардың квадраттары мен кубтарын есептеп шығару (кері қарай есептеу).
Ерекшелігі: цикл айнымалысы кеміп отыруы керек.
Шығарылуы:
down to
for i:=8 1 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
45
45
Айнымалысы бар цикл
Айнымалының 1-ге артуы:
for := to
do begin
{ цикл денесі }
end;
Айнымалының 1-ге кемуі:
for := downto
do begin
{ цикл денесі }
end;
45
45
Айнымалысы бар цикл
Ерекшеліктері:
for i:= 1 to 8 do
writeln( ' Привет ' );
45
45
Айнымалысы бар цикл
Ерекшеліктері:
n := 8;
for i:= 1 to n do begin
writeln( ' Салем ' );
n := n + 1;
end;
мүдіріп қалу жоқ
45
45
Цикл неше рет орындалған?
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 down to 3 do a := a+1;
a = 1
a := 1;
for i:= 3 down to 1 do a := a+1;
a = 4
45
45
Қадамдарды қалай өзгертуге болады?
Есеп. Экранға 1-ден 9-ға дейінгі тақ сандардың квадраттары мен кубтарын есептеп шығару.
Ерекшелігі: цикл айнымалысы 2-ге артып отыру керек.
Мәселе: Паскальде қадамдар саны 1 немесе -1 болуы мүмкін.
Шығарылуы:
Тек қана тақ i -лермен орындалады
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;
i mod 2 = 1
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
45
45
Қадамдарды қалай өзгертуге болады? – II
Идея: Тек 5 санды ғана шығару керек, k айнымалысы 1-ден 5-ке дейін өзгереді. i -дің бастапқы мәні 1-ге тең , циклдың әр қадамы сайын i 2-ге артып отырады.
Шығарылуы:
i := 1;
???
for k:= 1 to 5 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
???
end;
i := i + 2;
45
45
Қадамдарды қалай өзгертуге болады? – III
Идея: Тек 5 санды ғана шығару керек, k айнымылысы 1-ден 5-ке дейін өзгереді. k -ны біле отырып , i -ді есептеу қажет .
Шығарылуы :
i = 2k-1
k
1
i
1
2
3
3
5
4
7
5
9
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. Ш артты ц иклдер
Қадамдар саны белгісіз цикл
Мысал: Бөренеден ағаштың бұтағын кесіп алу керек. Қолараны әрі-бері неше рет қозғалтуымыз керек,. ?
Есеп: (
Шығару амалы: Ең соңғы орналасқан цифрларды кезекпен алып тастай отырып, санаушыны арттырамыз.
Мәселе: неше қадам жасау керектігі белгісіз.
Шығарылуы: n = 0 болғанда тоқтау керек , яғни " n 0 " болғанша орындай беру керек .
n
123
count
12
0
1
1
0
2
3
Алгоритм
басы
енгізу n
цифрлардың санаушысын нөлге теңестіру
count := 0 ;
“ n 0 “ болғанша орындай беру
n 0?
жоқ
иә
count
count := count + 1;
n := n div 10;
соңы
Программа
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.
, n1: integer;
n1 := n;
" n 0 “ болғанша орындай беру
while n 0 do begin
count := count + 1;
n := n div 10;
end;
n1,
Шартты цикл
while do begin
{ цикл денесі }
end;
Ерекшеліктері:
while (a
{ ц икл денесі }
end;
while a
a := a + 1;
Шартты цикл
Ерекшеліктері:
a := 4; b := 6;
while a b d o
a := a – b;
a := 4; b := 6;
while a
d := a + b;
Цикл неше рет орындалған ?
2 рет
a = 6
a := 4; b := 6;
while a
1 рет
a = 10
a := 4; b := 6;
while a
0 рет
a = 4
a := 4; b := 6;
while a b d o a := a + 1;
1 рет b = -2
a := 4; b := 6;
while a
дағдарысқа ұшырау
a := 4; b := 6;
while a
For - ны while -ға ауыстыру және керісінше
i := 1;
while i
{ цикл денесі }
i := i + 1;
end;
for i:=1 to 10 d o begin
{ цикл денесі }
end;
i := a;
while i = b d o begin
{ цикл денесі }
i := i - 1;
end;
for i:=a downto b d o
begin
{ цикл денесі }
end;
for - ны while –ауыстыруға қашанда болады .
while - ды for -ға , циклдегі қадамдар саны алдын ала белгілі болған жағдайда ғана ауыстыруға болады.
Тапсырмалар
"4": Бүтін сан енгізіп, ондағы цифрлардың қосындысын табу.
Мысал:
Бүтін сан енгіз:
1234
1234 санындағы цифрлардың қосындысы 10-ға тең.
"5": Бүтін сан енгізіп, оның жазылуында бірдей цифрларлардың бар-жоғын анықтау.
Мысал:
Бүтін сан енгіз : Бүтін сан енгіз :
1234 1224
Жоқ. Бар.
Тізбектер
Мысалдар:
a n = n
a 1 = 1, a n +1 = a n +1
a 1 = 1, a n +1 = a n + n
a 1 = 1, a n +1 = 2 a n
a n = 2 n-1
b 1 = 1, b n +1 = b n +1
c 1 = 2, c n +1 = 2 c n
Тізбектер
Есеп: модулі бойынша 0,001-ден асып түсетін
тізбектегі барлық элементтердің қосындысын табу:
Тізбек элементтері (№2-ден бастап ):
b := b+1;
n
b
1
c
1
2
3
2
z
2
4
3
-1
4
4
1
8
5
16
...
-1
5
...
1
32
...
-1
...
c := 2*c;
z := -z;
Алгоритм
басы
бастапқы мәндер
S := 0 ; b := 1; c := 2 ; z := -1; a := 1;
S := 0 ;
бірінші элемент
a := 1;
|a| 0.001?
жоқ
иә
S
S := S + a;
жаңа элемент
соңы
a := z*b/c;
b := b + 1; c := 2*c; z := -z;
өзгеріс
?
Қайта қою керек пе?
69
69
Программа
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.
бастапқы мәндер
S := 0; z := -1;
b := 1; c := 2; a := 1;
қосындының артуы
z := - z;
b := b + 1;
c := c * 2;
тізбек элементін есепке алу
келесі қосылғышқа өту
69
69
Тапсырмалар
"4": Тізбектегі элементтердің қосындысын 0,001 дәлдікпен табу :
Жауап:
S = 1.157
"5": Тізбектегі элементтердің қосындысын 0,001 дәлдікпен табу :
Жауап:
S = 1.220
69
69
Соңғышартты цикл
Есеп: Бүтін оң сан енгізіп(
Мәселе: Теріс санның немесе нөлдің енгізілмеуін қалай қадағалауға болады?
Шығарылуы: Егер бұрыс сан енгізілсе,берілгендерді енгізу үшін кері оралу (цикл!).
Ерекшелігі: Цикл денесі кемінде бір рет орындалады. = шартын тексеруді циклдың соңында орындау керек. ( соңғышартты цикл).
Соңғышартты цикл – шарттың тексерілуі циклдың соңында орындалатын цикл түрін айтады.
69
69
Соңғышартты цикл: алгоритм
басы
енгізу n
цикл денесі
n 0?
жоқ
ШЫҒУДЫҢ шарты
иә
негізгі алгоритм
«типтік процесс» блогі
соңы
69
69
Программа
program qq;
var n: integer;
begin
repeat
writeln(' Введите положительное число ');
read(n);
until n 0;
... { негізгі алгоритм }
end.
repeat
writeln(‘ Оң сан енгіз ');
read(n);
until n 0;
ШЫҒУДЫҢ шарты
until n 0;
Ерекшеліктері:
69
69
Цикл неше рет орындалған ?
3 рет
a = 7
a := 4; b := 6;
repeat a := a + 1; until a b;
1 рет
a = 10
a := 4; b := 6;
repeat a := a + b ; until a b;
Мүдіріп қалу
a := 4; b := 6;
repeat a := a + b ; until a
a := 4; b := 6;
repeat b := a - b ; until a
2 рет
b = 6
a := 4; b := 6;
repeat a := a + 2 ; until a
Мүдіріп қалу
69
69
Тапсырмалар (бұрыс енгізуден қорғау)
"4": Натурал сан енгізіп, сол сандағы цифрлардың қосындысы 10-ға тең екендігінің дұрыстығын анықтау.
Мысал:
= 0 сан енгіз : = 0 сан енгіз :
-234 1233
Оң сан енгізу керек. Жоқ
= 0 сан енгіз :
1234
Иә
"5": Натурал сан енгізіп,қандай цифрлардың бірнеше рет кездесетіндігін анықтау.
Мысал:
= 0 сан енгіз : = 0 сан енгіз :
2323 1234
2, 3 қайталанады Қайталану жоқ.
69
69
Паскаль тілінде программалау
Тақырып 6 . Таңдау операторы
Таңдау операторы
Есеп: Ай нөмірін енгізіп, осы айдағы күндердің санын шығару.
Шығарылуы: Айдағы күндер саны
28 күн – 2 (ақпан)
30 күн – 4 (сәуір), 6 (маусым), 9 (қыркүйек), 11 (қараша)
31 күн – 1 (қаңтар), 3 (наурыз), 5 (мамыр), 7 (шілде), 8 (тамыз), 10 (қазан), 12 (желтоқсан)
Ерекшелігі: Екі нұсқаның емес, айдың нөміріне сәйкес бірнеше нұсқаның бірін таңдау.
?
Бұған дейінгі қолданған әдістермен шешуге бола ма ?
78
78
Алгоритм
басы
енгізу M
иә
M = 1?
таңдау операторы
D := 31;
жоқ
иә
M = 2?
D := 28;
жоқ
иә
M = 12?
D := 31;
жоқ
шығару D
ешбір нұсқасы сәйкес келген жоқ
қате
соңы
78
78
Программа
program qq;
var M, D: integer;
begin
writeln(‘ Айдың нөмірін енгіз : ');
read ( M );
case M of
2: begin D := 28; end;
4,6,9,11: begin D := 30; end;
1,3,5,7,8,10,12: D := 31;
else D := -1;
end;
if D 0 then
writeln(‘ Бұл айда ', D, ' күн . ')
else
writeln(' Айдың нөмірі дұрыс емес ');
end.
case M of
2: begin D := 28; end;
4,6,9,11: begin D := 30; end;
1,3,5,7,8,10,12: D := 31;
else D := -1;
end;
ешбір нұсқасы сәйкес келген жоқ
78
78
Таңдау операторы
Ерекшеліктері:
немесе символдық типті ( char ) арифметикалық өрнек
case i+3 of
1: begin a := b; end;
2: begin a := c; end;
end;
var c: char;
...
case c of
' а ': writeln(‘ Бөкен ');
' б ': writeln(' Борсық ');
else writeln(‘ Білмеймін ');
end;
болуы мүмкін
78
78
Таңдау операторы
Ерекшеліктері:
case i+3 of
1: a := b;
2 : a := c;
end;
case i+3 of
1: a := b;
1: a := c;
end;
82
82
Таңдау операторы
Ерекшеліктері:
case i of
1: a := b;
2,4 ,6 : a := c;
10..15: a := d;
20,21,25..30: a := e;
else writeln(‘ Қате ');
end;
тізбелеп санап шығу
диапазон
аралас
82
82
Қай жері дұрыс емес ?
case a of
2: begin a := b;
4: a := c;
end;
case a of
2: a := b
4: a := c
end;
;
case a of
2..5: a := b;
4: a := c;
end;
case a of
0..2: a := b;
6..3: a := c;
end;
3..6:
begin
case a+c/2 of
2: a := b;
4: a := c;
end;
case a of
2: a := b; d := 0;
4: a := c;
end;
end;
84
84
Тапсырмалар (бұрыс енгізуден қорғаумен)
"4": Айдың нөмірін енгізе отырып, осы айдағы күндердің санын және енгізу кезінде жіберілген қателердің санын есептеп шығару.
Мысал:
Ай нөмірін енгіз: Ай нөмірін енгіз:
-2 2
Ай нөмірін енгіз: Бұл айда 28 күн бар.
1 1 Сіз 0 рет қате енгіздіңіз.
Бұл айда 30 күн бар.
Сіз 1 рет қате енгіздіңіз.
"5": Айдың нөмірі мен күннің нөмірін енгізіп, Жаңа жылға дейін қалған күндердің санын анықтау.
Мысал:
Ай н өмірін енгіз:
12
Күнді енгіз:
25
Жаңа жылға дейін 6 күн бар.
84
84
Паскаль тілінде программалау
Тақырып 7. Графика
К оординаталар жүйесі
X
(0,0)
y
( x , y )
x
Y
Түстерді басқару
C ызықтың түсі мен қалыңдығы , нүктелердің түсі:
Pen ( 1, 255, 0, 0 );
Бояудың түсі мен стилі:
Brush ( 1, 0, 255, 0 );
Мәтін түсі:
TextColor ( 0 , 0, 255 );
B ( blue )
0..255
R ( red )
0..255
G ( green )
0..255
сызықтың қалыңдығы
R
G
B
0 – өшіру
1 - қосу
R
G
B
Нүктелер, кесінділер және қисық сызықтар
( x , y )
Pen (1, 0, 0, 255) ;
Point (x, y) ;
( x 1 , y 1 )
Pen (1, 0, 255, 0) ; Line (x1, y1, x2, y2) ;
( x 2 , y 2 )
( x 2 , y 2 )
( x 1 , y 1 )
Pen (1, 255, 0, 0) ; MoveTo (x1, y1) ; LineTo (x2, y2) ;
LineTo (x3, y3) ;
LineTo (x4, y4) ;
LineTo (x5, y5) ;
( x 3 , y 3 )
( x 5 , y 5 )
( x 4 , y 4 )
89
89
Фигуралардың ішін бояу
( x 1 , y 1 )
Pen (1, 0, 0, 255) ;
Brush (1, 255, 255, 0) ;
Rectangle (x1, y1, x2, y2) ;
( x 2 , y 2 )
( x 1 , y 1 )
Pen (1, 255, 0, 0) ;
Brush (1, 0, 255, 0) ;
Ellipse (x1, y1, x2, y2) ;
( x 2 , y 2 )
( x , y )
Brush (1, 100, 200, 255) ;
Fill (x, y) ;
90
90
Салем!
Мәтін
TextColor (0, 0, 255) ;
Brush (1, 255, 255, 0) ;
Font (20, 30 , 600 ) ;
MoveTo (x, y) ;
writeln (‘ Салем ! ') ;
( x , y )
қанықтылық:
400 – қалыпты
600 – қалың
өлшемі
10 пиксель
айналу бұрышы
30 о
90
90
Мысал
p rogram qq;
b egin
Pen(2, 255, 0, 255);
Brush(1, 0, 0, 255);
Rectangle(100, 100, 300, 200);
MoveTo(100, 100);
LineTo(200, 50);
LineTo(300, 100);
Brush(1, 255 , 255, 0);
Fill(200, 75);
Pen(2, 255, 255 , 255 );
Brush(1, 0 , 255, 0);
Ellipse(150, 100, 250, 200);
end.
(200, 50)
(100, 100)
(300, 200)
90
90
Тапсырмалар
"4": « Бақа "
"5": « Тәж "
93
93
Штрихтер салу
N сызық ( N=5)
( x 1 , y 1 )
Rectangle (x1, y1, x2, y2) ;
Line( x1+h, y1, x1+h, y2) ;
Line( x1+2*h, y1, x1+2*h, y2) ;
Line( x1+3*h, y1, x1+3*h, y2) ;
...
h
( x 2 , y 2 )
x
x
h := (x2 – x1) / (N + 1);
Rectangle (x1, y1, x2, y2) ;
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x), y2) ;
x := x + h;
end;
var x, h: real ;
жақын орналасқан бүтін санға дейін дөңгелектеу
Түсті қалай өзгертуге болады?
( x 1 , y 1 )
x
сұр: R = G = B
Brush ( 1, c, c, c );
Fill ( ??? , ??? );
( x-1 , y 1 +1 )
Өзгеру қадамы c:
( x 2 , y 2 )
hc := 255 div (N + 1);
c := 0;
for i:=1 to N+1 do begin
Line (round(x), y1, round(x), y2) ;
Brush (1, c, c, c);
Fill (round(x)-1, y1+1);
x := x + h; c := c + hc;
end;
var c, hc: integer;
Штрихтер салу
a
( x 1 , y 1 )
( x 3 + a , y 1 )
Line( x1+h, y1, x1+h-a, y2) ;
Line( x1+2*h, y1, x1+2*h-a, y2) ;
Line( x1+3*h, y1, x1+3*h-a, y2) ;
...
( x 2 , y 2 )
( x 3 , y 2 )
h
x
x-a
h := (x3 – x2) / (N + 1);
a := x1 – x2;
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x-a), y2) ;
x := x + h;
end;
Штрихтер салу
( x 1 , y 1 )
h x
Line( x1, y1+hy, x1+hx, y1+hy) ;
Line( x1, y1+2*hy, x1+2*hx, y1+2*hy) ;
Line( x1, y1+3*hy, x1+3*hx, y1+3*hy) ;
...
h y
y
x
y
hx := (x2 – x1) / (N + 1);
hy := (y2 – y1) / (N + 1);
x := x1 + hx; y := y1 + hy;
for i:=1 to N do begin
Line( x1, round(y), round(x), round(y)) ;
x := x + hx; y := y + hy;
end;
( x 2 , y 2 )
Тапсырмалар
"4": Пернетақтадан штрих сызықтарының санын енгізе отырып фигура салу және оның ішін әр түрлі түстермен бояу.
"5": Пернетақтадан шеңберлердің санын енгізу арқылы шеңбердің суретін салу және оның ішіндегі әр шеңберді әр түрлі түске бояу.
Паскаль тілінде программалау
Тақырып 8 . Функциялардың графигі
Функция графиктерін құру
Есеп: 0 мен 2 π интервалы арасындағы y = 3 sin(x) функциясының графигін құру .
Анализ:
x = π /2 болғанда максималды мән y max = 3
x = 3 π /2 болғанда минималды мән y min = -3
Мәселе: функция координалардың математикалық жүйесінде көрсетілген, ал графикті координаталарын пиксельдермен көрсете отырып компьютер экранында шығару керек .
Координаталардың түрленуі
Координаталардың математикалық
жүйесі
Координаталардың экрандық жүйесі (пиксельдер)
Y
a
( 0 , 0 )
x
y э
( x , y )
b
x э
y
( x э , y э )
X
( 0 , 0 )
k – масштаб (экрандағы жекелеген кесінді кескінінің ұзындығы)
x э = a + kx
y э = b - ky
Программа
program qq;
const a = 50; b = 200; k = 50;
xmin = 0; xmax = 6.2832;
var x, y, h: real;
xe, ye, w: integer;
begin
w := round((xmax - xmin)*k);
Line( a -10, b, a+w, b);
Line(a, 0, a, 2*b);
x := xmin; h := 0.05;
while x
y := 3*sin(x);
xe := a + round(k*x);
ye := b - round(k*y);
Point (xe, ye);
x := x + h;
end;
end.
2 π
h – x - тің өзгеру қадамы
экранда
w – ОХ осінің ұзындығы(пиксельдер саны)
координаталар осі
графиктің құрылу циклі
?
Кемшілігі ?
102
102
Нүктелерді қалай біріктіруге болады?
Алгоритм:
Программа:
логикалық айнымалы
Егер бірінші нүкте болса
( x э , y э ) нүктесіне өту
әйтпесе
( x э , y э ) нүктесіне кесінді
var first: boolean;
...
begin
...
first := True;
while x
...
if first then begin
MoveTo(xe, ye);
first := False;
end
else LineTo(xe, ye);
...
end;
end.
бастапқы мән
әрекеттердің нұсқасын таңдау
102
102
Тапсырмалар
"4": [-3,3] интервалы арасында y = x 2 функциясының графигін құру .
"5": Функция графигін құру ( эллипс)
102
102
Паскаль тілінде программалау
Тақырып 9. Процедуралар
Процедуралар
Есеп: Мына фигураны құру:
Ерекшелігі: Үш ұқсас фигура.
жалпы : өлшемдері, айналу бұрышы
айырмашылықтары: координаталары, түстері
?
Белгілі әдістермен шешуге бола ма ?
?
Неше координата белгілеу керек ?
106
106
Процедуралар
Процедура – кейбір әрекеттерді орындау үшін қолданылатын көмекші.
Қолданылуы:
Негізгі есеп
Көмекші есеп3
Көмекші есеп 2
Көмекші есеп1
3 .3
3 .1
2 .3
2 .2
2 .1
1.3
1.2
1.1
3 .2
107
107
Процедуралар
Есепті орындау тәртібі:
параметрлер
тақырыбы
( x , y -60)
procedure Tr( x, y, r, g, b: integer);
begin
MoveTo(x, y);
LineTo(x, y-60);
LineTo(x+100, y);
LineTo(x, y);
Brush(1, r, g, b);
Fill(x+20, y-20);
end;
60
( x +100, y )
түс
MoveTo(x, y);
LineTo(x, y-60);
LineTo(x+100, y);
LineTo(x, y);
Brush(1, r, g, b);
Fill(x+20, y-20);
100
( x , y )
координаталар
процедура тұлғасы
108
108
Программа
формальды параметрлер
60
program qq;
begin
Pen(1, 255, 0, 255);
Tr(100, 100, 0, 0, 255);
Tr(200, 100, 0, 255, 0);
Tr(200, 160, 255, 0, 0);
end.
procedure Tr( x, y, r, g, b: integer);
begin
...
end;
( 100 , 100 )
100
процедураны шақырулар
процедура
нақтылы параметрлер
109
109
Процедуралар
Ерекшеліктері:
procedure Tr( x, y, r, g, b: integer);
Tr (200, 100, 0, 255, 0);
x
y
r
g
b
109
109
Процедуралар
Ерекшеліктері:
procedure A (x: real; y: integer; z: real);
procedure A (x, z: real; y, k, l: integer);
109
109
Процедуралар
Ерекшеліктері:
program qq;
procedure A (x, y: integer);
var a, b: real;
begin
a := (x + y)/6;
...
end;
begin
...
end.
procedure A (x, y: integer);
var a, b: real;
begin
a := (x + y)/6;
...
end;
локальді айнымалылар
var a, b: real;
109
109
Параметр-айнымалылар
Есеп: екі айнымалы мәндерінің орындарын ауыстыратын процедураны құру.
Ерекшеліктері:
Процедурада жасалған өзгертулер шақырушы программаға белгілі болуы қажет.
program qq;
var x, y: integer;
begin
x := 1; y := 2;
Exchange ( x, y );
writeln ( ’x = ’, x, ’ y = ’, y );
end;
procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
мына процедура параметрлердің көшірмесімен жұмыс істейді
x = 1 y = 2
109
109
Параметр-айнымалылар
параметрлер өзгере алады
procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
var
Қолданылуы: процедура(және функция) осындай әдіс арқылы бірнеше мән бере алады.
Шақыртудың тыйым салынған нұсқалары
Exchange ( 2, 3 ); { сандар }
Exchange ( x + z, y+2 ); { өрнектер }
109
109
Тапсырмалар
"4": Процедураларды пайдалана отырып, мына фигураны құрастыру .
"5": Процедураларды пайдалана отырып, мына фигураны құрастыру.
Тең қабырғалы үшбұрыш
a
a
0,866 ∙ a
a
115
115
Паскаль тілінде программалау
Тақырып 10 . Рекурсия
Рекурсивті объектілер
Мысалдар:
Рекурсияланған сурет:
Факториал:
егер
егер
Рекурсивті объект деп - бір объект немесе дәл осындай бірнеше объект арқылы анықталатын объектіні айтады.
117
117
Пифагор ағашы
N деңгейлі Пифагор ағашы – бұл ағаштың діңгегі мен осы діңгектен симметриялы түрде өсіп шыққан N- деңгейлі екі Пифагор ағашы , бұл ағаштардың бағанының ұзындығы 2 есе кем және олардың арасындағы бұрыш 90 o -қа тең .
6 деңгей:
?
Бұның рекурсивті фигура екенін қалай дәлелдеуге болады ?
118
118
Пифагор ағашы
Ерекшеліктері:
Қалған деңгейлердің саны нөлге тең болғанда!
x 1 = x 0 + L · cos ( α )
y 1 = y 0 – L · sin( α )
α +45 o
α - 45 o
( x 1 , y 1 )
L
Еншілес ағаштардың иілу бұрышы
α
α + π /4
α – π /4
( x 0 , y 0 )
118
118
Процедура
α бұрышы
баған ұзындығы
procedure Pifagor(x0, y0, a, L: real;
N: integer);
const k = 0.6; { ұзындықтың өзгеруі }
var x1, y1: real; { жергілікті айнымалылар }
begin
if N 0 then begin
x1 := x0 + L*cos(a);
y1 := y0 - L*sin(a);
Line (round(x0), round(y0),
round(x1), round(y1));
Pifagor (x1, y1, a + pi/4, L*k, N-1);
Pifagor (x1, y1, a - pi/4, L*k, N-1);
end;
end;
егер N=0 болса, аяқтау
рекурсивті шақырулар
Рекурсивті процедура деп өзін өзі шақыратын процедураны айтады
118
118
Программа
program qq;
procedure Pifagor(x0, y0, a, L: real;
N: integer);
...
end;
begin
Pifagor (250, 400, pi/2, 150, 8);
end;
баған ұзындығы
α бұрышы
x 0
деңгейлер саны
y 0
?
Ағашты 30 o оңға қалай еңкейтуге болады ?
Pifagor (250, 400, 2* pi/ 3 , 150, 8);
121
121
Задания
"4": Рекурсивті процедураны қолдана отырып , мына фигураны құрастыру:
"5": Рекурсивті процедураны қолдана отырып , мына фигураларды құрастыру:
121
121
Паскаль тілінде программалау
Тақырып 1 1. Анимация
Анимация
Анимация (ағылш. animation ) – экрандағы кескінге жан бітіру.
Есеп : 400х400 пиксельді көк квадраттың ішімен 20х20 пиксельді сары квадрат солдан оңға қарай жылжып келеді. Программа өз жұмысын Esc пернесін басқанда немесе сары квадрат көк квадраттың оң жақ жетіне жеткен кезде тоқтатады .
Проблема : объектінің экранда қозғалуын қалай кескіндеуге болады?
Қосымша: объектінің қозғалысы ( x,y) координаталарымен белгіленеді
Анимация қағидасы:
124
124
«Пернелерді шертуді» қалай іске асыруға болады?
Оқиға деп қандай да бір объектінің қалпында өзгерістің болуын немесе пайдаланушының әрекетін айтады. (пернені басу, тышқанды шерту).
IsEvent – қолданушы тарапынан қандай да бір әрекеттің болған-болмағандығын анықтайтын логикалық функция .
Event – нақты қандай оқиғаның болғандығын анықтайтын процедура.
if IsEvent then begin
Event (k, x, y);
if k = 1 then
writeln(‘ Коды бар перне ' , x)
else { k = 2 }
writeln(‘ Тышқан : x=' , x, ' y=', y);
end;
var k, x, y: integer;
124
124
Esc пернесін басып циклдан қалай шығуға болады ?
егер тоқтау қажет болса, True
program qq;
var stop: boolean;
k,code,i: integer;
begin
stop := False;
repeat
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then
stop := True;
end;
...
until stop;
end;
циклді іске қосу
егер бір нәрсе бола қалса...
қандай оқиға болды?
е гер коды 27 ( Esc ) болатын перне басылса, онда стоп
124
124
Процедура (сурет салу және өшіру)
Идеялар
( x , y )
( x +20, y +20)
сурет салу ( True ) немесе салмау ( False ) ?
procedure Draw(x, y: integer; flag: boolean);
begin
if flag then
Brush(1, 255, 255, 0)
else
Brush(1, 0, 0, 255);
Rectangle(x, y, x+20, y+20);
end;
сурет саламыз: қылқаламның түсі – сары
суретті өшіреміз: қылқаламның түсі – көк
тек қана құю!
124
124
Толық программасы
program qq;
var x, y, k, code, i: integer;
stop: boolean;
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
begin
Brush(1, 0, 0, 255);
Rectangle(10, 10, 400, 400);
Pen(0, 0, 0, 255);
x := 10; y := 200; stop := false;
repeat
if IsEvent then begin
...
end;
Draw(x, y, True);
Delay(10);
Draw(x, y, False);
x := x + 1;
if x = 400-20 then stop := true;
until stop;
end.
процедура
көк фон
шекараны өшіріп тастау
бастапқы жағдайлары
Esc пернесімен шығу
10 мс күтеміз
шекараға тақалған кезде шығу
124
124
Тапсырмалар
"4": Екі квадрат бір біріне қарама-қарсы бағытта қозғалады:
"5": Екі квадрат бір біріне қарама-қарсы бағытта қозғалады және көк квадраттың қабырғасына соқтығысып кері бағытта жылжиды:
124
124
Пернелермен басқару
Есеп : көк квадраттың ішінде орналасқан сары квадрат бағыттаушы пернелермен басқарылатындай болуы керек. Пернелердің коды:
солға – 37 жоғары – 38 Esc – 27
оңға – 39 төмен – 40
Проблема : қозғалыс бағытын қалай өзгертуге болады?
Шығарылуы :
егер перне басылған болса, …
if { оқиға болды } then begin
if { перне басулы } then begin
{ перненің кодын алу - code}
if code = 37 then x := x – 1;
if code = 38 then y := y – 1;
if code = 39 then x := x + 1;
if code = 40 then y := y + 1;
if code = 27 then stop := True;
end;
end;
IsEvent
Event ( k, code, i);
if k = 1 then begin
case code of
37: x := x – 1; 38: y := y – 1;
39: x := x + 1; 40: y := y + 1;
27: stop := True;
end;
124
124
Программасы
program qq;
var x, y, k, code, i: integer;
stop: boolean;
begin
...
repeat
Draw(x, y, True);
Delay(20);
Draw(x, y, False);
until stop;
end.
процедура
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
негізгі цикл
оқиғаларды өңдеу
if IsEvent then begin
...
end;
?
Кемшілігі ?
131
131
Жыпылықтауды қалай кетіруге болады?
Проблема : ешбір перне басылмағанның өзінде де квадрат әр 20 мс сайын басқа түске боялып тұрады(жыпылықтау!)
Бізге қажеттісі: ешқандай оқиға болмаса квадратты басқа түстерге боямау (жыпылықтатпау)
Шығарылуы : квадратты бояп тастап, оқиғаны күту
Жаңа проблема : оқиғаны қалай күтеміз ?
Жаңа проблеманың шығарылуы : бос цикл « оқиға болмайынша ештеме істеме ":
while not IsEvent do;
131
131
Программасы
program qq;
var x, y, k, code, i: integer;
stop: boolean;
begin
...
repeat
Draw(x, y, True);
while not IsEvent do;
until stop;
end.
процедура
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
квадраттың суретін саламыз
оқиғаны күтеміз
while not IsEvent do;
енді өшіруге болады
Draw(x, y, False);
Event(k, code, i);
...
?
Нені жақсартуға болады ?
133
133
Тапсырмалар
"4": Квадрат бағыттауыш пернелерді басқан бағытта жылжып отырады, алайда көк квадраттың шекарасынан асып кете алмайды:
"5": Квадрат үздіксіз қозғалып отырады, бағыттауыш пернелер басылған кезде өз бағытын өзгертеді және көк квадраттың қабырғаларына соқтығысып кері жылжып отырады:
134
134
Айналу
Есеп : Жердің Күнді айналу моделін бейнелеу.
Проблема : шеңбер бойымен айналу, координаталарды қалай өзгертіп отыруға болады?
Шығарылуы : тәуелсіз айнымалы ретінде α –ның айналу бұрышын қолдану (циклде өзгерту)
( x , y )
L
x = x 0 + L · cos ( α )
y = y 0 – L · sin( α )
α
( x 0 , y 0 )
134
134
Процедура
сурет салу ( True ) немесе салмау ( False ) ?
procedure Draw(x, y: integer; flag: boolean);
const r = 10;
begin
if flag then
Brush(1, 100, 100, 255)
else
Brush(1, 0, 0, 0);
Ellipse(x - r, y-r, x+r, y+r);
end;
Жердің радиусы
суретін саламыз: қылқалам түсі – көгілдір
суретті өшіреміз: қылқалам түсі – қара
тек қана құю!
( x - r , y-r )
( x , y )
( x+r , y+r )
134
134
Тұрақтылар мен айнымалылар
program qq;
const rSun = 60; { Күннің радиусы }
L = 150; { Жер орбитасының радиусы }
x0 = 200; { Күн центрінің координаталары }
y0 = 200;
var x, y, { Жердің координаталары }
k, code, i: integer; { Event үшін }
a , ha: real; { айналу бұрышы , қадам }
stop: boolean; { программаны тоқтату белгісі }
begin
...
end.
procedure Draw(x, y: integer; flag: Boolean);
begin
...
end;
134
134
Негізгі программа
program qq;
...
begin
Brush(1, 0, 0, 0); Fill(1,1);
Brush(1, 255, 255, 0);
Ellipse(x0-rSun, y0-rSun, x0+rSun, y0+rSun);
a := 0; ha := 1*pi/180; { бастапқы бұрыш , 100 мс-та 1 o қадам }
stop := false;
Pen(0,0,0,0); { контурларды өшіріп тастаймыз }
repeat
x := round(x0 + L*cos(a));
y := round(y0 - L*sin(a));
Draw(x, y, True);
Delay(100);
Draw(x, y, False);
a := a + ha;
until stop;
end.
фонды қара түске бояу
Күннің суретін саламыз
жаңа координаталар
100 мс күтеміз
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then stop := true;
end;
ha бұрышына бұрылу
134
134
Тапсырмалар
"4": Күнді айналып жүрген екі планетаның моделін бейнелеу, планеталар бір-біріне қарама-қарсы бағытта қозғалатын болсын:
"5": Күн-Жер-Ай жүйесінің моделін бейнелеу:
139
139
Паскаль тілінде программалау
Тақырып 1 2. Кездейсоқ сандар
Кездейсоқ сандар
Кездейсоқ көріністер : барлық жерде…
Кездейсоқ сандар – бұған дейінгі сандардың ретін біліп отырсақ та, келесі санның қандай екені белгісіз болатын сандардың тізбегін айтады.
Проблема : компьютерде осыны қалай алуға болады?
Мүмкін болатын шешімдері :
Жалған кездейсоқ сандар
Жалған кездейсоқ сандар – бойында кездейсоқ сандардың қасиеті бар, бірақ әрбір келесі сан алдын ала берілген формула бойынша есептелетін сандардың тізбегін айтады.
Мысалдар :
a, c, m - бүтін сандар
2 30 -1
жай сан
мысал, k = 5
санның бөлшек бөлігі
Кездейсоқ сандардың орналасуы
Модель : қар бұршақтары [a,b] кесіндісінің аралығына түседі
орналасуы
бірқалыпты
бірқалыпты емес
a
a
b
b
?
Әр түрлі орналастырулардың саны қанша болуы мүмкін ?
143
143
Кездейсоқ сандардың орналасуы
Ерекшеліктері :
a
a
b
b
бірқалыпты орналасу
бірқалыпсыз орналасу
143
143
Паскальдегі кездейсоқ сандардың генераторы
[0,N] интервалындағы бүтін сандар:
var x: integer;
...
x := random ( 100 ); { интервал [0,99] }
[0,1] интервалындағы бүтін сандар:
var x: real;
...
x := random; { интервал [0,1] }
143
143
Кездейсоқ сандар
Есеп : 400х300 пиксельді тіктөртбұрыштың ішін түстері кездейсоқ нүктелермен бірқалыпты етіп толтыру.
Нүктенің кездейсоқ координаталарын қалай алуға болады?
x := random ( 400 );
y := random ( 300 );
Бірқалыптылықты қалай алуға болады? random функциясы қолданылса автоматты түрде қамтамасыз етіледі
Кездейсоқ түстерді қалай алуға болады?
Pen (1, random(256), random(256), random(256));
Point ( x, y );
143
143
Программа
program qq;
var x, y, k, code, i: integer;
stop: boolean;
begin
stop := False;
repeat
x := random(400);
y := random(300);
Pen(1, random(25 6 ), random(25 6 ), random(25 6 ));
Point(x, y );
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then stop := True;
end;
until stop;
end.
кездейсоқ координаталар
кездейсоқ түс
Esc пернесін басып шығып кету
143
143
Тапсырмалар
"4": Пернетақтадан тіктөртбұрыш бұрыштарының координаталарын енгізіп, тіктөртбұрыштың ішін түстері кездейсоқ нүктелермен толтыру керек.
"5": Үшбұрыштың ішін түстері кездейсоқ болатын нүктелермен толтыру. (бірқалыпты немесе бірқалыпты емес).
Қосымша көмек : бұрышы 45 о болатын теңбүйірлі үшбұрышты алу керек .
(100,100)
(300,200)
143
143
Паскаль тілінде программалау
Тақырып 13 . Функциялар
Функциялар
Функция – нәтижесі қандай да бір мәнге ие болатын көмекші алгоритм (қосалқы программа).
Мысалдар :
Неліктен?
?
Процедурадан айырмашылығы неде ?
150
150
Функциялар
Есеп: екі санның үлкенін анықтайтын функция құру және оны қолдануға мысал келтіру
Функция:
формальды параметрлер
function Max (a, b: integer): integer;
begin
if a b then Max := a
else Max := b;
end.
бұл функцияны нәтижесі
150
150
Функциялар
Ерекшеліктері:
Max (a, b: integer): integer;
function
function qq( a, b: integer; x: real ): real;
a, b: integer; x: real
function Max ( a, b: integer): integer;
var
function Max (a, b: integer): ;
integer
152
152
Функциялар
Ерекшеліктері:
function qq (a, b: integer): float;
begin
...
end;
var x, y: float;
function Max (a, b: integer): integer;
begin
...
end;
!
Max := a;
Delphi -де :
Result := a;
153
153
Программа
program qq;
var a, b, max: integer;
begin
writeln(‘ Екі сан енгіз ');
read(a, b);
max := Max ( a, b );
writeln(‘ Санның үлкені ' , max );
end.
c
function Max (a, b: integer): integer;
begin
...
end;
нақты параметрлер
функцияны шақыру
c
c
!
Айнымалылардың, функциялардың және процедуралардың аттары бірдей болмауы керек!
154
154
Логикалық функциялар
Есеп: енгізілген санның - жай сан екендігін анықтайтын функция құру.
Ерекшеліктері:
Алгоритм: 2-ден N-1 -ге дейінгі аралықтағы бөлгіштердің санын есептейміз , егер олардың саны нөлге тең болмаса енгізілген санның - құрама сан болғаны.
count := 0;
for i := 2 to N-1 do
if N mod i = 0 then
count := count + 1;
if count = 0 then
{ N саны – жай сан }
else { N саны – құрама сан }
for i := 2 to N-1 do
if N mod i = 0 then
count := count + 1;
?
Қалай жақсартуға болады ?
155
155
Логикалық функциялар
program qq;
var N: integer;
begin
writeln(‘ Бүтін сан енгіз ');
read(N);
if Prime(N) then
writeln(N, ' – жай сан ')
else writeln(N, ' – құрама сан ');
end.
нәтижесі – логикалық мән
function Prime (N: integer): boolean;
var count, i: integer;
begin
i := 2; count := 0;
while i*i
if N mod i = 0 then count := count + 1;
i := i + 1;
end;
Prime := (count = 0);
end;
таңдап алу тек -ге дейін
шарт дегеніміз – логикалық мән
функцияны шақыру
155
155
Тапсырмалар
"4": 1-ден N -ге дейінгі сандардың қосындысын анықтайтын функция құру және оны қолдануға мысал келтіру .
Мысал:
Сан енгіз:
1 00
қосынды = 5050
"5": Шахматты ойлап шығарған адамның N -ші торға неше бидайдың қоюын сұрағанын анықтайтын функция құру. ( 1-шісіне – 1 дән, 2-шісіне – 2 дән, 3-шісіне – 4 бидай дәнін, …)
Мысал:
Тордың нөмірін енгіз:
28
28-шісі торда 134217728 бидай дәні.
155
155
Тапсырмалар (2-нұсқа)
"4": Екі натурал санның ең үлкен ортақ бөлгішін анықтайтын функция құру және оны қолдануға мысал келтіру.
Мысал:
Екі сан енгіз:
14 21
ЕҮОБ(14,21)=7
"5": Синус функциясын қатардың қосындысы секілді есептейтін функция құру. (0.001 дәлдікпен)
Мысал:
Градус түріндегі бұрышты енгіз:
45
sin(45) = 0.707
x радиан түрінде!
155
155
Фильмнің соңы
155