Sunteți pe pagina 1din 18

Elemente de baza ale limbajului de programare

Istoric:
1972 Turbo C, Borland C, C++ (OOP) Limbaj structurat Limbajul face distinctie intre literele mari si mici.

Structura:
-Este alcatuit din una sau mai multe functii, una fiind principala (obligatorie) si executia programului incepe cu ea (main). -Pot fi folosite subprograme predefinite (biblioteci) -O functie intoarce un rezultat (intreg, real) sau nu (void) -Functia main nu intoarce nimic. -Un bloc de instructiuni / corpul functiei este delimitat prin acolade { } -Fiecare instructiune se termina cu ; Exemplu:

ELEMENTE DE VOCABULAR:
#Setul de caractere: -Literele mari si mici ale alfabetui englez -Cifre (0-9) (caractere numerice) -Caractere speciale #Identificatori= succesiune de litere, cifre sau caractere speciale care incepe cu o litera -Desemneaza constante, tipuri, variabile, subprograme definite de utilizator -Nu poate contine caracterul spatiu Ex: a, medie, x1, max_linie

#Cuvinte cheie= identificatori predefiniti, avand o semnificatie bine precizata. Ex: void, while, for, do. #Separatori: Unitatile sinctactice sunt separate prin: unul sau mai multe spatii, sfarsit de linie sau ; . #Comentarii= note explicative/ informatii ajutatoare. Acestea nu sunt executate. Se foloseste: // - pt o singura linie si /*.*/- pt. una sau mai multe. Ex: /* helo*/. #Siruri de caractere: Succesiune de caractere cu o anumita semnificatie. Sunt delimitate prin ghilimele. Ex: Suma este .

Tipuri de date
O variabila poate retine date de un anumit tip. Atunci cand se declara o variabila se precizeaza tipul ei. !! Prin tip de date se intelege: -o multime de valori -o regula de codificare a lor (modul in care se reprezinta in memorie) -o multime de operatii definite pe multimea valorilor (operatori si subprograme predefinite asociate)

Clasificare:
#Tipuri de date simple: -Standard (predefinite) -Definite de utilizator -Tipuri de date structurate -Tipul referinta (pointer)

#Tipul intreg:

-Tipul int (intreg, ocupa de regula 16 biti (numarul acestora difera de la o implementare la alta) si ia valori intre -32768 si 32767) -Tipul shortint (intreg scurt, ocupa 16 biti si ia valori intre -32768 si 32767) -Tipul unsigned int (intreg fara semn, ocupa 16 biti si ia valori intre 0 si 65535) -Tipul unsigned long (intreg lung fara semn, ocupa 32 de biti si ia valori intre 0 si 4.294.967.295) -Tipul long (intreg lung cu semn, ocupa 32 de biti si ia valori intre -2.147.483.648 si 2.147.483.647) -Tipul float (ocupa 32 biti si ia valori intre 3.4x10-38 si 3.4x1038) -Tipul double (ocupa 64 biti si ia valori intre 1.7x10-308 si 1.7x10308) -Tipul long double (ocupa 80 biti si ia valori intre 3.4x10-4932 si 1.1x104932)

#Tipul real:

#T. character: Tipul caracter este asimilat tipurilor intregi, deoarece orice caracter este identificat printr-un cod asupra caruia pot fi aplicate operatiile specifice tipurilor intregi. Tipurile intregi sunt: Tipul unsigned char (caracter fara semn, ocupa 8 biti si ia valori intre 0 si 255) Tipul char (caracter, ocupa 8 biti si ia valori intre -128 si 127) #Tipul logic: In C nu exista tipul logic, dar se respecta urmatoarele reguli: -orice valoare diferita de 0,a oricarui tip, este considerata ca fiind TRUE; -orice valoare 0, a oricarui tip, este considerata ca fiind FALSE;

Declararea variabilelor:

-tip standard

id_variabila; -int s; -int d, e=178; -int x, z, max=32000, z1;

-char a=y, b=76, c; -char a=99, b=c; -float x; -float a, b, c;

Constante: sunt date care nu se modifica pe parcursul executiei unui program. Daca au asociat
un identificator, atunci se numesc constante simbolice. Daca nu au asociat nici un identificator, atunci ele se reprezinta prin valoarea lor.

Forma generala a unei declaratii de constanta este:


const nume = valoare; const [tip] nume = valoare;

