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


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



жүктеу 146,04 Kb.
бет7/8
Дата21.01.2018
өлшемі146,04 Kb.
#7853
түріПрограмма
1   2   3   4   5   6   7   8

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

  • Тақырып 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-қадамға көшеміз
  • «Пернелерді шертуді» қалай іске асыруға болады?
  • Оқиға деп қандай да бір объектінің қалпында өзгерістің болуын немесе пайдаланушының әрекетін айтады. (пернені басу, тышқанды шерту).
  • 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 жоғары – 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;
  • егер перне басылған болса, …
  • Программасы
  • 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": Күн-Жер-Ай жүйесінің моделін бейнелеу:
  • Тапсырмалар

жүктеу 146,04 Kb.

Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау