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



бет8/10
Дата19.05.2022
өлшемі4 Mb.
#457309
түріПрограмма
1   2   3   4   5   6   7   8   9   10
0010fe44-d35973f3

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": Күн-Жер-Ай жүйесінің моделін бейнелеу:
    • Тапсырмалар

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

    • Тақырып 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)


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




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

        Басты бет