Sunteți pe pagina 1din 9

Limbaje de programarea pentru roboi

L1

Lucrare de laborator nr. 1 ELEMENTE ALE LIMBAJULUI C++ FOLOSITE N PROGRAMAREA ROBOILOR INDUSTRIALI (1) 1. DESPRE LIMBAJUL C++
La nceputul anilor 1970 a aprut limbajul C, creaia lui Dennis Ritchie i Brian Kernighan. Limbajul C++, creaia lui Bjarne Stroustrup, poate fi privit ca o extensie a limbajului C, care permite programarea pe obiecte. Limbajul C++ are urmtoarele avantaje: Limbajul este extrem de flexibil. Acesta ne permite ca pornind de la un algoritm, redactat n pseudocod, s permit scrierea a mai multor programe, care nu seamn ntre ele, dei fac acelai lucru. Cu alte cuvinte, o secven poate fi codificat n mai multe feluri. programele se pot scrie i ntr-o manier apropiat de limbajul pseudocod. Din aceast cauz limbajul C++ este preferat de muli programatori. Atenie. n C++ se poate grei uor, datorit faptului c este permis s scriem aproape orice. Pentru ca C++ s fie un limbaj portabil au aprut norme ANSI C++ (American National Standard Institute). Limbajul de programare C++ conine setul de instruciuni i o mulime de funcii care au rolul de a ajuta programatorul n elaborarea programelor.

2. STRUCTURA PROGRAMELOR C++


Dac exist un algoritm de rezolvare a unei probleme, atunci, prin respectarea structurilor clasice ale programrii structurate, acesta poate fi descompus n ali algoritmi mai mici pe care i numim subalgoritmi. n general, un program C++ este alctuit din una sau mai multe funcii. Fiecrui algoritm n C++ i corespunde o funcie care codific algoritmul n instruciuni C++. O funcie poate ntoarce un rezultat sau nu. Dac aceasta nu ntoarce nici un rezultat, spunem c tipul rezultatului este void. n general, exist funcii cu rezultat de tip ntreg, real, etc. Funcia poate conine declaraii de variabile care pot fi utilizate doar de ea, nu i de celelalte funcii. programul C++ este alctuit din una sau mai multe funcii, din care una este rdcin, adic nu poate lipsi i execuia programului ncepe automat cu ea. Aceasta se numete main. De asemenea, programul poate conine i declaraii de variabile globale, adic variabile cu care pot lucra toate funciile care l alctuiesc. Cel mai simplu program arat astfel: void main () { } Programul de mai sus este corect, dar nu execut nici o operaie. programul este alctuit din funcia rdcin main. Funcia rdcin este de tipul void, adic nu ntoarce nici un rezultat. Limbajul C++ face distincie ntre literele mari i cele mici. Este permis ca tipul funciei s lipseasc. n acest caz se presupune c funcia ntoarce un rezultat ntreg. Dac programul de mai sus se scrie astfel: main () { } 1

Limbaje de programarea pentru roboi atunci, la compilare se primete un avertisment. Acest avertisment poate fi ignorat.

L1

3. VOCABULARUL LIMBAJULUI
Vocabularul oricrui limbaj este format din: setul de caractere; identificatori; separatori; comentarii. Setul de caractere reprezint ansamblul de caractere cu ajutorul crora se poate realiza un program C++. Acesta este alctuit din: - litere mari i mici ale alfabetului; - cifrele de la 0 la 9; - caractere speciale +, -, *, /, <, >, (, ), [, ], {, }, ., ,, :, ;, i altele. Identificatori. Prin identificatori nelegem o succesiune de litere, cifre sau caracterul special _ din care prima nu trebuie s fie cifr. Cu ajutorul identificatorilor se asociaz nume constantelor, variabilelor, procedurilor, etc. Ca separator ntre linii unui program n C++ se folosete caracterul ; . Comentariile se folosesc pentru ca un program s fie uor de neles. Acestea se plaseaz oriunde n program. Un comentariu se poate scrie n dou moduri: a) ntre perechile de caractere /* i */ . Un astfel de comentariu poate ocupa mai multe linii ale textului surs. b) n cazul n care se dorete scrierea unui comentariu pe o singur linie surs, se tasteaz dou caractere / .

4. CITIRI, SCRIERI DE DATE


