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


@@@@@@@@@* Паскаль тілінде программалау КіріспеТармақталуКүрделі шарттарЦиклдерШартты циклдерТаңдау операторы ГрафикаФункциялардың графигіПроцедураларРекурсияАнимацияКездейсоқ сандарФункциялар * Паскаль тілінде программалау Тақырып 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 Вася “PesBarbos” TU154 [QuQu] _ABBA A+B * Тұрақтылар 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;var a, b: integer;begin a := 5; b := a + 2; a := (a + 2)*(b – 3);end. a ? 5 5 b ? 5+2 7 a 5 7*4 28 Мысал: * Меншіктеу операторы Жалпы құрылымы: Арифметикалық өрнектің құрамындатұрақтыларайнымалы атауларыарифметикалық амалдар белгілері: + - * / 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солдан оңға қарай қосу және алу z := (5*a*c+3*(c-d))/a*(b-c)/ b; x:=(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a)); 2 3 5 4 1 7 8 6 9 2 6 3 4 7 5 1 12 8 11 10 9 * Екі санды қосу Есеп. Екі бүтін санды қосып, қосындысын экранда шығару. Шығарылуы: 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 30 a 25 b 30 a 25 b 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, '<' ); 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< барлық символдар саны барлық символдар саны бөлшек бөлігіндегі символдар саны * Толық шығарылуы 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 бұны компьютер шығарады бұны программа жазушы өзі енгізеді * Сызықтық алгоритмның блок-схемасы басы соңы c := a + b; енгізу 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. Блок-схема басы max:= a; енгізу a,b шығару max a > b? max:= b; соңы иә жоқ Тармақталудың толымды түрі «таңдау» блогі Егер a = b? ? * Нұсқа 1. Программа max := a; max := b; шартты оператордың толымды түрі program qq;var a, b, max: integer;begin writeln(‘Екі бүтін сан енгіз'); read ( a, b ); if a > b then begin end else begin end; writeln (‘Екі санның үлкені', max);end. * Шартты оператор if <шарт> then begin {егер шарт орындалса, не істеу керек} end else begin {егер шарт орындалмаса, не істеу керек} end; Ерекшеліктері: else-тің алдында нүктелі үтір болмауы керекекінші бөліктің (else …) болмауы да мүмкін (толымсыз түрі)егер блокта бір ғана оператор болса, begin мен end сөздерін жазбауға да болады * Қай жері дұрыс емес? if a > b then begin a := b; end else b := a; end; if a > b then begin a := b; else begin b := a; end; 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; begin end begin end * Нұсқа 2. Блок-схема тармақталудың толымсыз түрі басы max:= a; енгізу a,b шығару max max:= b; соңы иә жоқ b > a? * Нұсқа 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; if ??? then ??? writeln ('Екі санның үлкені', max);end. max := a; a > b * Қай жері дұрыс емес? if a > b then begin a := b; else b := a; if a > b then begin a := b; end; else b := a; if a > b then else begin b := a; end; if a > b then a := b; else b := a; end; a := b end a := b if b >= a then b := a; * Тапсырмалар "4": Үш сан енгізіп олардың үлкенін табу. Мысал: Үш сан енгіз:4 15 9Ең үлкен сан 15"5": Бес сан енгізіп олардың үлкенін табу. Мысал: Бес сан енгіз:4 15 9 56 4Ең үлкен сан 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 – арифметикалық НЕМЕСЕ (екі шарттың екеуін емес, біреуін ғана орындау)Қарапайым шарттар (қатынастар) < <= > >= = <> тең тең емес * Күрделі шарттар Орындау тәртібіжақша ішіндегі өрнектерnotandor, 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 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": Бүтін сан енгізіп, ондағы цифрлардың қосындысын табу. Мысал:Бүтін сан енгіз:12341234 санындағы цифрлардың қосындысы 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": Натурал сан енгізіп,қандай цифрлардың бірнеше рет кездесетіндігін анықтау. Мысал:>= 0 сан енгіз: >= 0 сан енгіз:2323 1234 2, 3 қайталанады Қайталану жоқ. * Паскаль тілінде программалау Тақырып 6. Таңдау операторы * Таңдау операторы Есеп: Ай нөмірін енгізіп, осы айдағы күндердің санын шығару. Шығарылуы: Айдағы күндер саны28 күн – 2 (ақпан)30 күн – 4 (сәуір), 6 (маусым), 9 (қыркүйек), 11 (қараша)31 күн – 1 (қаңтар), 3 (наурыз), 5 (мамыр), 7 (шілде), 8 (тамыз), 10 (қазан), 12 (желтоқсан)Ерекшелігі: Екі нұсқаның емес, айдың нөміріне сәйкес бірнеше нұсқаның бірін таңдау. Бұған дейінгі қолданған әдістермен шешуге бола ма? ? * Алгоритм басы соңы таңдау операторы ешбір нұсқасы сәйкес келген жоқ енгізу M иә жоқ M = 1? D := 31; жоқ M = 2? D := 28; иә жоқ M = 12? D := 31; иә шығару D қате * Программа 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; ешбір нұсқасы сәйкес келген жоқ * Таңдау операторы Ерекшеліктері: case-тен кейін айнымалы атауы немесе бүтін типті (integer) арифметикалық өрнек немесе символдық типті (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; болуы мүмкін * Таңдау операторы Ерекшеліктері:егер бір ғана операторды орындау керек болса, begin мен end сөздерін жазбай кетуге боладыбірдей екі мәнді қоюға болмайды case i+3 of 1: a := b; 1: a := c; end; case i+3 of 1: a := b; 2: a := c; end; * Таңдау операторы Ерекшеліктері:бірдей әрекеттер орындалатын кезде қолданылатын мәндерді топтастыру қажет case i of 1: a := b; 2,4,6: a := c; 10..15: a := d; 20,21,25..30: a := e; else writeln(‘Қате'); end; тізбелеп санап шығу диапазон аралас * Қай жері дұрыс емес? 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: case a+c/2 of 2: a := b; 4: a := c; end; case a of 2: a := b; d := 0; 4: a := c; end; begin end; * Тапсырмалар (бұрыс енгізуден қорғаумен) "4": Айдың нөмірін енгізе отырып, осы айдағы күндердің санын және енгізу кезінде жіберілген қателердің санын есептеп шығару. Мысал: Ай нөмірін енгіз: Ай нөмірін енгіз: -2 2 Ай нөмірін енгіз: Бұл айда 28 күн бар. 11 Сіз 0 рет қате енгіздіңіз. Бұл айда 30 күн бар. Сіз 1 рет қате енгіздіңіз. "5": Айдың нөмірі мен күннің нөмірін енгізіп, Жаңа жылға дейін қалған күндердің санын анықтау. Мысал:Ай нөмірін енгіз:12Күнді енгіз:25 Жаңа жылға дейін 6 күн бар. * Паскаль тілінде программалау Тақырып 7. Графика * Координаталар жүйесі (0,0) (x,y) X Y x y * Түстерді басқару Cызықтың түсі мен қалыңдығы, нүктелердің түсі: Pen ( 1, 255, 0, 0 );Бояудың түсі мен стилі: Brush ( 1, 0, 255, 0 );Мәтін түсі: TextColor ( 0, 0, 255 ); сызықтың қалыңдығы R(red) 0..255 G(green) 0..255 B(blue) 0..255 0 – өшіру1 - қосу R G B R G B * Нүктелер, кесінділер және қисық сызықтар (x1, y1) (x2, y2) Pen (1, 0, 255, 0); Line (x1, y1, x2, y2); (x, y) Pen (1, 0, 0, 255); Point (x, y); (x1, y1) (x2, y2) (x3, y3) (x4, y4) (x5, y5) Pen (1, 255, 0, 0); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5); * Фигуралардың ішін бояу (x1, y1) (x2, y2) Pen (1, 0, 0, 255); Brush (1, 255, 255, 0); Rectangle (x1, y1, x2, y2); (x1, y1) (x2, y2) Pen (1, 255, 0, 0); Brush (1, 0, 255, 0); Ellipse (x1, y1, x2, y2); Brush (1, 100, 200, 255); Fill (x, y); (x, y) * Мәтін TextColor (0, 0, 255);Brush (1, 255, 255, 0);Font (20, 30, 600);MoveTo (x, y);writeln (‘Салем!'); Салем! (x, y) өлшемі10 пиксель айналу бұрышы қанықтылық: 400 – қалыпты 600 – қалың 30о * Мысал (200, 50) (100, 100) (300, 200) program qq; begin 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. * Тапсырмалар "4": «Бақа" "5": «Тәж" * Штрихтер салу (x1, y1) (x2, y2) N сызық (N=5) h 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 := (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 жақын орналасқан бүтін санға дейін дөңгелектеу x * Түсті қалай өзгертуге болады? (x1, y1) (x2, y2) Brush ( 1, c, c, c ); Fill ( ???, ??? ); сұр: R = G = B Өзгеру қадамы c: x (x-1, y1+1) var c, hc: integer; 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; * Штрихтер салу (x1, y1) (x2, y2) (x3, y2) a h (x3+a, y1) 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); ... 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 x-a * Штрихтер салу (x1, y1) (x2, y2) hx hy y x y 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); ... 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; * Тапсырмалар "4": Пернетақтадан штрих сызықтарының санын енгізе отырып фигура салу және оның ішін әр түрлі түстермен бояу. "5": Пернетақтадан шеңберлердің санын енгізу арқылы шеңбердің суретін салу және оның ішіндегі әр шеңберді әр түрлі түске бояу. * Паскаль тілінде программалау Тақырып 8. Функциялардың графигі * Функция графиктерін құру Есеп: 0 мен 2π интервалы арасындағы y = 3 sin(x) функциясының графигін құру.Анализ: x = π/2 болғанда максималды мән ymax = 3x = 3π/2 болғанда минималды мән ymin = -3Мәселе: функция координалардың математикалық жүйесінде көрсетілген, ал графикті координаталарын пиксельдермен көрсете отырып компьютер экранында шығару керек. * Координаталардың түрленуі (x,y) X Y x y Координаталардың математикалық жүйесі Координаталардың экрандық жүйесі (пиксельдер) (xэ,yэ) xэ yэ (0,0) (0,0) a b k – масштаб (экрандағы жекелеген кесінді кескінінің ұзындығы) xэ = a + kxyэ = b - ky * Программа 2π h – x-тің өзгеру қадамы w – ОХ осінің ұзындығы(пиксельдер саны) экранда координаталар осі графиктің құрылу циклі 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 <= xmax do begin y := 3*sin(x); xe := a + round(k*x); ye := b - round(k*y); Point (xe, ye); x := x + h; end; end. Кемшілігі ? ? * Нүктелерді қалай біріктіруге болады? Алгоритм: Егер бірінші нүкте болса (xэ,yэ) нүктесіне өтуәйтпесе (xэ,yэ) нүктесіне кесінді Программа: бастапқы мән әрекеттердің нұсқасын таңдау логикалық айнымалы 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 функциясының графигін құру. "5": Функция графигін құру (эллипс) * Паскаль тілінде программалау Тақырып 9. Процедуралар * Процедуралар Есеп: Мына фигураны құру:Ерекшелігі: Үш ұқсас фигура.жалпы: өлшемдері, айналу бұрышыайырмашылықтары: координаталары, түстері Белгілі әдістермен шешуге бола ма? ? Неше координата белгілеу керек? ? * Процедуралар Процедура – кейбір әрекеттерді орындау үшін қолданылатын көмекші.Қолданылуы:программаның әр жерінде орналасқан бірдей әрекеттерді орындаупрограмманы түсіну оңай болу үшін оны бірнеше қосалқы бөліктерге бөлу Көмекші есеп1 Көмекші есеп2 Көмекші есеп3 1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3 Негізгі есеп * Процедуралар Есепті орындау тәртібі:бірдей немесе ұқсас әрекеттерді ерекшелеп алу (үш фигура)олардың ұқсас жерлері (өлшемі, пішіні, айналу бұрышы) мен айырмашылықтарын (координаталары, түсі) табуайырмашықтарын белгісіз айнымалылар түрінде өрнектеу, осы айнымалылар процедураның параметрлері болады (x, y) 100 60 (x+100, y) (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; тақырыбы MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); Brush(1, r, g, b); Fill(x+20, y-20); процедура тұлғасы координаталар түс параметрлер * Программа 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. (100,100) 100 60 процедура нақтылы параметрлер процедураны шақырулар procedure Tr( x, y, r, g, b: integer); begin ... end; формальды параметрлер * Процедуралар Ерекшеліктері:барлық процедуралар негізгі программаның үстінде орналасқанпроцедураның тақырыбында формальды параметрлер жазылады, олар кейде өзгеріп отыратындықтан атаулармен белгіленедіпроцедураны шақыру кезінде жақша ішінде нақтылы параметрлер(сандар немесе арифметикалық өрнектер) көрсетіледі procedure Tr( x, y, r, g, b: integer); Tr (200, 100, 0, 255, 0); x y r g b * Процедуралар Ерекшеліктері:әрбір формалды параметрдің қос нүктеден кейін типі көрсетілуі қажетегер типтері бірдей параметрлер бірінен кейін бірі орналасса, олардың арасы үтірмен ажыратыладыпроцедураның ішіндегі параметрлер айнымалылар секілді қолданылады procedure A (x: real; y: integer; z: real); procedure A (x, z: real; y, k, l: integer); * Процедуралар Ерекшеліктері:процедурада қосымша айнымалы ретінде жергілікті(локальді) айнымалыларды пайдалануға болады, басқа процедуралар оған қатынай алмайды 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; * Параметр-айнымалылар Есеп: екі айнымалы мәндерінің орындарын ауыстыратын процедураны құру.Ерекшеліктері: Процедурада жасалған өзгертулер шақырушы программаға белгілі болуы қажет. 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 * Параметр-айнымалылар Қолданылуы: процедура(және функция) осындай әдіс арқылы бірнеше мән бере алады.Шақыртудың тыйым салынған нұсқаларыExchange ( 2, 3 ); { сандар }Exchange ( x+z, y+2 ); { өрнектер } procedure Exchange ( a, b: integer ); var c: integer; begin c := a; a := b; b := c; end; var параметрлер өзгере алады * Тапсырмалар "4": Процедураларды пайдалана отырып, мына фигураны құрастыру. "5": Процедураларды пайдалана отырып, мына фигураны құрастыру. a a a 0,866∙a Тең қабырғалы үшбұрыш * Паскаль тілінде программалау Тақырып 10. Рекурсия * Рекурсивті объектілер Рекурсивті объект деп - бір объект немесе дәл осындай бірнеше объект арқылы анықталатын объектіні айтады. Мысалдар: Факториал: егер егер Рекурсияланған сурет: * Пифагор ағашы N деңгейлі Пифагор ағашы – бұл ағаштың діңгегі мен осы діңгектен симметриялы түрде өсіп шыққан N-деңгейлі екі Пифагор ағашы, бұл ағаштардың бағанының ұзындығы 2 есе кем және олардың арасындағы бұрыш 90o-қа тең. 6 деңгей: Бұның рекурсивті фигура екенін қалай дәлелдеуге болады? ? * Пифагор ағашы Ерекшеліктері:қашан тоқтау керек?ағаштардың иілу бұрышы әр түрлі Қалған деңгейлердің саны нөлге тең болғанда! (x1, y1) (x0, y0) α α+45o α-45o L x1 = x0 + L·cos(α)y1 = y0 – L·sin(α) Еншілес ағаштардың иілу бұрышы α + π/4α – π/4 * Процедура α бұрышы баған ұзындығы 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 болса, аяқтау Рекурсивті процедура деп өзін өзі шақыратын процедураны айтады * Программа 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); * "4": Рекурсивті процедураны қолдана отырып, мына фигураны құрастыру: "5": Рекурсивті процедураны қолдана отырып, мына фигураларды құрастыру: Задания * Паскаль тілінде программалау Тақырып 11. Анимация * Анимация Анимация (ағылш. animation) – экрандағы кескінге жан бітіру.Есеп: 400х400 пиксельді көк квадраттың ішімен 20х20 пиксельді сары квадрат солдан оңға қарай жылжып келеді. Программа өз жұмысын Esc пернесін басқанда немесе сары квадрат көк квадраттың оң жақ жетіне жеткен кезде тоқтатады. Проблема: объектінің экранда қозғалуын қалай кескіндеуге болады?Қосымша: объектінің қозғалысы (x,y) координаталарымен белгіленедіАнимация қағидасы:объектіні (x,y) нүктесінде саламызбірнеше миллисекундқа кідіруобъектіні өшіреміз(x,y) координаталарын өзгертеміз 1-қадамға көшеміз ఈ⑐(ఀчಢం਀ѓNǯЂ聠࣎їƿǿ̿쎀οНомер слайда 3ᅀ ĬР༈ഀ棰鼀ЏЀꀀȏ⨀ꄀ᠏ȀਈȀ܀ȀȀက�ЏꨀਏȀĀꘀఏ퐀퀁ဃ༅Ѐ绰䈀ਁࣰ̀Ȍ쌀଀困缀蔁Ȁ蜀Ā뼀ЀЀ缀Ā뼀ᄀ쀀耀쬀퐁”＀᠁᠀㼀ࠃࠀ耀ໃ뼀Ȁ䰀椀渀攀 ㈀ကࣰ섀༁Ѐ쳰ꈀ਌ࣰЀȌ茀଀䛰缀老䀀흵뼈ЀЀ뼀ᄀ＀᠀㼀ࠀ耀ᛃ뼀Ȁ吀攀砀琀 䈀漀砀 ㌀ကࣰⴀข똏嘐༃ഀ困鼀ЏЀꄀᰏĀĀĀ䌀ĀĀ਀ꨀਏĀĀꘀఏ퐀퀁ဃ༅Ѐヰꈀ਌ࣰԀȌ茀଀䛰缀老䀀흸뼈؀؀뼀ᄀ＀᠀㼀ࠀ耀ᛃ뼀Ȁ吀攀砀琀 䈀漀砀 㐀ကࣰ眀豈묀ꬕ༁ഀ뫰鼀ЏЀꀀ帏꬀ἀ㔄䀄㴄㔄㬄㔄䀄㐄嘄 䠀㔄䀄䈄䌄㐄嘄묄 鬀〄㬄〄㤄 嘀䄄㨄㔄  䄄䬄䀄䌄錄〄 ㄀㸄㬄〄㐄䬄㼄ꄀᨏ (㈀ ĀȀᨀꨀਏ Āꘀఏ퐀퀁ဃ༅Ѐ෰ꈀ਌ࣰ؀Ȍ茀଀䛰缀老䀀흻뼈؀؀뼀ᄀ＀᠀㼀ࠀ耀ᛃ뼀Ȁ吀攀砀琀 䈀漀砀 㔀牟汥⽳爮汥汳쇏썪ర惻惯彴왐펈ꅛ틗耾閱Ⳅ貶뉤穧읪銎㿸썉⟡暭턣�껂쇫戜⶞⽜럇』嵚渎䳥渖炤弘號괳뚮⺐ꢱ䩩ୖ굋닆蜡嗜㠾㥌媆肚ಧ굷⤜⽵娝࿎瘍퓴縷ﮱᩲ淖㊵꭯㢲컘ꕙ龖ꅪuш儢ﺟ槇�ﲯ뵅ച�놻舚隨쵠挖ꂢଡ�બ＀Ͽ倀ŋⴂ᐀؀ࠀ℀�蔀ğ牟汥⽳爮汥偳ŋⴂ᐀؀ࠀ℀洀ꦿ�︀ༀ܀搀獲搯睯牮癥砮汭䭐؅·̎ȣгᖛࣶ,န$࿱܀ЀԂ군模谠㹟盀쾀쬦䷟갊팆茒晕ꊢ䱾놖郕辷ホ�묎㻡躣�⫂ꙡ煢㳮а쪌凓풮셿뎂짓늙Ⅼ郔炏Ἕ돗೛捃ﴪ쇜ዘ舞᭏䂚먠뷈䲴ץ텬⮦俲亳歔㫁遹㣯㢔䮛백࢒밤沨㓌깴턩ﲩ﹞Ḛ犉厕쒺�婜뉣癐㾅剓ꮠ뚨Иᄶ倦�읚䥀䯵�笉䔛蘆玪퍝兖ꫴ쇋䈉쩨Ʉ杴늦∹藚牜餾䒍⮑轤ㇾ좲塌茧藷ꔾ竘Ꟶᅉ忣Ợ⑕ຮ끲촂鿀�쨲瀍�膣髞뚕厳휏周餝�宲潜哝䁯셐殶젭⒫㕥৉․漼夒鲓⧄絫鲞鍘ᒛ賅뷗梄ퟋᬕ킨赊ꐚ蒂婖䕔廐苶㞀涎仙簋軽삝ག煛䮁끼顦磱켼㳣蜈᪙㋛Σ੊ﲭ�貨삮䩱砤媡齳ⶒ趨魐嚼ߌ퇿ꐓⵒଌ㎂本벞䒃㽓騌麌䮒㆏㸯ỻ烝㿽珫£ퟣ坚䓵ퟚ庪东ᓢ熏幒엑櫃糦휔颼뛧콉㛤栄�늒䒮ᆬ貈觢鸥ꌸᛞ뢔䙃ḟ峰ᕤ햫풸唙ָ붚┕�䨢钔拜ܩॱ猃㑲ج�⁖臅賿⡪ᒹ⌊໠쨢줓䌁�螒閄ઞ鬩䠳ꬕꖥ蝘ꌟ뛂ꁘᄆᮿ炴玸帯鰔揹檙囋ょᲭį篱௃顠䓝囗䭰┇硆鶶╂㻤쎣䩇ᛘ㵸긢犐嬸귺㵒ℎ䠑ﮙ恤춮㛐섑沱℆⫡ꗡ燎뱋닊蝷諱嵘鐁箭럳ꠎϛ䵵男龯笺溩﫷꼭嚺ྺ坊풁튵䁽囂♂鱱㸮졐䰧⎠ꤪੜ�潺ⓒ腱腁껻圍⭨嬂ꣳ䷚뚲臰롄঒뭲䤟䈅晅岆咒杠뚑ァ芏䝼豊亜㖨酗ᄙ⒈剛䲂ᗴୖ除莏メ䭰ᯫ軯羗皺厺ⴻ鞗ꈄꉩ꓄㝾눽荴߿罇＀Ͽ倀͋ᐄ؀ࠀ℀舀躘�︀ༀ搀獲搯睯牮癥砮汭轄䭍㄃䔔苷⇿센춝唸挩ꋓ핢�鐪黮鯉㨏᥹䲒팻潟ꅰ쯋鲽駋ܯ諛賈㣐灖줽၀杫긚簔깽暮䈠㙄㫘Ԧԣ⹘쿎壦眘㗤㘝኱숉䂡甅嶌攡㗐ౙ휓꜑璮拞테퉗㱸렦敭斞퉷썢ꇩ軆檞﯒潍氕㱗픽旮퇷霾ỻ�휩꥚诋䐞↤迾篍㣹翶⿥췪젨㞧妷ꈎᵼ綿홣∘չぉ⛩違ᾋ＀Ͽ倀ŋⴂ᐀؀ࠀ℀娀ᇣ﹦銢챬궻Ћ猠溛譼ﱆ㐓螄폖ﬠ�킆늨뺠�炤齀寺喛⊕弪讥㐴ף虢ᾜ絯溏ﻰ✾먑禌ퟡ⛮㐵袞�糉㒄譎ᠧ爢∉䦁ᢰ붕갟ǰᾪܴ鉼㒗䋙ĸﳥ쪻몹粳뿹꨿맜吘誠﷤淰埌罷＀Ͽ倀͋ᐄ؀ࠀ℀紀ಸ�︀ༀ搀獲搯睯牮癥砮汭轄䫁ツ䔔苷ჿ鱆婤ꐝ晎䄐ப北셇毝꛳펩┤涉⸍祴鞹㥳穬鈶鴏ኳ஖谁杔ज़럻总ꈡ�䬻丒怔㦻嬿ꅣ擜㑷녖॥䍢ኁ豴셃桹ᤴଌ逷�私ㆃ�䩱퍰䳳ᖈ�熠䞠쵍缾ሶ븴練홳噥絝旴뾝뗤鞔㷃䢰ﱳ缟씝櫫埿ꋾ閞Ⲅ릿㤕䎰꩹Ᵹᡶ礢䤉唦鯠￿䭐ȁ-!昑юǢ瘀牡欠‬ⱸ礠›湩整敧㭲ྡCྪЉྦрǔːϰԐఈ * «Пернелерді шертуді» қалай іске асыруға болады? Оқиға деп қандай да бір объектінің қалпында өзгерістің болуын немесе пайдаланушының әрекетін айтады. (пернені басу, тышқанды шерту).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; * 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; ... until stop; end; егер бір нәрсе бола қалса... қандай оқиға болды? егер коды 27 (Esc) болатын перне басылса, онда стоп егер тоқтау қажет болса, True циклді іске қосу * Процедура (сурет салу және өшіру) 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; (x, y) (x+20, y+20) Идеяларбір процедура суретті салады және өшіредіөшіру = фонның түсімен бояуквадраттың шекарасын өшіріп тастау (негізгі программада) сурет салу (True) немесе салмау (False)? сурет саламыз: қылқаламның түсі – сары суретті өшіреміз: қылқаламның түсі – көк тек қана құю! * Толық программасы 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 мс күтеміз шекараны өшіріп тастау * "4": Екі квадрат бір біріне қарама-қарсы бағытта қозғалады: "5": Екі квадрат бір біріне қарама-қарсы бағытта қозғалады және көк квадраттың қабырғасына соқтығысып кері бағытта жылжиды: Тапсырмалар * Пернелермен басқару Есеп: көк квадраттың ішінде орналасқан сары квадрат бағыттаушы пернелермен басқарылатындай болуы керек. Пернелердің коды:солға – 37жоғары – 38Esc – 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; егер перне басылған болса, … * Программасы 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; Кемшілігі? ? процедура негізгі цикл оқиғаларды өңдеу * Жыпылықтауды қалай кетіруге болады? Проблема: ешбір перне басылмағанның өзінде де квадрат әр 20 мс сайын басқа түске боялып тұрады(жыпылықтау!)Бізге қажеттісі: ешқандай оқиға болмаса квадратты басқа түстерге боямау (жыпылықтатпау)Шығарылуы: квадратты бояп тастап, оқиғаны күтуЖаңа проблема: оқиғаны қалай күтеміз ?Жаңа проблеманың шығарылуы: бос цикл «оқиға болмайынша ештеме істеме": while not IsEvent do; * Программасы 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; Draw(x, y, False); Event(k, code, i); ... while not IsEvent do; процедура квадраттың суретін саламыз оқиғаны күтеміз енді өшіруге болады Нені жақсартуға болады? ? * "4": Квадрат бағыттауыш пернелерді басқан бағытта жылжып отырады, алайда көк квадраттың шекарасынан асып кете алмайды: "5": Квадрат үздіксіз қозғалып отырады, бағыттауыш пернелер басылған кезде өз бағытын өзгертеді және көк квадраттың қабырғаларына соқтығысып кері жылжып отырады: Тапсырмалар * Айналу Есеп: Жердің Күнді айналу моделін бейнелеу.Проблема: шеңбер бойымен айналу, координаталарды қалай өзгертіп отыруға болады?Шығарылуы: тәуелсіз айнымалы ретінде α –ның айналу бұрышын қолдану (циклде өзгерту) (x0, y0) α L (x, y) x = x0 + L·cos(α)y = y0 – L·sin(α) * Процедура 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; сурет салу (True) немесе салмау (False)? суретін саламыз: қылқалам түсі – көгілдір суретті өшіреміз: қылқалам түсі – қара тек қана құю! Жердің радиусы (x-r, y-r) (x,y) (x+r, y+r) * Тұрақтылар мен айнымалылар 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; * Негізгі программа 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 мс-та 1o қадам} 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. фонды қара түске бояу Күннің суретін саламыз жаңа координаталар ha бұрышына бұрылу 100 мс күтеміз if IsEvent then begin Event(k, code, i); if (k = 1) and (code = 27) then stop := true; end; * "4": Күнді айналып жүрген екі планетаның моделін бейнелеу, планеталар бір-біріне қарама-қарсы бағытта қозғалатын болсын: "5": Күн-Жер-Ай жүйесінің моделін бейнелеу: Тапсырмалар * Паскаль тілінде программалау Тақырып 12. Кездейсоқ сандар * Кездейсоқ сандар Кездейсоқ көріністер: барлық жерде…тиынды лақтыру ("орел" немесе "решка")қардың түсуіброундық қозғалыстелефон байланысында болатын ақауларрадиоэфирдің шуыКездейсоқ сандар – бұған дейінгі сандардың ретін біліп отырсақ та, келесі санның қандай екені белгісіз болатын сандардың тізбегін айтады.Проблема: компьютерде осыны қалай алуға болады?Мүмкін болатын шешімдері:шу ақауларының сыртқы көздерін пайдалануматематикалық түрлендірулерді пайдалану * Жалған кездейсоқ сандар Жалған кездейсоқ сандар – бойында кездейсоқ сандардың қасиеті бар, бірақ әрбір келесі сан алдын ала берілген формула бойынша есептелетін сандардың тізбегін айтады.Мысалдар:Кездейсоқ бүтін сандар [0,m) (сызықты конгруэнтті әдіс) Кездейсоқ нақты сандар [0,1] санның бөлшек бөлігі a, c, m - бүтін сандар жай сан 230-1 мысал, k = 5 * Кездейсоқ сандардың орналасуы Модель: қар бұршақтары [a,b] кесіндісінің аралығына түседі a b a b орналасуы бірқалыпты бірқалыпты емес Әр түрлі орналастырулардың саны қанша болуы мүмкін? ? * Кездейсоқ сандардың орналасуы Ерекшеліктері: орналасу – бұл бір ғана санның емес бүкіл тізбектің сипаттамасыбірқалыпсыздардың саны – көпкез келген бірқалыпсыз орналасуды бірқалыпты орналасудың көмегімен алуға болады. a b a b бірқалыпты орналасу бірқалыпсыз орналасу * Паскальдегі кездейсоқ сандардың генераторы [0,N] интервалындағы бүтін сандар: var x: integer; ... x := random ( 100 ); { интервал [0,99] } [0,1] интервалындағы бүтін сандар: var x: real; ... x := random; { интервал [0,1] } * Кездейсоқ сандар Есеп: 400х300 пиксельді тіктөртбұрыштың ішін түстері кездейсоқ нүктелермен бірқалыпты етіп толтыру.Нүктенің кездейсоқ координаталарын қалай алуға болады? x := random ( 400 );y := random ( 300 );Бірқалыптылықты қалай алуға болады? random функциясы қолданылса автоматты түрде қамтамасыз етіледіКездейсоқ түстерді қалай алуға болады?Pen (1, random(256), random(256), random(256));Point ( x, y ); * Программа program qq; var x, y, k, code, i: integer; stop: boolean; begin stop := False; repeat x := random(400); y := random(300); Pen(1, random(256), random(256), random(256)); 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 пернесін басып шығып кету * "4": Пернетақтадан тіктөртбұрыш бұрыштарының координаталарын енгізіп, тіктөртбұрыштың ішін түстері кездейсоқ нүктелермен толтыру керек. "5": Үшбұрыштың ішін түстері кездейсоқ болатын нүктелермен толтыру. (бірқалыпты немесе бірқалыпты емес). Қосымша көмек: бұрышы 45о болатын теңбүйірлі үшбұрышты алу керек . Тапсырмалар (100,100) (300,200) * Паскаль тілінде программалау Тақырып 13. Функциялар * Функциялар Функция – нәтижесі қандай да бір мәнге ие болатын көмекші алгоритм (қосалқы программа). Мысалдар: , , есептеуөрнектерді күрделі формулалармен есептеусұраққа жауап (жай сан ба, әлде жай сан емес пе?)Неліктен? программаның әр жерінде орналасқан бірдей есептеулерді орындау үшінфункциялардың жалпыға бірдей кітапханаларын құру үшін Процедурадан айырмашылығы неде? ? * Функциялар Есеп: екі санның үлкенін анықтайтын функция құру және оны қолдануға мысал келтіруФункция: формальды параметрлер function Max (a, b: integer): integer; begin if a > b then Max := a else Max := b; end. бұл функцияны нәтижесі * Функциялар Ерекшеліктері:тақырыбы function сөзімен басталадыфункцияда формальды параметрлер процедурадағыдай сипатталадыайнымалы параметрлерді пайдалануға боладытақырыптың соңында қоснүктеден кейін нәтиженің типі көрсетіледіфункциялар негізгі программадан ЖОҒАРЫ орналасады Max (a, b: integer): integer; function function Max (a, b: integer): ; integer 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; begin ... end; Max := a; function qq (a, b: integer): float; begin ... end; var x, y: float; Delphi-де: ! Result := a; * Программа program qq;var a, b, max: integer;begin writeln(‘Екі сан енгіз'); read(a, b); max := Max ( a, b ); writeln(‘Санның үлкені ', max );end. function Max (a, b: integer): integer; begin ... end; c c c Айнымалылардың, функциялардың және процедуралардың аттары бірдей болмауы керек! ! нақты параметрлер функцияны шақыру * Логикалық функциялар Есеп: енгізілген санның - жай сан екендігін анықтайтын функция құру.Ерекшеліктері:жауабы – логикалық мән (True немесе False)функцияның нәтижесін if, while шарттарында логикалық шама ретінде қолдануға болады Алгоритм: 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; Қалай жақсартуға болады? ? * Логикалық функциялар 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 <= N do if N mod i = 0 then count := count + 1; i := i + 1; end; Prime := (count = 0); end; функцияны шақыру нәтижесі – логикалық мән шарт дегеніміз – логикалық мән таңдап алу тек -ге дейін * Тапсырмалар "4": 1-ден N-ге дейінгі сандардың қосындысын анықтайтын функция құру және оны қолдануға мысал келтіру. Мысал: Сан енгіз: 100 қосынды = 5050"5": Шахматты ойлап шығарған адамның N-ші торға неше бидайдың қоюын сұрағанын анықтайтын функция құру. ( 1-шісіне – 1 дән, 2-шісіне – 2 дән, 3-шісіне – 4 бидай дәнін, …) Мысал: Тордың нөмірін енгіз: 28 28-шісі торда 134217728 бидай дәні. * Тапсырмалар (2-нұсқа) "4": Екі натурал санның ең үлкен ортақ бөлгішін анықтайтын функция құру және оны қолдануға мысал келтіру. Мысал: Екі сан енгіз: 14 21 ЕҮОБ(14,21)=7"5": Синус функциясын қатардың қосындысы секілді есептейтін функция құру. (0.001 дәлдікпен) Мысал: Градус түріндегі бұрышты енгіз: 45 sin(45) = 0.707 x радиан түрінде! * Фильмнің соңы