1.Wstęp.
Wymagania sprzętowe.
Błąd ” Run-time error.
2. Podstawowe pojęcia występujące w Turbo Pascalu.
2.1 Objaśnienie pojęć: procedura, funkcja, słowo kluczowe, stała, zmienna, biblioteka.
2.2 Najważniejsze podstawowe typy zmiennych.
2.3 Stosowanie komentarzy.
2.4 Stosowanie wcięć.
3. Deklaracje i szkielet programu.
3.1 Podstawowy szkielet programu.
3.2 Deklaracja stałych.
3.3 Deklaracja zmiennych.
3.4 Deklaracja bibliotek (modułów).
3.5 Używanie średnika.
3.6 Instrukcja przypisania.
4. Podstawowe procedury.
4.1 Procedura WriteLn.
4.2 Procedura Write.
4.3 Procedura Read.
4.4 Procedura ReadLn.
4.5 Procedura GotoXY.
4.6 Procedura ClrSr.
4.7 Procedura Sound.
4.8 Procedura NoSound.
4.9 Procedura Delay.
5. Instrukcje.
5.1 Instrukcja IF...ELSE.
5.2 Instrukcja BEGIN END.
5.3 Instrukcja CASE.
5.4 Instrukcja REPEAT...UNTIL.
5.5 Instrukcja WHILE...DO.
5.6 Instrukcja FOR...TO...DO.
6. Procedury i funkcje.
6.1 Tworzenie Procedur.
6.2 Tworzenie Procedur z parametrami.
7. Tablice.
8. Bazy danych.
8.1 Procedura TextColor.
8.2 Procedura TextBackGround.
8.3 Operator AND.
8.3 Operator OR.
8.4 Procedura Assign.
8.5 Procedura Close.
8.6 Procedura Reset.
8.7 Funkcja EOF.
8.8 Procedura Rewrite.
9. Grafika w Turbo Pascalu.
9.1 Procedura InitGraph.
9.2 Procedura CloseGraph.
9.3 Procedura SetColor.
9.4 Procedura SetBkColor.
9.5 Procedura SetFillStyle.
9.6 Procedura SetLineStyle.
9.6 Procedura Line.
9.7 Procedura Circle.
9.8 Procedura Rectangle.
9.9 Procedura FloodFill.
9.10 Procedura Bar.
9.11 Procedura Bar3D.
9.12 Procedura PutPixel.
9.13 Procedura OutTextXY.
9.14 Procedura ClearDevice.
10. Klawisze rozszerzone i menu w Trybie Tekstowym.
10.1 Funkcja ReadKey.
10.2 Funkcja Chr.
10.3 Funkcja Ord.
10.4 Obsługa Klawiszy Rozszerzonych.
10.5 Funkcja Inc.
10.6 Funkcja Dec.
10.7 Menu w Trybie Tekstowym Sterowane Kursorami.
11. Dane dynamiczne.
12. Własne biblioteki i obsługa myszki.
12.1 Procedura Str.
12.2 Tworzenie bibliotek.
12.2.1 Nowa procedura WriteXY.
12.2.2 Nowa procedura Ramka.
12.3 Procedury do obsługi myszki.
12.3.1 Nowa procedura PokazMyche.
12.3.2 Nowa procedura SchowajMyche.
12.3.3 Nowa procedura UstawMyche.
12.3.4 Nowa procedura PobierzMyche.
12.3.5 Nowa procedura VgaOn.
12.4 Myszka w praktyce.
12.5 Wybieranie myszką obiektów.
2. Podstawowe pojęcia występujące w Turbo Pascalu.
2.1 Objaśnienie pojęć: procedura, funkcja, słowo kluczowe, stała, zmienna, biblioteka.
Procedura - to grupa deklaracji i instrukcji, opatrzona własną nazwą i realizująca określoną czynność; procedurę można wielokrotnie wywoływać, podając jej nazwę; wywołanie procedury spowoduje wykonanie zawartych w niej instrukcji
Prosta deklaracja procedury:
PROCEDURE nazwa; deklaracje BEGIN instrukcje END; {nazwa}
Funkcja - w Turbo Pascalu korzystamy z funkcji standardowych; można także definiować własne funkcje, charakteryzujące się tym, że zwracają jedną i tylko jedną wartość wynikową i wywołuje się je w ramach wyrażeń
Deklaracja funkcji:
FUNCTION nazwa (lista parametrów formalnych) : typ; deklaracje BEGIN instrukcje END; {nazwa}
Słowo Kluczowe - słów tych można używać w programie tylko w ściśle określonym kontekście; można je zapisywać małymi lub dużymi literami, wybór formy zapisu powinien być podporządkowany czytelności programu; słowa te to np. PROGRAM, BEGIN, to, do, then
Stała - jest to pewna wartość przypisana znakowi/wyrazowi, której nie można zmienić np. stałej PI jest przyporządkowana liczba 3.1415...
Deklaracja stałej:
CONST indentyfikator = wartość ... indentyfikator = wartość;
Zmienna - Jak sama nazwa wskazuje zmienna jest to wyraz, któremu jest przypisana pewna wartość, którą w czasie działania programu możemy swobodnie zmieniać w zakresie danego typu.
Biblioteki (moduły) - zapisane są w nich różne funkcje i procedury do użycia w programie.
2.2 Najważniejsze podstawowe typy zmiennych.
2.2.1 Typy całkowite - są to wartości liczbowe, które mieszczą się w podanych zakresach, im większy zakres to automatycznie zwiększa się zapotrzebowanie liczby na pamięć:
SHORTINT (-128..127) 1 bajt
INTEGER (-32768..32767} 2 bajty
LONGINT {-2147483648..2147483647} 4 bajty
BYTE {0..255} 1 bajt
WORD {0..65535} 2 bajty
2.2.2 Typ logiczny - BOOLEAN - typ ten może przyjmować jedynie dwie wartości: TRUE (prawda) lub FALSE (fałsz) dzięki temu zajmuje on jedynie 1/8 bajta
2.2.3 Typ znakowy - CHAR - typ ten przyjmuje dowolny pojedynczy znak o kodach ASCII (0..255) np. znak "A" czy "!"
2.2.4Typ łańcuchowy - STRING - jest to ciąg o długości 0-255 znaków, przykładowym łańcuchem jest: 'To jest tekst', zwróć uwagę na użyte apostrofy ! Jeżeli jakiekolwiek znaki umieścisz pomiędzy apostrofami będzie to uznawane wtedy za tekst nawet jeżeli znajdować się tam będą w środku liczby !
2.3 Stosowanie komentarzy.
Komentarze w programie nie są niezbędne, ale bardzo upraszczają późniejszą poprawę/modyfikację programu i to dzięki komentarzom nasz program staje się bardziej czytelny również dla innych osób. W Pascalu ujmuje się je pomiędzy nawiasy klamrowe "{","}".
2.4 Stosowanie wcięć.
Wcięcia stosowane są do łatwiejszego zorientowania się w programie źródłowym, dla programisty jest to bardzo przydatne, ponieważ natychmiast widzi, które fragmenty programu są ze sobą bardziej powiązane, a które mniej. Przykład :
Program bez wcięć:
Var
s:string;
b:byte;
Begin
ReadLn(s);
If s='pi' Then
Begin
For b:=1 To 10 Do
Begin
WriteLn(PI);
WriteLn(b);
End;
End Else WriteLn('Pozostale');
End.
Program z wcięciami:
Var
s:string;
b:byte;
Begin
ReadLn(s);
If s='pi' Then
Begin
For b:=1 To 10 Do
Begin
WriteLn(PI);
WriteLn(b);
End;
End Else WriteLn('Pozostale');
End.
3. Deklaracje i szkielet programu.
3.1 Podstawowy szkielet programu.
Podstawowy, a zarazem najmniejszy program w Pascalu wygląda tak:
begin {1}
end. {2}
Przedstawione tutaj dwie linijki całkowicie nic nie robią, informują one jedynie kompilator gdzie zaczyna się nasz główny program {1} i gdzie kończy {2} pomiędzy tymi liniami będzie w przyszłości znajdował się nasz program, należy zwrócić uwagę, że {2} po "END" jest postawiona kropka, ponieważ "END." oznacza koniec programu, a "END;" koniec fragmentu programu.
3.2 Deklaracja stałych.
Stałe deklaruje się jeszcze przed głównym programem słowem kluczowym "Const", w programie przykładowo wygląda to tak:
Const
abc=500;
l3='tu jest tekst';
sprawdz=TRUE;
begin
end.
W tym prostym programiku, zastosowano wcięcia, dzięki temu widzimy, które linie są liniami ze stałymi a które nie. Zadeklarowano tutaj trzy stałe: "abc" - przypisana została do niej liczba 500, teraz jeżeli dalej w programie użyjemy stałej "abc" będzie ona postrzegana przez kompilator jako liczba 500, można ją dodawać, odejmować, wyświetlać itd. Stała "l3" jest ciągiem znaków 'tu jest tekst', a "sprawdz" jest postrzegane jako stała logiczna "PRAWDA".
3.3 Deklaracja zmiennych.
Zmienne deklaruje się podobnie jak stałe jeszcze przed głównym programem, słowem kluczowym "Var", w programie przykładowo wygląda to tak:
Var
abc:byte;
l3,linia,t:string; {1}
sprawdz:boolean;
begin
end.
Teraz zmienne zostały przypisane do danego typu, i ich wartość będzie można dowolnie zmieniać w zakresie tego typu. Należy zwrócić uwagę, że pomiędzy nazwą zmiennej a jej rodzajem, został użyty dwukropek zamiast znaku równości jak to miało miejsce przy stałych. Możliwe jest definiowanie wielu zmiennych tego samego typu w jednej linii, wystarczy je wtedy rozdzielić przecinkami {1}. Każda zmienna przed użyciem w programie musi być wcześniej zadeklarowana.
3.4 Deklaracja bibliotek (modułów).
Uses dos,crt;
begin
end.
Od tej pory program może używać funkcji i procedur zdefiniowanych w modułach "DOS", "CRT" oraz mimo że, nie deklarowaliśmy, automatycznie ładowanego modułu "SYSTEM".
3.5 Używanie średnika.
Średnik występujący na końcach niektórych linii, oznacza zakończenie procedury, funkcji, pętli czy instrukcji warunkowych. Średnika nie stawia się po słowach kluczowych rozpoczynających pewien fragment programu, dopiero stawia się go na końcu tego fragmentu ( pomiędzy nimi mogą znajdować się jeszcze inne linie ) np. "begin...end;"
3.6 Instrukcja przypisania.
Instrukcja przypisania, służy do nadawania zmiennym wartości, wygląda ona tak: ":=" i przykładowo jeżeli zmiennej ABC typu WORD ( liczba przypisywana MUSI znajdować się w zakresie typu tej zmiennej ) chcemy nadać wartość 456 to piszemy: "ABC:=456;". Niektórych może zaintrygować dlaczego instrukcję przypisania zapisuje się tak ":=" zamiast zwykłego znaku równości "=" ? Oto przykład: operacja "kolejna:=kolejna+1" z punktu widzenia matematyki może wydawać się błędna i to wygląda jak np. "4=4+1" co jest absolutną bzdurą, to my wykonujemy tu jednak nie równanie matematyczne, a nadanie zmiennej nowej wartości, aby to wyjaśnić zobaczmy jak taką linię postrzega komputer: najpierw sumowane jest to co znajduje się po prawej stronie, a dopiero potem podstawiane jest do zmiennej po lewej np. zmienna "kolejna" ma wartość 2, wykonujemy prawą stronę "2+1" komputer zapamiętuje sobie tam gdzieś u siebie w pamięci "3" ( wynik równania ) i dopiero potem wykonuje lewą stronę "kolejna:=liczba z pamięci".
4. Podstawowe procedury.
4.1 Procedura WriteLn.
WriteLn wypisuje listę elementów i powoduje przejście do nowego wiersza. Dozwolone jest użycie WriteLn bez podawania listy elementów. W takim przypadku spowoduje to przejście do nowego wiersza.
4.2 Procedura Write.
Write działa podobnie jak WriteLn, z tym że nie powoduje przejścia do nowego wiersza.
4.3 Procedura Read.
Read przypisuje kolejnym zmiennym odpowiednie wartości z listy. Poszukując kolejnej wartości pomija spacje i puste wiersze. Nie pomija natomiast innych znaków, a zatem pomiędzy liczbami nie mogą występować jakiekolwiek dodatkowe informacje.
4.4 Procedura ReadLn.
ReadLn działa analogicznie jak Read, z tym że po przypisaniu wartości wszystkim zmiennym automatycznie przechodzi do nowego wiersza, pomijając po drodze wszystkie napotkane znaki.
4.5 Procedura GotoXY.
GotoXY umieszcza kursor tekstowy w polu o współrzędnych (x,y).Pozwala na umieszczenie pytania we właściwym wierszu.
4.6 Procedura ClrSr.
ClrSr wyczyści ekran.
4.7 Procedura Sound.
Sound powoduje włączenie głośnika wewnętrznego i wygenerowanie dźwięku o podanej częstotliwości w Hz. Czas podany w milisekundach i częstotliwość to wielkości całkowite typu Word.
4.8 Procedura NoSound.
NoSound wyłącza dźwięk.
4.9 Procedura Delay.
Delay wstrzymuje na podany czas wykonywanie programu.
5. Instrukcje.
5.1 Instrukcja IF...ELSE.
Instrukcja IF ma następującą postać ogólną:
IF warunek THEN instrukcja
ELSE instrukcja;
Najprostszy warunek to porównanie dwóch elementów lub wyrażeń tego samego typu. W porównaniach można używać następujących operatorów:
= równe
<> różne
< mniejsze
<= mniejsze lub równe
> większe
>= większe lub równe
Instrukcja IF wykonywana jest w następujący sposób. Najpierw badany jest warunek. Jeśli został on spełniony, to wykonywana jest instrukcja po słowie THEN, natomiast pomijana jest instrukcja po słowie ELSE. Jeśli warunek nie został spełniony, pomijana jest instrukcja po słowie THEN, a wykonywana - instrukcja po sowie ELSE.
5.2 Instrukcja BEGIN END.
Instrukcja BEGIN END ma następującą postać:
BEGIN
instrukcje
END;
Grupę instrukcji, ograniczoną słowami BEGIN i END, nazywa się instrukcją złożoną. Można ją umieścić wszędzie tam gdzie dozwolone jest użycie pojedynczej (prostej) instrukcji.
5.3 Instrukcja CASE.
Instrukcja CASE ma postać ogólną:
CASE wyrażenie_klucz OF
wartość_klucza : instrukcja;
wartość_klucza : instrukcja;
...
wartość_klucza : instrukcja;
ELSE instrukcja;
END;
Instrukcja CASE wyznacza wartość wyrażenia_klucza, a następnie próbuje dopasować ją do którejś z wartości wymienionych na liście. Jeśli obliczona wartość wyrażenia jest równa jednej z wartości na liście, to wykonywana jest odpowiadająca jej instrukcja po czym sterowanie przekazywane jest bezpośrednio za instrukcję CASE. Jeśli natomiast na liście nie uda się znaleźć wartości odpowiadającej kluczowi, to wykonywana jest instrukcja po słowie ELSE. Dopuszcza się pominięcie słowa ELSE i następującej po nim instrukcji. Wówczas - jeżeli na liście nie uda się znaleźć klucz - nie jest wykonywana żadna instrukcja, a sterowanie przechodzi bezpośrednio za instrukcję CASE.
Wyrażenie_klucz musi należeć do typu całkowitego, logicznego, znakowego lub wyliczeniowego
5.4 Instrukcja REPEAT...UNTIL.
Instrukcja REPEAT ma postać ogólną:
Ustalenie warunków początkowych
REPEAT
Instrukcje wykonujące dowolne operacje i zmieniające warunki
UNTIL warunki;
W tym przypadku pętla wykona się przynajmniej raz przed sprawdzeniem warunku.
Budując pętlę warunkową należy zwrócić uwagę na dwa warunki, niezbędne do jej prawidłowego działania:
wyrażenie warunkowe musi mieć określoną wartość początkową;
wartość wyrażenia warunkowego musi zmieniać się w trakcie wykonywania pętli.
Jeśli wartość wyrażenia warunkowego nie zostanie określona jeszcze przed wejściem do pętli, to będzie ona działać na niepoprawnych lub nawet nieokreślonych danych. Jeśli wartość warunku nie będzie się zmieniała, to pętla będzie powtarzana w nieskończoność.
5.5 Instrukcja WHILE...DO.
Ogólna postać pętli WHILE:
Ustalenie warunków początkowych
WHILE warunki DO BEGIN
Instrukcje wykonujące dowolne operacje i zmieniające warunki
END;
Po ustaleniu wartości początkowych, tj. przypisaniu odpowiednich wartości zmiennym, używanym do badania warunku, rozpoczyna się właściwa pętla. Przed każdym - nawet pierwszym - wykonaniem badany jest warunek. Jeśli jest on spełniony, to wykonywana jest główna część pętli. Po napotkaniu słowa END następuje powrót do instrukcji WHILE i ponowne sprawdzenie warunku. Proces taki powtarzany jest aż do momentu, gdy wyrażenie warunkowe wartość false. Wówczas następuje zakończenie pętli i rozpoczyna się wykonywanie kolejnych instrukcji po słowie END.
5.6 Instrukcja FOR...TO...DO.
Ogólna postać instrukcji warunkowej FOR...TO...DO:
FOR zmienna_sterująca := początek TO koniec DO BEGIN
Instrukcje
END;
Utworzenie pętli w programie wymaga zadeklarowania specjalnej zmiennej , pełniącej funkcję licznika powtórzeń.
Deklaracja zmiennej sterującej:
VAR zmienna_sterująca : początek..koniec;
Deklaracja VAR opisuje zmienną sterującą, której wartośćzmieniała się będzie w zakresie wyznaczonym przez początek i koniec. Mogą to być parametry liczbowe lub znaki ujęte w apostrofy. Oto przykłady poprawnej deklaracji zmiennej sterującej:
VAR
i : 1..10;
litera: `a'..'z';
Instrukcja FOR definiuje właściwą pętlę w programie oraz określa początkową i końcową wartość zmiennej sterującej. Blok instrukcji wykonywanych w pętli, rozpoczyna się słowami DO BEGIN, a kończy słowem END.
Instrukcje zawarte w pętli wykonywane są wielokrotnie, przy czym przy każdym wykonaniu zmienna sterująca przyjmuje kolejną wartość z zadanego zakresu.
6. Procedury i funkcje.
6.1 Tworzenie Procedur.
6.2 Tworzenie Procedur z parametrami.
7. Tablice.
Tablica to grupa powiązanych ze sobą elementów tego samego typu, do których można odwoływać się za pośrednictwem indeksu. Jest to struktura danych zawierająca uporządkowany zbiór obiektów tego samego typu i odpowiada matematycznemu pojęciu wektora, macierzy itp. . Tablice jednowymiarowe odpowiadają wektorom, natomiast dwuwymiarowe macierzom.
Dostęp do poszczególnych elementów tablicy uzyskujemy poprzez podanie nazwy tablicy oraz w nawiasach prostokątnych wyrażenia określającego wartość indeksu.
Tablice dwuwymiarowe zawierają wiersze i kolumny. Pierwszy indeks tablicy odpowiada numerowi wiersza, a drugi numerowi kolumny. Wiersz są to elementy tablicy położone w poziomie, a kolumna są to elementy położone w pionie.
Przykład tablicy dwuwymiarowej:
Definicja typu tablicowego ma następującą postać:
TYPE identyfikator = ARRAY [typ indeksów] OF typ elementu;
Zakres poszczególnego indeksu zapisywany jest w postaci dwóch stałych oddzielonych dwoma kropkami. Dany identyfikator typu tablicowego można następnie wykorzystać w deklaracji VAR w sposób następujący:
VAR zmienna : identyfikator;
Tablicę można też zdefiniować bezpośrednio w deklaracji VAR:
VAR zmienna : ARRAY [zakresy indeksów] OF typ elementu;
Typ indeksów to typ okrojony, zdefiniowany na bazie typu integer, char, boolean lub typu wyliczeniowego. Elementy tablicy mogą należeć do dowolnego typu z wyjątkiem typów plikowych. Oto przykładowe deklaracje:
TYPE
wyniki = 0..20;
zakres = 0..100;
czestosci = ARRAY[wyniki] OF zakres;
duzelitery = `A'..'Z';
wystapienia = ARRAY[duzelitery] OF boolean;
dnitygodnia = 1..7;
liczbywdniu = ARRAY[dnitygodnia] OF integer;
Chcąc korzystać z tablicy, musimy najpierw zadeklarować zmienną typu tablicowego. Dostęp do dowolnego elementu tablicy uzyskuje się, podając jej nazwę i wartość indeksu ujętą w nawiasy kwadratowe. Dozwolone jest użycie wyrażeń.
8. Bazy danych.
8.1 Procedura TextColor.
TextColor jest to procedura dająca w wyniku kolorowy tekst.
Składnia: TextColor(kolor:byte); CRT
Zmienia kolor wyświetlania tekstu, możliwe do wybrania jest 16 kolorów:
Black = 0 - czarny
Blue = 1 - niebieski
Green = 2 - zielony
Cyan = 3 - turkusowy
Red = 4 - czerwony
Magenta = 5 - karmazynowy
Brown = 6 - brązowy
LightGray = 7 - jasnoszary
DarkGray = 8 - ciemnoszary
LightBlue = 9 - jasnoniebieski
LightGreen = 10 - jasnozielony
LightCyan = 11 - jasnoturkusowy
LightRed = 12 - jasnoczerwony
LightMagenta = 13 - jasnokarmazynowy
Yellow = 14 - żółty
White = 15 - biały
Można wykonać również kolor migoczący, uzyskuje się go poprzez dodanie do wybranego koloru liczby 128 ( Blink ) np.
Uses CRT;
Begin
TextColor(Blue);
Write('Napis Niebieski');
TextColor(8);
Write('Napis Ciemnoszary');
TextColor(Red+Blink);
Write('Napis Czerwony mrugajacy');
TextColor(15+128); { TextColor(143); }
Write('Napis Biały mrugający');
End.
8.2 Procedura TextBackGround.
Składnia: TextBackGround(kolor:byte); CRT
Zmienia kolor tła wyświetlanego tekstu, możliwych do wybrania jest 8 kolorów:
Black = 0 - czarny
Blue = 1 - niebieski
Green = 2 - zielony
Cyan = 3 - turkusowy
Red = 4 - czerwony
Magenta = 5 - karmazynowy
Brown = 6 - brązowy
LightGray = 7 - jasnoszary
Przykład:
Uses CRT;
Begin
TextBackGround(Blue);
Write('Napis na niebieskim tle');
TextBackGround(4);
Write('Napis na czerwonym tle');
End.
Aby zmienić kolor podkładu dla całego ekranu należy wykonać tą procedurę i wyczyścić ekran np.
Uses CRT;
Begin
TextBackGround(Green);
ClrScr;
Write('Oto napis na całym zielonym ekranie :)');
8.3 Operator AND.
Jest to operator "I" i stosuje się go tam, gdzie są potrzebne spełnione dwa lub więcej warunków np. w IF..THEN.. albo w pętli REPEAT..UNTIL, warunki muszą być podane w nawiasach np.
Var
a1,a2,a3:byte;
Begin
Write('Podaj 1 liczbe : ');
ReadLn(a1);
Write('Podaj 2 liczbe : ');
ReadLn(a2);
Write('Podaj 3 liczbe : ');
ReadLn(a3);
If (a1>a2) AND (a1>a3) Then WriteLn('Liczba ',a1,' jest najwieksza z podanych');
If (a2>a1) AND (a2>a3) Then WriteLn('Liczba ',a2,' jest najwieksza z podanych');
If (a3>a1) AND (a3>a2) Then WriteLn('Liczba ',a3,' jest najwieksza z podanych');
End.
Program sprawdza, która z podanych trzech liczb jest największa i wyświetla ją na ekranie.
8.3 Operator OR.
Jest to operator "LUB" i stosuje się tam gdzie jest potrzebny spełniony co najmniej jeden z dwóch lub więcej warunków, stosuje się go np. w IF..THEN.. albo w pętli REPEAT..UNTIL, warunki te muszą być podane w nawiasach np.
Uses CRT;
Var
c:char;
Begin
Write('Czy na pewno ? (T/N) :');
Repeat
c:=ReadKey;
Until (c='t') or (c='n');
End.
Program ten czeka na wciśnięcie klawisza "t" lub "n", ale jest niedoskonały, ponieważ gdy wciśniemy duży klawisz "T" lub "N" to wtedy nie zadziała. Rozwiązaniem tego jest dodanie obsługi tych klawiszy, poprawiony program wygląda tak:
Uses CRT;
Var
c:char;
Begin
Write('Czy na pewno ? (T/N) :');
Repeat
c:=ReadKey;
Until (c='t') or (c='T') or (c='n') or (c='N');
End.
8.3.1 Funkcja UpCase
Składnia: duza:=UpCase(literka:char):char;
Funkcja zamienia małą literkę na dużą, w przypadku podania już dużej litery lub cyfry nie następuje zamiana. np: UpCase('a') = 'A', UpCase('B') = 'B', UpCase('6') = '6'. Program z opisanego operatora OR można zapisać tak:
Uses CRT;
Var
c:char;
Begin
Write('Czy na pewno ? (T/N) :');
Repeat
c:=UpCase(ReadKey); {1}
Until (c='T') or (c='N'); {2}
End.
{1} Po wciśnięciu jakiegokolwiek znaku jest on zamieniany na dużą literę i podstawiany do zmiennej C
{2} Sprawdzenie czy zmienna C zawiera dużą literę T lub N
8.4 Procedura Assign.
Składnia: Assign(var Plik:text; nazwapliku:string);
Procedura kojarzy identyfikator "Plik" z plikiem dyskowym o nazwie "nazwapliku" , w której może mieścić się jeszcze ścieżka dostępu. Bardziej jasne stanie to się przy następnych procedurach "Reset" i "Rewrite".
8.5 Procedura Close.
Składnia: Close(var Plik:text);
Zamyka plik otwarty uprzednio przez "Reset", "Append" lub "Rewrite".
8.6 Procedura Reset.
Składnia: Reset(var Plik:text);
Otwiera plik "Plik" skojarzony uprzednio przez "Assign". Od tego momentu poprzez identyfikator "Plik" będzie można czytać dane poprzez Read i ReadLn z dysku np.
Var
przyklad:text; {1}
linia:string;
Begin
Assign(przyklad,'C:\AUTOEXEC.BAT'); {2}
Reset(przyklad); {3}
ReadLn(przyklad,linia); {4}
WriteLn(linia); {5}
Close(przyklad); {6}
End.
Program otwiera plik "C:\AUTOEXEC.BAT" i wyświetla z niego pierwszą linię. W kolejnych linijkach program wykonuje:
{1} Deklarujemy zmienną "przyklad" jako typ TEXT (plik textowy);
{2} Kojarzymy zmienną "przyklad" z plikiem "C:\AUTOEXEC.BAT";
{3} Otwieramy plik "przyklad" do odczytu;
{4} Wczytujemy kolejną linię ( ponieważ nie czytaliśmy z niego wcześniej czyta pierwszą ) z pliku "przyklad" i wstawiamy ją do zmiennej "linia" typu String;
{5} Wyświetlamy zmienną "linia";
{6} Zamykamy plik;
8.7 Funkcja EOF.
Składnia: EOF(var Plik:text):boolean
Jest to funkcja zwracająca dwie wartości: prawdę (TRUE) lub fałsz (FALSE) i określa czy plik "PLIK" znajduje się w pozycji końcowej ( FALSE - są w nim jeszcze jakieś nie przeczytane dane, TRUE - tak, to koniec pliku, nic więcej w nim nie ma ). Np.:
Var
przyklad:text;
linia:string;
Begin
Assign(przyklad,'C:\AUTOEXEC.BAT');
Reset(przyklad);
REPEAT {1}
ReadLn(przyklad,linia); {2}
WriteLn(linia); {3}
UNTIL EOF(przyklad); {4}
Close(przyklad);
End.
Program podobnie jak poprzednio otwiera plik, ale odczytuje z niego wszystkie linie zaczynając od pierwszej a kończąc na ostatniej.
{1} rozcznij pętlę;
{2} odczytaj kolejną linię z pliku "przyklad";
{3} wyświetl ją na ekranie;
{4} sprawdź czy to już koniec pliku, jeśli nie to powróć do {2} i wyświetl kolejną linię, a jeśli tak to opuść pętlę;
8.8 Procedura Rewrite.
Składnia: Rewrite(var Plik:text);
Procedura ta tworzy nowy plik o nazwie skojarzonej ze zmienną "Plik" i udostępnia go do zapisu w nim danych ( poprzez Write i WriteLn ). UWAGA ! Jeżeli użyjemy tej procedury na istniejącym już pliku zostanie on usunięty i na jego miejsce utworzony nowy, np.:
Var
przyklad:text; {1}
Begin
Assign(przyklad,'C:\PLIKTEST.TXT'); {2}
Rewrite(przyklad); {3}
WriteLn(przyklad,'Taki sobie głupi napis zapiszemy w pliku :)'); {4}
Close(przyklad); {5}
End.
{1} definiujemy zmienną "przyklad" jako typ TEXT;
{2} kojarzymy zmienną "przyklad" z plikiem "C:\PLIKTEST.TXT" ale nie musi on wcale istnieć ponieważ:
{3} tworzymy plik i otwieramy go do zapisu;
{4} wpisujemy do pliku linię z tekstem;
{5} zamykamy plik;
Jeżeli nie zamkniemy pliku i opuścimy program, to jakiś fragment ostatnio zapisywanych danych ulegnie skasowaniu. Czasami może się zdarzyć, że plik nie został do końca zapisany, więc w pierwszej kolejności należy sprawdzić, czy został on prawidłowo zamknięty.
Zaczynamy pisać prostą bazę danych
Napiszemy prostą bazę osobową, wystarczy: imię, nazwisko i telefon. Zaczniemy pisanie krok po kroku od podstaw, a potem będziemy ją modyfikować.
Zrobimy najpierw program na jedną osobę, tak aby można ją wprowadzić i wyświetlić:
Uses CRT;
Var
Imie,nazwisko,telefon:string;
c,c2:char;
PROCEDURE Wprowadz;
Begin
ClrScr;
Write('Imie : ');
ReadLn(imie);
Write('Nazwisko : ');
ReadLn(nazwisko);
Write('Telefon : ');
ReadLn(telefon);
End;
PROCEDURE Wyswietl;
Begin
ClrScr;
WriteLn('Imie : ',imie);
WriteLn('Nazwisko : ',nazwisko);
WriteLn('Telefon : ',telefon);
WriteLn;
Write('Wcisnij jakis klawisz...');
c2:=readkey;
End;
Begin
Repeat
ClrScr;
Write('1. Nowy wpis 2. Wyswietlenie wpisu 3.Koniec programu : ');
Repeat
c:=readkey;
Until (c='1') OR (c='2') OR (c='3');
If c='1' Then Wprowadz;
If c='2' Then Wyswietl;
Until c='3';
End.
Teraz użyjemy tablic i zobaczymy jak teraz zmienił się program:
Uses CRT;
Var
Imie,nazwisko,telefon:array[1..30] of string; {1}
c,c2:char;
iloscosob:byte; {2}
t1:byte; {3}
PROCEDURE Wprowadz;
Begin
ClrScr;
Iloscosob:=iloscosob+1; {4}
Write('Imie : ');
ReadLn( imie[iloscosob] ); {5}
Write('Nazwisko : ');
ReadLn( nazwisko[iloscosob] ); {6}
Write('Telefon : ');
ReadLn( telefon[iloscosob] ); {7}
End;
PROCEDURE Wyswietl;
Begin
ClrScr;
Write('Numer wpisu ? (1..', iloscosob ,') :'); {8}
ReadLn(t1); {9}
WriteLn('Imie : ',imie[t1] ); {10}
WriteLn('Nazwisko : ',nazwisko[t1] ); {11}
WriteLn('Telefon : ',telefon[t1] ); {12}
WriteLn;
Write('Wcisnij jakis klawisz...');
c2:=readkey;
End;
Begin
Iloscosob:=0; {13}
Repeat
ClrScr;
Write('1. Nowy wpis 2. Wyswietlenie wpisu 3.Koniec programu `);
Repeat
c:=readkey;
Until (c='1') OR (c='2') OR (c='3');
If c='1' Then Wprowadz;
If c='2' Then Wyswietl;
Until c='3';
End.
Jak widać linijek doszło niewiele, a ilość wpisów zwiększona została do 30.
Co się zmieniło:
Deklaracje:
{1} zmodyfikowaliśmy 3 zmienne z pojedynczych na tablice
{2} dodaliśmy zmienną "iloscosob" określającą, ile mamy wpisów w bazie
{3} dodaliśmy zmienną pomocniczą "t1", która będzie nam później potrzebna
Główny program:
{13} wyzerowaliśmy zmienną "iloscosob", ponieważ nie mamy jeszcze żadnego wpisu
Procedury:
{4} ponieważ procedura ma za zadanie dopisywanie nowych danych musimy zwiększyć zmienną "iloscosob" będącą równocześnie ilością wpisów w bazie o jeden
{5} {6} {7} wprowadzenie danych do zmiennych tablicowych do elementów o numerze "iloscosob"
{8} wyświetlenie informacji o ilości dostępnych do uzyskania danych
{9} wprowadzenie zmiennej pomocniczej będącej numerem rekordu danych do wyświetlenia
{10} {11} {12} wyświetlenie danych z tablic o elementach numer "t1"
Do tamtego programu dodamy jeszcze dwie procedury do zapisu i odczytu z dysku.
Uses CRT;
Var
Imie,nazwisko,telefon:array[1..30] of string;
c,c2:char;
iloscosob:byte;
t1:byte;
plik:text; {1}
PROCEDURE Wprowadz; { taka jak poprzednio }
[...]
PROCEDURE Wyswietl; { taka jak poprzednio }
[...]
PROCEDURE Zapisz; {2}
Begin
Assign(plik,'BAZA.DAN'); {3}
ReWrite(plik); {4}
WriteLn(plik,iloscosob); {5}
t1:=0; {6}
Repeat
t1:=t1+1; {7}
WriteLn(plik,imie[t1] ); {8}
WriteLn(plik,nazwisko[t1] ); {9}
WriteLn(plik,telefon[t1] ); {10}
Until t1=iloscosob; {11}
Close(plik); {12}
End;
PROCEDURE Czytaj; {13}
Begin
Assign(plik,'BAZA.DAN'); {14}
Reset(plik); {15}
ReadLn(plik,iloscosob); {16}
t1:=0; {17}
Repeat
t1:=t1+1; {18}
ReadLn(plik,imie[t1] ); {19}
ReadLn(plik,nazwisko[t1] ); {20}
ReadLn(plik,telefon[t1] ); {21}
Until t1=iloscosob; {22}
Close(plik); {23}
End;
Begin
Iloscosob:=0;
Repeat
ClrScr;
WriteLn('1. Nowy wpis'); {24}
WriteLn('2. Wyswietlenie wpisu'); {25}
WriteLn('3. Odczyt z pliku'); {26}
WriteLn('4. Zapis do pliku'); {27}
WriteLn('5. Koniec programu'); {28}
Repeat
c:=readkey;
Until (c>='1') AND (c<='5'); {29}
If c='1' Then Wprowadz;
If c='2' Then Wyswietl;
If c='3' Then Czytaj; {30}
If c='4' Then Zapisz; {31}
Until c='5'; {32}
End.
{1} Definiujemy zmienną PLIK jako typ TEXT
{2} Tworzymy nową procedurę ZAPISZ, która będzie odpowiedzialna za zapis utworzonej bazy na dysku
{3-4} Otwieramy do zapisu plik o nazwie 'BAZA.DAN'
{5} Zapisujemy ilość wpisów na dysku
{6} Zerujmy zmienną pomocniczą T1, będzie ona potrzebna do odliczania ilości zapisanych wpisów
{7} Zwiększamy zmienną T1 o jeden
{8-10} Zapisujemy IMIE NAZWISKO i TELEFON osoby numer T1
{11} Jeżeli zapisane zostało już "ILOSCOSOB" wpisów ( tzn. wszystkie ), to przechodzimy dalej, jeśli nie wracamy do {18}
{12} Zamykamy plik, gdybyśmy tego nie zrobili to stracilibyśmy część danych
{13} Tworzymy nową procedurę CZYTAJ, która będzie odpowiedzialna za odczytanie bazy z dysku
{14-15} Otwieramy do odczytu plik o nazwie 'BAZA.DAN'
{16} Odczytujemy pierwszą linię, będącą liczbą z informacją o ilości wpisów
{17} Zerujmy zmienną pomocniczą T1, będzie ona potrzebna do odliczania ilości odczytanych wpisów
{18} Zwiększamy zmienną T1 o jeden
{19-21} Odczytujemy IMIE NAZWISKO i TELEFON osoby numer T1
{22} Jeżeli odczytane zostało już "ILOSCOSOB" wpisów ( tzn. wszystkie ) to przechodzimy dalej, jeśli nie wracamy do {7}
{23} Zamykamy plik
{24-28} Nowe ulepszone menu
{29} Czekamy na wciśnięcie 1,2,3,4 lub 5
{30-31} Wywołujemy nowe funkcje ( odczyt i zapis )
{32} Jeżeli wciśnięty został klawisz 5 to opuszczamy program
I oto mamy najprostszą bazę danych, teraz możemy ją udoskonalać:
przy wyświetlaniu danych dodać obsługę klawiszy do wyświetlania następnego/poprzedniego/pierwszego/ostatniego wpisu
opcję: nowa baza danych
możliwość zmiany nazwy zapisywanego i odczytywanego pliku
zabezpieczenie przed wyświetleniem wpisu nr X, jeżeli taki nie istnieje
9. Grafika w Turbo Pascalu.
9.1 Procedura InitGraph.
9.2 Procedura CloseGraph.
9.3 Procedura SetColor.
9.4 Procedura SetBkColor.
9.5 Procedura SetFillStyle.
9.6 Procedura SetLineStyle.
9.6 Procedura Line.
9.7 Procedura Circle.
9.8 Procedura Rectangle.
9.9 Procedura FloodFill.
9.10 Procedura Bar.
9.11 Procedura Bar3D.
9.12 Procedura PutPixel.
9.13 Procedura OutTextXY.
9.14 Procedura ClearDevice.
Praca pochodzi z serwisu www.e-sciagi.pl