unde: tip - reprezinta tipul constantei (daca lipseste, implicit se considera int) nume - reprezinta numele constantei valoare - reprezinta valoarea constantei Ex: const numar=10; const int numar=10; pi = 3.14; const float pi=3.14

Tipuri de constant:
1. Constantele intregi se clasifica astfel: -zecimale (in baza 10). Ex: 123, 345, 121 -octale (in baza 8). Declararea lor se face cu un 0 la inceputul numarului. Ex: 054 (pentru 54(8)) -hexazecimale (in baza 16). Declararea lor se face prin scrierea secventei 0X sau 0x la inceputul numarului. Ex: 0x5e7 sau 0X5E7 pentru 5E7(16). Observatie: constantele de tip long au adaugata la sfarsit litera L sau l, iar cele de tip unsigned, literele U sau u. Ex: 3L, 53u 2. Constantele reale au forma generala: [+/-] [cifre].[cifre] [E/e[-]cifre] Implicit, acestea sunt memorate folosind tipul double. Se poate forta utilizarea tipului float punand la sfarsitul numarului unul din caracterele f sau F, iar pentru long double caracterul l sau L. Ex: -33.221, -2.33E-11, -123.5f, 56.789L. 3. Constantele caracter sunt reprezentate de unul sau mai multe caractere incadrate de apostrofuri. Ex: d, 8, \n Memorarea lor se face utilizand tipul char (se memoreaza codul ASCII al caracterului respectiv). Spatiile albe sunt alcatuite din: spatiu ( ), tabulator orizontal (\t) si caracter de rand nou (\n). Acestea au un rol special pentru operatiile de citire/scriere. 4. Constantele siruri de caractere sunt reprezentate de siruri de caractere delimitate de caracterul . Ex: Am inceput limbajul C 5. Constantele definite prin cuvinte cheie. Ex: null

Operatii intrare-iesire
In C/C++ citirile / scrierile (si multe alte operatii) se fac cu ajutorul unor functii speciale. Ca sa utilizeze functiile respective, compilatorul are nevoie de informatii referitoare la ele. Aceste informatii (prototipuri) se gasesc in anumite fisiere care trebuie incluse la inceputul programului c/c++. Dupa ce a fost efectuata aceasta operatie se trece la compilarea propriu-zisa. Aceasta operatie, efectuata inaintea compilarii, se numeste precompilare sau preprocesare. EX: #include <stdio.h> // #include <iostream.h>

SCRIERE:
#Functia printf se foloseste pentru a afisa date pe ecran cu un anumit format. Poate fi apelata astfel: - printf (format, lista_iesire); Unde: -format este un sir de caractere care contine succesiuni de caractere (care se afiseaza ca atare pe ecran) precum si formatele datelor care se scriu (specificator de format). -lista_iesire este un sir de expresii separate prin virgula; valorile lor se vor afisa conform specificatorilor de format prezenti in format. Observatie: Functia returneaza numarul de octeti (caractere) care se afiseaza sau -1 in caz de eroare. Observatie: Un specificator de format incepe cu caracterul %, dupa care mai pot exista: un caracter minus optional (pentru alinierea datelor la stanga); un sir de cifre zecimale optional (reprezentand numarul minim de caractere pe care se afiseaza valoare respectiva); un punct optional, urmat de un sir de cifre zecimale (reprezentand precizia zecimala a valorii respective); una sau doua litere (care definesc tipul de conversie aplicat datei care se scrie); tipul conversiei se foloseste pentru a afisa pe ecran o data in forma dorita de programator. Cei mai utilizati specificatori de format sunt: c - pentru afisarea unui caracter; s - pentru afisarea unui sir de caractere; d - pentru afisarea datelor de tip int; o - pentru afisarea datelor in baza 8; X sau x - pentru afisarea datelor in baza 16; f - pentru afisarea datelor de tip real in format zecimal; E sau e - pentru afisarea datelor de tip real in format exponential;

Alti specificatori de format mai sunt: u - pentru afisarea valorilor fara semn (unsigned); g sau G - pentru afisarea valorilor reale in format f sau e sau E in asa fel incat afisarea sa ocupe un numar minim de caractere; l - (poate sa preceada unul dintre specificatorii d, o, x , u) - pentru a afisa date de tip long; L - (poate sa preceada una din literele f, e, E, g, G) - pentru a afisa date de tipul long double;

EXEMPLU:

