Podstawy Programowania 1 Wykład czternasty: Wstęp do grafiki 2D (moduł Allegro.pas)

Wielkość: px
Rozpocząć pokaz od strony:

Download "Podstawy Programowania 1 Wykład czternasty: Wstęp do grafiki 2D (moduł Allegro.pas)"

Transkrypt

1 Podstawy Programowania 1 Wykład czternasty:

2 1. Wstęp Współczesne systemy komputerowe wyposażone są w sprzęt pozwalający generować realistyczną grafikę trójwymiarową. Duże znaczenie w różnych zastosowaniach ma również grafika dwuwymiarowa (oznaczana w skrócie 2d). Jej tworzenie możliwe jest w środowisku Turbo Pascal przy pomocy modułu graph. Jest on jednakże dostępny tylko dla tego środowiska, a jego możliwości są stosunkowo ubogie. Z tego względu wszystkie programy zaprezentowane w tych materiałach będą kompilowane tylko w środowisku Free Pascal z zainstalowanym modułem Allegro.pas. Moduł ten jest nakładką (ang. wrapper) na bibliotekę Allegro stworzoną dla języka c, której głównym przeznaczeniem jest tworzenie gier komputerowych z grafiką 2d. Oznacza to, że programy napisane w Pascalu z użyciem tego modułu można stosunkowo łatwo przepisać w języku c. Dodatkowo, nazwy i parametry funkcji i procedur z Allegro.pas dosyć często pokrywają się z tymi, które są umieszczone w graph. Ze względu na rozmiar modułu Allegro.pas zostaną tutaj zaprezentowane głównie te jego elementy, które zostały użyte do napisania przykładowych programów. Środowisko Free Pascal dostarcza również innych modułów do tworzenia grafiki 2d i 3d, w tym wersji modułu graph, która dostępna jest tylko dla systemu Windows. 2. Instalacja Zarówno biblioteka Allegro, jak i moduł Allegro.pas są dostępne za darmo jako otwarte oprogramowanie. Strona domowa projektu Allegro to: natomiast projekt Allegro.pas ma osobną stronę: Windows Na stronie projektu Allegro.pas można znaleźć moduł w wersji skompilowanej dla systemów rodziny Windows lub w postaci źródłowej. Obie wersje zawierają także skompilowaną dla tego systemu wersję biblioteki Allegro 1. W przypadku wersji z kodem źródłowym, po rozpakowaniu pobranego archiwum należy uruchomić plik fix.bat z argumentem wywołania win32. Aby programy używające Allegro.pas mogły być skompilowane należy kompilatorowi podać ścieżkę do katalogu zawierającego moduł. Możemy to uczynić z poziomu ide wybierając w menu Options Directories, a następnie wpisując ścieżkę w polu zakładki Unit directories Linux W przypadku systemów Linux najpierw należy zainstalować bibliotekę Allegro. W przypadku niektórych dystrybucji gotowe pakiety ze skompilowaną postacią tej biblioteki znajdują się w repozytoriach. Należy tylko po ich zainstalowaniu sprawdzić wersję biblioteki i dobrać odpowiednią wersję modułu Allegro.pas. Po rozpakowaniu archiwum tego modułu należy uruchomić skrypt fix.sh z argumentem linux i wskazać kompilatorowi ścieżkę do katalogu z modułem, tak, jak to zostało opisane dla systemu Windows 2. Jeśli biblioteki Allegro nie ma w repozytorium dystrybucji lub nie ma odpowiedniej jej wersji, to można pograć jej kod źródłowy ze strony projektu i skompilować ją samodzielnie. W tym celu należy rozpakować archiwum, utworzyć katalog o nazwie build, przejść do tego katalogu i wydać polecenie cmake.. 3. Po zakończeniu jego wykonania należy wydać polecanie make i później make install. Po zainstalowaniu biblioteki należy postępować tak jak to zostało opisane wcześniej. 3. Inicjalizacja i finalizacja grafiki w module Allegro.pas Aby skorzystać w programie z możliwości modułu Allegro.pas należy włączyć go za pomocą instrukcji uses. Moduł ten nosi nazwę allegro 4. Większość procedur i funkcji z Allegro.pas, w szczególności 1 Znajduje się ona w pliku z rozszerzeniem.dll. 2 W przypadku Linuksa nie są dostępne skompilowane wersje modułu Allegro.pas 3 Dwie kropki to argument wywołania polecenia, oznaczający katalog nadrzędny. 4 Istnieją również inne moduły związane z Allegro.pas, które nie będą tu opisane, a które zawierają np. podprogramy do tworzenia graficznego interfejsu użytkownika (gui). 1

3 wszystkie te, które będą opisane poniżej, wymaga, aby przed ich użyciem wywołać funkcję al install lub al init. Pierwsza z nich zwraca wartość True w przypadku udanej inicjalizacji, albo wartość False w przeciwnym przypadku. Przyjmuje ona jeden parametr typu loingint, który określa identyfikator systemu na którym program będzie uruchomiony. Najczęściej używaną wartością tego parametru jest al system autodetect, dlatego częściej używana jest funkcja al init, której działanie jest równoważne funkcji al install wywołanej ze wspomnianą wartością parametru. Funkcja al install keyboard powinna być wywołana, jeśli w programie potrzebna jest obsługa klawiatury. Nie przyjmuje ona żadnych parametrów wywołania i jak poprzednio opisane funkcje zwraca wartość True w przypadku powodzenia lub False w przeciwnym przypadku. Jeżeli program wymaga obsługi myszy, to należy w nim wywołać funkcję al install mouse. Funkcja ta, podobnie jak opisane wcześniej nie przyjmuje żadnych parametrów wywołania, ale zwraca wartość typu longint. Jeśli wynosi ona -1, to oznacza, że nastąpił błąd inicjalizacji myszy, jeśli jest równa 0, to oznacza, że mysz już była zaincjalizowana, a jeśli jest większa od zera, to oznacza, że obsługa myszy została pomyślnie zainstalowana. Procedura al exit dokonuje finalizacji modułu Allegro.pas i powinna być wywołana tuż przed zakończeniem programu z niego korzystającego. Istnieją jeszcze inne podprogramy związane z inicjalizacją modułu Allegro.pas, między innymi dotyczące obsługi dźwięku. Ich zastosowanie wykracza poza zakres tych materiałów dlatego nie będą one tu opisane. Listing 1 zawiera przykład procedury, która wykonuje czynności związane z inicjalizacją modulu Allegro.pas, które będą wystarczające dla większości programów zawartych w tych materiałach. 1 procedure i n i c j a l i z u j ; 2 begin 3 i f not a l i n i t then 4 begin 5 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 6 r e a d l n ; 7 h a l t ( 1 ) ; 8 end ; 9 i f not a l i n s t a l l k e y b o a r d then 10 begin 11 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 12 r e a d l n ; 13 h a l t ( 1 ) ; 14 end ; 15 a l s e t c o l o r d e p t h ( 3 2 ) ; 16 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, , 7 6 8, 0, 0 ) then 17 begin 18 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 19 r e a d l n ; 20 h a l t ; 21 end ; 22 end ; Listing 1: Procedura inicjalizacyjna 4. Obsługa trybu graficznego Procedura zawarta w listingu 1 zawiera wywołania al set color depth i al set gfx mode. Pierwsza ustala wielkość formatu opisu koloru pojedynczego piksela, czyli liczbę dostępnych kolorów. Piksel jest najmniejszą jednostką, której kolor możemy zmienić na ekranie w trybie graficznym. Jest on odpowiednikiem punktu dla płaszczyzny. Liczba 32 oznacza, że kolor każdego piksela na ekranie zostanie opisany za pomocą 4 bajtów. Format taki nosi nazwę rgba, gdzie litera r oznacza składową czerwoną koloru, litera g, składową zieloną, litera b składową niebieską, a litera a tzw. kanał alfa, który decyduje o tym w jakim stopniu piksel będzie przezroczysty. Funkcja al set gfx mode włącza tryb graficzny. W przypadku pomyślnego wykonania tej operacji zwraca wartość True, w przeciwnym przypadku wartość False. Przyjmuje pięć parametrów typu longint. Pierwszy jest identyfikatorem sterownika karty graficznej. Najczęściej za ten parametr podstawiane są stałe al gfx autodetect fullscreen - uruchomienie trybu graficznego w wersji pełnoekranowej, al gfx autodetect windowed - uruchomienie 2