n C++ citirile / scrierile se fac cu ajutorul unor funcii speciale. Mai mult, acestea au i o modalitate special de apel. Pentru a putea efectua citirea / scrierea trebuie utilizat directiva: # include <iostream.h> Pentru utilizarea funciilor cerute de compilator sunt necesare anumite informaii referitoare la ele. Aceste informaii se gsesc n fiierul header (antet) numit iostream.h. Prin directiva # include se solicit ca fiierul iostream.h s fie inclus naintea textului care reprezint programul C++. Fiierul obinut nu va fi vizualizat, adic programatorul nu va vedea pe monitor acest fiier. Pentru a realiza citirea folosim instruciunea cin>> , care are urmtoarea sintax: cin>>a1>>a2>>...>>ak; unde, a1, a2, ...,ak sunt variabile de un tip precizat anterior. Pentru a realiza scrierea pe ecran se folosete instruciunea cout<< , care are urmtoarea sintax: cout<<a1<<a2<<...<<ak; unde a1, a2, ... , ak sunt variabile sau constante. Constantele de tip ir de caractere se scriu ntre apostrofuri; de exemplu: un ir. Datele se scriu, pe ecran, una dup alta, fr a se lsa spaiu ntre ele. Dac se dorete ca, la scriere, datele s fie separate prin unul sau mai multe spaii, acestea se tipresc separat. De exemplu scrierea se face astfel: cout<<a1<< <<a2;. Dac se dorete trecerea la rndul urmtor dup ce s-a scris ceva, atunci se folosete o constant special numit endl. Exemplu de program care utilizeaz instruciunile de citire i scriere. # include <iostream.h> void main () { int nr_lat; 2

Limbaje de programarea pentru roboi cout<<Numr laturi ?; cin>>nr_lat; cout<<Numrul laturilor este <<nr_lat; }

L1

5. TIPURI DE DATE
ntr-un program C++, o variabil poate reine date de un anumit tip, care trebuie declarat la nceputul programului. Dac un tip folosit este cunoscut de ctre limbaj fr a fi definit n cadrul programului, atunci el este un tip standard. n afar de acest tip standard, exist posibilitatea ca programatorul s-i defineasc propriile tipuri, pentru care trebuie s declare variabile de tipul definit de el. Limbajul C++ conine urmtoarele tipuri standard: 1. tipuri ntregi; 2. tipuri reale. n limbajul C++ nu exist tipul logic. n acest caz, orice valoare diferit de 0, a oricrui tip, este considerat ca fiind TRUE, iar orice valoare 0, a oricrui tip este considerat ca fiind FALSE. n C++ tipul caracter este asimilat tipurilor ntregi. Dac ntr-o expresie aritmetic se introduce o variabil de tip caracter, atunci nu se indic eroare, deoarece valoarea variabilei caracter se nlocuiete cu codul ASCII al caracterului. Exemplu de program n care tipul caracter este asimilat cu tipul ntreg. # include <iostream.h> void main () { char a; int b; a = y; b = 71; cout<<a<< <<a+b; } 5.1 Tipuri ntregi n limbajul C++ se ntlnesc urmtoarele tipuri ntregi: 1. Tipul unsigned char caracter fr semn, ocup 8 bii i ia valori din intervalul [0; 255]; 2. Tipul char carcater, ocup 8 bii i ia valori din mulimea [-128; 127]; 3. Tipul unsigned int - ntreg fr semn, ocup 16 bii, ia valori din intervalul [0; 65535]; 4. Tipul short int - ntreg scurt, ocup 16 bii, valorile sunt din intervalul [-32768; 32767]; 5. Tipul int - ntreg, ocup de regul 16 bii, ia valori din mulimea [-32768; 32767]; 6. Tipul unsigned long - ntreg lung fr semn, ocup 32 de bii, valorile sunt din intervalul [0; 4 294 967 295]; 7. Tipul long ntreg lung cu semn, ocup 32 de bii i ia valori din mulimea 8. [-2 147 483 648; 2 147 483 647]. Caracterele se memoreaz prin codul ASCII. 5.2 Tipuri reale Variabilele de tip real rein numere cu zecimale. n locul virgulei, n C++ se folosete punctul. Tipurile reale sunt: 1. Tipul float ocup 32 bii i ia valori ntre 3.4 x 10-38 i 3.4 x 10 38 ; 2. Tipul double ocup 64 bii i ia valori din mulimea [1.7 x 10-308; 1.7 x 10 308]; 3. Tipul long double ocup 80 bii i ia valori din intervalul [3.4 x 10-4932; 3.4 x 10 4932 ]. Pentru memorarea datelor, se folosete reprezentarea n virgul mobil. 3

