{***************************************************************************} Program Ulamki; uses crt,dos,graph,turtle; const

Podobne dokumenty
INSTRUKCJA ITERACYJNA REPEAT. repeat Instrukcja_1; Instrukcja_2; {... } Instrukcja_N; until wyr ; INSTRUKCJA ITERACYJNA WHILE

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

PLIKI TEKSTOWE F C E 30 0D 0A 42 6F 72 6C 61 6E 64 1A T U R B O _ P A S C A L _ 7. 0

Informatyka 1. Przetwarzanie tekstów

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Przykładowerozwiązania.

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Pascal - wprowadzenie

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

Programowanie w Turbo Pascal

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne. TEMAT 8: Moduły standardowe

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

Tablice. TYPE identyfikator tablicy = ARRAY [Indeksl,..., Indeksn] OF Typ; Dany identyfikator_ tablicy można wykorzystać w deklaracji VAR:

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Zasady Programowania Strukturalnego

Procedury i funkcje. Przykład programu z procedurą. Definicja. Cechy procedury

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Podstawy programowania

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Wstęp do programowania. Różne różności

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Kiedy i czy konieczne?

Programowanie Delphi obliczenia, schematy blokowe

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU. Instrukcja pętli For to do

INFORMATYKA. Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki. dr inż. Michał Łanczont

Właściwości i metody obiektu Comment Właściwości

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Kompendium wiedzy z Pascala

LibreOffice Calc VBA

Pascal - grafika. Uruchomienie trybu graficznego. Moduł graph. Domyślny tryb graficzny

Kurs Pascala LO Biecz 2010/2011. Kurs Pascala oparty na zadaniach i problemach z lekcji Informatyki.

Część 4 życie programu

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

WOJSKOWA AKADEMIA TECHNICZNA im. Jarosława Dąbrowskiego LABORATORIUM UKŁADÓW PROGRAMOWALNYCH I SPECJALIZOWANYCH

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Instrukcja standardowa Writeln

APROKSYMACJA. Rys. 1. Funkcja aproksymująca zbiór punktów pomiarowych (1) (2) (3) (4) (5) (6) (7) ... Zmienna y

Podstawy programowania

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

Język programowania PASCAL

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Zakres wykładu INFORMATYKA. dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel

Wprowadzenie komentarzy do programu

Umieszczanie kodu. kod skryptu

Pliki. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików:

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK.

Konstrukcja alternatywy

Podstawy programowania

Kurs Turbo Pascal 7.0

Pliki wsadowe BATCH. Położenie: (nie dotyczy) 3bird.net 2013,

Wstęp do programowania

Wprowadzenie do programowania w VBA

Grafika PHP dla początkujących

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Delphi Laboratorium 3

Wprowadzenie Zmienne Wyrażenia i operatory Komunikacja Instrukcje warunkowe Instrukcje iteracyjne Przykłady Bibliografia

Visual Basic dla AutoCAD

I - Microsoft Visual Studio C++

PROGRAMOWANIE MAKR W PROGRAMIE EXCEL W JĘZYKU VISUAL BASIC

INSTRUKCJE REPETYCYJNE PĘTLE

PASCAL WPROWADZENIE. 1. Uruchom kompilator. 2. Struktura programu w Pascalu. 3. Komentarze

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Podstawy Programowania Wykład dwunasty: Modu ł crt i komunikacja z użytkownikiem

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Podstawy programowania

1 Podstawy c++ w pigułce.

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

lekcja 8a Gry komputerowe MasterMind

Konstrukcje warunkowe Pętle

Podstawy Programowania Wykład trzeci: Instrukcje warunkowe i iteracyjne.

Instrukcje sterujące mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Programowanie w języku Pascal

4.1. Analiza AWN jest dokonywana na poziomie VBA

Okna i liczby pseudolosowe

Edytor tekstu MS Word 2010 PL. Edytor tekstu to program komputerowy umożliwiający wprowadzenie lub edycję tekstu.

Informatyka 1. Dokumentacja programu, moduły programowe, typy tablicowe

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

LIVE Gra w życie. LIVE w JavaScript krok po kroku. ANIMACJA Rozpoczynamy od podstawowego schematu stosowanego w animacji

EDYCJA TEKSTU MS WORDPAD

Lekcja 6: Pascal. Procedura i funkcja

KURS PASCAL A. 1.Wprowadzenie

2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4

Podstawy programowania

Instrukcje sterujące

System operacyjny Linux