4 trybu graficznego w wersji okienkowej lub al gfx text - przejście do trybu tekstowego. Kolejne dwa parametry określają maksymalną wielkość ekranu w trybie graficznym wyrażoną w pikselach. Dwa kolejne parametry określają wielkość tzw. ekranu wirtualnego, który wykorzystywany jest przy animacji. Jeśli pierwszym parametrem wywołania była stała al gfx text, to wartości pozostałych parametrów powinny wynosić zero. Procedura al message służy do wyświetlania okienka informującego o błędzie, który sygnalizuje ostatnio wywołana funkcja z modułu Allegro.pas. Opis tego błędu jest przechowywany w zmiennej al error, a jego kod w zmiennej al errno. Rozmiary ekranu, po dokonaniu inicjalizacji trybu graficznego, przechowywane są w dwóch zmiennych typu longint o nazwach al screen w - liczba pikseli w poziomie oraz al screen h - liczba pikseli w pionie. 5. Tworzenie obrazu Wszystkie podprogramy rysujące zgromadzone w module Allegro.pas tworzą kształty na strukturze nazywanej bitmapą. Jest to specjalnie zarządzany fragment pamięci dostępny za pomocą zmiennej typu al bitmapptr 5. Moduł Allegro.pas zawiera także zmienną o nazwie al screen, która jest bitmapą umieszczoną w pamięci wideo, a więc cokolwiek zostanie w niej zapisane będzie natychmiast odwzorowane na ekranie. Większość podprogramów, które są zawarte w module Allegro.pas przyjmuje najczęściej tę zmienną jako pierwszy parametr wywołania. Współrzędne ekranu i dowolnej bitmapy liczone są względem lewego górnego rogu. Piksel znajdujący się w tym miejscu ma współrzędne o wartości (0, 0). Moduł Allegro.pas dostarcza wielu podprogramów do rysowania prostych kształtów, które w grafice komputerowej nazywa się prymitywami. Najprostszym przykładem prymitywu jest piksel. Rysowanie piksela polega na zmianie jego koloru. Do tego służy w Allegro.pas procedura al putpixel. Przyjmuje one cztery parametry. Pierwszym jest zmienna typu al bitmapptr, trzy kolejne są typu longint i opisują położenie (współrzędne x i y) piksela i jego nowy kolor. Wartość koloru może być określona za pomocą funkcji al makecol. Przyjmuje ona trzy parametry typu longint, które są wartościami składowych koloru, czyli czerwieni, zieleni i koloru niebieskiego. Warto zauważyć, że te wartości są liczbami naturalnymi z zakresu od 0 do 255, a więc typ longint jest użyty tutaj trochę na wyrost. Odcinek rysuje procedura al line. Przyjmuje ona sześć parametrów wywołania. Pierwszym jest zmienna wskazująca na bitmapę (typu al bitmapptr), a pięć kolejnych jest typu longint. Drugi i trzeci parametr są współrzędnymi punktu początkowego odcinka, a czwarty i piąty punktu końcowego. Ostatni parametr określa kolor. Do rysowania okręgów przeznaczona jest procedura al circle. Przyjmuje ona pięć parametrów wywołania. Pierwszym jest zmienna wskazująca na bitmapę, a cztery kolejne parametry mają typu longint i są to kolejno: współrzędne środka okręgu, długość promienia wyrażona w pikselach oraz kolor okręgu. Prostokąt rysowany jest za pomocą wywołania procedury al rect. Przyjmuje ona sześć parametrów. Pierwszy z nich jest taki sam jak w przypadku poprzednich procedur. Kolejna czwórka jest typu longint i określa kolejno współrzędne lewego górnego oraz prawego dolnego rogu. Ostatni parametr jest także typu longint i określa kolor prostokąta. Grafika 2d może przedstawiać obraz statyczny lub dynamiczny. Aby animacje były płynne obraz musi być wyświetlany z częstotliwością co najmniej 24 klatek na sekundę. Moduł Allegro.pas wspiera tworzenie animacji poprzez dostarczenie mechanizmu obsługi tak zwanych stron. Strona jest po prostu bitmapą na której program rysuje pojedynczą klatkę animacji, a następnie wyświetla ją na ekranie. Pierwszą czynnością jaką program musi zrobić zanim użyje bitmapy jest przydzielenie na nią pamięci, co wykonuje wywołując funkcję al create video bitmap. Przyjmuje ona dwa parametry typu loingint określające szerokość i wysokość bitmapy, a zwraca wartość typu al bitmapptr. Tak przydzieloną pamięć przed zakończeniem programu lub przed kolejnym wywołaniem al set gfx mode należy zwolnić. W tym celu trzeba wywołać procedurę al destroy bitmap. Przyjmuje ona jeden parametr wywołania i jest nią zmienna typu al bitmapptr. Aby wyświetlić klatkę animacji zawartą na stronie należy wywołać procedurę al show video bitmap i przekazać do niej jako parametr wywołania zmienną wskaźnikową do bitmapy na której ta klatka jest narysowana. Aby wyczyścić bitmapę należy wywołać procedurę al clear to color. Przyjmuje ona dwa parametry. Pierwszym jest zmienna wskaźnikowa do bitmapy, a drugą numer koloru na jaki ma być ustawiona cała jej powierzchnia. 5 Jest to tak zwana zmienna wskaźnikowa. Wskaźnikami będziemy dokładniej zajmować się w przyszłym semestrze. 3

5 6. Obsługa wejścia-wyjścia Moduł Allegro.pas posiada własny interfejs, który odpowiedzialny jest za obsługę komunikacji z użytkownikiem. W następnych podrozdziałach zostaną opisane procedury, funkcje i inne elementy, które są do tego celu przeznaczone Obsługa klawiatury Naciśnięcie przez użytkownika dowolnego klawisza sygnalizuje funkcja al keypressed zwracając wartość True. Moduł Allegro.pas zawiera także procedurę do czyszczenia bufora klawiatury o nazwie al clear keybuf. Nie przyjmuje ona żadnych parametrów wywołania. Allegro.pas dostarcza także tablicy o nazwie al key, której elementy opisują stan poszczególnych klawiszy klawiatury. Jeśli wartość danego elementu jest różna od zera, to oznacza to, że klawisz ten został wciśnięty. Wartości indeksów wszystkich elementów tej tablicy zostały oznaczone specjalnymi, czytelnymi stałymi. Jeśli np. chcemy sprawdzić czy klawisz Escape nie został wciśnięty, to możemy to uczynić przyrównując wyrażenie al key[al key esc] do zera. Inne z tych stałych, które zostały użyte w przykładowych programach, to al key q dla klawisza q oraz al key space dla klawisza spacji Obsługa tekstu W trybie graficznym tekst nie może być wyświetlany za pomocą procedur write i writeln. W module Allegro.pas służy do tego procedura al textout ex. Przyjmuje ona sześć parametrów wywołania. Pierwszy jest zmienną wskaźnikową do bitmapy, drugi zmienną wskaźnikową do struktury opisującej czcionkę. Najczęściej za ten parametr podstawiana jest zmienna o nazwie al font. Domyślna czcionka w Allegro.pas jest niestety małych rozmiarów, ale użycie innej czcionki jest dosyć kłopotliwe. Trzeci parametr, to łańcuch znaków, który ma zostać wypisany. Kolejna para parametrów procedury al textout ex to współrzędne miejsca na ekranie, od którego ma rozpocząć się wyświetlanie łańcucha znaków. Oba parametry są typu longint, podobnie jak piąty i szósty parametr, które określają odpowiednio kolor znaków i kolor tła na którym te znaki zostaną umieszczone. Jeśli chcemy, aby napis był zamieszczony na przezroczystym tle, to podajemy wartość -1. Jeśli chcemy aby wypisywany na ekranie tekst był wyśrodkowany, to możemy użyć procedury al textout centre ex. Przyjmuje ona te same parametry wywołania co poprzednio opisywana procedura, ale zakłada, że przekazane jej współrzędne należą do punktu, który należy do środka wyświetlanego napisu. 7. Przykłady 1 program g r a f i k a ; 2 3 u s e s 4 a l l e g r o, c r t ; 5 6 procedure i n i c j a l i z u j ; 7 begin 8 i f not a l i n i t then 9 begin 10 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 11 r e a d l n ; 12 h a l t ( 1 ) ; 13 end ; 14 i f not a l i n s t a l l k e y b o a r d then 15 begin 16 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 17 r e a d l n ; 18 h a l t ( 1 ) ; 19 end ; 20 a l s e t c o l o r d e p t h ( 3 2 ) ; 21 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, , 7 6 8, 0, 0 ) then 22 begin 23 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 24 r e a d l n ; 4

6 25 h a l t ( 1 ) ; 26 end ; 27 end ; procedure DrawRandomCircle ; 30 var 31 x, y : i n t e g e r ; 32 r, red, green, blue : word ; 33 begin 34 x:=random (AL SCREEN W) ; 35 y:=random (AL SCREEN H) ; 36 r :=random ( 5 0 ) ; 37 red :=random ( ) ; 38 green :=random ( ) ; 39 blue :=random ( ) ; 40 a l c i r c l e ( a l s c r e e n, x, y, r, a l m a k e c o l ( red, green, blue ) ) ; 41 end ; begin 44 i n i c j a l i z u j ; 45 randomize ; 46 a l c l e a r k e y b u f ; 47 r e p e a t 48 DrawRandomCircle ; 49 u n t i l a l k e y p r e s s e d ; 50 a l e x i t ; 51 end. Listing 2: Losowe okręgi Program z listingu 2 tworzy wzór na ekranie złożony z losowo narysowanych okręgów. Ich rysowaniem zajmuje się procedura DrawRandomCircle. W wierszach 6 34 i 35 procedura losuje przy pomocy funkcji random współrzędne środka okręgu. Proszę zauważyć, że środek ten może być położony w dowolnym miejscu ekranu, a więc niektóre okręgi będą częściowo znajdowały się poza ekranem. W wierszu 36 losowana jest długość promienia (od 0 do 49 pikseli), a w trzech kolejnych wierszach składowe koloru okręgu. Pojedynczy okrąg jest rysowany za pomocą wywołania procedury al circle. W bloku głównym programu procedura DrawRandomCircle jest wywoływana w pętli, która kończy się po naciśnięciu przez użytkownika dowolnego klawisza (wiersze 47-49). 1 program f r a k t a l ; 2 3 u s e s 4 a l l e g r o ; 5 6 procedure i n i c j a l i z u j ; 7 c o n s t 8 width : i n t e g e r =1366; 9 h e i g h t : i n t e g e r =768; 10 begin 11 i f not a l i n i t then 12 begin 13 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 14 r e a d l n ; 15 h a l t ( 1 ) ; 16 end ; 17 i f not a l i n s t a l l k e y b o a r d then 18 begin 19 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 20 r e a d l n ; 21 h a l t ( 1 ) ; 22 end ; 23 a l s e t c o l o r d e p t h ( 3 2 ) ; 24 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, width, height, 0, 0 ) then 25 begin 26 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 27 r e a d l n ; 28 h a l t ( 1 ) ; 6 Numery wierszy nie są częścią programu! Zostały one wprowadzone, aby ułatwić jego opis. 5