Functia putch afiseaza un caracter pe ecran. Poate fi apelata astfel: putch (expresie); Functia afiseaza caracterul cu codul ASCII asociat valorii expresiei din functie si returneaza valoarea parametrului de la apel. Prototipul acestei functii se afla in fisierul conio.h. Exemplu: #include <conio.h> void main() { char aux=x; putch(a); putch(97); putch(aux); }

Scriere in C++:
Scrierea pe ecran se realizeaza prin apelul functiei cout. -Functia se poate apela astfel: cout<<id_v1*<<id_v2<<<<id_vn<<endl+; Prototipul functiei se gaseste in iostream.h Exemplu: cout<<a*b<<p; cout<<suma=<<s<<endl;

Citire: Functia scanf este utilizata pentru a introduce date de la tastatura. Ea poate fi
apelata astfel: scanf (format, lista_variabile); unde: -format este un sir de caractere care defineste formatul datelor care se vor citi; -lista_variabile sunt adresele zonelor de memorie in care se pastreaza datele citite dupa ce au fost convertite in formatele specificate;

Observatie:
Adresa zonei de memorie a unei variabile simple se determina cu ajutorul operatorului &. Astfel, daca x este o variabila simpla de un tip oarecare, atunci &x este adresa zonei de memorie alocata variabilei x. 2. Prototipul functiei este in fisierul stdio.h Specificatoarele de format folosesc literele: c (pentru caractere); s (pentru siruri de caractere); d (pentru numerele de tip intreg); D (pentru numerele de tip long); o (pentru intregi in baza 8); x sau X (pentru intregi in baza 16); u (pentru intregi fara semn, unsigned int); f (pentru numere reale); lf (pentru numere reale de lip double);

Citire in C++
Citirea de la tastatura se realizeaza prin apelul functiei cin. Functia se poate apela astfel: cin>>id_v1*>>id_v2>>>>id_vn+; Prototipul functiei se gaseste in iostream.h Exemplu: cin>>a;

Functiile getch si getche permit citirea de la tastatura a unui caracter (citirea se face fara ecou pe ecran/cu ecou). Prototipurile celor doua functii sunt in fisierul conio.h, deci utilizarea lor se poate face numai daca se include acest fisier. Apelul celor doua functii se realizeaza astfel: getch(); getche(); EXEMPLU:

1. Se citeste a si x. Pentru a se introduce valoarea 3, iar pentru x 1.234. 2. Se citeste un caracter si se afiseaza caracterul citit si codul sau.

Rezolvare 1

Rezolvare 2

Expresii
Definitie: Prin expresie se intelege o succesiune de operatori si operanzi care respecta anumite reguli
specifice limbajului. Un operand poate fi: o constanta, o variabila, apelul unei functii, expresie inclusa in paranteze rotunde. Operatorii pot fi unari sau binari. In limbajul C/C++ Regula conversiilor implicite (se aplica la evaluarea expresiilor). Aceasta regula actioneaza atunci cand un operator binar se aplica la doi operanzi de tipuri diferite: operandul de tip inferior se converteste spre tipul superior (ex. int se poate converti la double)

1. Operatori aritmetici:
-operatorii unari + si -operatorii binari multiplicativi * / si % -operatorii binari aditivi + si Observatie: In cazul in care apar operanzi de mai multe tipuri se aplica regula conversiilor implicite.

Exemple:
Fie int a=10. Expresia 4*a/3 este de tip int si are valoarea 13. Fie float a=10. Expresia 4*(a/3) este de tip float si are valoarea 13.3333. Fie float a=10. Expresia 4*a/3 este de tip float si are valoarea 13.3333. Fie int a= -10. Expresia a%3 este de tip int si are valoarea -1. Fie int a= -10. Expresia a*-3 este de tip int si are valoarea 30. Fie int a=10; char b=2; float c=5. Expresia a+b+c este de tip float si are valoarea 17.000000.

Limbajul C-Reguli
Orice operand de tip char este convertit catre int; Orice operand de tip unsigned char este convertit catre int; Orice operand de tip short este convertit catre int; Daca un operand este de tip long double, atunci si celalalt operand se converteste catre acest tip; Daca un operand este de tip float, atunci si celalalt operand se converteste catre acest tip; Daca un operand este de tip unsigned long, atunci si celalalt operand se converteste catre acest tip; Daca un operand este de tip long, atunci si celalalt operand se converteste catre acest tip; In cazul in care sunt doi operanzi de tipul char (unsigned char) rezultatul va fi de tipul int (conform primei reguli);

2. Operatori relationali:

<, <=, >, >=


Observatie: Expresiile ce contin acesti operatori au valoarea 1 daca valorile celor doi operanzi satisfac relatia reprezentata de operator sau 0 in caz contrar. Exemple: 3 > 5 - expresia are valoarea 0. a> b - expresia are valoarea 0. 3 < 5 - expresia are valoarea 1. 3 +7 >= 11 - 1 expresia are valoarea 1. (operatorii relationali au prioritate mai mica decat operatorii aditivi)

3. Operatori de egalitate: = = (pentru egal) si != (pentru diferit)


Observatie: Expresiile ce contin acesti operatori au valoarea 1 sau 0 daca in functie de modul in care este respectata sau nu egalitatea (respectiv inegalitatea). Exemple: 3 == 3 - expresia are valoarea 1. 3 != 3 - expresia are valoarea 0. 3 != 4 - expresia are valoarea 1.

4. Operatori logici: ! (negatia logica); && (si logic); || (sau logic);


Operanzii sunt tratati astfel: intai cel din stanga, apoi (daca mai este cazul) cel din dreapta. Exemple: Fie float a=2. Expresia !a are valoarea 0; Fie float a=0. Expresia !a are valoarea 1; Fie int a=1, int b=3. Expresia a&&b are valoarea 1; Fie int a=1, int b=0. Expresia a&&b are valoarea 0; Fie int a=0, int b=3. Expresia a||b are valoarea 1;

5. Operatori logici pe biti: ~ - complement fata de 1 << - deplasare la stanga >> - deplasare la dreapta & - si logic pe biti ^ - sau exclusiv logic pe biti
|
- sau logic pe biti Acesti operatori se aplica la operanzi de tip intreg. Ei se executa bit cu bit si operanzii se extind la 16 biti daca este necesar.

Operatorul << este binar. Expresia a << b are efectul urmator: se deplaseaza catre stanga bitii lui a
cu un numar de pozitii egal cu valoarea lui b. Bitii din fata lui a se pierd iar la sfarsit se completeaza cu 0.

Operatorul >> este binar. Expresia a >> b are efectul urmator: se deplaseaza catre dreapta bitii lui
a cu un numar de pozitii egal cu valoarea lui b. Daca a este de un tip intreg fara semn, pozitiile ramase libere (in stanga) vor retine valoarea 0. Daca a este un intreg cu semn, fiecare pozitie din stanga ramasa libera se completeaza cu valoarea retinuta de bitul de semn.

In cazul operatorilor binari &, |, ^, rezultatul se obtine aplicand pentru fiecare pereche de biti aflati pe aceeasi pozitie regulile din tabelul urmator: a b a&b a|b a^b 0 0 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 1 1 0 Operatorul

~ (negare pe biti) inverseaza continutul bitilor ( 0 devine 1 si invers).

Exemple:
Fie int a,b;//a=8 b=4 printf("a&b=%d\n",a&b); //0 printf("a|b=%d\n",a|b); //12 printf("a^b=%d\n",a^b); //12 printf("a<<2=%d\n",a<<2); //32 printf("a>>2=%d\n",a>>2); //2

6. Operatori de incrementare si decrementare (Limbajul C/C++):


Acesti operatori sunt unari si au rolul de a incrementa sau decrementa continutul unei variabile. Operatorii sunt: ++ (pentru incrementare) -- (pentru decrementare) Operatorii pot fi prefixati (aplicati in fata operandului; ex: ++a sau --a, unde a este de tip int) sau postfixati (aplicati dupa operand; ex: a++ sau a-- unde a este de tip int). Daca operatorul este prefixat, variabila este incrementata (decrementata) inainte ca valoarea retinuta de ea sa intre in calcul. Daca operatorul este postfixat, variabila este incrementata (decrementata) dupa ce valoarea retinuta de ea intra in calcul.

Observatie: In cazul utilizarii formei postfixate, apar situatii in care nu se poate decide care va fi
valoarea produsa de expresie la evaluare. Din acest motiv, se va evita scrierea unor astfel de expresii. Exemple: Fie int a=1. Expresia 1+a++ are valoarea 2, dar, dupa evaluare, a va retine valoarea 2; Fie int a=1. Expresia 1-++a are valoarea -1, dar, dupa evaluare, a va retine valoarea 2; Fie int a=1. Expresia 1+++a este eronata sintactic deoarece compilatorul a considerat operatorul ++ pentru 1 si nu pentru a. Aplicarea acestor operatori se face numai pentru variabile. Fie int a=1, b=3. Expresia a++*b++ are valoarea 3, dar, dupa evaluare, cele doua variabile retin 2 si 4; Fie int a=1, b=3. Expresia ++a*++b are valoarea 8, dar, dupa evaluare, cele doua variabile retin 2 si 4; Fie int a=1. Expresia a+++a++ nu poate fi decisa;

