Паскаль тілінде программалау



Паскаль тілінде программалау
1. 2. 3. 4. 5. 6. Кіріспе Тармақталу Күрделі шарттар Циклдер Шартты циклдер Таңдау операторы 7. 8. 9. 10. 11. 12. 13. Графика Функциялардың графигі Процедуралар Рекурсия Анимация Кездейсоқ сандар Функциялар

Паскаль тілінде программалау
Тақырып 1. Кіріспе

Алгоритм

Алгоритм – атқарушы орындайтын амалдардың тиянақты жоспары.
Алгоритм қасиеттері дискреттілік: жекелеген қадамдардан(командалардан) тұрады айқындылық: атқарушыға түсінікті болатын командалардан тұруы керек белгілілік: бастапқы деректері бірдей болған жағдайда нәтижесі де бірдей болады нәтижелік: әрекеттердің шектеулі санынан кейін белгілі бір уақытта қорытынды нәтиже алуымыз керек жалпылық: алгоритм әр түрлі алғашқы мәліметтер үшін әр түрлі нәтижелер беруі тиіс дұрыстылық: алғашқы мәліметтер әр түрлі болғандығына қарамастан барлық жағдайда дұрыс нәтиже береді

Программа

Программа дегеніміз қандай да бір программалау тілінде жазылған алгоритм компьютерге қажетті командалардың жиынтығы Команда – компьютер орындауға міндетті әрекеттің өрнектелуі. алғашқы мәліметтерді қайдан алу керек олармен қандай амалдар орындау керек

Программалау тілдері

Машинаға бейімделген (төменгі деңгейлі) әрбір команда процессордың бір командасына сәйкес келеді (ассемблер) Жоғарғы деңгейлі тілдер – кәдімгі табиғи тілге(ағылшын тіліне) ұқсайды, адамның түсінуіне оңай, бір ғана компьютерге тәуелді болмайды. Жаңадан үйренушілерге: Бейсик, ЛОГО, Паскаль Кәсіби: Си, Фортран, Паскаль Жасанды интеллект тапсырмалары үшін: Пролог, ЛИСП Интернет үшін: JavaScript, Java, Perl, PHP, ASP

Паскаль тілі

1970 – Никлаус Вирт (Швейцария) студенттерді оқытуға арналған тіл «жоғарыдан төменге қарай» программаларын жасау

Есеп
Бағыныңқы есеп1 Бағыныңқы есеп2 Бағыныңқы есеп3

1.1

1.2

1.3

2.1

2.2

2.3

3.1

3.2

3.3

берілгендердің әр түрлі құрылымдары(массивтер, құрылымдар, жиымдар)

Программа қандай бөліктерден тұрады program <программаның аты >; const ; {тұрақтылар} var ; {айнымалылар}

{ процедуралар мен функциялар } begin {негізгі программа} end.
фигуралық жақшаның ішінде орналасқан түсініктемелер программамен өңделмейді

Программа қандай бөліктерден тұрады
Тұрақты – өз атауы болатын, өзгермейтін шама, . Айнымалы – өз атауы (жад ұяшығы)болатын, өзгеретін шама. Процедура – кейбір әрекеттерді сипаттайтын қосалқы алгоритм (мысалға шеңберді салу). Функция – есептеулерді орындайтын қосалқы алгоритм (квадрат түбірді табу, sin).

Программалар, тұрақтылар, айнымалылар атауы
Атауларды сипаттағанда
латын әріптерін (A-Z)
Бас әріптер мен кіші әріптердің арасында айырмашылық болмайды

сандарды

Атаулар санмен басталмауы керек
астын сызу белгісін _

Атауларды сипаттағанда

қолдануға болады

орыс, қазақ әріптерін бос орындарды жақшаларды, +, =, !, белгілерін және т.б.

қолдануға болмайды Қай атаулар дұрыс жазылған

AXby R&B 4Wheel Вася [QuQu] _ABBA A+B

“PesBarbos” TU154

Тұрақтылар
const i2 = 45; { бүтін сан } pi = 3.14; { нақты сан }

бүтін және бөлшек бөліктері нүктемен ажыратылады

qq = 'Вася'; { символдар қатары }
орыс, қазақ әріптерін қолдануға болады!

L

= True; { логикалық шама }
екі мән қабылдай алады: True (ақиқат, «иә») False (жалған, «жоқ»)

Айнымалылар

Айнымалы – аты, типі және мәні болатын шама. Айнымалының мәнін программаның жұмысы кезінде өзгертіп отыруға болады. Айнымалылардың типі: integer { бүтін } real { нақты } char { бір символ } string { символдық тіркес } boolean { логикалық } Айнымалыларды сипаттау (жад бөлу):

var

a, b: integer; Q: real; s1, s2: string;

Айнымалының мәнін қалай өзгертуге болады
Оператор – жоғары деңгейлі программалау тілінің командасы. Меншіктеу операторы айнымалының мәнін өзгерту үшін қолданылады. Мысал:

program qq; a 5 5 var a, b: integer; begin b a := 5; 7 5+2 b := a + 2; a a := (a + 2)*(b – 3); 28 7*4 5 end.

Меншіктеу операторы
Жалпы құрылымы:

< айнымалы атауы > := < өрнек >;
Арифметикалық өрнектің құрамында
тұрақтылар айнымалы атаулары арифметикалық амалдар белгілері: + * / div
көбейту бөлу
бүтінді бүтінге бөлу

mod
бөлуден қалған қалдық

функцияларды шақыру жақшалар ( )

Қай операторлар дұрыс жазылмаған

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.

Амалдарды орындау тәртібі

жақша ішіндегі өрнекті есептеу солдан оңға қарай көбейту, бөлу, div , mod солдан оңға қарай қосу және алу 2 3 5 4 1 7 8 6 9 z := (5*a*c+3*(c-d))/a*(b-c)/ b; 5ac + 3(c − d )
a + 5c − d ( a + b) x= (c + d )(d − 2a )
2 2

z=

ab

(b − c)

2 6 3 4 7 5 1 12 8 11 10 9 x:=(a*a+5*c*c-d*(a+b))/((c+d)*(d2*a));