7 29 end ; 30 end ; procedure draw ( x, y : r e a l ) ; 33 var 34 c h o i c e : i n t e g e r ; 35 begin 36 a l c l e a r k e y b u f ; 37 w h i l e not a l k e y p r e s s e d do 38 begin 39 c h o i c e :=random ( 4 ) ; 40 c a s e c h o i c e o f 41 0 : begin 42 x:= x 0.02 y ; 43 y:= 0.18 x+0.81 y+10; 44 end ; 45 1 : begin 46 x :=0.4 x+0.4 y ; 47 y:= 0.1 x+0.4 y ; 48 end ; 49 2 : begin 50 x:= 0.4 x 0.4 y ; 51 y:= 0.1 x+0.4 y ; 52 end ; 53 3 : begin 54 x:= 0.1 x ; 55 y : =0. 44 x+0.44 y 2; 56 end ; 57 end ; 58 a l p u t p i x e l ( a l s c r e e n,640 trunc (14 x ),730 trunc (14 y ), a l m a k e c o l ( 0, 2 5 5, 0 ) ) ; 59 end ; 60 end ; begin 63 randomize ; 64 i n i c j a l i z u j ; 65 draw ( 0, 0 ) ; 66 a l e x i t ; 67 end. Listing 3: Fraktal Fraktale są obiektami geometrycznymi, które cechuje powtarzalność struktury 7. Istnieje wiele metod tworzenia takich obiektów. Zaliczają się do nich tzw. L-Systemy, układy odwzorowań afinicznych (ifs) oraz równania rekurencyjne i zespolone 8. Fraktale są używane w grafice komputerowej do tworzenia obiektów przypominających obiekty naturalne, takie jak: chmury, pagórki porośnięte trawą, itd. Program z listingu 3 prezentuje użycie układu odwzorowań do wygenerowania ciekawego fraktala. Obiekt ten jest rysowany punkt po punkcie.współrzędne każdego następnego punktu są wyliczane na podstawie współrzędnych poprzedniego punktu, za pomocą następującego układu równań: { x = a x + b y + c y = d x + e y + f Zmienne x i y są współrzędnymi nowego punktu, a x i y współrzędnymi poprzedniego punktu. Istnieją cztery zestawy współczynników a, b, c, d, e i f. Każdy z nich jest wybierany na drodze losowej przed wyliczeniem współrzędnych następnego punktu. Oto zestawy tych współczynników: a = 0, 67; b = 0, 02; c = 0; d = 0, 18; e = 0, 81; f = 10 a = 0, 4; b = 0, 4; c = 0; d = 1; e = 0, 4; f = 0 a = 0, 4; b = 0, 4; c = 0; d = 0, 1; e = 0, 4; f = 0 a = 0, 1; b = 0; c = 0; d = 0, 44; e = 0, 44; f = 2 7 Matematyczne wprowadzenie do fraktali można znaleźć w książce Jacka Kudrewicza Fraktale i chaos, WNT, Warszawa, Niektóre z tych metod zostały opisane na stronie: 6

8 Im więcej punktów wyliczymy tym efekt wizualny będzie lepszy. Kod programu rysującego omawiany fraktal składa się ze zmienionej procedury inicjalizuj (rozmiar ekranu zapisany jest w zmiennych zainicjalizowanych) oraz z procedury draw posiadającej dwa parametry formalne, będące współrzędnymi punktu początkowego dla metody obliczania fraktala. Ten punkt nie jest rysowany. Kolejne punkty są wyliczane wewnątrz pętli while. Najpierw losowany jest układ równań, który zostanie użyty do obliczenia współrzędnych nowego punktu, następnie wyliczane są te współrzędne. Do narysowania odpowiadającego im piksela używana jest procedura al putpixel. Niestety, nie istnieje jednoznaczne odwzorowanie punktów na piksle, gdyż punkty mają współrzędne rzeczywiste, a piksle całkowite. Musimy więc użyć funkcji trunc do przeliczenia współrzędnych punktu na współrzędne piksela. Zanim to nastąpi współrzędne punktu są skalowane (mnożone) przez współczynnik 14. Tak wyliczone współrzędne piksela są odejmowane od 640 (rzędna) i 730 (odcięta), co sprawia, że obraz jest widoczny w połowie szerokości ekranu, powiększony i nie jest odwrócony. Wszystkie piksele otrzymane w ten sposób są zaznaczane na ekranie na zielono, bowiem rysowany fraktal nazywany jest choinką z uwagi na swój kształt. Pętla while jest wykonywana do momentu naciśnięcia przez użytkownika dowolnego klawisza. 1 program s i n u s ; 2 3 u s e s 4 a l l e g r o ; 5 6 procedure i n i c j a l i z u j ( width, h e i g h t : l o n g i n t ) ; 7 begin 8 i f not a l i n i t then 9 begin 10 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 11 r e a d l n ; 12 h a l t ( 1 ) ; 13 end ; 14 i f not a l i n s t a l l k e y b o a r d then 15 begin 16 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 17 r e a d l n ; 18 h a l t ( 1 ) ; 19 end ; 20 a l s e t c o l o r d e p t h ( 3 2 ) ; 21 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, width, height, 0, 0 ) then 22 begin 23 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 24 r e a d l n ; 25 h a l t ( 1 ) ; 26 end ; 27 end ; procedure drawsinus ; 31 c o n s t 32 deg2rad = p i / ; 33 var 34 x, x1, h a l f s c r, x r a t i o : l o n g i n t ; 35 y, y1 : r e a l ; 36 begin 37 x :=0; 38 h a l f s c r :=AL SCREEN H shr 1 ; 39 x r a t i o :=AL SCREEN W div ; 40 y :=0; 41 f o r x1 :=1 to 360 do 42 begin 43 y1:= h a l f s c r s i n ( x1 deg2rad ) ; 44 a l l i n e (AL SCREEN, x r a t i o x, h a l f s c r round ( y ), x r a t i o x1, h a l f s c r round ( y1 ), a l m a k e c o l ( 0, 2 5 5, 0 ) ) ; 45 y:=y1 ; 46 x:=x1 ; 47 end ; 48 end ; begin 51 i n i c j a l i z u j ( , ) ; 7

9 52 drawsinus ; 53 w h i l e ( ( a l k e y [ AL KEY Q]=0) and ( a l k e y [ AL KEY ESC]=0) ) do ; 54 a l e x i t ; 55 end. Listing 4: Sinus Program z listingu 4 rysuje na ekranie jeden okres funkcji sinus. W skład kodu źródłowego wchodzi procedura inicjalizuj, tym razem z dwoma parametrami, które określają wielkość ekranu oraz procedura drawsinus. Rysowanie wykresu funkcji odbywa się za pomocą tej ostatniej. Stała deg2rad zdefiniowana wewnątrz procedury jest używana do przeliczenia stopni na radiany. Rzędne punktów są przechowywane w zmiennych x i x1 typu integer, a odcięte w zmiennych y i y1 typu real. Zmienne halfscr i x ratio służą do przechowywania połowy wysokości ekranu i liczby pikseli w poziomie przypadających na jeden stopień. Pierwszą czynnością wykonywaną w procedurze drawsinus jest inicjalizacja zmiennych odpowiednimi wartościami (wiersze 37-40). Połowa wysokości ekranu wyliczana jest (wiersz 38) przez przesunięcie w prawo o jeden wartości zmiennej al screen h. Odpowiada to całkowitemu dzieleniu tej wartości przez dwa, ale jest szybsze w działaniu. Liczba pikseli przypadających na stopień wyliczana jest poprzez podzielenie wartości zmiennej al screen w przez 360 (wiersz 39). Dzięki tak obliczonym wartościom tych zmiennych sinus będzie narysowany w połowie wysokości ekranu i na jak największej jego powierzchni 9. Rysowanie wykresu funkcji odbywa się w pętli for. W wierszu 43 wyliczana jest odcięta (y1) punktu należącego do wykresu, którego rzędna wynosi x1. Do tego celu używana jest funkcja sin będąca częścią języka Pascal. Jej wynik mnożony jest przez połowę wysokości ekranu. Inaczej, ze względu na to, że sinus ma wartości z przedziału [-1,1], na ekranie zobaczylibyśmy tylko zniekształconą prostą. Do funkcji sin przekazywana jest rzędna x1 pomnożona przez wartość deg2rad. Fragment wykresu, od punktu (x, y) do punktu (x1, y1) jest rysowany za pomocą wywołania procedury al line. Rzędne tych punktów są skalowane przez wartość zmiennej x ratio, a odcięte zaokrąglane przez funkcję round i odejmowane od wartości zmiennej halfscr. Po wywołaniu tej procedury wartości zamiennych x1 i y1 są przypisywane zmiennym x i y. Dzięki temu bieżący punkt do którego wykres został narysowany staje się punktem od którego będzie rysowany nowy fragment wykresu. Dodatkowo gwarantuje to ciągłość rysowanego sinusa. W bloku głównym, po wywołaniu procedury drawsinus, program w pętli while oczekuje aż użytkownik naciśnie klawisz q lub Escape (wiersz 53) proszę zwrócić uwagę, że ta pętla jest pusta - po słowie kluczowym do jest średnik. 1 program p i m o n t e c a r l o ; 2 3 u s e s 4 a l l e g r o, c r t ; 5 6 procedure i n i c j a l i z u j ; 7 c o n s t 8 width : i n t e g e r = ; 9 h e i g h t : i n t e g e r = ; 10 begin 11 i f not a l i n i t then 12 begin 13 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 14 r e a d l n ; 15 h a l t ( 1 ) ; 16 end ; 17 i f not a l i n s t a l l k e y b o a r d then 18 begin 19 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 20 r e a d l n ; 21 h a l t ( 1 ) ; 22 end ; 23 a l s e t c o l o r d e p t h ( 3 2 ) ; 24 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, width, height, 0, 0 ) then 25 begin 26 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 27 r e a d l n ; 28 h a l t ( 1 ) ; 9 Ze względu na zaokrąglenie wartości zmiennej x ratio nie będzie to cała szerokość ekranu. 8

