Sunteți pe pagina 1din 9

REFERAT DE LABORATOR Nr.

REFERAT DE LABORATOR NR. 2

TEMA: Date. Tipuri de date. Constante, Variabile.

1. DATE ÎN LIMBAJUL C/C++

Un program realizează o prelucrare de informaţie. Termenul de prelucrare trebuie să fie


considerat într-un sens foarte general (de exemplu, în primul programu prezentat în capitolul
1, prelucrarea se referea la un text şi consta în afişarea lui). În program datele apar fie sub
forma unor constante (valori cunoscute anticipat, care nu se modifică), fie sub forma de
variabile. Constantele şi variabilele sunt obiectele informaţionale de bază manipulate într-un
program.

Fiecare categorie de date este caracterizată de atributele:


• Nume;
• Valoare;
• Tip;
• Clasa de memorare.

Numele unei date este un identificator, şi, prin urmare urmare, trebuie să respecte regulile
specifice identificatorilor.

2. TIPURI DE DATE

Tipul unei date constă într-o mulţime de valori pentru care s-a adoptat un anumit mod de
reprezentare în memoria calculatorului şi o mulţime de operatori care pot fi aplicaţi acestor
valori. Tipul unei date determină lungimea zonei de memorie ocupată de acea dată. În general,
lungimea zonei de memorare este dependentă de compilator

Tipurile de bază sunt:


• char un singur octet (1 byte=16 biţi), capabil să conţină codul unui caracter din setul local
de caractere;
• int număr întreg, reflectă în mod tipic mărimea naturală din calculatorul utilizat;
• float număr real, în virgulă mobilă, simplă precizie;
• double număr real, în virgulă mobilă, dublă precizie.

În completare există un număr de calificatori, care se pot aplica tipurilor de bază char, int,
float sau double: short, long, signed şi unsigned. Astfel, se obţin tipurile derivate de date.

1
REFERAT DE LABORATOR Nr.2

3. CONSTANTE

O constantă este un literal (o formă externă de reprezentare) numeric, caracter sau şir de
caractere. Numele şi valoarea unei constante sunt identice. Valoarea unei constante nu poate
fi schimbată în timpul execuţiei programului în care a fost utilizată. Tipul şi valoarea ei sunt
determinate în mod automat, de către compilator, pe baza caracterelor care compun literalul.

• Constante numerice întregi (literali numerici, compuşi din cifre, fără punct zecimal).
• Constante întregi în baza 10 (Ex. 56, -98), baza 8 (Ex. 0476) sau baza 16 (Ex. 0x458,
0X4Abc).
• Constante întregi, de tipuri derivate: de tip long int (Ex. 897655L), de tip unsigned
int (Ex. 678u) sau unsigned long int (Ex. 8765UL).
• Constante numerice reale
• De tip double (Ex. 9.67, -56.78, 4.5e-3) sau float (Ex. -7.5f, 678.56F),
• De tipuri derivate: de tip long double (Ex. -4.67L).
• Constante caracter (Ex. '8', 'K', '\n').
• Constante şir de caractere (Ex. "ab7N", "gj\nR5\n").

4. VARIABILE

Variabilele sunt nume simbolice utilizate pentru memorarea valorilor introduse pentru datele
de intrare sau a rezultatelor. Dacă la o constantă ne puteam referi folosind caracterele
componente, la o variabilă ne vom referi prin numele ei.

Modul general de declarare a variabilelor este:


<tip_variabile> <listă_nume_variabile>;

Modul general de declarare a variabilelor şi iniţializarea acestora în momentul declarării:


<tip_var> <nume_var1>=<expr1>[,<nume_var2>=<expr2>, …];

5. OPERAŢII DE INTRARE/IEŞIRE

