LEKCJA 11. Jak deklarowa� zmienne. Co to jest wska�nik. ________________________________________________________________ W trakcie tej lekcji: 1. Dowiesz si� wi�cej o deklaracjach. 2. Poprawisz troch� system MS DOS. 3. Dowiesz si� co to jest wska�nik i do czego s�u�y. ________________________________________________________________ Wi�cej o deklaracjach. Deklarowa� mo�na w j�zyku C++: * zmienne; * funkcje; * typy (chodzi oczywi�cie o typy "nietypowe"). Zmienne w j�zyku C++ mog� mie� charakter: * skalar�w - kt�rym przypisuje si� nierozdzielne dane np. ca�kowite, rzeczywiste, wskazuj�ce (typu wska�nik) itp. * agregat�w - kt�rym przypisuje si� dane typu strukturalnego np. obiektowe, tablicowe czy strukturowe. Powy�szy podzia� nie jest tak ca�kiem precyzyjny, poniewa� pomi�dzy wska�nikami a tablicami istnieje w j�zyku C++ do�� specyficzna zale�no��, ale wi�cej na ten temat dowiesz si� z p�niejszych lekcji. Zmienne mog� by�: * deklarowane, * definiowane i * inicjowane. Sta�a to to taka zmienna, kt�rej warto�� mo�na przypisa� tylko raz. Z punktu widzenia komputera niewiele si� to r�ni, bo miejsce w pami�ci i tak, stosownie do zadeklarowanego typu zarezerwowa� trzeba, umie�ci� w tablicy i zapami�ta� sobie identyfikator i adres te�. Jedyna praktyczna r�nica polega na tym, �e zmiennej zadeklarowanej jako sta�a, np.: const float PI = 3.142; nie mo�na przypisa� w programie �adnej innej warto�ci, innymi s�owy zapis: const float PI = 3.14; jest jednocze�nie DEKLARACJ�, DEFINICJ� i ZAINICJOWANIEM sta�ej PI. Przyk�ad : float x,y,z;�����������������������(DEKLARACJA) const float TEMP = 36.6;�����������(DEFINICJA) x = 42;�����������������������������(ZAINICJOWANIE zmiennej) [S!] constant/variable - STA�A czy ZMIENNA. ________________________________________________________________ const - (CONSTant) - sta�a. Deklaracja sta�ej, s�owo kluczowe w j�zyku C. var - (VARiable) - zmienna. W j�zyku C przyjmowane domy�lnie. S�owo var (stosowane w Pascalu) NIE JEST s�owem kluczowym j�zyka C ani C++ (!). ________________________________________________________________ Skutek praktyczny: * Ma sens i jest poprawna deklaracja: const float PI = 3.1416; * Niepoprawna natomiast jest deklaracja: var float x; Je�li nie zadeklarowano sta�ej s�owem const, to "zmienna" (var) przyjmowana jest domy�lnie. Definicja powoduje nie tylko okre�lenie, jakiego typu warto�ciami mo�e operowa� dana zmienna b�d� funkcja, kt�ra zostaje od tego momentu skojarzona z podanym identyfikatorem, ale dodatkowo powoduje: * w przypadku zmiennej - przypisanie jej warto�ci, * W przypadku funkcji - przyporz�dkowanie cia�a funkcji. Zdefiniujmy dla przyk�adu kilka w�asnych funkcji. Przyk�ad: void UstawDosErrorlevel(int n) /* nazwa funkcji*/ { exit(n); /* skromne cia�o funkcji */ } Przyk�ad int DrukujAutora(void) { printf("\nAdam MAJCZAK AD 1993/95 - C++ w 48 godzin!\n"); printf("\n Wydanie II Poprawione i uzupe�nione.") return 0; } Przyk�ad void Drukuj_Pytanie(void) { printf("Podaj liczbe z zakresu od 0 do 255"); printf("\nUstawie Ci ERRORLEVEL\t"); } W powy�szych przyk�adach zwr�� uwag� na: * spos�b deklarowania zmiennej, przekazywanej jako parametr do funkcji - n i err; * definicje funkcji i ich wywo�anie w programie (podobnie jak w Pascalu). Zilustrujemy zastosowanie tego mechanizmu w programie przyk�adowym. Funkcje powy�sze s� PREDEFINIOWANE w pliku FUNKCJE1.H na dyskietce do��czonej do ksi��ki. Wpisz i uruchom program: [P020.CPP] # include "stdio.h" # include "A:\funkcje1.h" int err; void main(void) { DrukujAutora(); Drukuj_Pytanie(); scanf("%d", &err); UstawDosErrorlevel(err); } Wykorzystajmy te funkcje praktycznie, by zilustrowa� spos�b przekazywania informacji przez pracuj�cy program do systemu DOS. Zmienna otoczenia systemowego DOS ERRORLEVEL mo�e by� z wn�trza programu ustawiona na zadan� - zwracan� do systemu warto��. [Z] ________________________________________________________________ 1. Sprawd�, w jakim pliku nag��wkowym znajduje si� prototyp funkcji exit(). Opracuj najprostszy program PYTAJ.EXE ustawiaj�cy zmienn� systemow� ERRORLEVEL wed�ug schematu: main() { printf("....Pytanie do u�ytkownika \n..."); scanf("%d", &n); exit(n); } 2. Zastosuj program PYTAJ.EXE we w�asnych plikach wsadowych typu *.BAT wed�ug wzoru: @echo off :LOOP cls echo 1. Wariant 1 echo 2. Wariant 2 echo 3. Wariant 3 echo Wybierz wariant dzia�ania programu...1,2,3 ? PYTAJ IF ERRORLEVEL 3 GOTO START3 IF ERRORLEVEL 2 GOTO START2 IF ERRORLEVEL 1 GOTO START1 echo Chyba zartujesz...? goto LOOP :START1 'AKCJA WARIANT 1 GOTO KONIEC :START2 'AKCJA WARIANT 2 GOTO KONIEC :START3 'AKCJA WARIANT 3 :KONIEC 'AKCJA WARIANT n - oznacza dowolny ci�g komend systemu DOS, np. COPY, MD, DEL, lub uruchomienie dowolnego programu. Do utworzenia pliku wsadowego mo�esz zastosowa� edytor systemowy EDIT. 3. Skompiluj program pos�uguj�c si� oddzielnym kompilatorem TCC.EXE. Ten wariant kompilatora jest pozbawiony zintegrowanego edytora. Musisz uruchomi� go pisz�c odpowiedni rozkaz po DOS-owskim znaku zach�ty C:\>. Zastosowanie przy kompilacji ma�ego modelu pami�ci pozwol Ci uzyska� sw�j program w wersji *.COM, a nie *.EXE. Wydaj rozkaz: c:\borlandc\bin\bcc -mt -lt c:\pytaj.cpp Je�li pliki znajduj� si� w r�nych katalogach, podaj w�a�ciwe �cie�ki dost�pu (path). ________________________________________________________________ [???] CO TO ZA PARAMETRY ??? ________________________________________________________________ Przez sw� "u�omno��" - 16 bitow� szyn� i segmentacj� pami�ci komputery IBM PC wymusi�y wprowadzenie modeli pami�ci: TINY, SMALL, COMPACT, MEDIUM, LARGE, HUGE. Wi�cej informacji na ten temat znajdziesz w dalszej cz�ci ksi��ki. Parametry dotycz� sposobu kompilacji i zastosowanego modelu pami�ci: -mt - kompiluj (->*.OBJ) wykorzystuj�c model TINY -lt - konsoliduj (->*.COM) wykorzystuj�c model TINY i zatem odpowiednie biblioteki (do ka�dego modelu jest odpowiednia biblioteka *.LIB). Mo�esz stosowa� tak�e: ms, mm, ml, mh, ls, lm, ll, lh. ________________________________________________________________ Po instalacji BORLAND C++/Turbo C++ standardowo jest przyjmowany model SMALL. Zatem kompilacja, kt�r� wykonujesz z IDE daje taki sam efekt, jak zastosowanie kompilatora bcc/tcc w nast�puj�cy spos�b: tcc -ms -ls program.c Mog� wyst�pi� k�opoty z przerobieniem z EXE na COM tych program�w, w kt�rych wyst�puj� funkcje realizuj�ce arytmetyk� zmiennoprzecinkow� (float). System DOS oferuje Ci do takich cel�w program EXE2BIN, ale lepiej jest "panowa�" nad tym problemem na etapie tworzenia programu. PODSTAWOWE TYPY DANYCH W J�ZYKU C++. J�zyk C/C++ operuje pi�cioma podstawowymi typami danych: * char (znak, numer znaku w kodzie ASCII) - 1 bajt; * int (liczba ca�kowita) - 2 bajty; * float (liczba z p�ywaj�cym przecinkiem) - 4 bajty; * double (podw�jna ilo�� cyfr znacz�cych) - 8 bajt�w; * void (nieokre�lona) 0 bajt�w. Zakres warto�ci przedstawiono w Tabeli poni�ej. Podstawowe typy danych w C++. ________________________________________________________________ Typ Znak Bajt�w Zakres warto�ci ________________________________________________________________ char signed 1 -128...+127 int signed 2 -32768...+32767 float signed 4 +-3.4E+-38 (dok�adno��: 7 cyfr) double signed 8 1.7E+-308 (dok�adno��: 15 cyfr) void nie dotyczy 0 bez okre�lonej warto�ci. ________________________________________________________________ signed - ze znakiem, unsigned - bez znaku. Podstawowe typy danych mog� by� stosowane z jednym z czterech modyfikator�w: * signed / unsigned - ze znakiem albo bez znaku * long / short - d�ugi albo kr�tki Dla IBM PC typy int i short int s� reprezentowane przez taki sam wewn�trzny format danych. Dla innych komputer�w mo�e by� inaczej. Typy zmiennych w j�zyku C++ z zastosowaniem modyfikator�w (dopuszczalne kombinacje). ________________________________________________________________ Deklaracja Znak Bajt�w Warto�ci Dyr. assembl. ________________________________________________________________ char signed 1 -128...+127 DB int signed 2 -32768...+32767 DB short signed 2 -32768...+32767 DB short int signed 2 -32768...+32767 DB long signed 4 -2 147 483 648... DD +2 147 483 647 long int signed 4 -2 147 483 648... DW +2 147 483 647 unsigned char unsigned 1 0...+255 DB unsigned unsigned 2 0...+65 535 DW unsigned int unsigned 2 0...+65 535 DW unsigned short unsigned 2 0...+65 535 DW signed int signed 2 -32 768...+32 767 DW signed signed 2 -32 768...+32 767 DW signed long signed 4 -2 147 483 648... DD +2 147 483 647 enum unsigned 2 0...+65 535 DW float signed 4 3.4E+-38 (7 cyfr) DD double signed 8 1.7E+-308 (15 cyfr) DQ long double signed 10 3.4E-4932...1.1E+...
lazarusp22