10 29 end ; 30 end ; procedure l p i ; 33 type 34 n a t u r a l n e = 0.. maxlongint ; 35 c o n s t 36 r =300; 37 xs =650; 38 ys =400; 39 var 40 n,m: n a t u r a l n e ; 41 x, y : i n t e g e r ; 42 s, s1 : s t r i n g ; 43 xr, yr, p i : r e a l ; 44 begin 45 m: =0; 46 n :=0; 47 s := ; 48 s1 := ; 49 a l c l e a r k e y b u f ; 50 w h i l e not a l k e y p r e s s e d do 51 begin 52 xr:= r+random ( 2 r )+random ; 53 yr:= r+random ( 2 r )+random ; 54 x:= trunc ( xr ) ; 55 y:= trunc ( yr ) ; 56 i n c ( n ) ; 57 i f s q r t ( s q r ( xr )+s q r ( yr ) )<=r then 58 begin 59 a l p u t p i x e l ( a l s c r e e n, x+xs, y+ys, a l m a k e c o l ( 2 5 5, 0, 0 ) ) ; 60 i n c (m) ; 61 end 62 e l s e a l p u t p i x e l ( a l s c r e e n, x+xs, y+ys, a l m a k e c o l ( 0, 2 5 5, 0 ) ) ; 63 i f m mod 5000 = 0 then 64 begin 65 p i :=4 m/n ; 66 a l t e x t o u t e x ( a l s c r e e n, a l f o n t, P r z y b l i z o n a wartosc PI : +s, 5 0 0, 5 0, a l m a k e c o l ( 0, 0, 0 ), 1) ; 67 s t r ( p i : 0 : 2 0, s ) ; 68 a l t e x t o u t e x ( a l s c r e e n, a l f o n t, P r z y b l i z o n a wartosc PI : +s, 5 0 0, 5 0, a l m a k e c o l ( 2 5 5, 2 5 5, ), 1) ; 69 a l t e x t o u t e x ( a l s c r e e n, a l f o n t, Liczba i t e r a c j i : +s1, 5 0 0, 6 0, a l m a k e c o l ( 0, 0, 0 ), 1) ; 70 s t r ( n, s1 ) ; 71 a l t e x t o u t e x ( a l s c r e e n, a l f o n t, Liczba i t e r a c j i : +s1, 5 0 0, 6 0, a l m a k e c o l ( 2 5 5, 2 5 5, ), 1) ; 72 end ; 73 end ; 74 end ; begin 77 randomize ; 78 i n i c j a l i z u j ; 79 l p i ; 80 a l e x i t ; 81 end. Listing 5: Liczba π Istnieje wiele sposobów wyliczenia wartości liczby π. Jednym z nich jest zastosowanie metody należącej do zbioru algorytmów określanych wspólnym mianem metod Monte Carlo. Odkrycie tych metod zawdzięczamy polskiemu matematykowi, pracującemu w Stanach Zjednoczonych, Stanisławowi Ulamowi. Ich działanie opiera się na liczbach losowych. Są one używane do otrzymywania przybliżonych wartości rozwiązań równań, których nie można wyznaczyć w sposób analityczny, lub rozwiązanie ich innym sposobem byłoby zbyt czasochłonne. Do takich metod zaliczana jest opisana niżej metoda 10 na obliczenie 10 Opis tej i innych metod wyznaczania wartości liczby π znajduje się na stronie prowadzonej przez Eve Astrid Anderson: 9

11 przybliżonej wartości liczby π. Załóżmy, że mamy koło wpisane w kwadrat. Bok kwadratu jest wtedy dwa razy dłuższy od promienia koła. Stosunek pola koła do pola kwadratu wynosi zatem π r2 = π (2 r) 2 4. Losujemy punkty wewnątrz kwadratu i sprawdzamy, czy leżą one również wewnątrz koła. Niech m będzie liczbą punktów, które leżą wewnątrz koła, a n liczbą wszystkich wylosowanych punktów. Przybliżona wartość liczby π będzie wynosiła π 4 m n. Program, który ilustruje użycie tej metody znajduje się w listingu 5. Najważniejsze operacje wykonywane w programie zawarte są w procedurze lpi. Zdefiniowany jest tam typ naturalne, który obejmuje swym zakresem liczby naturalne od 0 do maxlongint, oraz trzy stałe: r=300 oznaczająca długość promienia koła, oraz xs=650 i ys=400 oznaczające współrzędne środka wyświetlanego obrazu. Zmienne x i y są współrzędnymi zaznaczanych pikseli, zmienne s i s1 typu string będą wykorzystywane podczas konwersji wartości liczb π na łańcuchy znaków. Zmienne xr i yr będą przechowywać współrzędne wylosowanych punktów. Zmienna pi będzie przechowywała wyliczoną, przybliżoną wartość liczby π. Wykonanie procedury rozpoczyna się inicjalizacji zmiennych m i n, którym przypisywana jest wartość 0 i zmiennych s i s1, którym przypisywane są łańcuchy puste. Następnie w pętli while, losowane są współrzędne punktów leżących wewnątrz kwadratu o środku w punkcie o współrzędnych (0, 0). Kolejną czynnością wykonywaną w tej pętli, jest konwersja współrzędnych rzeczywistych punktu, na współrzędne całkowite piksela i zwiększenie wartości zmiennej n o 1. W instrukcji warunkowej if program sprawdza, czy wylosowany punkt należy także do koła. Zgodnie z definicją koła, wszystkie punkty należące do niego leżą względem jego środka, w odległości mniejszej lub równej długości jego promienia. Ponieważ środek koła użytego w programie położony jest w punkcie o współrzędnych (0, 0), to odległość punktu od środka koła można wyznaczyć ze wzoru Euklidesa: x 2 + y 2. Jeśli punkt należy do wnętrza koła, to odpowiadający mu piksel jest jest kolorowany na czerwono i zwiększana jest wartość m. Jeśli nie, to piksel jest zaznaczany na zielono. W obu przypadkach do współrzędnych piksela dodawane są stałe xs i ys, aby obraz był widoczny w całości i znajdował się w pobliżu środka ekranu 11. Co 5000 iteracji pętli wyliczana jest wartość π (wiersz 65) i wypisywana na ekranie, wraz z informacją o liczbie wykonanych iteracji. Częstsze wypisywanie tych wartości znacznie spowolniłoby wykonanie programu. Proszę zwrócić również uwagę na sposób wypisywania tekstu na ekranie. Najpierw jest wypisywane są na czarno wartości ciągów znaków, aby wymazać poprzednią zawartość ekranu (wiersze 66 i 69), a dopiero potem wypisywana jest wartość bieżąca (wiersze 68 i 71). Ponieważ procedura al textout ex wypisuje tylko ciągi znaków, to wartości zmiennych m i n najpierw należy skonwertować do takiej postaci za pomocą procedury str (wiersze 67 i 70), a dopiero potem wypisać. Pętla while kończy się jeśli użytkownik naciśnie dowolny klawisz na klawiaturze. 1 program animate ; 2 3 u s e s a l l e g r o ; 4 5 c o n s t 6 npages =2; 7 8 procedure i n i c j a l i z u j ( width, h e i g h t : l o n g i n t ) ; 9 begin 10 i f not a l i n i t then 11 begin 12 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 13 r e a d l n ; 14 h a l t ( 1 ) ; 15 end ; 16 i f not a l i n s t a l l k e y b o a r d then 17 begin 18 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 19 r e a d l n ; 20 h a l t ( 1 ) ; 21 end ; 22 a l s e t c o l o r d e p t h ( 3 2 ) ; 23 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, width, height, npages width, npages h e i g h t ) then 24 begin 25 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 26 r e a d l n ; 11 Warto zwrócić uwagę, że obraz w tym programie jest odwrócony. Ponieważ jest on symetryczny, to nie wpływa to na jego treść. 10

12 27 h a l t ( 1 ) ; 28 end ; 29 end ; procedure draw ; 32 type 33 p a g e s t a b l e = array [ 0.. npages 1] o f AL BITMAPptr ; 34 var 35 pages : p a g e s t a b l e ; 36 a c t i v e p a g e : AL BITMAPptr ; 37 i : byte ; 38 x : l o n g i n t ; 39 begin 40 f o r i := low ( pages ) to high ( pages ) do 41 begin 42 pages [ i ]:= a l c r e a t e v i d e o b i t m a p (AL SCREEN W, AL SCREEN H) ; 43 i f pages [ i ]=NIL then 44 begin 45 a l m e s s a g e ( Blad alokowania pamieci na s t r o n y. ) ; 46 r e a d l n ; 47 a l e x i t ; 48 h a l t ( 1 ) ; 49 end ; 50 end ; 51 x :=0; 52 i := low ( pages ) ; 53 a c t i v e p a g e := pages [ i ] ; 54 r e p e a t 55 a l c l e a r t o c o l o r ( a c t i v e p a g e, a l m a k e c o l ( 0, 0, 0 ) ) ; 56 a l r e c t ( a c t i v e p a g e, x mod AL SCREEN W, ( AL SCREEN H shr 1),100+x mod AL SCREEN W, ( AL SCREEN H shr 1) +100, a l m a k e c o l ( 2 5 5, 2 5 5, 0 ) ) ; 57 i n c ( x, 5 ) ; 58 a l s h o w v i d e o b i t m a p ( a c t i v e p a g e ) ; 59 i :=( i +1) mod npages ; 60 a c t i v e p a g e := pages [ i ] ; 61 u n t i l ( a l k e y [ AL KEY ESC]<>0) or ( a l k e y [ AL KEY Q]<>0) ; 62 f o r i := low ( pages ) to high ( pages ) do 63 a l d e s t r o y b i t m a p ( pages [ i ] ) ; 64 end ; begin 67 i n i c j a l i z u j ( , ) ; 68 draw ; 69 a l e x i t ; 70 end. Listing 6: Animacja - prostokąt Program z listingu 6 pokazuje prostą animację na ekranie komputera - poruszający się w prawo kwadrat o długości boku równej 100 pikseli. Do wykonania tej animacji użyto mechanizmu stron. Ich liczba jest określona stałą napages. Proszę zwrócić uwagę, że procedura inicjalizuj w tym programie wywołuje procedurę al set gfx mode z dwoma ostatnimi parametrami różnymi od zera. Określają one wielkość ekranu wirtualnego na którym będą rozmieszczone bitmapy opisujące strony. Wielkość ta jest wielokrotnością szerokości i wysokości widocznego ekranu. Animacja rysowana jest w procedurze draw. Zawiera ona tablicę elementów typu al bitmapptr o nazwie pages i liczbie elementów odpowiadającej liczbie użytych stron. Zadeklarowana jest w niej także zmienna active page, typu bitmapptr oraz zmienna i typu byte i zmienna x typu longint. W pierwszej pętli for (wiersze 40-50) procedura przydziela pamięć na strony. Jeśli nie udałoby się przydzielić pamięci na jedną ze stron, to element tablicy jej odpowiadający miałby wartość nil. Po zakończeniu tej pętli inicjalizowana są zmienne x (współrzędna pozioma w animacji), i (indeks tablic npages), oraz active page (wskazuje na tę stronę na której program będzie rysował kolejną klatkę). W pętli repeat... until, która kończy się w momencie naciśnięcia przez użytkownika klawisza q lub Escape, program rysuje i wyświetla kolejne klatki animacji. Najpierw czyszczona jest bitmapa związana z aktywną stroną poprzez ustawienie koloru jej powierzchni na czarny. Następnie rysowany jest na niej kwadrat o wymiarach 100 pikseli na 100. Współrzędne poziome lewego górnego i prawego dolnego rogu dzielone są modulo szerokość ekranu. Dzięki temu jeśli kwadrat zawędruje poza prawą krawędź ekranu, to w następnej klatce będzie rysowany po lewej jego stronie. Do współrzędnych 11