1 Wprowadzenie. program t e s t 3 ; begin. Polecenie program. Różnice między poleceniami write i writeln. writeln ( Witaj, a ) ; end.

Transkrypt:

{***************************************************************************} Program Ulamki; uses crt,dos,graph,turtle; const kolor15:byte=15; {kolor obrazk w} wypeln=9; {rodzaj wzoru wypelnienia obszar w} czcionka=1; {rodzaj czcionki uzywanej w ulamkach} odstep=4; {odstep pomiedzy ramkami obrazk w} ulamki_h:byte=5; {liczba obrazk w w poziomie 5x4x80 } ulamki_v:byte=4; {liczba obrazk w w pionie 7x5x60 } ulamki_d:byte=80; {dlugosc boku obrazka 9x6x50 } schemat:byte=7; {rodzaj shematu} pocz_x=100; {wspolrzedne lewego gornego wierzcholka} pocz_y=100; {planszy na ekranie} ile_czasu:integer=300; {czas trwania testu potem koniec} punkty:longint=0; {liczba zdobytych punkt w} czas_ulamka=15; {po jakim czasie ma sie pojawiac nowy obrazek} dzwiek=true; {czy sygnalizowac zmiany} koniec_testu:boolean=false; {jesli czas sie skonczy to true} nowy_ulamek:boolean=false; {co 15 sekund losowanie nowego ulamka} mian:array[1..7,1..8] of byte= {mianowniki do rozlosowania} ((2,4,8,2,4,8,4,8), {DiadramKw1} (6,8,6,8,6,8,6,8), {DiagramKw2} (3,4,5,6,7,8,3,4), {DiagramKw3} (2,3,4,5,6,7,8,10), {DiagramKolowy} (2,3,4,5,6,7,8,10), {ObrazekUl} (2,3,4,5,6,7,8,10), {ObrazekPr} (2,3,4,5,6,7,8,10)); {ObrazekDz} znaki:array[1..5] of string[2]= (' =',' <',' >','<=','>='); {znaki por wnania do losowania}

tablica:array[1..20,1..20] of byte;{tablica z numerami schematow ulamkow} wartosc:array[1..20,1..20,1..2] of byte; {tablica na wartosci licznika i mianownika} czas_p, czas_k:datetime; {czas rozpoczecia testu} {czas zakonczenia testu} Procedure OtworzTrybGraficzny; driver,mode:integer; driver:=detect; initgraph(driver,mode,''); Procedure ZamknijTrybGraficzny; closegraph Function Sekundy(czas:datetime):longint; p:longint; {podajemy czas a otrzymujemy} {ile to jest w sumie sekund} with czas do p:=hour; {musi tak byc bo inaczej robi modulo maxword} p:=p*3600+min*60+sec; Sekundy:=p; Procedure CzasStart( czas_p,czas_k:datetime;ile_czasu:longint); p,k:longint; s:word; with czas_p do gettime(hour,min,sec,s); p:=sekundy(czas_p); {sekundowy czas startu} k:=p+ile_czasu; {zwiekszamy o sekundowy czas testu} with czas_k do {zamieniamy z powrotem na normalny czas} hour:=k div 3600; k:=k mod 3600; min:=k div 60; k:=k mod 60; sec:=k; {aby otrzymac czas zakonczenia testu} Function IleSekund(czas_p,czas_k:datetime):string; p,k:longint; n:string; p:=sekundy(czas_p); k:=sekundy(czas_k); ile_czasu:=k-p; str(k-p,n); IleSekund:=n; {obliczamy ile zostalo sekund do konca testu}