Limbajele C/C++ nu posedă instrucţiuni de intrare/ieşire, deci de citire/scriere (ca limbajul


PASCAL, de exemplu). În limbajul C aceste operaţii se realizează cu ajutorul unor funcţii (de
exemplu, printf şi scanf), iar în limbajul C++ - prin supraîncărcarea operatorilor (definirea
unor noi proprietăţi ale unor operatori existenţi, fără ca proprietăţile anterioare să dispară),
mai precis a operatorilor >> şi <<. Vom folosi în continuare abordarea limbajului C++, fiind, în
momentul de faţă, mai simplă. În limbajul C++ sunt predefinite următoarele dispozitive logice
de intrare/ieşire:
cin - console input - dispozitivul de intrare (tastatura);
cout - console output - dispozitivul de ieşire (monitorul).

cin şi cout sunt, de fapt, obiecte (predefinite). Transferul informaţiei se realizează cu


operatorul >> (extractor) pentru intrare şi operatorul << (insertor) pentru ieşire.

2
REFERAT DE LABORATOR Nr.2

Utilizarea dispozitivelor de intrare/ieşire cu operatorii corespunzători determină deschiderea


unui canal de comunicaţie a datelor către dispozitivul respectiv. După operator se specifică
informaţiile care vor fi citite sau afişate.

Exemple:
cout << var; // afişează valoarea variabilei var pe monitor
cin >> var; // citeşte valoarea variabilei var de la tasatatură

Sunt posibile operaţii multiple, de tipul:

Exemple:
cout << var1 << var2 << var3;
cin >> var1 >> var2 >> var3;

În acest caz, se efectuează succesiv, de la stânga la dreapta, scrierea, respectiv citirea valorilor
variabilelor var1, var2 şi var3.

Utilizarea dispozitivelor si operatorilor de intrare/iesire in C++ impune includerea fisierului


header iostream.

6. PREPROCESORUL

În faza de compilare a fişierului sursă este invocat întâi preprocesorul. Acesta tratează
directivele speciale - numite directive preprocesor - pe care le găseşte în fişierul sursă.
Directivele preprocesor sunt identificate prin simbolul #, care trebuie să fie primul caracter,
diferit de spaţiu, dintr-o linie. Directivele preprocesor sunt utilizate la includerea fişierelor
header, la definirea numelor constantelor simbolice, la definirea macro-urilor, sau la
realizarea altor funcţii (de exemplu, compilarea condiţionată), aşa cum ilustrează exemplele
următoare:

• Includerea fişierelor header în codul sursă:


Exemplu:
#include <stdio.h>
Când procesorul întâlneşte această linie, datorită simbolului #, o recunoaşte ca fiind o
directivă preprocesor, localizează fişierul header indicat (parantezele unghiulare < >
indică faptul că este vorba de un fişier header sistem).

• Asignarea de nume simbolice constantelor:


Exemplu:
#define TRUE 1
#define FALSE 0
Tratarea acestor directive preprocesor are ca efect atribuirea valorii întregi 1 numelui
(constantei simbolice) TRUE, şi a valorii 0 numelui simbolic FALSE. Ca urmare, înaintea
compilării propriu-zise, în programul sursă, apariţiile numelor TRUE şi FALSE vor fi
înlocuite cu valorile 1, respectiv 0.
• Macrodefiniţii:

3
REFERAT DE LABORATOR Nr.2

Directiva #define este folosită şi în macrodefiniţii. Macrodefiniţiile permit folosirea


unor nume simbolice pentru expresiile indicate în directivă.
Exemplu:
#define NEGATIV(x) -(x)
Între numele macrodefiniţiei şi paranteza stângă ( NEGATIV(…) ) nu sunt permise
spaţii albe. La întalnirea în programul sursă a macrodefiniţiei NEGATIV, preprocesorul
subtituie argumentul acesteia cu expresia (negativarea argumentului). Macrodefiniţia
din exemplu poate fi folosită în programul sursă astfel: NEGATIV(a+b). Când
preprocesorul întâlneşte numele expresiei, subtituie literalii din paranteză, a+b, cu
argumentul din macrodefiniţie, x, obţinându-se -(a+b).

1. Scrieţi şi urmăriţi execuţia programului următor, program care ilustrează utilizarea


directivelor preprocesor.

#include <iostream>

#define TRUE 1
#define FALSE 0
#define PI 3.14