13 pionowych tych rogów dodawana jest połowa wysokości ekranu, dzięki czemu animacja widoczna jest w okolicach jego środka. Następnie zwiększana jest o 5 wartość zmiennej x i wyświetlana jest klatka animacji zapisana na stronie aktywnej (wiersz 58). Po wykonaniu tych działań zwiększana jest wartość indeksu tablicy modulo liczba jej elementów. Ponieważ tablica ta indeksowana jest od zera, to takie działanie zapewnia, że wartość zmiennej i zmienia się cyklicznie od 0 do npages-1. Ostatnią czynnością wykonywaną w pętli, poza sprawdzeniem warunku zakończenia, jest wskazanie nowej aktywnej strony (wiersz 60). Po zakończeniu pętli repeat... until w pętli for zwalniana jest pamięć przydzielona na strony. 1 program animate ; 2 3 u s e s a l l e g r o, c r t ; 4 5 type 6 b a l l = r e c o r d 7 x, y : l o n g i n t ; 8 r : byte ; 9 dx, dy : s h o r t i n t ; 10 end ; c o n s t 13 npages = 2 ; var 16 ba : b a l l ; procedure i n i c j a l i z u j ( width, h e i g h t : l o n g i n t ) ; 19 begin 20 i f not a l i n i t then 21 begin 22 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 23 r e a d l n ; 24 h a l t ( 1 ) ; 25 end ; 26 i f not a l i n s t a l l k e y b o a r d then 27 begin 28 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 29 r e a d l n ; 30 h a l t ( 1 ) ; 31 end ; 32 a l s e t c o l o r d e p t h ( 3 2 ) ; 33 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, width, height, npages width, npages h e i g h t ) then 34 begin 35 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 36 r e a d l n ; 37 h a l t ( 1 ) ; 38 end ; 39 end ; procedure s e t b a l l ( var b : b a l l ) ; 42 begin 43 randomize ; 44 b. x:=random (AL SCREEN W shr 1) +20; 45 b. y:=random (AL SCREEN H shr 1) +20; 46 b. r :=20; 47 b. dx :=10; 48 b. dy:= 10; 49 end ; procedure draw ( var b : b a l l ) ; 52 type 53 p a g e s t a b l e = array [ 0.. npages 1] o f AL BITMAPptr ; 54 var 55 pages : p a g e s t a b l e ; 56 a c t i v e p a g e : AL BITMAPptr ; 57 i : byte ; 58 begin 59 f o r i := low ( pages ) to high ( pages ) do 12

14 60 begin 61 pages [ i ]:= a l c r e a t e v i d e o b i t m a p (AL SCREEN W, AL SCREEN H) ; 62 i f pages [ i ]=NIL then 63 begin 64 a l e x i t ; 65 w r i t e l n ( Blad alokowania pamieci na s t r o n y. ) ; 66 r e a d l n ; 67 h a l t ( 1 ) ; 68 end ; 69 end ; 70 i := low ( pages ) ; 71 a c t i v e p a g e := pages [ i ] ; 72 r e p e a t 73 a l c l e a r t o c o l o r ( a c t i v e p a g e, a l m a k e c o l ( 0, 0, 0 ) ) ; 74 a l c i r c l e ( a c t i v e p a g e, b. x, b. y, b. r, a l m a k e c o l ( 2 5 5, 2 5 5, 0 ) ) ; 75 a l s h o w v i d e o b i t m a p ( a c t i v e p a g e ) ; 76 b. x:=b. x+b. dx ; 77 b. y:=b. y+b. dy ; 78 i f ( b. x b. r <=0) or ( b. x+b. r>=al SCREEN W) then b. dx:= b. dx ; 79 i f ( b. y b. r <=0) or ( b. y+b. r>=al SCREEN H) then b. dy:= b. dy ; 80 i :=( i +1) mod npages ; 81 a c t i v e p a g e := pages [ i ] ; 82 u n t i l ( a l k e y [ AL KEY ESC]<>0) or ( a l k e y [ AL KEY Q]<>0) ; 83 f o r i := low ( pages ) to high ( pages ) do 84 a l d e s t r o y b i t m a p ( pages [ i ] ) ; 85 end ; begin 88 i n i c j a l i z u j ( , ) ; 89 s e t b a l l ( ba ) ; 90 draw ( ba ) ; 91 a l e x i t ; 92 end. Listing 7: Animacja - piłka Program, który jest zaprezentowany w listingu 7 tworzy trochę bardziej skomplikowana animację. Rysuje on żółtą piłkę, która odbija się od brzegów ekranu zgodnie z regułą kąta padania i odbicia, znaną z lekcji fizyki. Piłka ta będzie reprezentowana na ekranie jako okrąg. Aby program mógł wykonać przedstawione zadanie musi znać wszystkie niezbędne informacje dotyczące stanu piłki. Został w nim zatem zdefiniowany typ rekordowy o nazwie ball. Pola tego typu rekordowego będą przechowywały wspomniane informacje. Pola x i y przechowują informacje o bieżącym położeniu środka piłki, pole r przechowuje długość promienia piłki, natomiast pola dx i dy przechowują, odpowiednio składową poziomą i pionową wektora prędkości piłki. Procedura initialize jest taka sama jak w programie z listingu 6. Procedura setball, jako argument wywołania przyjmuje zmienną typu ball i odpowiedzialna jest za jej inicjalizację. Współrzędne środka piłki są losowane, ale w ten sposób, aby piłka całym swoim obwodem znajdowała się na ekranie. Długość promienia piłki jest ustalana na 20 pikseli, natomiast składowa pozioma wektora prędkości na 10, a pionowa na -10. Ponieważ wartości bezwzględne obu składowych są równe, to piłka będzie zderzała się z krawędzią ekranu pod kątem 45 i pod takim samym kątem zostanie odbita. Składowa pionowa jest również ujemna, a pozioma dodatnia, więc do pierwszego odbicia piłka będzie się poruszała się w górę i w prawo. Animacja piłki odbywa się w procedurze draw. Jej konstrukcja jest podobna do konstrukcji procedury draw z listingu 6. Zasadnicze różnice występują wewnątrz pętli repeat... until. Wewnątrz niej kolor bieżącej strony jest ustawiany na czarny, rysowany jest okrąg według danych zawartych w rekordzie typu ball i strona zostaje wyświetlona na ekranie (wiersze 73-75). Następnie wyznaczane jest położenie piłki w następnej klatce animacji. Do jej współrzędnych dodawane są wartości składowej poziomej i pionowej wektora prędkości (wiersze 76 i 77). Potem program sprawdza, czy w nowym położeniu piłka nie dotyka brzegiem którejś z poziomych (wiersz 78) lub pionowych (wiersz 79) krawędzi ekranu. Ponieważ ten test przebiega w obu przypadkach podobnie, to zostanie opisany tylko ten z pierwszej instrukcji warunkowej. Wykrycia zderzenia z prawą krawędzią można dokonać odejmując od współrzędnej poziomej środka okręgu jego promień i sprawdzając, czy otrzymana wartość jest równa lub mniejsza od zera. Zderzenie z lewą krawędzią wykrywa się dodając do tej współrzędnej długość promienia okręgu i porównując otrzymaną wartość z szerokością ekranu. Jeśli któryś z tych testów da odpowiedź pozytywną, to należy zmienić znak składowej poziomej prędkości piłki na przeciwny. Reszta 13