Екі санды қосу

Есеп. Екі бүтін санды қосып, қосындысын экранда шығару. Шығарылуы: program qq; var a, b, c: integer; begin read ( a, b ); c := a + b; writeln ( c ); end.

Енгізу операторы
read ( a );

{ а айнымалысының мәнін енгізу} read ( a, b ); { а және b айнымалыларының мәндерін енгізу } Екі санды қалай енгізуге болады
бос орын арқылы:

25 30
Enter арқылы:

25 a 30 b 25 a 30 b

25 30

Шығару операторы
write ( a );

{ a айнымалысының мәнін шығару}

writeln ( a ); {a айнымалысының мәнін шығарып,келесі жолға көшу} writeln ( ‘Салем!' ); { мәтінді шығару} writeln ( ‘Жауап: ', c ); { мәтінді және c айнымалысының мәнін шығару } writeln ( a, '+', b, '=', c );

Шығару форматтары

program qq; var i: integer; x: real; begin барлық символдар i := 15; саны writeln ( '>', i, '<' ); >15< writeln ( '>', i:5, '<' ); > 15< x := 12.345678; writeln ( '>', x, '<' ); >1.234568E+00 writeln ( '>', x:10, '<' 1< ); 1.23E+001< writeln ( '>', x:7:2, '<'> ); > 12.35< end. барлық
символдар саны
бөлшек бөлігіндегі символдар саны

Толық шығарылуы

Протокол:

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

Сызықтық алгоритмның блок-схемасы
басы енгізу a, b «басы» блогі «енгізу» блогі

c := a + b;

«процесс» блогі

шығару c

«шығару» блогі

соңы

«соңы» блогі

Тапсырмалар

"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

Паскаль тілінде программалау
Тақырып 2. Тармақталу

Тармақталу алгоритмдері

Есеп. Екі бүтін сан енгізіп,экранға олардың үлкенін шығару. Шығару амалы: бірінші сан екінші саннан үлкен болса, біріншісін, ал егер кіші болса екіншісін экранға шығару. Ерекшелігі: атқарушының әрекеті кейбір шарттардың орындалуына байланысты болады (егер әйтпесе ).

Қадамдардың тізбектеп орындалуы кейбір шарттарға Қадамдардың тізбектеп орындалуы кейбір шарттарға байланысты болатын алгоритмдерді тармақталу байланысты болатын алгоритмдерді тармақталу алгоритмдері деп атайды. алгоритмдері деп атайды.

Нұсқа 1. Блок-схема
басы
«таңдау» блогі

енгізу a,b
иә

a > b max:= a;

жоқ

Тармақталудың толымды түрі

max:= b;

шығару max

соңы

Егер a = b

Нұсқа 1. Программа

program qq; var a, b, max: integer; begin writeln(‘Екі бүтін сан енгіз '); read ( a, b ); шартты if a > b then begin оператордың max := a; толымды түрі end else begin max := b; end; writeln (‘Екі санның үлкені ', max); end.

Шартты оператор

if <шарт> then begin {егер шарт орындалса , не істеу керек} end else begin {егер шарт орындалмаса , не істеу керек} Ерекшеліктері: end; else -тің алдында нүктелі үтір болмауы керек екінші бөліктің (else ) болмауы да мүмкін (толымсыз түрі) егер блокта бір ғана оператор болса, begin мен end сөздерін жазбауға да болады

Қай жері дұрыс емес
if a > b then begin a := b; end begin else b := a; end; if a > b then begin a := b; end begin else b > a begin b := a; end;

if a > b then begin end a := b; else begin b := a; end; if a > b then begin a end := b; end; else begin b := a; end;

Нұсқа 2. Блок-схема
басы енгізу a,b max:= a;
иә жоқ

тармақталудың толымсыз түрі

b > a max:= b;

шығару max

соңы

Нұсқа 2. Программа

program qq; var a, b, max: integer; begin writeln(‘Екі бүтін сан енгіз'); шартты read ( a, b ); оператордың толымсыз түрі max := a; if b > a then max := b; writeln (‘Екі санның үлкені', max); end.

Нұсқа 2Б. Программа
program qq; var a, b, max: integer; begin writeln('Екі бүтін сан енгіз'); read ( a, b ); max := b b; a > if max := a; then

writeln ('Екі санның үлкені', max); end.

Қай жері дұрыс емес
if a > begin a end := end; else b

if a > b then begin := b a a := b; else b := a;

b then b; := a;

if a > b then aa := bb; := else b := a; end;

if a > b then if b >= a then else begin b b := a; := a; end;

Тапсырмалар
"4": Үш сан енгізіп олардың үлкенін табу.
Мысал:

Үш сан енгіз: 4 15 9 Ең үлкен сан 15 "5": Бес сан енгізіп олардың үлкенін табу.
Мысал:

Бес сан енгіз: 4 15 9 56 Ең үлкен сан 56

Паскаль тілінде программалау
Тақырып 3. Күрделі шарттар

Күрделі шарттар

Есеп. Фирма 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 ...

Күрделі шарттар

a := 2; b := 3; c := 4; болған жағдайда ақиқат немесе жалған: True not (a > b) True (a < b) and (b < c) True not (a >= b) or (c = d) True (a < c) or (b < c) and (b < a) (a < b) xor not (b > c) FALSE
x-тің қандай мәндерінде шарт ақиқат болады:

(x (x (x (x (x (x (x (x

< < > > < < > >

6) 6) 6) 6) 6) 6) 6) 6)

and (x < 10) and (x > 10) and (x < 10) and (x > 10) or (x < 10) or (x > 10) or (x < 10) or (x > 10)

(-∞, 6) ∅ (6, 10) (10, ∞) (-∞, 10) (-∞, 6) ∪ (10,∞) (-∞, ∞) (6, ∞)

x<6

x > 10 x < 10

x>6

Тапсырмалар

"4": Айдың нөмірін енгізу арқылы, жыл мезгілінің атауын шығару.
Мысал:

Ай нөмірін енгіз: 4 көктем

