Deklaracje stałych i zmiennych

Transkrypt

Deklaracje stałych i zmiennych
Deklaracje stałych i zmiennych
Głównym zadaniem prawie kaŜdego programu jest obróbka danych. Dane te są przechowywane w pamięci RAM
komputera w sposób określony przez architekturę systemu, którym się posługujemy. My jednak, jako Ŝe programujemy w
języku wyŜszego poziomu, nie musimy zaprzątać sobie tym głowy.
Zmienne
Dla nas kaŜda zmienna ma swój identyfikator - nazwę, oraz typ. Dzięki temu moŜemy uŜywać ich w bardzo naturalny
sposób.
Trzeba juŜ teraz zwrócić uwagę, Ŝe pascal bardzo rygorystycznie podchodzi do kwestii definiowania zmiennych i
kontroli typów. W czasach największej popularności tego języka było to uwaŜane za jego główną zaletę. Oznacza to po
prostu, Ŝe kaŜdą zmienną trzeba zdefiniować przed blokiem, w którym zostanie ona uŜyta:
Program Zmienne;
Var { Początek definicji zmiennych }
A : Byte;
{ Instrukcja definicji składa się z trzech części: nazwy, }
{ dwukropka i typu.
}
B
: Word; { Zmienna B typu Word. }
C, D, E : Real;
{ Definicje moŜna grupować, np. zmienne C, D i E są typu Real. }
{ Tak więc ogólna postać definicji to:
}
{ Var Variable1 [, Variable2, [, ...]] : Type [; ...]; }
Begin
A:=2;
B:=17;
C:=B;
D:=C/A;
{
{
{
{
{
Przypisujemy zmiennej A wartość 2. }
Zmienna B ma wartość 17. }
Zmienna C przyjmuje wartość zmiennej B, czyli 17. }
Instrukcja B:=C wywołałaby błąd! }
D = 17 / 2, czyli 8.5. }
E:=Pi*Pi; { Pi to stała predefiniowana, ale o tym kiedy indziej... }
WriteLn('A = ', A);
WriteLn('B = ', B);
WriteLn('C = ', C:0:2);
WriteLn('D = ', D:0:2);
WriteLn('E = ', E);
End.
Tym sposobem poznaliśmy kolejną instrukcję, mianowicie przypisanie. NaleŜy przede wszystkim pamiętać, Ŝe
przypisanie to nie to samo, co matematyczne równa-się. Oznacza ono nadanie zmiennej (znajdującej się po lewej) wartości
obliczonej z wyraŜenia po prawej. Poprawny jest np. zapis I:=I+1;. Natomiast A:=A; choć poprawny, nie ma Ŝadnego sensu,
gdyŜ przed i po wykonaniu instrukcji zmienna A ma tę samą wartość.
Dwukropek ze znakiem równości (:=) to tzw. operator przypisania. Stosuje się go wyłącznie do przypisywania
zmiennym wartości.
W powyŜszym programie występują zmienne typu Byte, Word i Real. Pierwsze dwa typy przechowują liczby
całkowite odpowiednio z przedziału 0..255 i 0..65535 (łatwo zauwaŜyć, Ŝe to 0..28-1 i 0..216-1, pierwszy typ zawiera jeden
bajt - 8 bitów, a drugi jedno słowo, czyli 2 bajty - 16 bitów). Natomiast zmienna typu Real to liczba rzeczywista (zawiera
część ułamkową).
ZauwaŜ, Ŝe zmiennej typu Real bez problemu przypisaliśmy wartość Byte, czy Word. Gdybyśmy spróbowali tego w
przeciwną stronę otrzymalibyśmy komunikat o błędzie. Dlaczego tak się dzieje? Okazuje się, Ŝe np. wartość 123 moŜe mieć
zarówno liczba całkowita, jak i rzeczywista, natomiast 1.23 to wartość charakterystyczna dla tej drugiej. Nie jest to problem
nie do przeskoczenia. Istnieje w Pascalu kilka funkcji, które pomogą nam obejść takie ograniczenia.
Pierwsza z nich to Round(R: Real): Integer. Jako jedyny argument przyjmuje ona liczbę typu rzeczywistego, zwraca
natomiast wartość zaokrągloną do najbliŜszej liczby całkowitej.
W trochę inny sposób działa funkcja Trunc(R: Real): Integer. Od poprzedniej róŜni się tym, Ŝe zaokrągla liczby
zawsze w dół; innymi słowy: odcina część ułamkową.
Dokładniej typami zmiennych zajmiemy się w przyszłości. Na razie wystarczy nam kilka podstawowych:
Do przechowywania liczb całkowitych:
o Integer - Liczby całkowite ze znakiem, od -32768 do 32767,
o Word - Liczby całkowite bez znaku, od 0 do 65535,
o ShortInt - Liczby całkowite Ze znakiem, od -128 do 127,
o Byte - Liczby całkowite bez znaku, od 0 do 255,
Do przechowywania liczb rzeczywistych (patrz: Typy rzeczywiste):
o Real - Liczby rzeczywiste (6 bajtów)
o Single - Liczby rzeczywiste o pojedynczej precyzji (4 bajty)
o Double - Liczby rzeczywiste o podwójnej precyzji (8 bajtów)
- Boolean - dla wartości logicznych, np. True, False,
- Char - jako jeden znak, np. 'A', #13,
- String - jako ciąg znaków, np. 'Niedzwiad', 'abcdef'#32'ghijk'#13#10.
Stałe
Skoro juŜ wiemy czym są zmienne, zastanówmy się nad zagadnieniem stałych. Wartość stałych (jak sama nazwa
wskazuje) nie zmienia się w czasie działania programu (przynajmniej nie powinna, chociaŜ - jak się później okaŜe - jest to
moŜliwe). Poza tym stałe nie róŜnią się od zmiennych - posiadają swoją nazwę, typ, wartość i zajmują jakieś miejsce w
pamięci. Deklaruje się je w następujący sposób:
Program Stale;
Const { Słowo kluczowe "Const" rozpoczyna blok definicji stałych }
A = 1024;
{ W takim przypadku kompilator sam rozpozna tym stałej. }
Imie = 'Wincenty'; { Tutaj podobnie. }
Nazwisko : String =
{ MoŜemy przenieść resztę do następnej linii - pascal }
{ nie rozpoznaje znaków niepisanych - spacji, enterów, }
{ tabulacji. }
'Kadłubek';
{ MoŜemy teŜ podać typ stałej. }
B : Real = 1;
{ Gdybysmy nie podali typu "Real" zmienna zostałaby }
{ zadeklarowana jako całkowita. }
Begin
WriteLn(Imie, ' ', Nazwisko, ' wita.');
{ Taki kod spowodowałby błąd kompilacji:
Imie:='Niedzwiad';
Nazwisko:=Imie;
}
End.
Do czego przydadzą nam się stałe? Wyobraź sobie bardzo długi kod, w którym często pojawia się ta sama wartość niech będzie 17. Jest ona kluczowa dla działania algorytmu. AŜ tu nagle pojawia się zły szef i kaŜe nam zamienić
siedemnastkę na 19. Co wtedy? Gdyby nie dobrodziejstwa stałych po prostu podmienilibyśmy 32 wystąpienia tej liczby w
kodzie, uwaŜając, by nie podmienić za duŜo.
Na szczęście moŜemy na początku programu wpisać zwyczajnie Const K = 17; tak, Ŝeby w razie potrzeby od razu
wiedzieć gdzie zajrzeć.
Na koniec chcę zachęcić do częstego uŜywania stałych - niedługo przekonasz się jak bardzo
poprawia to czytelność kodu.