15 procedury draw jest taka sama jak w programie z listingu 6. W bloku główny przed jej wywołaniem wywoływana jest procedura set ball. 1 program e f e k t y ; 2 3 u s e s 4 a l l e g r o ; 5 6 procedure i n i c j a l i z u j ( width, h e i g h t : l o n g i n t ) ; 7 begin 8 i f not a l i n i t then 9 begin 10 w r i t e l n ( Blad i n i c j a l i z a c j i b i b l i o t e k i A l l e g r o! ) ; 11 r e a d l n ; 12 h a l t ( 1 ) ; 13 end ; 14 i f not a l i n s t a l l k e y b o a r d then 15 begin 16 a l m e s s a g e ( Blad i n i c j a l i z a c j i k l a w i a t u r y! ) ; 17 r e a d l n ; 18 h a l t ( 1 ) ; 19 end ; 20 a l s e t c o l o r d e p t h ( 3 2 ) ; 21 i f not a l s e t g f x m o d e (AL GFX AUTODETECT FULLSCREEN, width, height, 0, 0 ) then 22 begin 23 a l m e s s a g e ( Blad u s t a w i a n i a trybu g r a f i c z n e g o! ) ; 24 r e a d l n ; 25 h a l t ( 1 ) ; 26 end ; 27 end ; procedure ordraw ; 30 var 31 x, y : l o n g i n t ; 32 begin 33 f o r x:=0 to AL SCREEN W do 34 f o r y:=0 to AL SCREEN H do 35 a l p u t p i x e l (AL SCREEN, x, y, a l m a k e c o l ( ( x or y ) mod 2 5 6, ( x or y ) mod 2 5 6, ( x or y ) mod 256) ) ; 36 a l t e x t o u t c e n t r e e x (AL SCREEN,AL FONT, or,al SCREEN W div 2, AL SCREEN H div 2, a l m a k e c o l ( 0, 0, ), 1) ; 37 end ; procedure anddraw ; 40 var 41 x, y : l o n g i n t ; 42 begin 43 f o r x:=0 to AL SCREEN W do 44 f o r y:=0 to AL SCREEN H do 45 a l p u t p i x e l (AL SCREEN, x, y, a l m a k e c o l ( ( x and y ) mod 2 5 6, ( x and y ) mod 2 5 6, ( x and y ) mod 256) ) ; 46 a l t e x t o u t c e n t r e e x (AL SCREEN,AL FONT, and,al SCREEN W div 2, AL SCREEN H div 2, a l m a k e c o l ( 2 5 5, 0, 0 ), 1) ; 47 end ; procedure xordraw ; 50 var 51 x, y : l o n g i n t ; 52 begin 53 f o r x:=0 to AL SCREEN W do 54 f o r y:=0 to AL SCREEN H do 55 a l p u t p i x e l (AL SCREEN, x, y, a l m a k e c o l ( ( x xor y ) mod 2 5 6, ( x xor y ) mod 2 5 6, ( x xor y ) mod 256) ) ; 56 a l t e x t o u t c e n t r e e x (AL SCREEN,AL FONT, xor,al SCREEN W div 2, AL SCREEN H div 2, a l m a k e c o l ( 2 5 5, 0, 0 ), 1) ; 57 end ; procedure muldraw ; 60 var 61 x, y : l o n g i n t ; 14

16 62 begin 63 f o r x:=0 to AL SCREEN W do 64 f o r y:=0 to AL SCREEN H do 65 a l p u t p i x e l (AL SCREEN, x, y, a l m a k e c o l ( ( x y ) mod 2 5 6, ( x y ) mod 2 5 6, ( x y ) mod 256) ) ; 66 a l t e x t o u t c e n t r e e x (AL SCREEN,AL FONT,,AL SCREEN W div 2, AL SCREEN H div 2, a l m a k e c o l ( 0, 0, ), 1) ; 67 end ; procedure s i e r p i n s k i ; 70 var 71 x, y : l o n g i n t ; 72 begin 73 f o r x:=0 to AL SCREEN W 343 do 74 f o r y:=0 to AL SCREEN H do 75 i f x and y = 0 then 76 a l p u t p i x e l (AL SCREEN, x, y, a l m a k e c o l ( 2 5 5, 2 5 5, ) ) ; 77 end ; procedure w a i t f o r k e y ; 81 begin 82 a l c l e a r k e y b u f ; 83 w h i l e a l k e y [ AL KEY SPACE]=0 do ; 84 end ; begin 87 i n i c j a l i z u j ( , ) ; 88 s i e r p i n s k i ; 89 w a i t f o r k e y ; 90 ordraw ; 91 w a i t f o r k e y ; 92 anddraw ; 93 w a i t f o r k e y ; 94 xordraw ; 95 w a i t f o r k e y ; 96 muldraw ; 97 w a i t f o r k e y ; 98 a l e x i t ; 99 end. Listing 8: Tekstury Dosyć często w grafice komputerowej zachodzi konieczność wypełnienia pewnego obszaru obrazu wzorcem (teksturą). Jeśli chcemy aby tło lub jego fragment miało ciekawe wypełnienie, to zamiast stosować gotowe podprogramy możemy użyć prostszej techniki polegającej na wyliczeniu koloru danego piksela na podstawie jego współrzędnych, przy użyciu takich operatorów, jak or, xor, not, and, +, -, *. Taka możliwość została zademonstrowana w programie z listingu 8. Procedury xordraw, anddraw, ordraw oraz muldraw wypełniają ekran monitora pikselami, w których każda składowa koloru wyliczana jest odpowiednio jako: różnica symetryczna współrzędnej poziomej i pionowej piksela, iloczyn logiczny tych współrzędnych, suma logiczna oraz zwykły iloczyn. Ponieważ wartości współrzędnych mogą być większe od 255, to po wykonaniu każdej z tych operacji wynik jest dzielony modulo 256. Ostatnia z wymienionych procedur tworzy tzw. efekt mojry. Każda procedura wyświetla na środku ekranu symbol operatora dzięki któremu powstał widoczny na ekranie efekt. Niestety, ze względu na wielkość domyślnej czcionki modułu Allegro.pas napis ten jest słabo widoczny, dlatego w różnych procedurach jest on wpisywane w różnych kolorach, aby zwiększyć jego widoczność. Ostatnia ze zdefiniowanych procedur, które tworzą obraz (sierpinski) rysuje fraktal, którego nazwa pochodzi od nazwiska jego odkrywcy. Jest on nazywany trójkątem Sierpińskiego. Algorytm generowania takiego obrazu okazuje się być bardzo prosty: jeśli iloczyn logiczny współrzędnych piksela jest równy zero, to taki piksel zaznaczamy na biało, w przeciwnym przypadku pozostawiamy go bez zmian (jest czarny). Zakresy liczników pętli for w tej procedurze zostały tak dobrane, aby na ekranie ukazał się tylko jeden trójkąt Sierpińskiego. W programie jest zdefiniowana również procedura wait for key. Czyści ona bufor klawiatury i oczekuje w pustej pętli while aż użytkownik naciśnie klawisz spacji. 15

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

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

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne. TEMAT 8: Moduły standardowe Pakiet crt zawiera procedury i funkcje, które pozwalają na sterowanie trybem ekranu, kolorami, oknami i dźwiękiem. Opisy procedur są zawarte w pliku pomocy, można je wyświetlić z menu Help Standard units

Bardziej szczegółowo

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup Baltie 3 Podręcznik do nauki programowania dla klas I III gimnazjum Tadeusz Sołtys, Bohumír Soukup Czytanie klawisza lub przycisku myszy Czytaj klawisz lub przycisk myszy - czekaj na naciśnięcie Polecenie

Bardziej szczegółowo

Pascal - wprowadzenie

Pascal - wprowadzenie Pascal - wprowadzenie Ogólne informacje o specyfice języka i budowaniu programów Filip Jarmuszczak kl. III c Historia Pascal dawniej jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2) Grafika w Pascalu. Do tej pory, tworząc programy w Pascalu, wykorzystywaliśmy jedynie tryb tekstowy. Jednak Pascal, tak jak i inne języki programowania, umoŝliwia korzystanie równieŝ z trybu graficznego.

Bardziej szczegółowo

. Podstawy Programowania 1. Podstawy Grafiki 2D - część pierwsza Biblioteka Allegro. Arkadiusz Chrobot. 28 stycznia 2016

. Podstawy Programowania 1. Podstawy Grafiki 2D - część pierwsza Biblioteka Allegro. Arkadiusz Chrobot. 28 stycznia 2016 .. Podstawy Programowania 1 Podstawy Grafiki 2D - część pierwsza Biblioteka Allegro Arkadiusz Chrobot Zakład Informatyki 28 stycznia 2016 1 / 28 Plan.1 Wprowadzenie.2 Inicjacja i finalizacja.3 Rysowanie

Bardziej szczegółowo

Podstawy Programowania 1 Podstawy Grafiki 2D - część pierwsza Biblioteka Allegro. Plan. Wprowadzenie. Inicjacja i finalizacja. Notatki.

Podstawy Programowania 1 Podstawy Grafiki 2D - część pierwsza Biblioteka Allegro. Plan. Wprowadzenie. Inicjacja i finalizacja. Notatki. Podstawy Programowania 1 Podstawy Grafiki 2D - część pierwsza Biblioteka Allegro Arkadiusz Chrobot Zakład Informatyki 28 stycznia 2016 1 / 28 Plan Wprowadzenie Rysowanie prymitywów Obsługa klawiatury Animacja

Bardziej szczegółowo

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

Pascal - grafika. Uruchomienie trybu graficznego. Moduł graph. Domyślny tryb graficzny Moduł graph Pascal - grafika Pascal zawiera standardowy moduł do tworzenia obiektów graficznych linii, punktów, figur geometrycznych itp. Chcąc go użyć należy w programie (w nagłówku) wstawić deklarację:

Bardziej szczegółowo

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

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych;

Bardziej szczegółowo

Wykład VII PASCAL - grafika;

Wykład VII PASCAL - grafika; Podstawy programowania Wykład VII PASCAL - grafika; 1 Procedura InitGraph() InitGraph ( var sterownik,tryb:integer; katalog:string ); biblioteka: GRAPH Służy do włączenia trybu graficznego. Możliwe sterowniki

Bardziej szczegółowo

Programowanie w Turbo Pascal

Programowanie w Turbo Pascal Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji

Bardziej szczegółowo

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania. Elementy programu Paint Aby otworzyć program Paint, należy kliknąć przycisk Start i Paint., Wszystkie programy, Akcesoria Po uruchomieniu programu Paint jest wyświetlane okno, które jest w większej części

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

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

Wstęp do programowania. Różne różności Wstęp do programowania Różne różności Typy danych Typ danych określa dwie rzeczy: Jak wartości danego typu są określane w pamięci Jakie operacje są dozwolone na obiektach danego typu 2 Rodzaje typów Proste

Bardziej szczegółowo

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

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

Ćwiczenie 1 Automatyczna animacja ruchu