Procedure Ramka(x1,y1,x2,y2:integer); rectangle(x1,y1,x2,y2) {--------------------------------------------------------------------------} Procedure Rameczka(x1,y1,x2,y2:integer); {rysujemy podwojna ramke z wymazaniem wnetrza} Ramka(x1,y1,x2,y2); setviewport(x1+odstep,y1+odstep,x2-odstep,y2-odstep,true); clearviewport; setviewport(0,0,getmaxx,getmaxy,true); Ramka(x1+odstep,y1+odstep,x2-odstep,y2-odstep); {--------------------------------------------------------------------------} Procedure Kwadrat(x,y,d:integer); rectangle(x,y,x+d,y+d) {--------------------------------------------------------------------------} {losujemy diagram kwadratowy podzielony na 2, 4 lub 8 osiami symetrii} Procedure DiagramKw1(x,y,dlugosc,licznik,mianownik,kolor:integer); type punkty=array[1..8,1..2] of integer; {wsp lrzedne punkt w we wnetrzu obszar w do wypelnienia} const stala:punkty=((-3,-9),( 3,-9),( 9,-3),( 9, 3),( 3, 9),(-3, 9), (-9, 3),(-9,-3)); x1,y1,d1,sr,i,r:integer; p:punkty; Procedure l1; line(x1,y1,x1+d1,y1+d1); Procedure l2; line(x1,y1+d1,x1+d1,y1 ); {osie symetrii} Procedure l3; line(x1+sr,y1,x1+sr,y1+d1); Procedure l4; line(x1,y1+sr,x1+d1,y1+sr); x1:=x+odstep; {wspolrzedne lewego gornego wierzcholka} y1:=y+odstep; {kwadratu we wnetrzu} d1:=dlugosc-2*odstep; {dlugosc boku kwadratu we wnetrzu} {polowa dlugosci boku kwadratu we wnetrzu} Kwadrat(x1,y1,d1); p:=stala; {odswierzamy informacje o wsp lrzednych} case mianownik of {w zaleznosci od mianownika dzielimy kwadrat} 8: {na odpowiednia ilosc czesci} l1;l2;l3;l4 {przy wypelnianiu korzystamy ze starych} {wspolrzednych} 4: p[2]:=p[3];p[3]:=p[5];p[4]:=p[7]; if random(2)=0 then l1;l2 end else l3;l4 2:case random(4) of 0:l1; 1:l2; 2:l3; 3:l4; setfillstyle(wypeln,kolor); r:=random(mianownik); {i w zaleznosci od licznika wypelniamy} if licznik>0 then {wylosowane obszary}

