lecture2 - pc
Post on 15-Jan-2017
157 Views
Preview:
TRANSCRIPT
Programarea calculatoarelor
#2
Adrian Runceanuwww.runceanu.ro/adrian
2016
C++Elemente introductive ale limbajului C++
copyright@www.adrian.runceanu.ro
Curs 2 Elemente introductive ale
limbajului C++
02.12.2016 Curs - Programarea calculatoarelor 2
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.2. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 3
copyright@www.adrian.runceanu.ro
2.1. Programarea şi limbaje de programare
Prin programare se înţelege în mod generictranspunerea unor operaţii repetitive, asupra unui set dedate, într-un limbaj inteligibil de către un sistem de calculcare urmează ulterior să le execute.Acest lucru este realizat în două etape:
1. etapă în care este implicat omul şi anume cea de trecere dela problema reală la transpunerea într-un limbaj deprogramare.
2. o a doua etapă, automată, care transpune codul sursă(înşiruirea de instrucţiuni specifice limbajului respectiv) într-un cod direct executabil (inteligibil sistemului de calcul)lucru de care se ocupă programe specializate numitecompilatoare.
02.12.2016 Curs - Programarea calculatoarelor 4
copyright@www.adrian.runceanu.ro
2.1. Programarea şi limbaje de programare
Rolul programării este ca de fiecare datăcând o anumită operaţiune sau o suită deoperaţiuni repetitive care se aplică asupra unorseturi de date mereu diferite să fie scris unprogram care să:
1. ceară setul de date de intrare (cele care trebuiesă fie prelucrate)
2. să execute asupra lor suita standard deoperaţiuni
3. şi să livreze datele de ieşire (adică rezultatele)
02.12.2016 Curs - Programarea calculatoarelor 5
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.2. Constante2.3.2. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 6
copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Limbajele de programare de nivel mediu au fost
serios dezvoltate pe la mijlocul anilor '50.
La ora actuală se estimează că există peste 2000 de
limbaje de programare, diferenţele între ele fiind legate
în principal de stilul de programare.
Limbajul C, dezvoltat în 1972 de Dennis M. Ritchie*
la Laboratoarele AT&T Bell, este primul limbaj pentru
crearea de sisteme de operare.
*Dennis M. Ritchie a decedat pe 14.10.2011 (la varsta de 70 de ani)!
02.12.2016 Curs - Programarea calculatoarelor 7
copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Numele limbajului provine din faptul că esterezultatul îmbunătăţirii limbajului B, folosit în scriereasistemului de operare UNIX pentru DEC PDP7.
Prima documentaţie despre acest limbaj a fost "TheC Programing Language", scrisă de Dennis Ritchie şiBrian Kernighan în 1977.
Înaintea ei exista doar "The C Reference Manual",scrisă de Dennis Ritchie.
O caracteristică importantă a acestui limbaj estefaptul că poate fi considerat simultan şi un limbaj denivel mediu şi un limbaj de nivel scăzut.
02.12.2016 Curs - Programarea calculatoarelor 8
copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Limbajul C şi versiunile sale OOP (ObjectOriented Programming) C++, Visual C++ şimai noul C# sunt printre cele mai folositelimbaje de programare la ora actuală.
02.12.2016 Curs - Programarea calculatoarelor 9
copyright@www.adrian.runceanu.ro
2.2. Limbajul C
http://spectrum.ieee.org/computing/software/the-2015-top-ten-programming-languages
02.12.2016 Curs - Programarea calculatoarelor 10
copyright@www.adrian.runceanu.ro
2.2. Limbajul C
Limbajul C permite folosirea a două tehnicide programare:
1. programare structurată2. acces direct la maşină
fapt care-l face să fie foarte flexibil.Ultimul şi poate cel mai important motiv
pentru învăţarea limbajului C este faptul căpermite trecerea cu uşurinţă la varianta sa C++,la limbajul Java sau la limbajul C#.
02.12.2016 Curs - Programarea calculatoarelor 11
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 12
copyright@www.adrian.runceanu.ro
2.2. Elemente de bază ale limbajului C++
Vom studia în cele ce urmează variantaorientată pe obiecte a limbajului standard C, şianume limbajul C++.
02.12.2016 Curs - Programarea calculatoarelor 13
copyright@www.adrian.runceanu.ro
2.2. Elemente de bază ale limbajului C++
1. Tipuri de date. Variabile. ConstanteCuvinte cheie
Limbajul C, ca orice limbaj de programare,este compus din câteva denumiri (identificatori)cu o semnificaţie bine stabilită, numite cuvintecheie.
Observaţie: Când alegeţi denumiri de variabilepentru programe să nu utilizaţi aceste denumiri.
02.12.2016 Curs - Programarea calculatoarelor 14
copyright@www.adrian.runceanu.ro
2.2. Elemente de bază ale limbajului C++
Limbajul C++ adaugă noi cuvinte cheie la celeexistente ale limbajului C.
02.12.2016 Curs - Programarea calculatoarelor 15
auto break case char const continue default dodouble else enum extern float for goto ifint long register return short signed sizeof staticstruct switch typedef union unsigned void volatile while
asm bool catch class deletefriend inline mutable namespace newoperator private public protected templatethis using virtual
Cuvintele cheie ale limbajului C.
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 16
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
Un tip de date specifică (precizează):
mulţimea de valori pe care variabila respectivăle poate lua
cât şi setul de operaţii pe care programatorul lepoate efectua cu acea variabilă
02.12.2016 Curs - Programarea calculatoarelor 17
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de dateNUMELE TIPULUI
CARACTERISTICI
char reţine un singur caracter Exemple: ‘A’, ’a’, ’%’, etc.
int reţine numere întregi cu semn Exemple: 23, -45, 0, etc.
float reţine numere reale în format cu virgulă mobilă, în simplă precizie Exemple: 7.8965, -4.123, 7.0, etc.
double
reţine numere reale în format cu virgulă mobilă, în dublă precizie Exemple: 123456789.89654321, -123456789.1234567890, 123456789.0, etc. (se utilizează când se prelucrează numere foarte mari sau foarte mici)
void tip de date special care nu specifică un anumit set de valori iniţial, dar care poate fi specificat ulterior declarării.
02.12.2016 Curs - Programarea calculatoarelor 18
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de dateReprezentarea caracterelor in memoria calculatorului
Programatorii pot folosi in programe valori de orice tip (cifra,litera mica, litera mare, caractere speciale, alte caractere).
In memoria calculatorului fiecare astfel de caracter sereprezinta printr-un cod numeric - ASCII (codul numeric alcaracterului respectiv). Intervalul este intre 0 si 255.
02.12.2016 Curs - Programarea calculatoarelor 19
Interval valori (selecție)Cod ASCII
Semnificație
[0, 32] Caractere neprintabile(netipăribile)
[48, 57] Cifrele de la 0 la 9
[65, 90] Literele mari de la A la Z
[97, 122] Literele mici de la a la z
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
1. Tipul de date char
Se reprezintă în memoria calculatorului folosind 8 biţi (un octet) şipoate păstra valori cuprinse între –128 şi 127.Dacă se declară fără semn (adică se utilizează modificatorul unsigned),intervalul de valori se întinde de la 0 la 255.
Programatorii pot atribui valori de tip caracter unei astfel devariabile în două modalităţi distincte, dar care acţionează identic:
reprezentarea din ASCII (codul numeric al caracterului respectiv) sau caracterul respectiv între două apostrofuri
02.12.2016 Curs - Programarea calculatoarelor 20
Exemplu:char litera_mica; char litera_mica=97;
sau char litera_mica=’a’;
char <definitie_de_data>;
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
2. Tipul de date int
Se reprezintă în memoria calculatorului folosind 16biţi (2 octeţi) şi poate păstra valori cuprinse între–32768 şi 32767.
Dacă se declară fără semn (adică se utilizeazămodificatorul unsigned), intervalul de valori se întindede la 0 la 65535.
02.12.2016 Curs - Programarea calculatoarelor 21
int <definitie_de_data>;
Exemplu: int a=9;int b=6725;int c=-31567;
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
3. Tipul de date float
Se reprezintă în memoria calculatorului folosind 32biţi (4 octeţi) şi poate păstra valori cuprinse între 3.4E-38 şi 3.4E+38.
02.12.2016 Curs - Programarea calculatoarelor 22
float <definitie_de_data>;
Exemplu: float x=9.789;float y=-6725.123;float z=-3156723;
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
4. Tipul de date double
Se reprezintă în memoria calculatorului folosind64 biţi (8 octeţi) şi poate păstra valori cuprinse între1.7E-308 şi 1.7E+308.
02.12.2016 Curs - Programarea calculatoarelor 23
double <definitie_de_data>;
Exemplu:
double numar_foarte_mare=123456789123456789.123456789123456789;double numar_foarte_mic=-123456789123456789.123456789123456789;double numar_mare=-123456789;
copyright@www.adrian.runceanu.ro
2.3.1. Tipuri de date
5. Tipul de date void
Este tipul de dată vidă (fără tip specificat), utilizat în generalpentru mărirea clarităţii programelor.
Tipul void permite explicitarea faptului că o funcţie nureturnează nimic sau nu are nici un parametru.
02.12.2016 Curs - Programarea calculatoarelor 24
[void ] <definitie_de_functie([void])sau
void <definitie_de_pointer>;
Exemplu: void salut(void){
cout<<"SALUTAM PROGRAMATORII IN LIMBAJUL C++ !!!\n";
}
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 25
copyright@www.adrian.runceanu.ro
2.3.2. Modificatorii de tip
Limbajul C++ oferă pe lîngă cele 5 tipuri de bazăprezentate mai sus, un set de modificatori de tip:
1. unsigned (fără semn)2. long (lung)3. signed (cu semn) 4. register (registru)5. short (scurt) Un modificator de tip schimbă domeniul valorilor pe care o
variabilă le poate păstra, sau modul în care compilatorulpăstrează o variabilă.
Pentru a se modifica un tip de data, se va plasa modificatorulîn faţa tipului respectiv.
02.12.2016 Curs - Programarea calculatoarelor 26
Exemplu: unsigned int numar;register int i;long int numar_foarte_mare;
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 27
copyright@www.adrian.runceanu.ro
2.3.3. Constante
Sunt date a căror valoare nu poate fi modificată în
timpul execuţiei programului.
Ele reprezintă un tip şi o valoare şi astfel pot fi de mai
multe tipuri:
1. constantă întreagă
2. constantă flotantă
3. constantă caracter
4. constantă șir de caractere
02.12.2016 Curs - Programarea calculatoarelor 28
copyright@www.adrian.runceanu.ro
2.3.3. Constante1. constantă întreagă = se reprezintă sub forma unei înşiruiri de cifre.
Se clasifică în:– constante zecimale (se scriu în baza 10) Exemplu: 14, 568,
17342– constante octale (se scriu în baza 8) Exemplu: 0şir de cifre în
baza 8– constante hexazecimale (se scriu în baza 16) Exemplu: 0x şir de
cifre în baza 16Constantele întregi se reprezintă pe 16 biţi sau pe 32 de biţi. Dacăla sfârşitul unei constante punem litera l sau L, atunci constantarespectivă va fi reprezentată pe 32 de biţi.
Exemplu: numărul 17 se reprezintă pe 16 biţinumărul 17L se reprezintă pe 32 biţi
02.12.2016 Curs - Programarea calculatoarelor 29
copyright@www.adrian.runceanu.ro
2.3.3. Constante
2. constantă flotantă este compusă din 2 părţi– partea fracţionară (care poate fi vidă) şi– exponent (care poate fi el vid)
O constantă reală este sub următoarea formă:
Exemplu: 3.45e-17 3,45*10-17
Toate constantele flotante se reprezintă pe 16 biţi.
02.12.2016 Curs - Programarea calculatoarelor 30
parte întreagă.parte fracţionară e exponent
copyright@www.adrian.runceanu.ro
2.3.3. Constante3. constantă caracter este de fapt un caracter între apostrofuri.Se reprezintă pe 8 biţi, fiind chiar reprezentarea în codul ASCII a
caracterului respectiv.Exemplu:‘A’ reprezentare internă: 65 (codul ASCII a caracterului ‘A’)‘a’ reprezentare internă: 97 (codul ASCII a caracterului ‘a’)În plus avem o notaţie specială ‘\’ = backslash, care se poate folosi
împreună cu câteva litere mici cu următoarele semnificaţii:
02.12.2016 Curs - Programarea calculatoarelor 31
Caracter semnificatie\n linie noua\r retur de car\t tabulator orizontal\v tabulator vertical\\ backslash\nnn valoare ASCII in octal
\xnnn valoare ASCII in hexazecimal
copyright@www.adrian.runceanu.ro
2.3.3. Constante4. constantă şir sau şir de caractere Acest tip de constantă apare ca o succesiune de caractere scrise
între ghilimele. Poate fi şi şirul vid. Reprezentarea internă este astfel încât fiecare
caracter apare pe câte un singur octet, iar ca terminator de şiravem caracterul 0 (nul).
Constantele şir pot fi scrise pe linii diferite, dar pe prima linieultimul caracter este backslash, înainte de apăsarea tasteiRETURN.
Exemplu: linia 1 : "conti\linia 2 : nuare"
Exemplu: "AbbA" se reprezintă intern astfel: 659898650 A b b A
02.12.2016 Curs - Programarea calculatoarelor 32
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 33
copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Pentru a putea utiliza informaţiile ce pot fi prelucrate
prin intermediul programelor, trebuie să folosim
denumiri (identificatori), care să fie compuşi din
caractere – litere, cifre şi liniuţa de subliniere -
underscore(‘_’) din maximum 31 caractere.
Numim variabilă o denumire (identificator) pe care
compilatorul o asociază cu o anumită zonă de memorie.
02.12.2016 Curs - Programarea calculatoarelor 34
copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Când se declară o variabilă, trebuie specificat atât numele ei cât şi tipul de date asociat.
02.12.2016 Curs - Programarea calculatoarelor 35
Exemple:int variabila_de_tip_intreg;float variabila_de_tip_real;char variabila_de_tip_caracter;void variabila_fara_tip;
Restricţie: Numele variabilelor nu poate să înceapă cu o cifră.
Exemplu: variabila1 - este corect1variabila - nu este corect
copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Observaţie:
Limbajul C este case sensitive, adică face diferenţa dintreliterele mici şi mari, astfel încât, două denumiri devariabile sau de funcţii, care sunt identice dar sunt scriseo dată cu litere mici iar apoi cu litere mari, se considerăca fiind două denumiri de variabile sau de funcţiidiferite.
Exemplu: int var_intreaga;int VAR_INTREAGA;
semnifică două denumiri total diferite.
02.12.2016 Curs - Programarea calculatoarelor 36
copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Variabilele pot fi:
1. simple
2. compuse:a) tabloub) structură/uniune/enumerare
02.12.2016 Curs - Programarea calculatoarelor 37
copyright@www.adrian.runceanu.ro
2.3.4. Variabile
1. Variabilele simpleDeclaraţia de variabilă simplă are forma:
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 38
tip nume_variabila;
int i;int j, k, l;double a, b;float x, y;char m, n, t;
copyright@www.adrian.runceanu.ro
2.3.4. Variabile
2. Variabilele tablouPrin tablou înţelegem o mulţime ordonată
de acelaşi tip; accesul la elementele tablouluifăcându-se cu ajutorul indicilor.
Declaraţia este:
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 39
tip nume_tablou[dimensiune];
int v[5];float x[15];double a[3];
copyright@www.adrian.runceanu.ro
2.3.4. Variabile
Observaţie:Numerotarea elementelor unui tablou în
limbajul C++ începe cu indicele 0.Elementele lui int v[5] vor fi:
v[0],v[1],v[2],v[3],v[4];Indice poate să fie orice expresie întreagă.Putem avea chiar şi tablouri de şiruri de
caractere: char t[20];Numele tabloului este de fapt adresa
primului său element.02.12.2016 Curs - Programarea calculatoarelor 40
copyright@www.adrian.runceanu.ro
2.3.4. VariabileIniţializarea variabilelor
Poate fi făcută chiar pe linia de declarare a variabilelor:Exemplu:
Pentru iniţializarea variabilelor de tip şir de caractere avemurmătoarele posibilităţi:
char t[15] = { ’s’, ’i’, ’r’, ’ ’, ’c’, ’o’, ’r’, ’e’, ’c’, ’t’, ’\0’ };sau char t[15] = ”sir corect”;
02.12.2016 Curs - Programarea calculatoarelor 41
int i=5;float x=7.8;int v[5]={1,2,7,10,-5};float y[3]={-9.034,89,2};char c=’B’;
copyright@www.adrian.runceanu.ro
2.3.4. VariabileComentarii în programeNumim comentarii, acele texte care nu sunt luateîn considerare de compilator şi care apar întresimbolurile
/* comentariu */saucând este vorba despre o singură linie
// comentariuSe mai pot pune comentarii pentru ca să se
elimine una sau mai multe instrucţiuni dinprogramul C++.
02.12.2016 Curs - Programarea calculatoarelor 42
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 43
copyright@www.adrian.runceanu.ro
2.4. OPERATORII LIMBAJULUI C++
Expresii
O expresie poate să fie un operand sau maimulţi operanzi legaţi prin operatori
Orice expresie are tip şi valoare care se obtindupă evaluarea expresiei
02.12.2016 Curs - Programarea calculatoarelor 44
copyright@www.adrian.runceanu.ro
2.4. OPERATORII LIMBAJULUI C++
Operatori
Operatorii folosiţi în limbajul C++ au o asocierede la stânga la dreapta – în general – cu excepţia- operatorilor unari (se aplică la un singur operand),- relaţionali- şi de atribuire,
la care asocierea se face de la dreapta la stânga.
02.12.2016 Curs - Programarea calculatoarelor 45
copyright@www.adrian.runceanu.ro
2.4. OPERATORII LIMBAJULUI C++
Operatorii sunt împărţiţi în 11 categorii:
Operatori
1 aritmetici
2 relaţionali
3 de egalitate
4 logici
5 logici pe biţi
6 de atribuire
7 de incrementare şi decrementare
8 de conversie explicită (cast)
9 de lungime (sizeof)
10 condiţional
11 virgulă
02.12.2016 Curs - Programarea calculatoarelor 46
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 47
copyright@www.adrian.runceanu.ro
2.4.1. Operatori aritmetici
În cele mai simple programe se pot utiliza operaţii matematice cum ar fiadunarea, scăderea, înmulţirea şi împărţirea.
OPERATOR FUNCŢIE + Adunare
- Scădere
* Înmulţire
/ Împărţire
% Restul împărţirii
+ adunare unară
- scădere unară
02.12.2016 Curs - Programarea calculatoarelor 48
Exemplu:int i=9, j=2;
atunci i/j are ca rezultat 4i%j are ca rezultat 1
copyright@www.adrian.runceanu.ro
2.4.1. Operatori aritmeticiPrezentăm în următorul program scris în C++, principalii operatorimatematici:
#include <iostream.h>int main(void){int secunde_pe_ora;float media;secunde_pe_ora = 60 * 60;media = (5 + 10 + 15 + 20) / 4;cout<<“Numarul de secunde intr-o ora este ”<< secunde_pe_ora
<<endl;cout<<“Media numerelor 5, 10, 15 si 20 este ”<<media<<endl;cout<<“Numarul de secunde in 48 de minute este
”<<secunde_pe_ora – 12 * 60<<endl;} 02.12.2016 Curs - Programarea calculatoarelor 49
copyright@www.adrian.runceanu.ro
2.4.1. Operatori aritmetici
După execuţia programului se vor afişa pe ecranurmătoarele rezultate:
Numarul de secunde intr-o ora este 3600 Media numerelor 5, 10, 15 si 20 este 12.000000Numarul de secunde in 48 de minute este 2880
02.12.2016 Curs - Programarea calculatoarelor 50
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 51
copyright@www.adrian.runceanu.ro
2.4.2. Operatori relaţionaliÎn programe, prin aplicarea acestor operatori relaţionali se
pot obţine două valori posibile, la evaluarea expresiilor care îiconţin:
0 – ceea ce înseamnă că expresia este falsă1 – ceea ce înseamnă că expresia este adevărată
OPERATOR FUNCŢIE
< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal
02.12.2016 Curs - Programarea calculatoarelor 52
Exemplu:
int i=3, j=8;Atunci pentru expresia i < j avem valoarea 1
Iar pentru expresia i >= j avem valoarea 0
copyright@www.adrian.runceanu.ro
2.4.2. Operatori relaţionaliSe citesc doua numere întregi a si b. Să se realizeze un algoritmcare să verifice care numar este mai mare, afişandu-se un mesajcorespunzator:
#include <iostream.h>int main(void){
int a,b;cin>>a; cin>>b; if(a > b)
cout<<“Numarul a este mai mare decat numarul b\n”;else
cout<<“Numarul b este mai mare decat numarul a\n”;}
02.12.2016 Curs - Programarea calculatoarelor 53
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.1. Programarea şi limbaje de programare2.2. Limbajul C2.3. Elemente de bază ale limbajului C++
2.3.1. Tipuri de date2.3.2. Modificatorii de tip2.3.3. Constante2.3.4. Variabile
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relationali2.4.3. Operatori de egalitate
02.12.2016 Curs - Programarea calculatoarelor 54
copyright@www.adrian.runceanu.ro
2.4.3. Operatori de egalitate
În programe, prin aplicarea acestor operatori de egalitate sepot obţine două valori posibile, la evaluarea expresiilor care îiconţin:
0 – ceea ce înseamnă că expresia este falsă1 – ceea ce înseamnă că expresia este adevărată
OPERATOR FUNCŢIE
== egal
!= diferit
02.12.2016 Curs - Programarea calculatoarelor 55
Exemplu:int i=2, j=5, k=2;
Atunci pentru expresia i!=j avem valoarea 1Pentru expresia i==j avem valoarea 0Iar pentru expresia i==k avem valoarea 1
copyright@www.adrian.runceanu.ro
2.4.3. Operatori de egalitateSe citeşte un număr întreg a. Să se realizeze un algoritm care săverifice dacă numărul a este par, afişandu-se un mesajcorespunzator:
#include <iostream.h>int main(void){
int a;cin>>a; if( a % 2 == 0 )
cout<<“Numarul este par\n”;else
cout<<“Numarul este impar\n”;}
02.12.2016 Curs - Programarea calculatoarelor 56
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 57
2.4.4. Operatori logici
În limbajul C/C++ nu există valori speciale pentru adevăratsau fals şi de aceea:
- valoarea de fals este reprezentată prin zero (0)- iar valoarea de adevarat este reprezentată prin orice număr
diferit de zero (0)
Observaţie:Din punct de vedere al priorităţii, operatorii unari au cea mai
mare prioritate şi de aceea, în acest caz, operatorul ‘!’ areprioritatea cea mai mare, urmat în ordine de operatorul ‘&&’ şide operatorul ‘||’.02.12.2016 Programarea calculatoarelor 58
OPERATOR FUNCŢIE
! negare
&& şi logic
|| sau logic
2.4.4. Operatori logici
Reamintim tabele de adevăr ale celor trei operatorilogici:
Exemplu:expresia !0 are valoarea 1expresia !5 are valoarea 0expresia !(a==b) are valoarea 1 sau 0 în funcţie de valorile lui
a, respectiv b.
02.12.2016 Programarea calculatoarelor 59
&& 0 00 0 00 0 1
|| 0 00 0 10 1 1
!0 1
! 0 0
2.4.4. Operatori logici
Prezentăm maijos, un exemplu maiamplu cu câtevaexpresii la care leevaluăm valorile:
Presupunem că avemvariabilele întregi:
• i = 0• j 0• k 0
02.12.2016 Programarea calculatoarelor 60
Expresie
i && j!i && ji || ji ||!j
!(i && j)!i || !j
!i && j || !j && ii <= j || j <= k
0
1
1
0
1
1
1
0 sau 1
Valoare
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 61
2.4.5. Operatori logici pe biţi
Operatorii logici pe biţi se pot folosi în limbajul C++, pentru amări performanţele unui program sau pentru a-i reduce consumulde memorie utilizată.
Acest tip de operatori se aplică unuia sau mai multor biţidintr-o expresie.
02.12.2016 Programarea calculatoarelor 62
OPERATOR FUNCŢIE~ negație logică pe biţi& şi pe biţi| sau pe biţi^ sau exclusiv pe biţi
<< deplasare la stânga pe biţi>> deplasare la dreapta pe biţi
copyright@www.adrian.runceanu.ro
2.4.5. Operatori logici pe biţi
Operatorul unar “~” returnează operandulasupra căruia este folosit cu toţi biţii negaţi
Exemplu : ~0 are valoarea 1
010 = 000000002
prin negare bit cu bit se transformă în
~010 = 111111112 (numărul este 25510)02.12.2016 Programarea calculatoarelor 63
2.4.5. Operatori logici pe biţi
Operatorul binar “&” se utilizează pentru atransforma în 0 anumiţi biţi, sau pentru a testa oanumită configuraţie de biţi.
Exemplu:110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- --------------------010 = 000000002 110 = 000000012
expresie valoare 1 & 2 0
1 & 3 1
02.12.2016 Programarea calculatoarelor 64
2.4.5. Operatori logici pe biţi
Operatorul binar “|” se utilizează pentru atransforma în 1 anumiţi biţi.
Exemplu:110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- --------------------310 = 000000112 310 = 000000112
expresie valoare 1 | 2 3
1 | 3 3
02.12.2016 Programarea calculatoarelor 65
2.4.5. Operatori logici pe biţi
Operatorul binar “^” are următoarea tabelă devalori:
Exemplu:
110 = 000000012 110 = 000000012
210 = 000000102 310 = 000000112
-------------------- ---------------------310 = 000000112 210 = 000000102
expresie valoare
1 ^ 2 3
1 ^ 3 2
02.12.2016 Programarea calculatoarelor 66
^ 0 1
0 0 1
1 1 0
copyright@www.adrian.runceanu.ro
2.4.5. Operatori logici pe biţi
Operatorul “<<” se foloseşte pentru a deplasa spre stânga biţiiunui număr întreg cu n biţi specificaţi după operator; biţii rămaşi îndreapta se completează cu 0.
Exemplu: 2 << 2 210 = 000000102
---------------------810 = 000010002
Deci, în general, a << n înseamnă, ca valoare, a*2 la puterea n.Operatorul “>>” realizează deplasarea spre dreapta a biţilor unui
număr întreg cu n poziţii.Deci, în general, a >> n înseamnă, ca valoare, a/(2^n), fiind de faptîmpărţirea cu 2 la puterea n a numărului.
02.12.2016 Programarea calculatoarelor 67
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 68
2.4.6. Operatorul de atribuire
Are cea mai mică prioritate după operatorul virgulă şiapare sub forma:
Dacă avem var = var operator expresie, atunci în C/C++, sepoate scrie prescurtat:
unde operator poate să fie un operator aritmetic sau un operatorlogic pe biţi.
Exemplu: int i, j;i = i + 2; se poate scrie i + = 2;j = j | 1; se poate scrie j | = 1;
var = expresie
02.12.2016 Programarea calculatoarelor 69
var operator = expresie
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 70
2.4.7. Operatori de incrementare (++) şi de decrementare (--)
02.12.2016 Programarea calculatoarelor 71
OPERATOR FUNCŢIE++i incrementare prefixată--i decrementare prefixatăi++ incrementare postfixatăi-- decrementare postfixată
copyright@www.adrian.runceanu.ro
2.4.7. Operatori de incrementare (++) şi de decrementare (--)
De fapt:++i i = i + 1 - incrementarea se face înainte de
evaluarea expresiei în care apare ++i++ i = i + 1 - incrementarea se face după evaluarea
expresiei în care apare ++--i i = i - 1 - decrementarea se face înainte de
evaluarea expresiei în care apare --i-- i = i - 1 - decrementarea se face după evaluarea
expresiei în care apare --
Observaţie: Aceşti operatori nu se aplică unor expresii.02.12.2016 Programarea calculatoarelor 72
copyright@www.adrian.runceanu.ro
2.4.7. Operatori de incrementare (++) şi de decrementare (--)
Pentru a înţelegere mai eficient diferenţa între cele două forme,prezentăm mai jos o secvenţă de program care utilizează ambii operatori:
Rezultatele execuţiei sunt următoarele:Utilizarea formei postfixate 1Valoarea dupa incrementare 2Utilizarea formei prefixate 2Valoarea dupa incrementare 2
02.12.2016 Programarea calculatoarelor 73
int valoare = 1;cout<<"Utilizarea formei postfixate "<<valoare++<<endl;cout<<"Valoarea dupa incrementare "<<valoare<<endl;
valoare=1;cout<<"Utilizarea formei prefixate "<<++valoare<<endl;cout<<"Valoarea dupa incrementare "<<valoare<<endl;
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 74
2.4.8. Operatorul de conversie explicită (cast)
Se foloseşte pentru forţarea tipului unui operand.
Are forma:
unde operand poate fi şi o expresie, iar tip este un operatorunar.
Exemplu: int i=5, j=2;float a;a = i / j; înseamnă că a primeşte valoarea întreagă 2a = (float) (i / j); înseamnă că a primeşte ca valoare 2a = (float) i / j; înseamnă că a primeşte ca valoare 2.5
(tip) operand
02.12.2016 Programarea calculatoarelor 75
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 76
copyright@www.adrian.runceanu.ro
2.4.9. Operatorul de lungime (sizeof)
Este un operator cu o prioritate mare,folosit în determinarea lungimii în octeţi a unuioperand care poate fi o expresie sau un tip dedate.
02.12.2016 Programarea calculatoarelor 77
sizeof (expresie) sizeof (tip)
copyright@www.adrian.runceanu.ro
2.4.9. Operatorul de lungime (sizeof)
Pentru a putea înţelege eficienţa folosirii acestui operator, prezentăm unscurt program:
În funcţie de compilatorul C/C++ folosit (exemplu MinGW) se obţinurmătoarele rezultate:
Variabila de tip int foloseşte 2 octeţiVariabila de tip float foloseşte 4 octeţiVariabila de tip double foloseşte 8 octeţiVariabila de tip unsigned foloseşte 2 octeţiVariabila de tip long foloseşte 4 octeţi
02.12.2016 Programarea calculatoarelor 78
cout<<"Variabila de tip int foloseste "<<sizeof(int)<<" octeti\n";cout<<"Variabila de tip float foloseste "<<sizeof(float)<<" octeti\n";cout<<"Variabila de tip double foloseste "<< sizeof(double)<<" octeti\n";cout<<"Variabila de tip unsigned foloseste "<<sizeof(unsigned)<<"octeti\n”;cout<<"Variabila de tip long foloseste "<<sizeof(long)<<" octeti\n";
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 79
2.4.10. Operatorii condiţionali “?” “:”
Se folosesc numai împreună şi funcţionează ca o instrucţiune if.
Forma este următoarea:sau
unde expresie1 este o expresie logică care poate fi adevarată saufalsă; când este adevarată rezultatul este expresie2, iar când este falsă rezultatul este expresie3.
Exemplu: modul = x < 0 ? –x : x;max = a < b ? b : a;min = a < b ? a : b;
expresie1 ? expresie2 : expresie3
var = expresie1 ? expresie2 : expresie3
02.12.2016 Programarea calculatoarelor 80
copyright@www.adrian.runceanu.ro
2. Elemente introductive ale limbajuluiC++
2.4. Operatorii limbajului C++2.4.1. Operatori aritmetici2.4.2. Operatori relaţionali2.4.3. Operatori de egalitate2.4.4. Operatori logici2.4.5. Operatori logici pe biţi2.4.6. Operatorul de atribuire2.4.7. Operatori de incrementare şi de decrementare2.4.8. Operatorul de conversie explicită (cast)2.4.9. Operatorul de lungime (sizeof)2.4.10. Operatorii condiţionali2.4.11. Operatorul virgulă
02.12.2016 Programarea calculatoarelor 81
2.4.11. Operatorul virgulă “,”
Are prioritatea cea mai scazută din toţioperatorii.
Are următoarea formă:
sau
Această expresie se evaluează de la stânga ladreapta, evaluându-se pe rând fiecare expresie pânăse ajunge la ultima.
expresie1, expresie2, expresie3, . . . , expresien
expresie = expresie1, expresie2, expresie3, . . . , expresien
02.12.2016 Programarea calculatoarelor 82
Tabela de priorităţi a operatorilorÎn limbajul C/C++, pentru a evalua expresiile în care apar
operatori, s-au stabilit anumite reguli de prioritate (precedenţă) a operatorilor.
02.12.2016 Programarea calculatoarelor 83
NIVEL DE PRIORITATE
OPERATOR ASOCIATIVITATE
1 () [] . -> stânga -> dreapta
2 - (unar) + (unar) & (unar) ! ~ *(unar) (cast) (sizeof) ++ -- dreapta -> stânga
3 * (binar) / % stânga -> dreapta
4 + (binar) - (binar) stânga -> dreapta
5 << >> stânga -> dreapta
6 < <= > >= dreapta -> stânga
7 == != stânga -> dreapta
8 & stânga -> dreapta
9 ^ stânga -> dreapta
10 | stânga -> dreapta
11 && stânga -> dreapta
12 || stânga -> dreapta
13 ? : stânga -> dreapta
14 = dreapta -> stânga
15 , stânga -> dreapta
Probleme propuse spre rezolvare
02.12.2016 Programarea calculatoarelor 84
copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Problema 1Să se scrie un program care să afișeze toate
numerele perechi de numere prime gemene mai micidecât un număr natural n dat.
Spunem că două numere a și b sunt prime gemenedacă îndeplinesc următoarele condiții:
1. sunt prime2. |a - b|=2
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 85
Pt. n=20 se obțin valorile:
(3,5); (5,7); (11,13); (17,19)
copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 1: Stabilim care sunt datele de intrare, adicăcele care vor fi prelucrate cu ajutorulalgoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr întreg
Date de ieșire: numere prime gemene
02.12.2016 Curs - Programarea calculatoarelor 86
copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 2: Analiza problemeiStabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi prelucrate încadrul algoritmului.
Verificăm valorile a între 3 și n-2. Pentru acestevalori verificăm:
a) Numărul a este sau nu număr primb) Numărul b=a+2 este sau nu număr prim
Dacă ambele numere sunt prime, atunci am găsit opereche de numere prime gemene.
02.12.2016 Curs - Programarea calculatoarelor 87
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 3:Scriereaalgoritmului în pseudocod:
02.12.2016 Curs - Programarea calculatoarelor 88
întreg n, a, b, prim1, prim2, i, j
citeşte n
pentru a=3,n-2 execută
prim1 <- 1
pentru i=2, a/2 execută
dacă a % i = 0 atunci
prim1 <- 0
sfârșit dacă
sfârșit pentru
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Pas 3:Scriereaalgoritmului în pseudocod:
02.12.2016 Curs - Programarea calculatoarelor 89
b <- a+2
prim2 <- 1
pentru j=2, b/2 execută
dacă b % j = 0 atunci
prim2 <- 0
sfârșit dacă
sfârșit pentru
dacă prim1 = 1 și prim2=1 atunci
scrie a, b
sfârșit dacă
sfârșit pentru
stop
copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Problema 2Sa se scrie un program care sa determine
toate numerele prime palindrom dintr-uninterval [a, b] dat, cu a si b valori naturale.
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 90
Pt. a=10 si b=400 se obțin valorile:
(11, 101, 131, 151, 181, 191, 313, 353, 373)
copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Problema 3Se citesc numere naturale strict pozitive până
la întâlnirea numărului 0. Să se numere câte dintre ele sunt pare,
presupunând că cel puţin primul element estenenul. Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 91
Date de intrare: 4 3 6 5 7 7 0 Date de ieşire: 2 numere pare
copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Problema 4
Se citesc de la tastatură numere intregipozitive până la întâlnirea numărului 0.
Să se scrie un program care să afişeze cea mai micăşi cea mai mare valoare a acestor numere. Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 92
Date de intrare: 550 345 100 45 0Date de ieşire: max=550 min=100
copyright@www.adrian.runceanu.ro
Algoritmi cu structura repetitivă cu număr cunoscut de pași
Problema 5
Se introduce un număr natural cu maxim 9 cifre. Să se determine şi să se afişeze numărul de cifre, cea mai mare cifră şi suma tuturor cifreloracestui număr.
Exemplu:
02.12.2016 Curs - Programarea calculatoarelor 93
Date de intrare: 24356103 Date de ieşire: 8 cifremax = 6 suma = 24
copyright@www.adrian.runceanu.ro
Referinte bibliograficeBibliografia necesară cursului:
1. Adrian Runceanu, Mihaela Runceanu, Noțiuni de programare înlimbajul C++, Academica Brâncuşi, Târgu-Jiu, 2012, ISBN 978-973-144-550-2, 483 pagini
2. Adrian Runceanu, Programarea şi utilizarea calculatoarelor,Editura Academică Brâncuși Targu-Jiu, 2003
3. Octavian Dogaru, C++ - Teorie şi practică, volumul I, EdituraMirton, Timişoara, 2004
4. O.Catrina, I.Cojocaru, Turbo C+, Editura Teora, Bucureşti, 19935. D.Costea, Iniţiere în limbajul C, Editura Teora, Bucureşti, 19966. K.Jamsa, C++, Editura Teora,19997. K.Jamsa & L.Klander, Totul despre C si C++, Teora, 2004
02.12.2016 Programarea Calculatoarelor - curs 94
copyright@www.adrian.runceanu.ro
“First, solve the problem. Then, write the code.”
- John Johnson
02.12.2016 Programarea Calculatoarelor - curs 95
top related