Limbaje de programarea pentru roboi 5.3 Constante

L1

n limbajul C++ sunt mai multe tipuri de constante. a) Constante ntregi. Acestea se clasific dup cum urmeaz: zecimale n baza 10; octale n baza 8. O constant n baza 8 se declar precedat de un 0 nesemnificativ; hexazecimale n baza 16. Acestea sunt precedate de 0x sau 0X. O constant ntreag ia valori din mulimea [0; 4 294 967 295]. b) Constante caractere. Acestea se trec ntre dou caractere apostrof (). Exemple: C, 2, c. Memorarea caracterelor se face cu ajutorul tipului char. Se memoreaz codul ASCII al caracterului respectiv. n limbajul C++ se admit i constante cu dou caractere. O constant de acest fel se memoreaz folosind tipul int. Pentru memorare fiecare caracter folosete un octet. b) Constante reale. Drept constante reale se pot folosi numerele zecimale cu semn sau fr. c) Constante ir de caractere. O constant ir de caractere se declar ntre dou caractere ghilimele (). Exemplu: acesta este un ir de caractere. Pentru declararea unei constante se folosete urmtoarea form general: const [tip] nume = valoare; unde: const cuvnt cheie; tip reprezint tipul constantei, care este opional (dac lipsete, tipul este int); nume reprezint numele constantei; valoare reprezint valoarea constantei. Exemple: const int numar = 5; const float pi = 3.14159. Dac n ultima declararea a unei constante lipsete cuvntul cheie const, atunci se declar o variabil de tip float (float pi = 3.14159). Dar prezena cuvntului cheie const determin protecia la modificarea variabilei pi. Altfel spus, n cazul declarrii constantei, variabila pi nu mai poate fi modificat i are un spaiu rezervat.

6. OPERATORI C++
Limbajul C++ este dotat cu un set puternic de operatori. Principalii operatori utilizai n limbajul C++ sunt prezentai n continuare. 6.1 Operatori aritmetici n C++ exist urmtorii operatori aritmetici: - minus, acioneaz asupra unui singur operand; + plus, (unar, acioneaz asupra unui singur operand); + (binar), utilizat pentru adunare; - (binar), utilizat pentru scdere; * (binar), are semnificaia de nmulire; / (binar), pentru mprire; % (binar), restul mpririi ntregi. Observaii

1. Operatorul / (mprire) acioneaz n mod diferit n funcie de operanzi: a) dac ambii sunt de tip ntreg, rezultatul este ntreg i are semnificaia de mprire ntreag; 4

Limbaje de programarea pentru roboi

L1

b) dac cel puin un operand este de unul din tipurile reale rezultatul este real (se efectueaz mprirea obinuit). 2. Operatorul % acioneaz numai asupra operanzilor de tip ntreg. Rezultatul obinut este corect dac ambii operanzi sunt numere naturale. 3. Se pot utiliza oricte paranteze rotunde, pentru a impune prioritatea anumitor operaii. n cazul n care o expresie aritmetic are operanzi de mai multe tipuri, atunci problema este: care este tipul rezultatului ? Regula general este: se convertete unul din operanzi ctre tipul celuilalt (care poate reine rezultatul). Orice operand de tip char sau unsigned char sau short se convertete ctre tipul int. Dac un operand este de unul dintre tipurile long double, double, float, unsigned long sau long, atunci i cellalt operand se convertete ctre acest tip. 6.2 Operatori relaionali n C++ exist urmtorii operatori relaionali: < mai mic; <= mai mic sau egal; > mai mare; >= mai mare sau egal. Deoarece n C++ nu exist valorile logice TRUE i FALSE, rezultatul unei operaii logice este 1, n cazul n care inegalitatea este respectat i 0 n caz contrar. Exemplu: 3 > 5 expresia ia valoarea 0; 3 < 5 expresia ia valoarea 1. Operanzii pot fi constante, variabile, funcii care au ca rezultat tipuri numerice. 6.3. Operatori de egalitate Aceti operatori sunt: = = pentru egalitate; ! = pentru inegalitate. Ca i operatorii relaionali, expresiile de acest tip au ca rezultat 0 sau 1, n funcie de modul n care este respectat sau nu egalitatea (inegalitatea). Exemplu: 3 = = 3 rezultatul este 1; 3 ! = 3 rezultatul este 0; 3 ! = 4 rezultatul este 1. Operanzii pot fi constante, variabile, funcii. 6.4 Operatori de incrementare i decrementare Aceti operatori sunt unari i au rolul de a incrementa (adun 1) sau decrementa (scade 1) coninutul unei variabile. Operatorii sunt: + + pentru incrementare; - - pentru decrementare. Operatorii pot fi prefixai (aplicai n faa operandului) sau postfixai (aplicai dup operand). De exemplu: fie a o variabil de tip int. Operatorul de incrementare prefixat aplicat variabilei a este + + a; Operatorul de incrementare postfixat aplicat variabilei a este a + +; Operatorul de decrementare prefixat aplicat variabilei a este - - a; Operatorul de decrementare postfixat aplicat variabilei a este a - -. Dac operatorul este prefixat, variabila este incrementat (decrementat) nainte ca valoarea reinut de ea s intre n calcul. 5