7. Operatorul de atribuire (Limbajul C/C++):


Operatorul de atribuire este = El se utilizeaza in expresii de forma: v=expresie ,unde v este o variabila Principiul de executie este urmatorul: se evalueaza expresia; i se atribuie variabilei v valoarea obtinuta (daca este necesar se efectueaza conversia implicita). Se pot efectua si atribuiri multiple de forma: v=v1=v2=vn=expresie Pentru atribuiri se mai pot utiliza si operatorii: *=, /=, %=, +=, -= , <<=, >>=, &=,^=, |=. O atribuire de forma v op expresie are acelasi rezultat ca v= v op expresie

Exemple:
Fie int a=1, b=3; float c. In urma atribuirii c=b/a, c va contine valoarea reala 1.0; Fie int a, b; float c;. In urma evaluarii expresiei c=a=b=1, a va avea valoarea 1, b va avea valoarea 1, iar c va avea valoarea 1.0; Fie int a=3. In urma evaluarii expresiei a*=2, a va avea valoarea 6; Fie int a=0, s. In urma evaluarii expresiei s=(a=3)+(++a) nu se poate decide daca s va avea valoarea 4 sau 7, deoarece nimeni nu garanteaza care operand (dintre cei doi legati de operatorul +) va fi evaluat primul; Observatie: In cazul in care unei variabile de unul dintre tipurile intregi i se atribuie continutul unei variabile reale, acesta este trunchiat. Ex: Fie int a, float b=-1.9. In urma atribuirii a=b, a va avea valoarea -1. Atentie: Trunchiere nu inseamna parte intreaga.

8. Operatorul virgula:
Operatorul virgula leaga doua expresii intr-una singura conform formatului: exp1, exp2, , expn; Expresiile se evalueaza in ordinea exp1, exp2, , expn. Aceasta expresie (construita din mai multe) va avea valoarea si tipul ultimei expresii. Exemplu: Fie int a=1, b=5; float c; Expresia c=a=b+1, a=c+2, b=b+1; va fi de tipul int si va avea valoarea 6.

9. Operatorul conditional:Operatorul conditional permite construirea de expresii a caror


valoare depinde de valoarea unei conditii. O expresie conditionala are urmatoarea forma: exp1 ? exp2 : exp3 Principiul de executie este urmatorul: se determina valoarea expresiei exp1; daca exp1 are valoare diferita de 0 (are valoarea adevarat), atunci valoarea si tipul expresiei conditionale coincid cu valoarea si tipul expresiei exp2. altfel (adica exp1 are valoarea 0) valoarea si tipul expresiei conditionale coincid cu valoarea si tipul expresiei exp3. Exemplu: maximul dintre a si b se poate exprima prin : (a>b)?a:b

10. Operatorul dimensiune:


-Acest operator este folosit pentru determinarea dimensiunii in octeti a unei date sau a unui tip. El
poate fi utilizat sub formele: sizeof (expresie) sizeof (tip) unde data poate fi o variabila sau adresa, iar tip poate fi identificator de tip predefinit, definit de utilizator sau o constructie care defineste un tip. Exemplu: Fie int a; sizeof (a)=2 (daca in versiunea de C utilizata, tipul int ocupa 2 octeti); Fie float a. Atunci sizeof (a) =4; sizeof (float) =4; Fie int a; double b. Atunci sizeof (a+b)=8; Fie float x. Atunci sizeof (++x)=4, dar x ramane nemodificat.

11. Operatorul de conversie implicita: Acest operator se foloseste atunci cand se


doreste ca unul sau mai multi operanzi sa intre in calculul unei expresii asa cum doreste programatorul (nu implicit). Pentru aceasta, inaintea operandului se trece intre paranteze tipul sau. Exemple: Fie float x=-1.9. Atunci expresia (int)x are valoarea -1; Fie int a=3, b=6. Atunci expresia (float) a/b are valoare 0.5; Fie int x=12333; double y. Se poate folosi expresia y=sqrt((double)x);

S-ar putea să vă placă și