Składnia: FOR zmienna:= liczba1 TO liczba2 DO ...
Jest to taka pętelka która wykonuje się określoną ilość razy, no i eeeee... kurcze nie wiem jak do dokładniej opisać nie mieszając za bardzo :) zaczniemy więc od przykładu, dwa programy które wykonują to samo,
pierwszy wykorzystujący dotychczas poznane rzeczy :
Var t:word; BEGIN t:=0; repeat t:=t+1; writeln('petelka :)'); until t=15; END.a drugi z wykorzystaniem FOR..TO..DO.. :
Var t:word; BEGIN FOR t:=1 TO 15 DO WriteLn('petelka :)'); END.O widzisz jaka fajna pętelka ? 6 linii zastąpiliśmy 1 ! A chodziło nam o to by program wyświetlił 15 razy tekst 'petelka :)' a kolejne kawałki to :
FOR - Licz t:= - używając zmiennej t 1 - od 1 TO - do 15 - 15 DO - wykonując WriteLn('petelka :)'); - wyświetl tekstKomputer napotykając na takie coś przy kolejnych przejściach robi:
Var t:word; BEGIN FOR t:=6 TO 23 DO WriteLn( t ); END.Programik wyświetlił liczby od 6 do 23 ( wyświetlał przy każdym przejściu wartość zmiennej "t" ). A zobacz teraz:
Var t:word; BEGIN FOR t:=23 DOWNTO 6 DO WriteLn( t ); END.O co się stało ? Wyświetlił teraz w odwrotnej kolejności ? A to właśnie dzięki temu że "TO" zostało zastąpione przez "DOWNTO" i teraz znaczy mniej więcej:
Var t:integer; { UWAGA TUTAJ JEST ISTOTNA ZMIANA ! } BEGIN FOR t:=-4 TO 8 DO WriteLn( t ); END.A może wyświetlilibyśmy sobie tabliczkę mnożenia ? Wykonamy taką prostą do 4 x 4, najpierw jedna linia:
Uses DOS,CRT; Var t:word; Begin ClrScr; FOR t:=1 to 4 do Begin GotoXY(t*4,1); {1} Write(t); End; End.{1} Kursor umieszczamy przy kolejnych przejściach w kolumnach: 4 (1*4), 8 (2*4), 12 (3*4) i 16 (4*4) ( czyli dokładnie w miejscu t*4 ) oraz wierszu 1 i wyświetla zmienną, tylko po co nam tylko jedna linia ? Wykonamy więc teraz tzw. pętlę zagnieżdżoną:
Uses DOS,CRT; Var t,n:word; Begin ClrScr; FOR n:=1 to 4 do {1} FOR t:=1 to 4 do Begin GotoXY(t*4,n); {2} Write(t*n); {3} End; End.ajajajaj ale się nakomplikowało :)) doszła linia {1} - dodatkowa pętla i teraz zmienne "n" i "t" przy kolejnych przejściach wynoszą:
Uses CRT; Var klawisz:boolean; Begin klawisz:=Keypressed; WriteLn(klawisz); End.Programik podstawia do zmiennej wartość "czy jakiś klawisz został wciśnięty", a następnie ją wyświetla. Ale skoro jest to funkcja to można skrócić program i wyświetlać jej wartość od razu za pomocą Write ( program wykonuje się w ciągu ułamka sekundy i właściwie ciężko uzyskać aby pojawił się napis TRUE ale zaraz zobaczysz jak sensownie użyć tej funkcji ).
Uses CRT; Begin WriteLn(Keypressed); End.A teraz zobacz jak ja najczęściej wykorzystuję tą funkcję w swoich programach:
Uses CRT; Begin Repeat Until Keypressed; {1} End.{1} Powtarzaj dopóki nie zostanie wciśnięty jakiś klawisz ( czekaj na wciśniecie klawisza ).
Uses CRT; Var a:Word; Begin a:=0; {1} Repeat WriteLn(a); {2} a:=a+1; {3} Until Keypressed; {4} End.{1} zacznij liczyć od 0
Służy do włączenia trybu graficznego. Możliwe sterowniki ( czyli rodzaje karty graficznej ) to :
1 = CGA 2 = MCGA 3 = EGA 4 = EGA64 5 = EGAMono 6 = IBM8514 7 = HercMono 8 = ATT400 9 = VGA 10 = PC3270A możliwe tryby do wyświetlenia przez daną kartę graficzną ( każdy posiada różne rozdzielczości i ilość kolorów ) to:
CGAC0 = 0 - 320 x 200, 4 kolory z palety nr 0 CGAC1 = 1 - 320 x 200, 4 kolory z palety nr 1 CGAC2 = 2 - 320 x 200, 4 kolory z palety nr 2 CGAC3 = 3 - 320 x 200, 4 kolory z palety nr 3 CGAHi = 4 - 640 x 200, 2 kolory ( czarno-białe ) MCGAC0 = 0 - 320 x 200, 4 kolory z palety nr 0 MCGAC1 = 1 - 320 x 200, 4 kolory z palety nr 1 MCGAC2 = 2 - 320 x 200, 4 kolory z palety nr 2 MCGAC3 = 3 - 320 x 200, 4 kolory z palety nr 3 MCGAMed = 4 - 640 x 200, 2 kolory ( czarno-białe ) MCGAHi = 5 - 640 x 480, 2 kolory ( czarno-białe ) EGALo = 0 - 640 x 200, 16 kolorów EGAHi = 1 - 640 x 350, 16 kolorów EGA64Lo = 0 - 640 x 200, 16 kolorów EGA64Hi = 1 - 640 x 350, 4 kolory EGAMonoHi = 0 - 640 x 480, 2 kolory ( czarno-białe ) HercMonoHi = 0 - 720 x 348, 2 kolory ( czarno-białe ) ATT400C0 = 0 - 320 x 200, 4 kolory z palety nr 0 ATT400C1 = 1 - 320 x 200, 4 kolory z palety nr 1 ATT400C2 = 2 - 320 x 200, 4 kolory z palety nr 2 ATT400C3 = 3 - 320 x 200, 4 kolory z palety nr 3 ATT400Med = 4 - 640 x 200, 2 kolory ( czarno-białe ) ATT400Hi = 5 - 640 x 400, 2 kolory ( czarno-białe ) VGALo = 0 - 640 x 200, 16 kolorów VGAMed = 1 - 640 x 350, 16 kolorów VGAHi = 2 - 640 x 480, 16 kolorów PC3270Hi = 0 - 720 x 350, 2 kolory ( czarno-białe ) IBM8514Lo = 0 - 640 x 480, 256 kolorów IBM8514Hi = 1 - 1024 x 768, 256 kolorówUWAGA !! Ponieważ wszystkie karty produkowane w ostatnich 4-5 latach posiadają sterownik VGA i tylko jego będziemy używać ( dokładnie to trybu VGAHi ). Jeżeli posiadasz starą kartę Hercules ( teraz te nowe są cool :) , CGA czy EGA to przykładowe programy będą na nich trochę dziwnie wyglądać a to z powodu właśnie tych różnych rozdzielczości i ilości kolorów.
Uses GRAPH; {1} Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; {2} InitGraph(ster, tryb, 'C:\BP\BGI' ); {3} End.{1} Zadeklarowałem do używania bibliotekę GRAPH ( to w niej właśnie są procedury i funkcje do obsługi grafiki )
EmptyFill = 0 - wypełnienie kolorem tła SolidFill = 1 - wypełnienie ciągłe LineFill = 2 - wypełnienie pogrubionymi liniami poziomymi LtSlashFill = 3 - wypełnienie liniami pochyłymi w prawo SlashFill = 4 - wypełnienie pogrubionymi liniami pochyłymi w prawo BkSlashFill = 5 - wypełnienie pogrubionymi liniami pochyłymi w lewo LtBkSlashFill = 6 - wypełnienie liniami pochyłymi w lewo HatchFill = 7 - wypełnienie siatką pionową xHatchFill = 8 - wypełnienie siatką ukośną InteerleaveFill = 9 - wypełnienie liniami splecionymi VideDotFill = 10 - wypełnienie kropkami CloseDotFill = 11 - wypełnienie zagęszczonymi kropkami UserFill = 12 - wypełnienie wzorem zdefiniowanym przez użytkownika procedurą SetFillPattern
SolidLn = 0 - ciągła DottedLn = 1 - kropkowana CenterLn = 2 - symetryczna DashedLn = 3 - przerywana UserBitLn = 4 - o wzorze zdefiniowanym przez użytkownikaWzor - jest to zdefiniowane przez użytkownika kolejne 16 pikseli nowej nietypowej linii ( rodzlin=4 ). Jeżeli rodzaj linii jest różny od 4 to pod wzór możemy wstawić jakąkolwiek liczbę gdyż nie będzie ona brana pod uwagę.
NormWidth = 1 - linia normalna ThickWidth = 3 - linia pogrubionaprzykład: SetLineStyle(0,0,3);
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); Line(30,30,610,450); Repeat Until Keypressed; CloseGraph; End.
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); Circle(320,240,40); {1} Repeat Until Keypressed; {2} CloseGraph; End.{1} Rysujemy kołko o współrzędnych 320,240 ( jest to środek ekranu gdyż włączyliśmy tryb VGAHi, którego rozdzielczość to: 640x480 ) i o promieniu 40
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); Rectangle(30,30,610,450); Repeat Until Keypressed; CloseGraph; End.
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); SetColor(green); Rectangle(30,30,120,120); Rectangle(10,10,100,100); FloodFill(50,50,Green); Repeat Until Keypressed; CloseGraph; End.Program wypełnia obszar który jest wspólny dla obu prostokątów.
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); SetColor(8); SetFillStyle(1,5); Bar(30,30,610,450); Repeat Until Keypressed; CloseGraph; End.
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); SetColor(4); SetFillStyle(10,8); Bar3D(50,50,590,430,20,TRUE); Repeat Until Keypressed; CloseGraph; End.
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); PutPixel(320,240,15); Repeat Until Keypressed; CloseGraph; End.Programik wyświetla biały punkt na samym środku ekranu.
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); OutTextXY(200,100,'Oto tekst'); Repeat Until Keypressed; CloseGraph; End.
Uses GRAPH,CRT; Var ster,tryb:integer; Begin ster:=VGA; tryb:=VGAHi; InitGraph(ster, tryb, 'C:\BP\BGI' ); Circle(50,50,30); Delay(2000); ClearDevice; Circle(150,200,70); Repeat Until Keypressed; CloseGraph; End.