Limbaje de programarea pentru roboi


L1

Dac operatorul este postfixat, variabila este incrementat (decrementat) dup ce valoarea reinut de ea intr n calcul. Exemplu: a) Fie a o variabil de tip int i a = 1. n urma evalurii expresiei 1 + a ++ se obine valoarea 2, dar dup evaluare, a va reine valoarea 2 (variabila a fost incrementat). b) La fel ca n cazul anterior, expresia 1 - + + a produce valoarea 1 (variabila a fost nti incrementat, s-a obinut 2, apoi s-a efectuat 1-2). Operatorii de incrementare / decrementare se pot aplica i variabilelor de tip real. 6.5 Operatori logici n limbajul C++ exist trei operatori logici: ! negare logic; && i logic; | | sau logic. Aceti operatori se aplic oricrei variabile i constante din cele nvate. Operatorul negare logic acioneaz astfel: dac operandul este o valoare diferit de zero, rezultatul este 0, altfel rezultatul este 1. Operatorul i logic (binar) acioneaz astfel: dac ambii operanzi sunt diferii de 0, rezultatul este 1, altfel el este 0. Operatorul sau logic (binar) acioneaz n felul urmtor: dac cel puin unul din operanzi este o valoare diferit de 0, rezultatul este 1, altfel rezultatul este 0. Exemplu: a) Dac a este o variabil de tip float care reine valoarea 2, atunci !a = 0, iar dac a reine 0, !a = 1. b) Dac a i b sunt dou variabile de tip int care rein 1 i 3 atunci a && b = 1, iar dac a are acelai coninut, iar b reine 0, a && b = 0. c) Dac a i b sunt dou variabile de tip int care reine 0 i 3 atunci a | | b = 1, iar dac a are acelai coninut iar b reine 0, a | | b = 0. 6.6 Operatori logici pe bii Limbajul C++ este dotat cu un set de operatori care permit accesul la bit. Acetia sunt: <<, >> operatori de deplasare; & i pe bii; | sau pe bii; ^ sau exclusiv pe bii; ~ negare pe bii (operator unar). Aceti operatori acioneaz numai asupra operanzilor de tip ntreg. Operatorul << este binar. El are rolul de a deplasa ctre stnga coninutul tuturor biilor operandului din stnga sa, cu un numr de poziii egal cu valoarea reinut de al doilea operand. Poziiile rmase libere (n dreapta) vor reine valoarea 0. Dac al doilea operand reine valoarea m, o astfel de deplasare este echivalent cu nmulirea cu 2m (evident, dac m este mai mic dect numrul de bii rezervat primului operand). Operatorul >> este binar. El are rolul de a deplasa ctre dreapta coninutul tuturor biilor operandului din stnga cu numr de poziii egal cu valoarea reinut de al doilea operand. Dac operandul din stnga este de un tip ntreg fr semn, poziiile rmase libere (n stnga) vor reine valoarea 0. Dac al doilea operand reine valoarea m, o astfel de deplasare este echivalent cu mprirea ntreag cu semn, fiecare poziie din stnga rmas liber se completeaz cu valoarea reinut de bitul de semn. n cazul operatorilor binari &, |, ^, rezultatul se obine aplicnd pentru fiecare pereche de bii aflai pe aceeai poziie regulile din tabelul urmtor. 6

Limbaje de programarea pentru roboi OP 1 0 1 0 1 OP 2 0 0 1 1 OP 1 & OP 2 0 0 0 1 OP 1 ^ OP 2 0 1 1 0 OP 1 | OP 2 0 1 1 1

L1