Паскаль тілінде программалау
Тақырып 4. Циклдер

Циклдер

Цикл – белгілі бір әрекеттер тізбегінің бірнеше рет қайталанып орындалуы. қадамдар саны белгілі цикл қадамдар саны белгісіз цикл (шартты цикл) Есеп. 1-ден 8-ге дейінгі бүтін сандардың квадраттары мен кубтарын есептеп шығару (a-дан b-ға дейін). Ерекшелігі: бірдей амалдар 8 рет орындалады.

Белгілі әдістермен шешуге бола ма

Алгоритм
басы
i := 1;

цикл айнымалысының бастапқы мәнін көрсету барлығы да атқарылды ма соны тексеру жоқ

i <= 8
иә i2 := i * i; i3 := i2 * i;

соңы
квадрат пен куб-ты есептейміз

нәтижесін шығару

i, i2, i3
келесі i-ге өту i := i + 1;

Алгоритм ("цикл" блогімен)
басы
i := 1,8 «цикл»блогі

соңы

i2 := i * i; i3 := i2 * i;

цикл денесі

i, i2, i3

Программа
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 downt 1 do begin i2 := o i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end;

Айнымалысы бар цикл
Айнымалының 1-ге артуы:

for <айнымалы> := <алғашқы мән> to <ең соңғы мән> do begin {цикл денесі} end; Айнымалының 1-ге кемуі: for <айнымалы> := <алғашқы мән> downto <ең соңғы мән> do begin {цикл денесі} end;

Айнымалысы бар цикл

Ерекшеліктері: цикл айнымалысының мәні бүтін болуы керек (integer) цикл айнымалысының өзгеру қадамы қашанда 1-ге (to) немесе -1-ге (downto) тең егер цикл денесінде бір ғана оператор болса, begin мен end сөздерін жазбай кетуге болады:

for i:=1 to 8 do writeln('Привет');
егер соңғы мән алғашқы мәннен кіші болса, (to) циклы бірде бір рет орындалмайды (шартты циклдың басында тексеру, шартты алдын ала тексеретін цикл)

Айнымалысы бар цикл

Ерекшеліктері: Цикл денесінде цикл айнымалысын өзгертуге рұқсат етілмейді (неліктен ) Алғашқы және соңғы мәндер өзгертілгенімен цикл ішіндегі қадамдар саны өзгермейді:

n := 8; for i:=1 to n do begin writeln('Салем'); мүдіріп қалу жоқ n := n + 1; end;

Цикл неше рет орындалған
a := 1; for i:=1 a+1; a := 1; for i:=3 a+1; a := 1; for i:=1 a+1; a := 1; for i:=3 a+1;

to 3 do a :=

a= 4

to 1 do a :=

a= 1

downto 3 do a :=

a= 1

downto 1 do a :=

a= 4

Қадамдарды қалай өзгертуге болады
Есеп. Экранға 1-ден 9-ға дейінгі тақ сандардың квадраттары мен кубтарын есептеп шығару. Ерекшелігі: цикл айнымалысы 2-ге артып отыру керек. Мәселе: Паскальде қадамдар саны 1 немесе -1 болуы мүмкін. Шығарылуы: Тек қана тақ for i:=1 to 9 do begin i -лермен 2 if i mod = 1 then орындалады begin i2 := i*i; i3i2 := i*i; := i2*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); writeln(i:4, i2:4, i3:4); end; end;

Қадамдарды қалай өзгертуге болады – 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); i i + 2; := end;

Қадамдарды қалай өзгертуге болады – III
Идея: Тек 5 санды ғана шығару керек, k айнымылысы 1-ден 5-ке дейін өзгереді. k -ны біле отырып, i -ді есептеу қажет.

k i

1 1

2 3

3 5

4 7

5 9

i = 2k1

Шығарылуы: for k:=1 to 5 do begin i := 2*k – 1; i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end;

Тапсырмалар

"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 123 12 1 0 count 0 1 2 3

Мәселе: неше қадам жасау керектігі белгісіз. Шығарылуы: n = 0 болғанда тоқтау керек, яғни "n <> 0 " болғанша орындай беру керек.

Алгоритм
басы енгізу n
count := 0;

цифрлардың санаушысын нөлге теңестіру

болғанша орындай беру

“n

<> 0 “

n <> 0 иә

жоқ

count := count + 1; n := n div 10;

count соңы

Программа

program qq; , var n, count:n1: integer; integer; begin writeln(’Бүтін сан енгіз ’); read(n); n1 := "n <> 0 “ болғанша n; count := 0; орындай беру while nn <> 00 do begin while <> do begin count := count + 1; count := count + 1; n := n div 10; n := n div 10; end; end; writeln(n1 ’cанында’,count, ’цифр , табылды’); end.

Шартты цикл
while <шарт> do begin {цикл денесі} end; Ерекшеліктері: күрделі шарттарды қолдануға болады:

while (a
Шартты цикл

Ерекшеліктері: циклге кірген сайын шарт есептеліп отырады егер шарт циклге кіруде жалған болса, цикл бірде-бір рет орындалмайды a := 4; while a a := b > a := 6; b do – b;

егер шарт түбінде жалған болмайтын болса, программаның жұмысы дағдарысқа ұшырайды (тоқтаусыз орындала береді)

a := 4; while a d :=

b < a

:= 6; b do + b;

Цикл неше рет орындалған
a := 4; while a 1; a := 4; while a b; a := 4; while a 1; a := 4; while a b; a := 4; while a 1; b := 6; < b do a := a + b := 6; < b do a := a + b := 6; > b do a := a + b := 6; < b do b := a b := 6; < b do a := a -

2 рет a=6 1 рет a = 10 0 рет a=4 1 рет b = -2 дағдарысқ а ұшырау

For-ны while-ға ауыстыру және керісінше
for i:=1 to 10 do begin {цикл денесі} end;

for i:=a downto b do begin {цикл денесі} end;

i := 1; while i <= 10 do begin {цикл денесі} i := i + 1; end; i := a; while i >= b do begin {цикл денесі} i := i - 1; end;

for-ны while –ауыстыруға қашанда болады. while-ды for-ға , циклдегі қадамдар саны алдын ала белгілі болған жағдайда ғана ауыстыруға болады.

Тапсырмалар

"4": Бүтін сан енгізіп, ондағы цифрлардың қосындысын табу. Мысал: Бүтін сан енгіз: 1234 1234 санындағы цифрлардың қосындысы 10-ға тең. "5": Бүтін сан енгізіп, оның жазылуында бірдей цифрларлардың бар-жоғын анықтау. Мысал: Бүтін сан енгіз: Бүтін сан енгіз: 1234 1224 Жоқ. Бар.

Тізбектер
Мысалдар: 1, 2, 3, 4, 5, 1, 2, 4, 7, 11, 16, 1, 2, 4, 8, 16, 32,
1 1 3 1 5 , , , , , ... 2 2 8 4 32 bn an = cn

an = n a n = 2n-1

a 1 = 1, a n+1 = a n +1 a 1 = 1, a n+1 = a n + n a 1 = 1, a n+1 = 2a n

1 2 3 4 5 , , , , , ... 2 4 8 16 32

b 1 = 1, b n+1 = b n +1 c 1 = 2, c n+1 = 2c n

Тізбектер
Есеп: модулі бойынша 0,001-ден асып түсетін
1 2 3 4 5 1, − , , − , , − , ... 2 4 8 16 32

тізбектегі барлық элементтердің қосындысын табу:

1 2 3 4 5 S = 1− + − + − + ... 2 4 8 16 32
Тізбек элементтері (№2-ден бастап ):
n 1 1 2 2 2 4 3 3 8 4 4 16 5 5 32

a= z

b c

.. . .. . .. .

b c

b := b+1; c := 2*c; z := -z;

Алгоритм
басы
S := 0; S := 0; b := 1; c := 2; z := -1; a := 1;

бастапқы мәндер бірінші элемент

|a| > 0.001 иә жаңа элемент S := S + a;

жоқ

S

өзгеріс

a := z*b/c; b := b + 1; c := 2*c; z := -z;

соңы

Қайта қою керек пе

Программа

program qq; бастапқы мәндер var b, c, z: integer; S, a: real; begin S S := 0; z := -1; := 0; z := -1; b b := 1; c := 2; a := 1; := 1; c := 2; a := 1; while abs(a) > 0.001 do begin қосындының S := S + a; артуы a := z * b / c; := z; z z:= -z; тізбек элементін := 1; b b:= b b+ +1; есепке алу := 2; c c:= c c* *2; end; келесі writeln('S =', S:10:3); қосылғышқа өту end.

Тапсырмалар

"4": Тізбектегі элементтердің қосындысын 0,001 дәлдікпен табу :

2 4 6 8 S = 1+ − + − + ... 3 ⋅ 3 5 ⋅ 9 7 ⋅ 27 9 ⋅ 81
Жауап: S = 1.157 "5": Тізбектегі элементтердің қосындысын 0,001 дәлдікпен табу : 2 4 6 8 10 S = 1+ − + − + − ... 2 ⋅ 3 3 ⋅ 9 5 ⋅ 27 8 ⋅ 81 13 ⋅ 243 Жауап: S = 1.220

Соңғышартты цикл
Есеп: Бүтін оң сан енгізіп(<2000000), ондағы цифрлардың санын анықтау.

Мәселе: Теріс санның немесе нөлдің енгізілмеуін қалай қадағалауға болады Шығарылуы: Егер бұрыс сан енгізілсе,берілгендерді енгізу үшін кері оралу (цикл!). Ерекшелігі: Цикл денесі кемінде бір рет орындалады. => шартын тексеруді циклдың соңында орындау керек. (соңғышартты цикл). Соңғышартты цикл – шарттың тексерілуі циклдың Соңғышартты цикл – шарттың тексерілуі циклдың соңында орындалатын цикл түрін айтады. соңында орындалатын цикл түрін айтады.

Соңғышартты цикл: алгоритм
басы

енгізу n
жоқ

цикл денесі

n > 0
иә негізгі алгоритм

ШЫҒУДЫҢ шарты

«типтік процесс» блогі

соңы

Программа
program qq; var n: integer; begin

repeat repeat writeln('Введите положительное writeln(‘Оң сан енгіз'); число'); read(n); ШЫҒУДЫҢ шарты read(n); until n > 0; until n > 0; until n > 0; ... { негізгі алгоритм } end. Ерекшеліктері: цикл денесі кемінде бір рет орындалады until (" болмайынша") сөзінен кейін циклдан ШЫҒУДЫҢ шарты қойылады

Цикл неше рет орындалған
a := 4; b := 6; repeat a := a + > b; a := 4; b := 6; repeat a := a + > b; a := 4; b := 6; repeat a := a + < b; a := 4; b := 6; repeat b := a < b; a := 4; b := 6; repeat a := a + < b; 1; until a b; until a b; until a b; until a 2; until a

3 рет a=7 1 рет a = 10 Мүдіріп қалу 2 рет b=6 Мүдіріп қалу

Тапсырмалар (бұрыс енгізуден қорғау)
"4": Натурал сан енгізіп, сол сандағы цифрлардың
қосындысы 10-ға тең екендігінің дұрыстығын анықтау. Мысал: >= 0 сан енгіз: >= 0 сан енгіз: -234 1233 Оң сан енгізу керек. Жоқ >= 0 сан енгіз: 1234 Иә

"5": Натурал сан енгізіп,қандай цифрлардың бірнеше рет
кездесетіндігін анықтау. Мысал: >= 0 сан енгіз: 2323 2, 3 қайталанады >= 0 сан енгіз: 1234 Қайталану жоқ.

Паскаль тілінде программалау
Тақырып 6. Таңдау операторы

Таңдау операторы

Есеп: Ай нөмірін енгізіп, осы айдағы күндердің санын шығару. Шығарылуы: Айдағы күндер саны 28 күн – 2 (ақпан) 30 күн – 4 (сәуір), 6 (маусым), 9 (қыркүйек), 11 (қараша) 31 күн – 1 (қаңтар), 3 (наурыз), 5 (мамыр), 7 (шілде), 8 (тамыз), 10 (қазан), 12 (желтоқсан) Ерекшелігі: Екі нұсқаның емес, айдың нөміріне сәйкес бірнеше нұсқаның бірін таңдау.

Бұған дейінгі қолданған әдістермен шешуге бола ма

Алгоритм
басы
енгізу M M = 1 жоқ M = 2 жоқ иә иә иә D := 28; D := 31;

таңдау операторы

M = 12 жоқ ешбір нұсқасы сәйкес келген жоқ қате

D := 31; шығару D

соңы

Программа
program qq; var M, D: integer; begin writeln(‘Айдың нөмірін енгіз :'); read ( M );

case M Mof case of 2: begin D := 28; end; 2: begin D := 28; end; 4,6,9,11: begin D := 30; end; 4,6,9,11: begin D := 30; end; 1,3,5,7,8,10,12: D := 31; 1,3,5,7,8,10,12: D := 31; else D := -1; else D := -1; ешбір нұсқасы end; сәйкес келген жоқ end; if D > 0 then writeln(‘Бұл айда ', D, ' күн.') else writeln('Айдың нөмірі дұрыс емес '); end.

Таңдау операторы
Ерекшеліктері:

case -тен кейін айнымалы атауы немесе бүтін типті (integer) арифметикалық өрнек
case i+3 of 1: begin a := b; end; 2: begin a := c; end; end;

немесе символдық типті (char) арифметикалық өрнек
var c: char; ... case c of 'а': writeln(‘Бөкен'); 'б': writeln('Борсық'); else writeln(‘Білмеймін'); end; болуы мүмкін

Таңдау операторы
Ерекшеліктері:

егер бір ғана операторды орындау керек болса, begin мен end сөздерін жазбай кетуге болады case i+3 of
1: a := b; 2: a := c; end;

бірдей екі мәнді қоюға болмайды case i+3 of
1: a := b; 1: a := c; end;

Таңдау операторы
Ерекшеліктері:

бірдей әрекеттер орындалатын кезде қолданылатын мәндерді топтастыру қажет
тізбелеп санап шығу диапазон

аралас

case i of 1: b; 2,4,6: c; 10..15: d; 20,21,25..30: e; else

a := a := a := a :=

Қай жері дұрыс емес
case a of 2: begin a := b; 4: a := c; end; case a of 2..5: a := b; 4: a := c; end; case a+c/2 of 2: a := b; 4: a := c; end; case a of 2: a := b ; 4: a := c end;

case a of 0..2: a := b; 6..3: 3..6: a := c; end; begin case a of 2: a := b; d := end; 0; 4: a := c; end;

Тапсырмалар (бұрыс енгізуден қорғаумен)
"4": Айдың нөмірін енгізе отырып, осы айдағы күндердің
санын және енгізу кезінде жіберілген қателердің санын есептеп шығару. Мысал: Ай нөмірін енгіз: Ай нөмірін енгіз:
-2

Ай нөмірін енгіз:
11 енгіздіңіз. Бұл айда 30 күн бар. Сіз 1 рет қате енгіздіңіз.

2 Бұл айда 28 күн бар. Сіз 0 рет қате

"5": Айдың нөмірі мен күннің нөмірін енгізіп, Жаңа жылға
дейін қалған күндердің санын анықтау. Мысал: Ай н өмірін енгіз:
12 Күнді енгіз:

Паскаль тілінде программалау
Тақырып 7. Графика

Координаталар жүйесі
(0,0) y x (x,y)

X

Y

Түстерді басқару

Cызықтың түсі мен қалыңдығы, нүктелердің түсі: Pen ( 1, 255, 0, 0 );
сызықтың қалыңдығы R(red) 0..255 G(green)
0..255

B(blue)
0..255

Бояудың түсі мен стилі: Brush ( 1, 0, 255, 0 );
0 – өшіру 1 - қосу R G B

Мәтін түсі: TextColor ( 0, 0, 255 );
R G B

Нүктелер, кесінділер және қисық сызықтар
(x, y) (x1, y1) (x2, y2) (x1, y1) (x2, y2) (x3, y3)
Pen (1, 0, 255, 0); Line (x1, y1, x2, y2); Pen (1, MoveTo LineTo LineTo LineTo LineTo 255, (x1, (x2, (x3, (x4, (x5, 0, 0); y1); y2); y3); y4); y5); Pen (1, 0, 0, 255); Point (x, y);

(x5, y5)

(x4, y4)

Фигуралардың ішін бояу
(x1, y1) (x2, y2) (x1, y1)

Pen (1, 0, 0, 255); Brush (1, 255, 255, 0); Rectangle (x1, y1, x2, y2); Pen (1, 255, Brush (1, 0, Ellipse (x1, 0, 0); 255, 0); y1, x2, y2);

(x2, y2) (x, y)
Brush (1, 100, 200, 255); Fill (x, y);

Мәтін
TextColor Brush (1, Font (20,
өлшемі 10 пиксель

(x, y)

С

л 30 а

м! е
о

(0, 0, 255); 255, 255, 0); 30, 600);
қанықтылық: 400 – қалыпты 600 – қалың

айналу бұрышы

MoveTo (x, y); writeln (‘Салем!');

Мысал

program qq; begin (200, 50) Pen(2, 255, 0, 255); Brush(1, 0, 0, 255); (100, 100) Rectangle(100, 100, 300, 200); MoveTo(100, 100); LineTo(200, 50); LineTo(300, 100); Brush(1, 255, 255, 0); (300, 200) Fill(200, 75); Pen(2, 255, 255, 255); Brush(1, 0, 255, 0); Ellipse(150, 100, 250, 200); end.

Тапсырмалар
"4": «Бақа"

"5": «Тәж"

Штрихтер салу
(x1, y1)
N сызық (N=5)

x2 − x1 h= N +1
y1, x2, y2); y1, x1+h, y1, x1+2*h,
x y1, x1+3*h, h: real; x

Rectangle (x1, Line( x1+h, y2); Line( x1+2*h, y2); h (x2, y2) x Line( x1+3*h, y2); h := (x2 – x1) / (N + 1); var x, ... 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;

Түсті қалай өзгертуге болады
(x1, y1) x
(x-1, y1+1)

сұр: R = G = B

Brush ( 1, c, c, c ); Fill ( , ); 255
Өзгеру қадамы c:

(x2, y2)

hc =

N +1

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 (x1, y1) (x3+a, y1)
a = x1 − x2

h=

x3 − x2 N +1

(x2,

Line( x1+h, y1, x1+h-a, y2); y2) (x3, y2) Line( x1+2*h, y1, x1+2*h-a, y2); h Line( x1+3*h, y1, x1+3*h-a, x x-a y2); 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;

Штрихтер салу
(x1, y1) hx
hx = x2 − x1 N +1 hy =

y2 − y1 N +1

hy

(x2, y2)

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, y x y1+3*hy); ... 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;

y

Тапсырмалар

"4": Пернетақтадан штрих сызықтарының санын енгізе отырып фигура салу және оның ішін әр түрлі түстермен бояу.

"5": Пернетақтадан шеңберлердің санын енгізу арқылы шеңбердің суретін салу және оның ішіндегі әр шеңберді әр түрлі түске бояу.

Паскаль тілінде программалау
Тақырып 8. Функциялардың графигі

Функция графиктерін құру
функциясының графигін құру.

100

Есеп: 0 мен 2π интервалы арасындағы y = 3 sin(x) Анализ:
x = π/2 болғанда максималды мән y max = 3 x = 3π/2 болғанда минималды мән y min = -3

Мәселе: функция координалардың математикалық
жүйесінде көрсетілген, ал графикті координаталарын пиксельдермен көрсете отырып компьютер экранында шығару керек.

Координаталардың түрленуі
Y
Координаталардың математикалық жүйесі (0,0)

101

Координаталардың экрандық жүйесі (пиксельдер) a

x
(0,0)

(x,y) y X

b



yэ (xэ,yэ)

k – масштаб (экрандағы
жекелеген кесінді кескінінің ұзындығы)

x э = a + kx y э = b - ky

Программа

102

экранда

графиктің құрылу циклі

program qq; 2π const a = 50; b = 200; k = 50; h – x -тің өзгеру xmin = 0; xmax = қадамы 6.2832; w – ОХ осінің 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 <= xmax do begin y := 3*sin(x); xe := a + round(k*x); ye := b - round(k*y); Point (xe, ye); Кемшілігі x := x + h;

Нүктелерді қалай біріктіруге болады
Алгоритм:
Егер бірінші нүкте болса (xэ,yэ) нүктесіне өту әйтпесе (xэ,yэ) нүктесіне кесінді

103

Программа:

логикалық айнымалы

әрекеттердің нұсқасын таңдау

var first: boolean; ... бастапқы мән begin ... first := True; while x <= xmax do begin ... if first then begin MoveTo(xe, ye); first := False; end else LineTo(xe, ye); ... end; end.

Тапсырмалар
"4": [-3,3] интервалы
арасында y = x2 функциясының графигін құру.

104

"5": Функция графигін құру
(эллипс)

x2 y2 + =1 16 9

105

Паскаль тілінде программалау
Тақырып 9. Процедуралар

Процедуралар
Есеп: Мына фигураны құру:

106

Белгілі әдістермен шешуге бола ма

Ерекшелігі: Үш ұқсас фигура. жалпы: өлшемдері, айналу бұрышы айырмашылықтары: координаталары, түстері

Неше координата белгілеу керек

Процедуралар

107

Процедура – кейбір әрекеттерді орындау үшін қолданылатын көмекші. Қолданылуы: программаның әр жерінде орналасқан бірдей әрекеттерді орындау программаны түсіну оңай болу үшін оны бірнеше қосалқы бөліктерге бөлу
Негізгі есеп
Көмекші есеп1 Көмекші есеп2 Көмекші есеп3

1.1

1.2

1.3

2.1

2.2

2.3

3.1

3.2

3.3

Процедуралар

108

Есепті орындау тәртібі: бірдей немесе ұқсас әрекеттерді ерекшелеп алу (үш фигура) олардың ұқсас жерлері (өлшемі, пішіні, айналу бұрышы) мен айырмашылықтарын (координаталары, түсі) табу айырмашықтарын белгісіз айнымалылар түрінде өрнектеу, осы айнымалылар процедураның параметрлері болады

(x, y-60) 60 (x, y)

тақырыбы

параметрлер

(x+100, y)

100

процедура тұлғасы

procedure Tr( x, y, r, g, b: integer); begin MoveTo(x, y); түс MoveTo(x, y); LineTo(x, y-60); LineTo(x, y-60); LineTo(x+100, y); координаталар LineTo(x+100, y); LineTo(x, y); LineTo(x, g, Brush(1, r, y); b); Brush(1, y-20); Fill(x+20, r, g, b); Fill(x+20, y-20); end;

Программа
60 (100,100) 100

109

формальды параметрлер
program qq; procedure Tr( x, y, r, g, b: integer); begin ... end; 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.

процедураны шақырулар

нақтылы параметрлер

Процедуралар
Ерекшеліктері:

110

барлық процедуралар негізгі программаның үстінде орналасқан процедураның тақырыбында формальды параметрлер жазылады, олар кейде өзгеріп отыратындықтан атаулармен белгіленеді
procedure Tr( x, y, r, g, b: integer);

процедураны шақыру кезінде жақша ішінде нақтылы параметрлер(сандар немесе арифметикалық өрнектер) көрсетіледі
Tr (200, 100, 0, 255, 0);
x y r g b

Процедуралар
Ерекшеліктері:

111

әрбір формалды параметрдің қос нүктеден кейін типі көрсетілуі қажет
procedure A (x: real; y: integer; z: real);

егер типтері бірдей параметрлер бірінен кейін бірі орналасса, олардың арасы үтірмен ажыратылады
procedure A (x, z: real; y, k, l: integer);

процедураның ішіндегі параметрлер айнымалылар секілді қолданылады

Процедуралар
Ерекшеліктері:

112

процедурада қосымша айнымалы ретінде жергілікті(локальді) айнымалыларды пайдалануға болады, басқа процедуралар оған қатынай алмайды
program qq; procedure A(x, procedure A(x, y:y: integer); локальді integer); b: real; var a, b: real; var a, айнымалылар var begina, b: real; begin (x + y)/6; a := a ...:= (x + y)/6; ... end; end; begin ... end.

Параметр-айнымалылар

113

Есеп: екі айнымалы мәндерінің орындарын ауыстыратын процедураны құру. Ерекшеліктері: Процедурада жасалған өзгертулер шақырушы программаға белгілі болуы қажет.
program qq; var x, y: integer; procedure Exchange ( a, b: integer ); var c: integer; begin c := a; a := b; b := c; end; begin x := 1; y := 2; Exchange ( x, y ); writeln ( ’x = ’, x, ’ y = ’, y ); end;

мына процедура параметрлердің көшірмесімен жұмыс істейді

x = 1 y = 2

Параметр-айнымалылар

114

параметрлер өзгере алады

Қолданылуы: процедура(және функция) осындай әдіс арқылы бірнеше мән бере алады. Шақыртудың тыйым салынған нұсқалары Exchange ( 2, 3 ); { сандар }

var procedure Exchange ( integer ); var c: integer; begin c := a; a := b; b := c; end;

a, b:

Exchange ( x+z, y+2 ); { өрнектер }

Тапсырмалар

115

"4": Процедураларды пайдалана отырып, мына фигураны құрастыру.
Тең қабырғалы үшбұрыш a a a

0,866 a

"5": Процедураларды пайдалана отырып, мына фигураны құрастыру.

116

Паскаль тілінде программалау
Тақырып 10. Рекурсия

Рекурсивті объектілер
Мысалдар:

117

Рекурсияланған сурет:

Факториал:

1, егер N = 1,  N!=  егер N > 1.  N ⋅ ( N − 1)!, 1!= 1, 2!= 2 ⋅1!= 2 ⋅1, 3!= 3 ⋅ 2!= 3 ⋅ 2 ⋅1

4!= 4 ⋅ 3!= 4 ⋅ 3 ⋅ 2 ⋅1 N != N ⋅ ( N − 1) ⋅ ⋅ 2 ⋅1

Рекурсивті объект деп - бір объект немесе дәл осындай бірнеше объект арқылы анықталатын объектіні айтады.

Пифагор ағашы

118

N деңгейлі Пифагор ағашы – бұл ағаштың діңгегі мен осы діңгектен симметриялы түрде өсіп шыққан N-деңгейлі екі Пифагор ағашы, бұл ағаштардың бағанының ұзындығы 2 есе кем және олардың арасындағы бұрыш 90o-қа тең.

6 деңгей:

Бұның рекурсивті фигура екенін қалай дәлелдеуге болады

Пифагор ағашы
Ерекшеліктері:
қашан тоқтау керек

119

Қалған деңгейлердің саны нөлге тең болғанда!

ағаштардың иілу бұрышы әр түрлі α+45o (x1, y1) L α (x0, y0) α-45o x1 = x0 + L cos(α) y1 = y0 – L sin(α)
Еншілес ағаштардың иілу бұрышы

α + π/4 α – π/4

Процедура

120 α бұрышы баған ұзындығы

procedure Pifagor(x0, y0, a, L: real; N: integer); const k = 0.6; { ұзындықтың өзгеруі } var x1, y1: real; { жергілікті айнымалылар } егер N=0 болса, аяқтау 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; шақыратын процедураны айтады

шақыратын процедураны айтады

Программа

121

program qq; procedure Pifagor(x0, y0, a, L: real; N: integer); ... баған ұзындығы α бұрышы end; begin Pifagor (250, 400, pi/2, 150, 8); end;
x0 y0

деңгейлер саны

Ағашты 30o оңға қалай еңкейтуге болады Pifagor (250, 400, 2*pi/3, 150, 8);

Задания
құрастыру:

122

"4": Рекурсивті процедураны қолдана отырып, мына фигураны

"5": Рекурсивті процедураны қолдана отырып, мына фигураларды
құрастыру:

123

Паскаль тілінде программалау
Тақырып 11. Анимация

Анимация
Анимация (ағылш. animation) – экрандағы кескінге жан бітіру. Есеп: 400х400 пиксельді көк квадраттың ішімен

124

20х20 пиксельді сары квадрат солдан оңға қарай жылжып келеді. Программа өз жұмысын Esc пернесін басқанда немесе сары квадрат көк квадраттың оң жақ жетіне жеткен кезде тоқтатады. Проблема: объектінің экранда қозғалуын қалай кескіндеуге болады Қосымша: объектінің қозғалысы (x,y) координаталарымен белгіленеді Анимация қағидасы: 1. объектіні (x,y) нүктесінде саламыз 2. бірнеше миллисекундқа кідіру 3. объектіні өшіреміз 4. (x,y) координаталарын өзгертеміз 5. 1-қадамға көшеміз

«Пернелерді шертуді» қалай іске асыруға болады
Оқиға деп қандай да бір объектінің қалпында өзгерістің болуын немесе пайдаланушының әрекетін айтады. (пернені басу, тышқанды шерту). IsEvent – қолданушы тарапынан қандай да бір әрекеттің болған-болмағандығын анықтайтын логикалық функция. Event – нақты қандай оқиғаның болғандығын анықтайтын процедура.

125

var k, x, y: if IsEvent then begin Event(k, x, y); integer; if k = 1 then writeln(‘Коды бар перне ', x) else { k = 2 } writeln(‘Тышқан: x=', x, ' y=', y); end;

Esc пернесін басып циклдан қалай шығуға болады
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; егер коды 27 (Esc) болатын перне ... басылса, онда стоп until stop; end;
егер тоқтау қажет болса, True

126

Процедура (сурет салу және өшіру)
(x, y)

127

(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;

Толық программасы

128

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 Esc if IsEvent then begin пернесімен ... шығу end; Draw(x, y, True); 10 мс күтеміз Delay(10); Draw(x, y, False); шекараға тақалған x := x + 1; кезде шығу if x >= 400-20 then stop := true; until stop; end.

Тапсырмалар
"4":
Екі квадрат бір біріне қарама-қарсы бағытта қозғалады:

129

"5":

Екі квадрат бір біріне қарама-қарсы бағытта қозғалады және көк квадраттың қабырғасына соқтығысып кері бағытта жылжиды:

Пернелермен басқару

130

Есеп: көк квадраттың ішінде орналасқан сары квадрат бағыттаушы пернелермен басқарылатындай болуы керек. Пернелердің коды: солға – 37 жоғары – 38 Esc – 27 оңға – 39 төмен – 40 Проблема: қозғалыс бағытын қалай өзгертуге болады Шығарылуы:

if {оқиға болды} then begin IsEvent if {перне басулы} i); Event ( k, code, then begin if {перненің кодын алу - code} k = 1 then begin if code = case code of 37 then x := x – 1; if code = 38 then 37: x := x – 1; 38: yy := yy –– 1; := 1; if code = 39 then 39: x := x + 1; 40: xy := xy ++ 1; := 1; if code = True; 27: stop := 40 then y := y + 1; end; if code = 27 then stop := True; end; end;

егер перне басылған болса,

Программасы

131

program qq; процедура var x, y, k, code, i: integer; stop: boolean; procedure Draw(x,y: integer; flag: Boolean); begin ... end; begin негізгі цикл ... repeat Draw(x, y, True); Delay(20); Draw(x, y, False); оқиғаларды if IsEvent then begin өңдеу ... end; until stop; Кемшілігі end.

Жыпылықтауды қалай кетіруге болады
Проблема: ешбір перне басылмағанның өзінде де квадрат әр 20 мс сайын басқа түске боялып тұрады(жыпылықтау!) Бізге қажеттісі: ешқандай оқиға болмаса квадратты басқа түстерге боямау (жыпылықтатпау) Шығарылуы: квадратты бояп тастап, оқиғаны күту Жаңа проблема: оқиғаны қалай күтеміз Жаңа проблеманың шығарылуы: бос цикл «оқиға болмайынша ештеме істеме":
while not IsEvent do;

132

Программасы

133

program qq; var x, y, k, code, i: integer; процедура stop: boolean; procedure Draw(x,y: integer; flag: Boolean); begin ... end; begin квадраттың суретін саламыз ... repeat оқиғаны күтеміз Draw(x, y, True); while not IsEvent do; while not IsEvent do; енді өшіруге болады Draw(x, y, False); Event(k, code, i); ... until stop; end.

Нені жақсартуға болады

Тапсырмалар
"4": Квадрат бағыттауыш пернелерді басқан бағытта жылжып отырады, алайда көк квадраттың шекарасынан асып кете алмайды:

134

"5": Квадрат үздіксіз қозғалып отырады, бағыттауыш пернелер басылған кезде өз бағытын өзгертеді және көк квадраттың қабырғаларына соқтығысып кері жылжып отырады:

Айналу
Есеп: Жердің Күнді айналу моделін бейнелеу.

135

Проблема: шеңбер бойымен айналу, координаталарды қалай өзгертіп отыруға болады Шығарылуы: тәуелсіз айнымалы ретінде α –ның айналу бұрышын қолдану (циклде өзгерту) (x, y) L α x = x0 + L cos(α) y = y0 – L sin(α)

(x0, y0)

Процедура

136 сурет салу (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)

Тұрақтылар мен айнымалылар

137

program qq; const rSun = 60; { Күннің радиусы } L = 150; { Жер орбитасының радиусы } x0 = 200; { Күн центрінің координаталары } y0 = 200; var x, y, { Жердің координаталары } k, code, i: integer; { Event үшін } a, ha: real; { айналу бұрышы, қадам } procedure Draw(x, y: integer; flag: Boolean); stop: boolean; { программаны тоқтату begin белгісі } ... end;

begin ...

Негізгі программа

138

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); o a := 0; ha := 1*pi/180; { бастапқы бұрыш , 100 мс-та 1 o қадам} stop := false; Pen(0,0,0,0); { контурларды өшіріп тастаймыз } жаңа координаталар repeat x := round(x0 + L*cos(a)); 100 мс y := round(y0 - L*sin(a));күтеміз Draw(x, y, True); if Delay(100); IsEvent then begin Draw(x, code, i); Event(k, y, False); if (k = 1) and (code = 27) then stop := true; end;

ha бұрышына бұрылу

a := a + ha;

Тапсырмалар
"4": Күнді айналып жүрген екі
планетаның моделін бейнелеу, планеталар бірбіріне қарама-қарсы бағытта қозғалатын болсын:

139

"5": Күн-Жер-Ай жүйесінің
моделін бейнелеу:

140

Паскаль тілінде программалау
Тақырып 12. Кездейсоқ сандар

Кездейсоқ сандар
Кездейсоқ көріністер: барлық жерде тиынды лақтыру ("орел" немесе "решка") қардың түсуі броундық қозғалыс телефон байланысында болатын ақаулар радиоэфирдің шуы

141

Кездейсоқ сандар – бұған дейінгі сандардың ретін біліп отырсақ та, келесі санның қандай екені белгісіз болатын сандардың тізбегін айтады. Проблема: компьютерде осыны

Пән: Информатика


Пәндер
Көмек / Помощь
Арайлым
Біз міндетті түрде жауап береміз!
Мы обязательно ответим!
Жіберу / Отправить


Зарабатывайте вместе с нами

Рахмет!
Хабарлама жіберілді. / Сообщение отправлено.

Сіз үшін аптасына 5 күн жұмыс істейміз.
Жұмыс уақыты 09:00 - 18:00

Мы работаем для Вас 5 дней в неделю.
Время работы 09:00 - 18:00

Email: info@stud.kz

Phone: 777 614 50 20
Жабу / Закрыть

Көмек / Помощь