#define NEGATIV(x) -(x)


#define SUMA(x,y) (x)+(y)

using namespace std;

int main()
{
int a,b,c;
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
c = NEGATIV(a);
cout<<"\n-a="<<c<<endl;
//pentru trecerea la linie noua la afisare, in locul secventei escape
//'\n' se poate utiliza si constanta endl definita in headerul iostream

c = SUMA(a,b);
cout<<a<<" + "<<b<<" = "<<c<<endl;
cout<<"\nConstanta TRUE are valoarea "<<TRUE;
cout<<"\nConstanta FALSE are valoarea "<<FALSE;
cout<<"\nConstanta PI are valoarea "<<PI;
}

4
REFERAT DE LABORATOR Nr.2

2. Scrieţi şi urmăriţi execuţia programului următor, program care va afişa spaţiul de memorie
(în octeţi) alocat diferitelor tipuri de date. Determinarea spaţiului de memorie alocat, se va
face cu ajutorul operatorului sizeof().

#include <iostream>

using namespace std;

int main()
{
cout<<" char: "<<sizeof(char)<<" octeti\n";
//se va afisa mai intai constanta sir de caractere (textul dintre
//ghilimele), apoi numarul de octeti pe care este stocat in memorie tipul
//char (valoare returneta de operatorul sizeof, operator care va primi ca
//parametru tipul char), apoi din nou o constanta sir de caractere
//(textul dintre ghilimele)

cout<<" int: "<<sizeof(int)<<" octeti\n";


cout<<" long int: "<<sizeof(long int)<<" octeti\n";
cout<<" long long int: "<<sizeof(long long int)<<" octeti\n";
cout<<" float: "<<sizeof(float)<<" octeti\n";
cout<<" double: "<<sizeof(double)<<" octeti\n";
cout<<" long double: "<<sizeof(long double)<<" octeti\n";
}

5
REFERAT DE LABORATOR Nr.2

În header-ul <limits.h> (pentru numere întregi şi caractere) respectiv <float.h> (pentru


numere reale) sunt definite constante simbolice (cum ar fi: INT_MAX, SHRT_MAX, LONG_MAX,
UINT_MAX, FLT_MIN, DBL_MIN, etc.) care au ca valoare limitele inferioară şi superioară ale
intervalului de valori pentru tipurile de date enumerate. (de exemplu INT_MAX reprezintă
valoarea întregului maxim care se poate memora, etc. )

3. Scrieţi şi urmăriţi execuţia programului următor, program care va afişa valorile minime şi
maxime pe care le pot lua variabilele de anumite tipuri.
#include <iostream>
#include <limits.h>
#include <float.h>

using namespace std;

int main()
{
cout<<"Max char: "<<CHAR_MAX<<'\n';
cout<<"Min char: "<<CHAR_MIN<<'\n';
cout<<"Max unsigned char: "<<UCHAR_MAX<<"\n\n";
cout<<"Max short: "<<SHRT_MAX<<'\n';
cout<<"Min short: "<<SHRT_MIN<<'\n';
cout<<"Max unsigned short: "<<USHRT_MAX<<"\n\n";
cout<<"Max int: "<<INT_MAX<<'\n';
cout<<"Min int: "<<INT_MIN<<'\n';
cout<<"Max unsigned int: "<<UINT_MAX<<"\n\n";
cout<<"Max long: "<<LONG_MAX<<'\n';
cout<<"Min long: "<<LONG_MIN<<'\n';
cout<<"Max unsigned long: "<<ULONG_MAX<<"\n\n";
cout<<"Max float: "<<FLT_MAX<<'\n';
cout<<"Max double: "<<DBL_MAX<<"\n\n";
cout<<"Cel mai mic (apropiat de 0) float: "<<FLT_MIN<<'\n';
cout<<"Cel mai mic (apropiat de 0) double: "<<DBL_MIN<<'\n';
}

6
REFERAT DE LABORATOR Nr.2

O constantă caracter are ca valoare codul ASCII (American Standard Code for Information
Intechange) al caracterului pe care îl reprezintă. Acest set de caractere are următoarele
proprietăţi:

• Fiecărui caracter îi corespunde o valoare întreagă distinctă (ordinală);


• Valorile ordinale ale literelor mari sunt ordonate şi consecutive ('A' are codul ASCII 65, 'B'
- codul 66, 'C' - codul 67, etc.);
• Valorile ordinale ale literelor mici sunt ordonate şi consecutive ('a' are codul ASCII 97, 'b' -
codul 98, 'c' - codul 99, etc.);
• Valorile ordinale ale cifrelor sunt ordonate şi consecutive ('0' are codul ASCII 48, '1' - codul
49, '2' - codul 50, etc.).

4. Scrieţi şi urmăriţi execuţia programului următor, program care va ilustra codurile ASCII
asociate caracterelor mari şi mici, cifrelor şi unei secvenţe escape (caracterul linie nouă).

#include <iostream>

using namespace std;

int main()
{
cout<<"Caracterul "<<'a'<<" are codul ascii: "<<(int)'a'<<'\n';
//Se afiseaza mai intai constanta sir de caractere (textul dintre
//ghilimele), apoi constanta caracter dintre apostroafe, din nou o
//constanta sir de caractere, codul ascii al caracterului dintre
//apostroafe (fortand tipul acestuia la int, precedand caracterul de noul
//tip inclus intre paranteze), si caracterul linie noua (\n)

cout<<"Caracterul "<<'b'<<" are codul ascii: "<<(int)'b'<<'\n';


cout<<" ....\n";
cout<<"Caracterul "<<'z'<<" are codul ascii: "<<(int)'z'<<"\n\n";
cout<<"Caracterul "<<'A'<<" are codul ascii: "<<(int)'A'<<'\n';
cout<<"Caracterul "<<'B'<<" are codul ascii: "<<(int)'B'<<'\n';
cout<<" ....\n";
cout<<"Caracterul "<<'Z'<<" are codul ascii: "<<(int)'Z'<<"\n\n";
cout<<"Caracterul "<<'0'<<" are codul ascii: "<<(int)'0'<<'\n';
cout<<"Caracterul "<<'1'<<" are codul ascii: "<<(int)'1'<<'\n';
cout<<" ....\n";
cout<<"Caracterul "<<'9'<<" are codul ascii: "<<(int)'9'<<"\n\n";
cout<<"Caracterul linie noua:"<<'\n'<<" are codul ascii: ";
cout<<(int)'\n'<<"\n\n";
}

7
REFERAT DE LABORATOR Nr.2

5. Să se scrie un program care rezolvă ecuaţia de gradul 1, de forma ax+b=0. Este prezentat
algoritmul atât în schemă logică, cât şi în pseudocod.

START

CITESTE a, b
INCEPUT
DA NU CITESTE a, b
a=0? DACA a = 0
ATUNCI AFISEAZA eroare
ALTFEL
INCEPUT
Solutie <- -b/a
SOLUTIE <- -b/a
AFISARE eroare AFISEAZA solutie
SFARSIT
SFARSIT
AFISARE Solutie

STOP

#include <iostream>

using namespace std;

int main()
{
float a,b,x;
cout<<"Ecuatie de gradul I de forma ax+b=0\n";
cout<<"a=";
cin>>a;
if (a==0)
cout<<"Caz imposibil!!!";
else
{
cout<<"b=";
cin>>b;
x = -b/a;
cout<<"x="<<x;
}
}

8
REFERAT DE LABORATOR Nr.2

PROBLEME PROPUSE SPRE REZOLVARE

6. Să se scrie un program care rezolvă ecuaţia de gradul II, de forma ax2+bx+c=0. Coeficienţii
a, b şi c se citesc de la tastatură.

7. Să se scrie un program care calculează aria şi circumferinţa cercului. Raza se citeşte de la


tastatură.

8. Să se scrie un program care calculează volumul, suprafaţa laterală şi aria suprafeţei totale
ale unui cilindru. Raza şi înălţimea se citesc de la tastatură.