Atunci cnd cei doi operanzi nu au aceeai lungime (dar numai atunci de exemplu, dac ambii operanzi sunt de tip char i rezultatul este de tip char) se aplic regulile de conversie pentru expresii aritmetice. Operatorul ~ (negare pe bii) are rolul de a inversa coninutul biilor (dac un bit conine 0 va conine 1 i invers. Exemple Dac a este de tip int i are valoarea constant hexa 000f, iar b este de acelai tip i are valoarea constant hexa 0f03, atunci: a & b = 0003 (n hexa); a | b = 0f0f; a ^ b = 0f0c; a << 2 = 003c; a >> 2 = 0003; ~ a = fff0. 6.7 Operatori de atribuire n limbajul C++, atribuirea este operator. n plus, avem mai muli operatori de atribuire. Operatorul = se folosete ntr-o expresie de forma: v = expresie. Aici, v este o variabil. Principiul de executare este urmtorul: se evalueaz expresia; variabilei v i se atribuie valoarea obinut pentru expresie. Se pot efectua i atribuiri multiple de forma: v = v1 = v2 = ... = vn = expresie, unde v, v1, v2, ... vn sunt variabile. n acest caz, principiul de executare este urmtorul: se evalueaz expresia; valoarea obinut este atribuit variabilei vn; coninutul variabilei vn este atribuit variabilei vn-1, i aa mai departe. Pentru atribuire se mai pot utiliza i operatorii: *=, /=, %=, +=, -=, <<=, >>=. O atribuire de forma v op expresie, are acelai rezultat ca: v = v op expresie. n cazul atribuirilor valoarea rezultat este valoarea atribuirilor valoarea rezultat este valoarea atribuit variabilei care este prima din stnga, dup conversie (ntr-un ir de atribuiri). Exemple 1. int a = 5, b = 3; float c; c = a / b = 1.0 2. int a = 3; a * = 2 => a = a * 2 = 6. 7

Limbaje de programarea pentru roboi 6.8 Operatorul condiional

L1

Se folosete n expresii de genul: exp1 ? exp2 : exp3 Principiul de executare este urmtorul: se evalueaz exp1 ; dac rezultatul expresiei este o valoare diferit de 0, se evalueaz exp2 i exp3 este ignorat; altfel, se evalueaz exp3 i exp2 nu se evalueaz. Exemplu: Se va realiza un program care citete variabila x de tip float i tiprete |x|. # include <iostream.h> main() { float x; cout<<x = ; cin>>x; cout<<(x >= 0 ? x: -x); }.

7. INSTRUCIUNILE LIMBAJULUI C++ (continuare) 7.1 Instruciunea IF


Ca i n limbajul pseudocod, exist dou forme ale instruciunii if: I. if (expresie) instruciune1 else instruciune2. Principiul de executare este urmtorul: P1. se evalueaz expresia; P2. dac valoarea expresiei este diferit de 0, se execut instruciunea1; P3. dac valoarea expresiei este 0 se execut instruciunea2. II. if (expresie) instruciune. Principiul de executare este urmtorul: P1. se evalueaz expresia; P2. dac valoarea expresiei este diferit de 0, se execut instruciunea subordonat. Exemplu 1 Programul care stabilete maximul dintre dou numere naturale citite. # include <iostream.h> void main() { int a,b,max; cout<<a = ; cin>>a; cout<<b = ; cin>>b; if (a > b) max = a; else max = b; cout<<Maximul este <<max; }

7.2. Instruciunea compus


Se pune urmtoarea problem: cum procedm n situaia n care la utilizarea instruciunii IF fie ntr-un caz, fie n altul, urmeaz s scriem mai multe instruciuni. Pentru a putea scrie mai multe instruciuni care s fie interpretate de compilator ca una singur se folosete instruciunea compus. Instruciunea compus are forma urmtoare: { i1; 8

Limbaje de programarea pentru roboi i2; : : in;

L1

} n acest caz i1, i2, ..., in reprezint instruciunile care se gsesc n corpul instruciunii compuse. Acestea sunt separate prin ; . Exemplul 1 S se scrie un program care rezolv ecuaia algebric de gradul 1 cu o necunoscut, cu coeficieni reali a*x + b = 0. Se prezint n continuare programul C++ care rezolv aceast problem. #include <iostream.h> main () { float a,b,x; cout<< a = ;cin>>a; cout<< b = ;cin>>b; if (a) { x = -b/a; cout<<x; } else if (b == 0) cout<< Infinitate de solutii; else cout<< Nu are solutie ; } Observaie: orice program C++ are cel puin o funcie i aceasta are cel puin o instruciune compus { }.

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