for i:=1 to licznik do floodfill(x1+sr+p[((i+r) mod mianownik)+1,1], y1+sr+p[((i+r) mod mianownik)+1,2], kolor15); {--------------------------------------------------------------------------} {losujemy diagram kwadratowy warstwowy przedzielony pionowa osia symetrii} {podzielony liniami poziomymi na 6 lub 8 czesci} Procedure DiagramKw2(x,y,dlugosc,licznik,mianownik,kolor:integer); type punkty=array[1..8,1..2] of integer; const stala:punkty=((-3,1),(-3,2),(-3,3),(-3,4),(3,1),(3,2),(3,3),(3,4)); x1,y1,d1,sr,po,tr,i,r:integer; p:punkty; Procedure l0; line(x1+sr,y1,x1+sr,y1+d1); Procedure l1(tr:integer); line(x1,y1+tr,x1+d1,y1+tr); Procedure Wypelnij(cz:integer); i:byte; setfillstyle(wypeln,kolor); r:=random(mianownik); if licznik>0 then for i:=1 to licznik do floodfill(x1+sr+p[((i+r) mod mianownik)+1,1], y1+cz*p[((i+r) mod mianownik)+1,2]-3, kolor15); x1:=x+odstep; y1:=y+odstep; d1:=dlugosc-2*odstep; tr:=d1 div 3; po:=sr div 2; Kwadrat(x1,y1,d1); p:=stala; case mianownik of 6: l0;l1(tr);l1(2*tr); p[3]:=p[4];p[4]:=p[5];p[5]:=p[6];p[6]:=p[8] 8: l0;l1(sr);l1(po);l1(sr+po) Wypelnij(po); {losujemy diagram kwadratowy warstwowy,ktory moze byc podzielony} {na 3,4,5,6,7,8 czesci} Procedure DiagramKw3(x,y,dlugosc,licznik,mianownik,kolor:integer); type punkty=array[1..8,1..2] of integer; const stala:punkty=((3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(3,7),(3,8)); x1,y1,d1,sr,po,pi,si,tr,cz,i,r:integer; p:punkty; Procedure l0(cz:integer);

line(x1,y1+cz,x1+d1,y1+cz); Procedure Wypelnij(cz:integer); i:integer; setfillstyle(wypeln,kolor); r:=random(mianownik); if licznik>0 then for i:=1 to licznik do floodfill(x1+sr+p[((i+r) mod mianownik)+1,1], y1+cz*p[((i+r) mod mianownik)+1,2]-3, kolor15); x1:=x+odstep; y1:=y+odstep; d1:=dlugosc-2*odstep; tr:=d1 div 3; pi:=d1 div 5; po:=d1 div 4; si:=d1 div 7; Kwadrat(x1,y1,d1); p:=stala; case mianownik of 3: l0(tr);l0(2*tr); Wypelnij(tr); 4: l0(po);l0(sr);l0(sr+po); Wypelnij(po); 5: for i:=1 to 4 do l0(i*pi); Wypelnij(pi); 6: for i:=1 to 5 do l0(i*(tr div 2)); Wypelnij(tr div 2); 7: for i:=1 to 6 do l0(i*si); Wypelnij(si); 8: for i:=1 to 7 do l0(i*(po div 2)); Wypelnij(po div 2); {losujeby diagram kolowy,ktory moze byc podzielony na 3,4,5,6,7,8,10 czesci} Procedure DiagramKolowy(x,y,dlugosc,licznik,mianownik,kolor:integer); x1,y1,d1,sr,i,r:integer; d1:=dlugosc-2*odstep;

x1:=x+odstep+sr; y1:=y+odstep+sr; circle(x1,y1,sr); xsro:=x1;ysro:=y1; for i:=1 to mianownik do fd(sr);bk(sr);rt(round(360/mianownik)); setfillstyle(wypeln,kolor); r:=random(mianownik); rt(round((360/mianownik)*r+20)); for i:=1 to licznik do pu;fd(10); floodfill(getx,gety,kolor15); bk(10);pd; rt(round(360/mianownik)); {losujemy obrazek z ulamkiem zwyklym} Procedure ObrazekUl(x,y,dlugosc,licznik,mianownik:integer); x1,y1,d1,sr,po,dl:integer; napis:string; d1:=dlugosc-2*odstep; po:=sr div 2; dl:=sr div 8; x1:=x+odstep; y1:=y+odstep; Kwadrat(x1,y1,d1); line(x1+po,y1+sr,x1+d1-po,y1+sr); settextstyle(czcionka,0,dl); str(licznik,napis); outtextxy(x1+sr-2*dl,y1-dl,napis); str(mianownik,napis); outtextxy(x1+sr-2*dl,y1+sr-dl,napis); {losujemy obrazek z procentem} Procedure ObrazekPr(x,y,dlugosc,procent:integer); x1,y1,d1,sr,po,dl:integer; napis:string; d1:=dlugosc-2*odstep; po:=sr div 2; dl:=sr div 8; x1:=x+odstep; y1:=y+odstep; Kwadrat(x1,y1,d1); settextstyle(czcionka,0,dl); str(procent,napis); napis:=napis+'%'; outtextxy(x1+dl,y1+po,napis);

{losujemy obrazek z ulamkiem dziesietnym} Procedure ObrazekDz(x,y,dlugosc:integer;liczba:real); x1,y1,d1,sr,po,dl:integer; napis:string; d1:=dlugosc-2*odstep; po:=sr div 2; dl:=round(sr*0.1); x1:=x+odstep; y1:=y+odstep; Kwadrat(x1,y1,d1); settextstyle(czcionka,0,dl); str(liczba:4:2,napis); outtextxy(x1+dl,y1+po,napis); {w rameczce nad plansza wypisujemy tresc polecenia} Procedure Polecenie(znak:string;licznik,mianownik:integer); napis:string; Rameczka(150,15,450,70); line(320,42,350,42); settextstyle(czcionka,0,5); outtextxy(250,15,znak); settextstyle(czcionka,0,3); str(licznik,napis); outtextxy(330,15,napis); str(mianownik,napis); outtextxy(330,40,napis); {------------------------------------------------------------------------} {losujemy numer schematu,a takze licznik i mianownik ulamka na tym schemacie} {wylosowany obrazek umieszczamy w odpowiednim miejscu na planszy} Procedure RysujUlamek(i,j,bok,schemat:integer); x,y,s,mianownik,licznik:integer; liczba:real; s:=random(schemat)+1; {numer shematu} tablica[i,j]:=s; {zapis numeru shematu do tablicy} mianownik:=mian[s,random(8)+1]; {losowanie mianownika} licznik :=random(mianownik-1)+1; {losowanie licznika} wartosc[i,j,1]:=licznik; {wstawiamy obie wartosci} wartosc[i,j,2]:=mianownik; {do tablicy} x:=pocz_x+(i-1)*bok; {wyliczamy wsp lrzedne lewego} y:=pocz_y+(j-1)*bok; {gornego wierzcholka kwadratu,} case tablica[i,j] of {w ktorym rysujemy} 1:DiagramKw1(x,y,bok,licznik,mianownik,2); {wybieramy rodzaj shematu} 2:DiagramKw2(x,y,bok,licznik,mianownik,1); 3:DiagramKw3(x,y,bok,licznik,mianownik,4); 4:DiagramKolowy(x,y,bok,licznik,mianownik,14); 5:ObrazekUl(x,y,bok,licznik,mianownik); 6:ObrazekPr(x,y,bok,round((licznik/mianownik)*100)); 7:ObrazekDz(x,y,bok,licznik/mianownik);

Procedure WyswietlSekundy(czas_k:datetime); {w ramce no dole ekranu wyswietlamy ile zostalo} napis:string; {sekund do konca testu} czas :datetime; s :word; with czas do gettime(hour,min,sec,s); if Sekundy(czas)>Sekundy(czas_k) then koniec_testu:=true; napis:=ilesekund(czas,czas_k); Rameczka(350,440,500,470); settextstyle(0,0,2); outtextxy(380,448,napis); Procedure DzwiekZle; sound(70);delay(300);nosound Procedure DzwiekBim; sound(700);delay(100);nosound procedure DzwiekDobrze; i:integer; for i:=1 to 50 do sound(70+i*10);delay(10) nosound; {sprawdzamy zgodnosc wartosci na obrazku z wypisanym poleceniem} Function Sprawdz(u_x,u_y:integer;licznik,mianownik,porownanie:byte):boolean; ok:boolean; l,m:integer; z:string[2]; ok:=false; l:=wartosc[u_x,u_y,1]; m:=wartosc[u_x,u_y,2]; z:=znaki[porownanie]; if z=' =' then if l/m =licznik/mianownik then ok:=true; if z=' <' then if l/m <licznik/mianownik then ok:=true; if z=' >' then if l/m >licznik/mianownik then ok:=true; if z='<=' then if l/m<=licznik/mianownik then ok:=true; if z='>=' then if l/m>=licznik/mianownik then ok:=true; Sprawdz:=ok; {------------------------------------------------------------------------}

Procedure Punktacja(p:integer); napis:string; {wyswietlenie rameczki z punktacja} punkty:=punkty+p; Rameczka(100,440,250,470); settextstyle(0,0,2); str(punkty,napis); outtextxy(150,448,napis); {------------------------------------------------------------------------} Procedure ObslugaProgramu; {gl wna procedura programu-obsluguje caly program} znak :char; u_x,u_y:byte; {aktualnie podswietlony obrazek} x,y,l,m,i,j,ux,uy:integer; z :string[2]; ok :boolean; nowa_plansza:boolean; {jesli odgadniete wszystkie ulamki} licznik, {wylosowany licznik ulamka} mianownik, {wylosowany mianownik ulamka} porownanie:byte; {wylosowany znak porownania ulamk w} mrug :pointer; {wskaznik na obrazek mrugajacej ramki} Procedure NowePolecenie( licznik,mianownik,porownanie:byte); {wylosowanie i wyswietlenie nowego polecenia} mianownik:=mian[random(schemat)+1,random(8)+1]; licznik:=random(mianownik-1)+1; porownanie:=random(5)+1; Polecenie(znaki[porownanie],licznik,mianownik); Function Czekaj(x,y:integer):char; {ramka mruga oczekiwanie na nacisnieciecie} znak:char; {jakiegos klawisza} i :longint; czas:datetime; s :word; i:=0; while keypressed do znak:=readkey; repeat putimage(x,y,mrug^,xorput); {mruganie ramki} inc(i); delay(50); {sprawdzamy czy nie losowac} with czas do gettime(hour,min,sec,s); {nowego ulamka} if Sekundy(czas) mod czas_ulamka =0 then nowy_ulamek:=true; WyswietlSekundy(czas_k); {wyswietlenie ilosci sekund} until keypressed; {do konca testu} znak:=readkey; if znak=#0 then znak:=readkey; if i mod 2 = 1 then putimage(x,y,mrug^,xorput); {aby ramka pozostala biala} Czekaj:=znak; {--------------------------------------------------------------------------} {zapamietujemy w zmiennej dynamicznej wz r ramki do mrugania} Procedure Zapalanie; x,y:integer;

x:=100; y:=100; Rameczka(x,y,x+ulamki_d,y+ulamki_d); setfillstyle(1,kolor15); floodfill(x+1,y+1,kolor15); getmem(mrug,imagesize(x,y,x+ulamki_d,y+ulamki_d)); {utworzenie zmiennej} {dynamicznej} getimage(x,y,x+ulamki_d,y+ulamki_d,mrug^); {zapamietanie obrazka} {w zmiennej dynamicznej} zapalanie; clearviewport; nowa_plansza:=true; u_x:=1;u_y:=1; {na poczatku zaznaczamy obrazek 1,1} repeat ok:=false; {sprawdzamy czy na ekranie jest co badac} for i:=1 to ulamki_h do {czy sa jeszcze poprawne wartosci} for j:=1 to ulamki_v do if Sprawdz(i,j,licznik,mianownik,porownanie)=true then ok:=true; if ok=false then {gdy wszystko zostalo odgadniete} {to rysujemy nowa plansze} nowa_plansza:=true; for i:=1 to 4 do DzwiekDobrze; if nowa_plansza then {gdy trzeba przerysowac plansze} {zaraz na poczatku} if dzwiek then DzwiekBim; clearviewport; Ramka(0,0,getmaxx,getmaxy); Ramka(3,3,getmaxx-3,getmaxy-3); NowePolecenie(licznik,mianownik,porownanie); for i:=1 to ulamki_h do for j:=1 to ulamki_v do RysujUlamek(i,j,ulamki_d,schemat); nowa_plansza:=false; Punktacja(0); if dzwiek then DzwiekBim; x:=pocz_x+(u_x-1)*ulamki_d; {wsp lrzedne zaznaczonego obrazka} y:=pocz_y+(u_y-1)*ulamki_d; znak:=czekaj(x,y); {czekamy na znak} case znak of {obsluga klawiatury} {l} #75:if u_x>1 then dec(u_x) else u_x:=ulamki_h; {p} #77:if u_x<ulamki_h then inc(u_x) else u_x:=1; {g} #72:if u_y>1 then dec(u_y) else u_y:=ulamki_v; {d} #80:if u_y<ulamki_v then inc(u_y) else u_y:=1; #13,#32: {enterem lub spacja potwierdzamy wybor} ok:=sprawdz(u_x,u_y,licznik,mianownik,porownanie); if ok=false then {zla odpowiedz} if dzwiek then DzwiekZle; Punktacja(-1); end else {dobra odpowiedz} if dzwiek then DzwiekDobrze; Rameczka(x,y,x+ulamki_d,y+ulamki_d);

RysujUlamek(u_x,u_y,ulamki_d,schemat); Punktacja(1); if nowy_ulamek then {gdy trzeba losowo narysowac nowy obrazek} {bo uplynelo 15 sekund} ux:=random(ulamki_h)+1; uy:=random(ulamki_v)+1; x:=pocz_x+(ux-1)*ulamki_d; y:=pocz_y+(uy-1)*ulamki_d; Rameczka(x,y,x+ulamki_d,y+ulamki_d); RysujUlamek(ux,uy,ulamki_d,schemat); if dzwiek then DzwiekBim; nowy_ulamek:=false; until (znak=#27) or (koniec_testu); for i:=1 to 15 do DzwiekBim; Procedure OdczytajKonfig; p:text; assign(p,'ulamki.cfg'); {w pliku ulamki.cfg zapisana jest podstawowa} reset(p); {konfiguracja programu - mozna ja zmieniac} readln(p,ulamki_h); {w ilu kolumnach obrazki} readln(p,ulamki_v); {w ilu wierszach obrazki} readln(p,ulamki_d); {dlugosc boku kwadratu na schemat ulamka} readln(p,schemat); {kt re rodzaje schematow sa losowane} readln(p,ile_czasu); {ile czasu ma trwac test} close(p); Procedure nazwisko; plik:text; czas:datetime; d :word; podpis:string; gotoxy(30,10);writeln('podaj IMIE I NAZWISKO: '); gotoxy(30,11);readln(podpis); with czas do getdate(hour,min,sec,d); assign(plik,'ulamki.wyn'); append(plik); with czas do write(plik,podpis:20,hour:2,':',min:2,':',sec:2); close(plik); Procedure Wyniki(punkty:longint); plik:text; czas:datetime; d:word; with czas do getdate(hour,min,sec,d); assign(plik,'ulamki.wyn'); append(plik); with czas do writeln(plik,punkty:10,hour:2,':',min:2,':',sec:2);

close(plik); {programu glownego} clrscr; nazwisko; OdczytajKonfig; randomize; OtworzTrybGraficzny; clearviewport; CzasStart(czas_p,czas_k,ile_czasu); Ramka(0,0,getmaxx,getmaxy); Ramka(3,3,getmaxx-3,getmaxy-3); ObslugaProgramu; Wyniki(punkty); readln; ZamknijTrybGraficzny; textmode(lastmode); end. {**************************************************************************}