LEKCJA11.TXT

(22 KB) Pobierz
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+...
Zgłoś jeśli naruszono regulamin