Ćwiczenie 1 Automatyczna animacja ruchu Automatyczna animacja ruchu Celem ćwiczenia jest poznanie procesu tworzenia automatycznej animacji ruchu, która jest podstawą większości projektów we Flashu. Ze względu na swoją wszechstronność omawiana

Bardziej szczegółowo

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych: Zmienna i typ Pascal typy danych Zmienna to obiekt, który może przybierać różne wartości. Typ zmiennej to zakres wartości, które może przybierać zmienna. Deklarujemy je w nagłówku poprzedzając słowem kluczowym

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

Grafika Komputerowa Materiały Laboratoryjne

Grafika Komputerowa Materiały Laboratoryjne Grafika Komputerowa Materiały Laboratoryjne Laboratorium 6 Processing c.d. Wstęp Laboratorium 6 poszerza zagadnienie generowania i przetwarzania obrazów z wykorzystaniem języka Processing 2, dedykowanego

Bardziej szczegółowo

Rysowanie punktów na powierzchni graficznej

Rysowanie punktów na powierzchni graficznej Rysowanie punktów na powierzchni graficznej Tworzenie biblioteki rozpoczniemy od podstawowej funkcji graficznej gfxplot() - rysowania pojedynczego punktu na zadanych współrzędnych i o zadanym kolorze RGB.

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

Pętle. Dodał Administrator niedziela, 14 marzec :27

Pętle. Dodał Administrator niedziela, 14 marzec :27 Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Pong to dwuwymiarowy symulator tenisa sportowego. Gracz, poruszając prostokątem symulującym paletkę, stara się zdobyć punkt poprzez posłanie piłki

Pong to dwuwymiarowy symulator tenisa sportowego. Gracz, poruszając prostokątem symulującym paletkę, stara się zdobyć punkt poprzez posłanie piłki GRA 3: PONG Pong to dwuwymiarowy symulator tenisa sportowego. Gracz, poruszając prostokątem symulującym paletkę, stara się zdobyć punkt poprzez posłanie piłki obok prostokąta drugiego gracza. Była to jedna

Bardziej szczegółowo

Praktyka programowania projekt

Praktyka programowania projekt Praktyka programowania projekt Zadanie projektowe nr. 2 Gra PacMan K. M. Ocetkiewicz, T Goluch 19 listopada 2012 Plan prezentacji Opis 2 zadania projektowego Plan prezentacji Opis 2 zadania projektowego

Bardziej szczegółowo

1. Operacje logiczne A B A OR B

1. Operacje logiczne A B A OR B 1. Operacje logiczne OR Operacje logiczne są operacjami działającymi na poszczególnych bitach, dzięki czemu można je całkowicie opisać przedstawiając jak oddziałują ze sobą dwa bity. Takie operacje logiczne

Bardziej szczegółowo

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

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

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1 Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych; Begin

Bardziej szczegółowo

Szybkie tworzenie grafiki w GcIde

Szybkie tworzenie grafiki w GcIde Szybkie tworzenie grafiki w GcIde Opracował: Ryszard Olchawa Poniższy opis dotyczy aplikacji okienkowej w systemie Windows lub Linux bazującej na obiektowej bibliotece rofrm stworzonej w środowisku GcIde.

Bardziej szczegółowo

Ćwiczenie 25 Działania matematyczne we Flashu

Ćwiczenie 25 Działania matematyczne we Flashu Działania matematyczne we Flashu ActionScript pozwala na stosowanie wszelkich działań matematycznych. Do bardziej skomplikowanych operacji wymagany jest import klasy Math. Na przykład do wygenerowania

Bardziej szczegółowo

Kurs Adobe Photoshop Elements 11

Kurs Adobe Photoshop Elements 11 Kurs Adobe Photoshop Elements 11 Gladiatorx1 Kształty, kształty własne 2015-01- 01 Spis treści Wstęp... 2 Kształty... 2 Opcje narzędzia... 2 Rysujemy kształty... 5 Opcje dodawania, odejmowania obszaru

Bardziej szczegółowo

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

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}; INSTRUKCJA PUSTA Nie składa się z żadnych znaków i symboli, niczego nie robi Przykłady: for i := 1 to 10 do {tu nic nie ma}; while a>0 do {tu nic nie ma}; if a = 0 then {tu nic nie ma}; INSTRUKCJA CASE

Bardziej szczegółowo

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał

Bardziej szczegółowo

PyGame Gra w Ponga. Spis treści

PyGame Gra w Ponga. Spis treści - 1 - PyGame Gra w Ponga Opis implementacji: Używając biblioteki PyGame oraz języka Python, stworzymy prostą grę Pong. Autorzy: Łukasz Zarzecki, Robert Bednarz Czas realizacji: 90 min Poziom trudności:

Bardziej szczegółowo

8. Dynamiczne generowanie grafiki, cz. 2

8. Dynamiczne generowanie grafiki, cz. 2 8. Dynamiczne generowanie grafiki, cz. 2 8.1. Generowanie tekstu Chociaż tekst można umieścić na grafice korzystając z HTML (używając grafiki jako tła obiektu), często wygodniej jest umieścić tekst bezpośrednio

Bardziej szczegółowo

Kiedy i czy konieczne?

Kiedy i czy konieczne? Bazy Danych Kiedy i czy konieczne? Zastanów się: czy często wykonujesz te same czynności? czy wielokrotnie musisz tworzyć i wypełniać dokumenty do siebie podobne (faktury, oferty, raporty itp.) czy ciągle

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Okna i liczby pseudolosowe

Okna i liczby pseudolosowe 8.1. Okno graficzne ViewPort Zacznijmy od rzutu oka na tabelkę graficznych funkcji i procedur bibliotecznych. Znajduje się tam procedura graficzna SetViewPort(), która służy do tworzenia okien graficznych

Bardziej szczegółowo

FINCH PONG. Realizator: Partner: Patronat:

FINCH PONG. Realizator: Partner: Patronat: FINCH PONG Realizator: Partner: Patronat: Dzisiaj nauczymy robota Finch kontrolować ruchy paletki do finch ponga. Będziemy poruszać paletką w prawo i w lewo, żeby piłka odbijała się od niej. 6. Wprowadzamy

Bardziej szczegółowo

3.4. Opis konfiguracji layoutów.

3.4. Opis konfiguracji layoutów. Definicja layout-ów dla tablicy odczytywana jest z tabeli w bazie danych: [UnitId_System] Gdańsk = 42, Gdynia = 43 [UnitId_Subsytem] 6 = TZT, 7 = ZZT [UnitId_Unit] identyfikator obiektu [Update_TimeStamp]

Bardziej szczegółowo

Zadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL

Zadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL Zadania domowe Ćwiczenie 2 Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL Zadanie 2.1 Fraktal plazmowy (Plasma fractal) Kwadrat należy pokryć prostokątną siatką 2 n

Bardziej szczegółowo

1 Wstęp teoretyczny. Temat: Obcinanie odcinków do prostokąta. Grafika komputerowa 2D. Instrukcja laboratoryjna Prostokąt obcinający

1 Wstęp teoretyczny. Temat: Obcinanie odcinków do prostokąta. Grafika komputerowa 2D. Instrukcja laboratoryjna Prostokąt obcinający Instrukcja laboratoryjna 3 Grafika komputerowa 2D Temat: Obcinanie odcinków do prostokąta Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1

Bardziej szczegółowo

1 Powtórzenie wiadomości

1 Powtórzenie wiadomości 1 Powtórzenie wiadomości Zadanie 1 Napisać program, który w trybie dialogu z użytkownikiem przyjmie liczbę całkowitą, a następnie wyświetli informację czy jest to liczba parzysta czy nieparzysta oraz czy

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

TWORZENIE OBIEKTÓW GRAFICZNYCH

TWORZENIE OBIEKTÓW GRAFICZNYCH R O Z D Z I A Ł 2 TWORZENIE OBIEKTÓW GRAFICZNYCH Rozdział ten poświęcony będzie dokładnemu wyjaśnieniu, w jaki sposób działają polecenia służące do rysowania różnych obiektów oraz jak z nich korzystać.

Bardziej szczegółowo

JAVAScript w dokumentach HTML (1)

JAVAScript w dokumentach HTML (1) JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript mogą być zagnieżdżane w dokumentach HTML. Instrukcje JavaScript

Bardziej szczegółowo

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117). 2. Zmienne i stałe Przykłady 2.1. Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117). 5 int a = 281; int b = 117; 7 8 cout

Bardziej szczegółowo

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0 Uwaga: DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0 1. Zostały pominięte diagramy: CYFRA, CYFRA SZESNASTKOWA, ZNAK i LITERA. Nie została uwzględniona możliwość posługiwania się komentarzami. 2. Brakuje

Bardziej szczegółowo

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2 Pętle wielokrotne wykonywanie ciągu instrukcji. Bardzo często w programowaniu wykorzystuje się wielokrotne powtarzanie określonego ciągu czynności (instrukcji). Rozróżniamy sytuacje, gdy liczba powtórzeń

Bardziej szczegółowo

Logo Komeniusz. Gimnazjum w Tęgoborzy. Mgr Zofia Czech

Logo Komeniusz. Gimnazjum w Tęgoborzy. Mgr Zofia Czech Logo Komeniusz Gimnazjum w Tęgoborzy Mgr Zofia Czech to język strukturalny, umożliwiający dzielenie algorytmu na wyraźnie wyodrębnione problemy, których rozwiązanie opisuje się za pomocą procedur (tzn.

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Obliczenia iteracyjne

Obliczenia iteracyjne Lekcja Strona z Obliczenia iteracyjne Zmienne iteracyjne (wyliczeniowe) Obliczenia iteracyjne wymagają zdefiniowania specjalnej zmiennej nazywanej iteracyjną lub wyliczeniową. Zmienną iteracyjną od zwykłej

Bardziej szczegółowo

1. Opis okna podstawowego programu TPrezenter.

1. Opis okna podstawowego programu TPrezenter. OPIS PROGRAMU TPREZENTER. Program TPrezenter przeznaczony jest do pełnej graficznej prezentacji danych bieżących lub archiwalnych dla systemów serii AL154. Umożliwia wygodną i dokładną analizę na monitorze

Bardziej szczegółowo

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni, Baltie Zadanie 1. Budowanie W trybie Budowanie wybuduj domek jak na rysunku. Przedmioty do wybudowania domku weź z banku 0. Zadanie 2. Czarowanie sterowanie i powtarzanie W trybie Czarowanie z pomocą czarodzieja

Bardziej szczegółowo

Część II Wyświetlanie obrazów

Część II Wyświetlanie obrazów Tło fragmentu ABA-X Display jest wyposażony w mechanizm automatycznego tworzenia tła fragmentu. Najprościej można to wykonać za pomocą skryptu tlo.sh: Składnia: tlo.sh numer oznacza numer

Bardziej szczegółowo

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D Wprowadzenie do rysowania w 3D 13 Praca w środowisku 3D Pierwszym krokiem niezbędnym do rozpoczęcia pracy w środowisku 3D programu AutoCad 2010 jest wybór odpowiedniego obszaru roboczego. Można tego dokonać

Bardziej szczegółowo

Grażyna Koba. Grafika komputerowa. materiały dodatkowe do podręcznika. Informatyka dla gimnazjum

Grażyna Koba. Grafika komputerowa. materiały dodatkowe do podręcznika. Informatyka dla gimnazjum Grażyna Koba Grafika komputerowa materiały dodatkowe do podręcznika Informatyka dla gimnazjum Rysunki i animacje w Edytorze postaci 1. Rysunek w Edytorze postaci Edytor postaci (rys. 1.) jest częścią programu

Bardziej szczegółowo

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Pzetestuj działanie pętli while i do...while na poniższym przykładzie: Pzetestuj działanie pętli while i do...while na poniższym przykładzie: Zadania pętla while i do...while: 1. Napisz program, który wczytuje od użytkownika liczbę całkowitą, dopóki podana liczba jest mniejsza

Bardziej szczegółowo

Przykład 1 wałek MegaCAD 2005 2D przykład 1 Jest to prosty rysunek wałka z wymiarowaniem. Założenia: 1) Rysunek z branży mechanicznej; 2) Opracowanie w odpowiednim systemie warstw i grup; Wykonanie 1)

Bardziej szczegółowo

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

Bardziej szczegółowo

Delphi podstawy programowania. Środowisko Delphi

Delphi podstawy programowania. Środowisko Delphi Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór

Bardziej szczegółowo

Ćwiczenie 3: Rysowanie obiektów w programie AutoCAD 2010

Ćwiczenie 3: Rysowanie obiektów w programie AutoCAD 2010 Ćwiczenie 3: Rysowanie obiektów w programie AutoCAD 2010 1 Przeznaczone dla: nowych użytkowników programu AutoCAD Wymagania wstępne: brak Czas wymagany do wykonania: 15 minut W tym ćwiczeniu Lekcje zawarte

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Spis treści. Programowanie w ImageJ. Zadanie 1. Zadanie 2

Spis treści. Programowanie w ImageJ. Zadanie 1. Zadanie 2 Spis treści 1 Programowanie w ImageJ 1.1 Zadanie 1 1.2 Zadanie 2 1.3 Zadanie 3 1.4 Zadanie 4 1.5 Zadanie 5 Programowanie w ImageJ Zadanie 1 Mamy obraz rtg płuc w formacie jpg, w 8-bitowej skali szarości.

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

2.1. Duszek w labiryncie

2.1. Duszek w labiryncie https://app.wsipnet.pl/podreczniki/strona/38741 2.1. Duszek w labiryncie DOWIESZ SIĘ, JAK sterować duszkiem, stosować pętlę zawsze, wykorzystywać blok warunkowy jeżeli. Sterowanie żółwiem, duszkiem lub

Bardziej szczegółowo

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

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka 1. Kompilacja aplikacji konsolowych w środowisku programistycznym Microsoft Visual Basic. Odszukaj w menu startowym systemu

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Warsztaty dla nauczycieli

Warsztaty dla nauczycieli WPROWADZENIE Wyprowadzanie danych: Wyprowadzanie na ekran komunikatów i wyników umożliwia instrukcja wyjścia funkcja print(). Argumentami funkcji (podanymi w nawiasach) mogą być teksty, wyrażenia arytmetyczne

Bardziej szczegółowo

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy.

Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy. Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy. #include #include #include #include

Bardziej szczegółowo

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

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Instrukcje Język Basic został stworzony w 1964 roku przez J.G. Kemeny ego i T.F. Kurtza z Uniwersytetu w Darthmouth (USA). Nazwa Basic jest

Bardziej szczegółowo

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM) ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM) LABORATORIUM 5 - LOKALIZACJA OBIEKTÓW METODĄ HISTOGRAMU KOLORU 1. WYBÓR LOKALIZOWANEGO OBIEKTU Pierwszy etap laboratorium polega na wybraniu lokalizowanego obiektu.

Bardziej szczegółowo

Grafika komputerowa. Dla DSI II

Grafika komputerowa. Dla DSI II Grafika komputerowa Dla DSI II Rodzaje grafiki Tradycyjny podział grafiki oznacza wyróżnienie jej dwóch rodzajów: grafiki rastrowej oraz wektorowej. Różnica pomiędzy nimi polega na innej interpretacji

Bardziej szczegółowo

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty. Przyszedł czas na rysowanie własnych figur, czyli prymitywy, obracanie bitmap, oraz alpha blending-czyli półprzezroczystość. Będę opisywał tylko rzeczy nowe-nie ma potrzeby abym się powtarzał. Zaczynajmny

Bardziej szczegółowo

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Projekt graficzny z metamorfozą (ćwiczenie dla grup I i II modułowych) Otwórz nowy rysunek. Ustal rozmiar arkusza na A4. Z przybornika wybierz rysowanie elipsy (1). Narysuj okrąg i nadaj mu średnicę 100

Bardziej szczegółowo

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012 Rysowanie precyzyjne 7 W ćwiczeniu tym pokazane zostaną wybrane techniki bardzo dokładnego rysowania obiektów w programie AutoCAD 2012, między innymi wykorzystanie punktów charakterystycznych. Narysować

Bardziej szczegółowo

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku WYKŁ 3 WYPŁNINI OSZRÓW. Wypełnianie wieloboku Zasada parzystości: Prosta, która nie przechodzi przez wierzchołek przecina wielobok parzystą ilość razy. Plan wykładu: Wypełnianie wieloboku Wypełnianie konturu

Bardziej szczegółowo

Rysowanie precyzyjne. Polecenie:

Rysowanie precyzyjne. Polecenie: 7 Rysowanie precyzyjne W ćwiczeniu tym pokazane zostaną różne techniki bardzo dokładnego rysowania obiektów w programie AutoCAD 2010, między innymi wykorzystanie punktów charakterystycznych. Z uwagi na

Bardziej szczegółowo

Minimalna wspierana wersja systemu Android to 2.3.3 zalecana 4.0. Ta dokumentacja została wykonana na telefonie HUAWEI ASCEND P7 z Android 4.

Minimalna wspierana wersja systemu Android to 2.3.3 zalecana 4.0. Ta dokumentacja została wykonana na telefonie HUAWEI ASCEND P7 z Android 4. Dokumentacja dla Scandroid. Minimalna wspierana wersja systemu Android to 2.3.3 zalecana 4.0. Ta dokumentacja została wykonana na telefonie HUAWEI ASCEND P7 z Android 4. Scandroid to aplikacja przeznaczona

Bardziej szczegółowo

Zapis algorytmów: schematy blokowe i pseudokod 1

Zapis algorytmów: schematy blokowe i pseudokod 1 Zapis algorytmów: schematy blokowe i pseudokod 1 Przed przystąpieniem do napisania kodu programu należy ten program najpierw zaprojektować. Projekt tworzącego go algorytmu może być zapisany w formie schematu

Bardziej szczegółowo

AutoCAD 1. Otwieranie aplikacji AutoCAD 2011. AutoCAD 1

AutoCAD 1. Otwieranie aplikacji AutoCAD 2011. AutoCAD 1 AutoCAD 1 Omówienie interfejsu programu AutoCAD (menu rozwijalne, paski przycisków, linia poleceń, linia informacyjna, obszar roboczy); rysowanie linii i okręgu; rysowanie precyzyjne z wykorzystaniem trybów

Bardziej szczegółowo

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

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa Informatyka 1 Wykład III Wyrażenia i instrukcje, złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: składnia wyrażeń, drzewa rozbioru gramatycznego i wyliczenia wartości wyrażeń, operatory

Bardziej szczegółowo

Dodatek A. Spis instrukcji języka Prophio.

Dodatek A. Spis instrukcji języka Prophio. Dodatek A. Spis instrukcji języka Prophio. Wszystkie bloczki poza bloczkami z palety robot dotyczą obiektów na scenie, bądź samej sceny. Jedynie bloczki palety robot dotyczą rzeczywistego robota, połączonego

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR

Bardziej szczegółowo

Ćwiczenie 6 Animacja trójwymiarowa

Ćwiczenie 6 Animacja trójwymiarowa Animacja trójwymiarowa Wstęp Jedną z nowości Flasha CS4 i wyższych wersji jest tworzenie animacji 3D. Są do tego przeznaczone narzędzia Obrót 3D (W) i Translacja 3D (G). Narzędzia te działają na klipach

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Co to jest arkusz kalkulacyjny?

Co to jest arkusz kalkulacyjny? Co to jest arkusz kalkulacyjny? Arkusz kalkulacyjny jest programem służącym do wykonywania obliczeń matematycznych. Za jego pomocą możemy również w czytelny sposób, wykonane obliczenia przedstawić w postaci

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Budowa i generowanie planszy

Budowa i generowanie planszy Gra Saper została napisana w. Jest dostępna w każdej wersji systemu Windows. Polega na odkrywaniu zaminowanej planszy tak, aby nie trafić na minę. Gra działa na bardzo prostej zasadzie i nie wymaga zaawansowanego

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo