Upload
morena-vlaic
View
215
Download
0
Embed Size (px)
Citation preview
8/7/2019 21297279-programare-procedurala
1/60
Elemente de C i C++
Conceput de BJARNE STROUSTRUP de la laboratoarele BELL ,finalizat la sfritul anilor 80 pe baza limbajului C si completat cuelemente de programare orientat pe obiecte, C++ este unul din cele mai puternice i populare produse software.
Un program n C++ este osecven de instruciuni de limbajintrodus printr-un editor de texte i apoi salvat ca fiier surs careconine:
comentarii linii de program care ncep cu // directive de preprocesare sau comenzi pentru preprocesor
care includ n fiierul surs fiiere antet necesare compilriicondiionate ale unor zone de program surs, fiiere care sunt precedate de #.
declarri de variabile i funcii (nu cer rezervare de spaiu dememorie)
definiii de variabile i funcii cer rezervare de spaiu dememorie pentru stocarea datelor sau a codului surs. Pe lngfuncii definite de programator, fiierul surs poate conine ifuncii din biblioteca limbajului. Fiierul surs are extensia.CPP. Acesta este inspectat de compilatorul C++ caresemnaleaz nerespectarea regulilor de programare C++ prinmesaje de eroare afiate pe ecran.
Pentru corectarea erorilor este necesareditarea fiierului surs i apoio nou compilare a programului surs. Dup eliminarea erorilor desintax compilatorul transform instruciunile ncod main (succesiunide bii) obinndmodule obiect asociate. Acestea sunt completate cu
module din biblioteca limbajului prineditorul de legturi , obinnd unfiier executabil cu extensia .EXE, fiier care este stocat pe disc.Programul se execut tastnd numele fiierului executabil i .Elementele de baz ale limbajului sunt:
cuvinte cheie cuvinte rezervate pentru declararea tipurilor dedate i a instruciunilor,
8/7/2019 21297279-programare-procedurala
2/60
- 174 - Elemente de algoritmic i limbaje de programare
identificatori nume de constante, variabile, cmpuri ale unor structuri definite de utilizatori,
constante valori fixe reprezentnd numere, caractere, iruri decaractere,
operatori simboluri folosite pentru specificarea unor operaii, separatori caractere sau iruri de caractere care separ diferite
entiti ca: blank-uri, tab-uri orizontale sau verticale, linie nou, pagin nou, comentarii, etc.
Exemplu . #include void main(){cout
8/7/2019 21297279-programare-procedurala
3/60
- 175 - Elemente de algoritmic i limbaje de programare
Directiva #includeInsereaz n programul surs curent coninutul fiierului indicat de
directiv. Cu aceasta putem modulariza scrierea programelor. Aceastdirectiv are trei sintaxe:
#include#include fiier (se folosete cnd fiierul antet se afl n
directorul curent)#include nume, (nume este numele unei macro-comenzi).Fiierele antet sunt fiiere text ASCII stocate n subdirectorul
INCLUDE al directorului ce conine compilatorul C++.Exemplu. Fiierul antetiostream.h ofer funcia de bibliotec pentruoperaii de intrare/ieire n flux. Orice program C++ ncepe cu una saumai multe directive #include.Directiva #define Permite definirea constantelor i a pseudofunciilor numite imacrodefiniii cu parametri. Are sintaxele:
#define macro text#define macro valoare#define nume(list_parametri) expresieunde macro=identificatorul
text=secven de caracterevaloare=valoare numericnume=numele pseudofuncieiexpresie=expresia pseudofunciei
La preprocesare, orice apariie a identificatorului macro senlocuiete cu definiia sa.Exemplu .
#define EPS 0.001#define PI 3.1415
Observaie. Pe o linie de cod nu pot exista mai multe directive #define.Macrodefiniiile cu parametri permit definirea pseudofunciilor care
sunt mai rapide dect funciile obinuite, dar ocup mai mult memorie.O pseudofuncie accept ca argument un parametru i nlocuiete oriceapariie n program a acelui parametru prin valoarea furnizat la apelul pseudofunciei.Exemplu .
#define PATRAT(x) ((x)*(x))#define CUB(x) (PATRAT(x)*(x))
8/7/2019 21297279-programare-procedurala
4/60
- 176 - Elemente de algoritmic i limbaje de programare
Aceste dou pseudofuncii calculeaz x2 respectiv x3 pentru x furnizat laapel.Directiva #define se mai poate folosi pentru:
- nlocuirea cuvintelor rezervate sau a simbolurilor cu aliidentificatori definii de utilizator
- crearea de identificatori pentru tipuri de date definite deutilizator cu ajutorul tipurilor standard
- prescurtarea unor comenzi.
Directiva #undef Este opusa directivei #define, permind anularea definirii curente a unuiidentificator, dac aceasta nu mai este necesar. Are sintaxa:
#undef macroCu ea eliberm spaiul de memorie ocupat de macrodefinirea
anulat i putem reutiliza numele identificatorului acestuia ntr-o altdirectiv #define.Exemplu .
#undef EPS#undef PATRAT
Operaii de intrare/ieire
Se realizeaz prin funciile printf i scanf din biblioteca standardANSI.C specific limbajelor TC, BC, C. C++ include i bibliotecaIOSTREAM care realizeaz operaiile de intrare/ieire printr-o clasa deobiecte.
Fluxuri de intrare/ieire
Fluxul este o secven de octei de la o surs ctre o destinaie. Esteun model abstract pentru dispozitivele de intrare/ieire precum tastatur,ecran, fiiere pe disc i buffer de memorie. Biblioteca IOSTREAMconine fluxul de intrare (clasa ISTREAM), de ieire (clasa OSTREAM)i intrare/ieire (clasa IOSTREAM).Fluxurile predefinite din bibliotec sunt:
cin flux de intrare conectat de regul la intrarea standard, careeste tastatura
cout flux de ieire conectat la ieirea standard ecranul .
8/7/2019 21297279-programare-procedurala
5/60
- 177 - Elemente de algoritmic i limbaje de programare
Pentru folosirea bibliotecii IOSTREAM trebuie inclus n programulC++ fiierul antet IOSTREAM.h, echivalent lui STDIO.h din ANSI.C.
Clasa IOSTREAM definete operatorii de intrare >> i ieire ) preia caracterele din bufferul asociat fluxului de intrarecin ile convertete n bii, iar al doilea (
8/7/2019 21297279-programare-procedurala
6/60
- 178 - Elemente de algoritmic i limbaje de programare
cout
8/7/2019 21297279-programare-procedurala
7/60
- 179 - Elemente de algoritmic i limbaje de programare
cout
8/7/2019 21297279-programare-procedurala
8/60
- 180 - Elemente de algoritmic i limbaje de programare
Exemplu .#include#includevoid main(){int i=45;j=200;k=7;cout
8/7/2019 21297279-programare-procedurala
9/60
- 181 - Elemente de algoritmic i limbaje de programare
manipulatori au argumente care conin: numele claseiios n care suntdefinite, urmat de operatorul de rezoluie global:: i de numele parametrilor care poate fi:
skipws: elimin spaiile albe la intrare left: aliniere la stnga n cmpul de ieire right: aliniere la dreapta n cmpul de ieire scientific: folosete notaia siintific pentru numere reale n
virgul mobil )exemplu -2.45e+03 fixed: folosete notaia zecimal (-31.67) dec: folosete notaia zecimal pentru ntregi hex: folosete notaia hexazecimal pentru ntregi oct: folosete notaia octal pentru ntregi uppercase: folosete litere mari la ieire: (exemplu -2.45E+03) showbase: indic baza sistemului de numeraie la ieire:
o 0x pentru hexazecimal, ca prefixo 0 pentru octal, ca prefix
showpoint: introduce un punct la ieirea n virgul mobil(exemplu .368)
showpos: introduce + la afiarea valorii pozitive unitbuf: pentru golirea tuturor fluxurilor dup inserarea
caracterelor ntr-un fluxExemplu.
#include#include#includevoid main( ){int i=300;cout
8/7/2019 21297279-programare-procedurala
10/60
- 182 - Elemente de algoritmic i limbaje de programare
cout
8/7/2019 21297279-programare-procedurala
11/60
- 183 - Elemente de algoritmic i limbaje de programare
Variabilele pot primi valori i prin citire cu operatorul de intrare >>aplicat dispozitivului standard de intrare (tastatura) prin fluxul cin.
O alt caracteristic a variabilelor o constituiedurata de via , carereprezint timpul ct variabilei respective i este alocat spaiul dememorie i i este determinatclasa de memorie asociat. Clasele dememorie posibile sunt:
auto datele se afl pe stiv register datele se afl ntr-un registru al calculatorului static datele sunt rezidente n modul de definiie extern datele sunt definite ntr-un modul extern
Implicit, variabilele aparin clasei de memorare auto.Exist trei posibiliti de alocare a memoriei:
variabilele statice, plasate n segmentul de dat al programului,au o durat de via egal cu timpul de execuie al programului,
variabilele depuse pe stiva modulului de definiie sau ntr-unregistru al calculatorului, au durata de via egal cu cea aapelului funciei care le definete, memoria fiind alocatautomat,
variabilele din memoriaheap (rezervat obiectelor dinamice),au durata de via controlat de program, memoria fiind alocat
dinamic.Constantele sunt indentificatori de un tip anume care au o valoarefixat. Pot fi de tip: ntreg, real, caracter sau ir de caractere.
Constanta de tip caracter este compus dintr-un caracter cuprinsntre apostrofuri. Constantele se folosesc pentru definirea altor constantesau pentru dimensionarea tablourilor.
Prezena modificatoruluiconst n sintaxa declarrii unei variabileface ca valoarea acesteia s nu se poat modifica n timpul rulrii programului i astfel variabila devine o constant.
Constantele se declar prin: const tip nume = valoare;Dactip lipsete, compilatorul atribuie constantei automat tipulint .
Constantele se definesc i prin directiva de preprocesare#definecare este motenit de la limbajul C. Se definesc la nceputul programuluinume de constante simbolice la care se asociaz iruri de caractere particulare. Fiecare apariie n program a numelui unei constantesimbolice se nlocuie de ctre compilator cu irul de caractere asociat. Numele simbolice se scriu cu majuscule i definiia constantei simbolicenu se ncheie cu ;.
8/7/2019 21297279-programare-procedurala
12/60
- 184 - Elemente de algoritmic i limbaje de programare
Se recomand definirea constantelor prinmodificatorul const, care precizeaz i tipul constantei i mai puin prin constante simbolice.Exemplu.
#include#define MAX 2const int x=5;const char y=$;cout
8/7/2019 21297279-programare-procedurala
13/60
- 185 - Elemente de algoritmic i limbaje de programare
Unsigned long 32 0 4294567195Unsigned long int 32 0 4294567195Float 32 [3.410-38,3.41038]Double 64 1.710-308,1.710308]Lond double 80 3.410-4932,1.1104932]
Limbajul C++ face conversii ntre tipurile de date att implicit decalculator ct i explicit.
Dac o expresie conine operanzi de tipuri diferite, nainteaexecutrii operaiilor prevzute n expresie,tipul inferior este convertit latipul superior.Pentru oriceoperator aritmetic regulile de conversie sunt:
short se convertete laint , iar float la double dac un operand estedouble , atunci i al doilea este convertit la
double i rezultatul este double dac un operand estelong , atunci i al doilea este convertit la
long i rezultatul este long dac un operator esteunsigned atunci i al doilea este convertit
la unsigned i rezultatul este unsigned.Conversia implicit se poate face i prinoperaia de atribuire .
n expresia x=y, valoarea lui y este automat convertit la tipul lui xcare este i tipul rezultatului. Conversia de laint la float nu modificvaloarea afiat, ci doar reprezentarea intern a acesteia.
Conversia de la float la int truncheaz partea fracionar.Conversia de ladouble la float se face prin rotunjire.Conversia de lalong la short duce la pierderea biilor de ordin
superior care sunt n plus.Conversia explicit se face cu ajutorul unor funcii speciale.
Conversia de la float la int se face cu funcia (int ) care are sintaxa:(int)var , unde var=variabil real.Conversia de laint la float se face cu funcia (float ) care are
sintaxa:(float)var , unde var=variabil ntreag.Exemplu.
#includevoid main( ){float x=15.34, y=7.6;int i=15, j=-24;
8/7/2019 21297279-programare-procedurala
14/60
- 186 - Elemente de algoritmic i limbaje de programare
cout
8/7/2019 21297279-programare-procedurala
15/60
- 187 - Elemente de algoritmic i limbaje de programare
Varianta Spaiul de memorieocupat
Domeniul de valori
Signed char 8 bii -128 127Unsigned char 8 bii 0 255Char 8 bii -128 127
Unele caractere au corespondent grafic.Variabilele de tip char pot primi valori prin atribuire astfel:var=c; c=caracter grafic (litere, cifre, operatori aritmetici, semne
de punctuaie)var=xXY, X,Y=cifre n baza 16var=0xXY, unde X, Y sunt cifre sexazecimalevar=abc; abc=numr n baza 8
Exemplu. v1=\x74; v2=t. Aici, v1 i v2 au ca valoare caracterul t,deoarece
7416=11610 t.ntre datele de tipint i char acioneaz conversia implicit:
unsigned char este convertit la tipulint ca un ntreg pozitiv reprezentat peun octet; signed char este convertit laint ca un ntreg pozitiv sau negativreprezentat pe un octet n care primul bit este rezervat pentru semn.
Astfel, ordinea ntre caractere este dat de ordinea numerelor corespunztoare. Conversiachar-int-char nu duce la pierderea deinformaii.Exemplu.
char a,b; int i;a=c; i=a; b=i;cout
8/7/2019 21297279-programare-procedurala
16/60
- 188 - Elemente de algoritmic i limbaje de programare
cout
8/7/2019 21297279-programare-procedurala
17/60
- 189 - Elemente de algoritmic i limbaje de programare
int vect[ ]= {10, 20, 30, 40};Dac la declararea cu iniializare nu se specific dimensiunea,
compilatorul aloc suficient spaiu pentru memorarea numrului deelemente care corespund valorilor de iniializare.
Vectorii de tip char rein iruri de caractere prin atribuirea decaractere elementelor componente. C++ folosete caracterul NULLreprezentat de caracterul special \0 i avnd codul ASCII 0 pentru amarca ultimul caracter al unui ir de caractere.
Pentru a declara un ir de caractere, se declar un vector de tip char cu o dimensiune suficient de mare pentru a reine caracterele irului.Ultimul element al vectorului este caracterul NULL.Constantele ir de caractere, plasate ntre ghilimele au ataat n modautomat de compilator caracterul NULL.
La declararea vectorului de tip char este posibil i iniializareairului de caractere prin precizarea caracterelor incluse ntre ghilimele.Exemplu.
char vect[40]=Acesta este un exemplu de ir;
MatriceMatricea este un obiect caracterizat prin: tip, adres i valoare care
coincide cu adresa primului su element.Matricea conine unul sau mai multe elemente de acelai tip, care
este i tipul matricei.Matricea are un nume unic i dou dimensiuni care dau numrul
liniilor i numrul coloanelor. Se memoreaz pe linii.Matricea se consider ca fiind tablou de tablouri i deci se declar
prin:tip nume[dim1][dim2]; dim1=numrul liniilor; dim2=numrul
coloanelor Numerotarea elementelor ncepe cu 0. Astfel, nume[0] indic prima
linie, nume[1] a doua linie, etc. Adresa primei linii coincide cu adresamatricei. Ca i la vectori, matricele pot fi iniializate la declarare prin:tip nume[dim1][dim2]={exp 11,...,exp 1dim2 ,...,exp dim11 , ...,exp dim1dim2 }.
Valorile iniiale se introduc pe linii.Exemplu.
#includevoid main( ){int i,j;
8/7/2019 21297279-programare-procedurala
18/60
- 190 - Elemente de algoritmic i limbaje de programare
int mat[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9};cout
8/7/2019 21297279-programare-procedurala
19/60
- 191 - Elemente de algoritmic i limbaje de programare
Identificatorii din list pot fi iniializai cu ntregi n mod explicit,iar valorile lor pot s i coincid.Exemplul 1.
enum valori{adevrat,fals,indiferent}enum zile{luni,mari,miercuri,joi,vineri}enum calif{FB,B,S,NS}Astfel, FB=0,B=1,S=2,NS=3.
Exemplul 2.enum numerotare{Mihai=3,Andrei=12,Vlad=7};
Exemplul 3.
enum anotimp{iarna,primvara=1,vara,toamna} se atribuie valoriunui singur membrun acest exemplu, compilatorul atribuie celorlali membri valorile
2,3,respectiv 0 pentru iarna, n funcie de ordinea lor n list.Se pot defini tipurienumerare anonime (fr nume), care trebuie s
includ i declararea variabilelor de tip enumerare anonim sub forma:enum{iarna,primvara,vara,toamna}anotimp;enum{nord,vest,sud,est}puncte_cardinale;Variabilele de tip enumerare se declar: prin includerea declarrii lor n declararea tipului enumerare prin neincluderea declarrii lor n declararea tipului enumerare
adic sub formele echivalente:enum tipen{id1,id2,...}var 1,var 2,...;enum tipen{id1,id2,...};tipen var 1,var 2,...;
Exemple.enum sporturi{fotbal,baschet,handbal,volei}tenis,polo; sauenum sporturi{fotbal,baschet,handbal,volei};sporturi tenis,polo;
Structuri
Structurile sunt colecii de date, eventual de tipuri diferite, care potfi referite att separat la nivelul membrilor coleciei, ct i mpreun lanivel de grup. Membrii colectiei pot fi tipuri predefinite sau alte structuri.Se declar prin:
struct nume{tip1 membru1;
8/7/2019 21297279-programare-procedurala
20/60
- 192 - Elemente de algoritmic i limbaje de programare
tip2 membru2;.......................
};Dac declararea nu este urmat de o list de variabile, ea nu
produce alocare de memorie ci descrie doar organizarea structurii.Exemplu. struct persoana {
char nume[10];char pren[10];char prof[10];unsigned vrsta;char localitatea[15];char adresa[40];};
persoana elev={Popescu,Ion,Arhitect,40,Bucureti,IonManolescu 2};Variabilele de tip structur se declar prin:
- includerea declarrii variabilelor la definirea structurii- neincluderea declarrii variabilelor la definirea structurii (ca n
exemplul de mai sus).Exemplu.struct complex {
float modul;float argument;}n1,n2;
Variabilele n1 i n2 sunt de tip complex, avnd fiecare dou componente:modul i argument.
Se pot declara i structuri anonime, care trebuie s includ ideclararea variabilelor de tip structur anonim.Exemplu.struct{
float modul;float argument;}n1,n2;
Variabilele de tip structur se pot iniializa chiar la declararea loar ca nexemplul de mai sus pentru variabila elev.
Atribuirea de valori unui membru al unei structuri sau accesareaunui membru dintr-o structur se face cu operatorul . numitoperator de apartenen sub forma:
nume-variabila-structura membru;Exemplu.
8/7/2019 21297279-programare-procedurala
21/60
- 193 - Elemente de algoritmic i limbaje de programare
Pentru structurile de mai sus avem:elev.vrsta=55;n1.modul=8.3;n2.argument=1.57;
Uniuni
Uniunile sunt structuri speciale, n care membrii, nu neaprat deacelai tip, folosesc n comun aceeai zon de memorie. Lungimea uneiuniuni este dimensiunea maxim a componentelor sale.
Spre deosebire de structuri, o singur component a uniunii esteaccesibil la un moment dat.Se declar prin:
union nume{tip1 nume1;tip2 nume2;.................};
Variabilele se declar ca i la structuri n cele dou moduri precizate(definim variabilele la declararea structurii imediat dup acoladade nchidere sau separat).
Cnd se atribuie valori unui mambru dintr-o uniune, are loc osuprascriere peste orice atribuire anterioar (fiind vorba de aceeai zonde memorie).
Accesarea membrilor unei uniuni se face tot cuoperatorul apartenen .Exemplu.
union valoare{int a; long b;}var;
var.a=700;var.b=100000Se pot declarauniuni anonime . In acest caz referirea se face direct
prin numele variabilei, fr operatorul . .Exemplu.
union {int a; long b;}var;
a=700; b=100000;
8/7/2019 21297279-programare-procedurala
22/60
- 194 - Elemente de algoritmic i limbaje de programare
Operatori
Prinexpresie nelegem o combinaie logic ntre operanzi (date) ioperatori care pot fi: unari, binari i ternari.Operatorii pot fi:
aritmetici de incrementare i decrementare de atribuire relaionali i logici la nivel de bit sizeof,virgul,condiional operatori specifici limbajului C++
o de alocare a memorieio de eliberare a memorieio de rezoluie
Mai muli operatori ntr-o expresie se evalueaz de la stnga ladreapta sau de la dreapta la stnga, conform ordinului de prioritate stabilit
n funcie de nivelul de prioritate al operatorilor.Operatorii aritmetici sunt: semn +,- (unari) +,-,*,/ (binari) %(modulo) d restul mpirii a doi operanzi ntregiCu acetia se construiesc expresii artimetice care pot conine i
apeluri de funcii. n acest caz evaluarea funciilor are prioritate fa decelelalte operaii ale expresiei.Operatorii de incrementare i decrementare sunt: ++ respectiv --Se aplic doar variabilelor i le mresc valoarea cu 1, respectiv le scadvaloarea cu 1.
Au sintaxa: var++; respectiv var--;++var; --var;Se observ c ei pot fi prefixai cnd modific valoarea variabilei
nainte de a fi folosit ntr-o expresie sau postfixai cnd modificvaloarea dup folosirea variabilei n expresie.
Dac operatorul ++, respectiv - - este singur ntr-o expresie, atunciambele forme (prefixate sau postfixate) au acelai efect.
8/7/2019 21297279-programare-procedurala
23/60
- 195 - Elemente de algoritmic i limbaje de programare
Operatorul de atribuire este =.Operatorul = separ doi operanzi cu care formeaz expresia de
atribuire:var=expresie;Aici var primete valoarea expresiei din dreapta. Expresia de
atribuirevar=expresie are ca tip tipul variabilei din stnga (tipul lui var).C++ pune la dispoziie i operatori aritmetici de atribuire care
combin operatorii aritmetici cu cel de atribuire i permit scrierea prescurtat a unor expresii aritmetice. Aceast form scurt a operatorilor aritmetici de atribuire permit ca n anumite instrucini de atribuire numeleunei variabile s apar o singur dat. Operatorii aritmetici de atribuiresunt +=,-=,*=,/=,%=.Exemplu. In loc de x=x%y scriem x%=y; lungime=lungime+5 devinelungime+=5;Operatorii logici i relaionali sunt:
&&, ||, ! operatori logici (i, sau, non) =,==,!= - operatori relaionaliCu operatorii logici se construiesc expresii logice.Cu operatorii relaionali se construiesc expresii relaionale, care se
evalueaz de la dreapta la stnga. Rezultatul evalurii este 1 dacexpresia este adevrat i 0 dac este fals.
C++ nu dispune de un tip boolean predefinit. El consider valoarea0 ca fals i orice valoare diferit de 0 ca adevrat.
Expresiile logice se evalueaz de la stnga la dreapta i evaluarease oprete atunci cnd se cunoate valoarea de adevr a rezultatului.
Expresiile mixte sunt cele care conin att operatori relaionali, cti logici. Operatorii relaionali au prioritate fa de cei logici. Dacexpresia conine i operatori aritmetici acetia au prioritate la execuie.Operatorii la nivel de bit se folosesc pentru operatii de manipulare a biilor precum: comutare, iniializare, filtrare i deplasare.
Acetia sunt: &,|,~ (i, sau, non bit cu bit), ^ (sau exclusiv bit cu
bit), deplasare stnga, respectiv deplasare dreapta bit cu bit.Exemplu. x=x|ANT pune n x pe 1 biii care sunt 1 n ANT
^ sau exclusiv opereaz astfel:1 0
1 0 10 1 0
8/7/2019 21297279-programare-procedurala
24/60
- 196 - Elemente de algoritmic i limbaje de programare
Operatorii > deplaseaz la stnga, respectiv la dreapta biiireprezentnd valoarea binar a operatorului din stnga cu un numr de poziii dat de operandul din dreapta.
ay se scrie x>>=y, etc.Operatorul sizeof
Acest operator ntoarce lungimea n octei a memoriei operandului,care poate fi variabil (scalar, tablou, nregistrare, etc.) sau un tip de date, pe baza declarrii elementelor acestuia. Are formatul:sizeof(variabil);sausizeof(tip_dat);Exemplu.
cout
8/7/2019 21297279-programare-procedurala
25/60
- 197 - Elemente de algoritmic i limbaje de programare
ntoarce adresa obiectului sau valoarea NULL dac alocarea nu a avutsucces. Obiectul creat se poate initialize cu val_init.Operatorul de eliberare a memoriei : delete , elibereaz o zon dememorie alocat cu new cnd aceasta nu mai este necesar. Are sintaxa:delete pointer .Eliberarea zonei de memorie ncepe de la adresa coninut de pointer.Operatorul de rezoluie (scop) :: este folosit pentru definirea funciilor membre unei clase pentru a preciza clasa cu care este asociat o anumitfuncie. Dac operatorul nu are nume de clas, el indic o funcie sau ovariabil definit global.
Reguli de prioritate a operatorilor [12] Nivelurile de prioritate ale operatorilor C++ i ordinea de
evaluare( =dreapta-stnga, =stnga-dreapta) cnd operatoriconsecutivi au aceeai prioritate sunt:
rezoluie :: 1 postincrementare ++ 2 postdecrementare - - 2 preincrementare ++ 2 predecrementare - - 2
operator adres & 2
redirectare * 2 plus + 2 minus 2 negaie pe bii ~ 2 negaie logic ! 2 sizeof 2 conversia tiptype 2 nmulire * 3 mprire / 3 modulo % 3 adunare + 4 scdere 4 deplasare stnga > 5 mai mare strict > 6 mai mare sau egal >= 6
8/7/2019 21297279-programare-procedurala
26/60
- 198 - Elemente de algoritmic i limbaje de programare
mai mic strict < 6 mai mic sau egal
8/7/2019 21297279-programare-procedurala
27/60
- 199 - Elemente de algoritmic i limbaje de programare
o if _ else cu dou alternativeo if _ else cu n 3 alternativeo instruciunea switch
instruciuni de ciclareo instruciunea for o instruciunea whileo instruciunea do _ while
instruciuni de salto instruciunea break o
instruciunea continueo instruciunea gotoo instruciunea return
instruciunea compusInstruciunea expresie are sintaxa: expresie; Aceasta atribuie valori variabilelor, incrementeaz/decrementeazvariabile, etc.Exemplu . Apelarea unei funcii urmat de ; este o instruciune expresie.Un caz particular de instruciune expresie este instruciunea vidcompus din ; (aceasta evit plasarea unei etichete n faa acoladei denchidere a unui bloc) .Un alt caz particular este instruciuneaexpresie condiional cu sintaxa :
expr 1 ? expr 2 : expr 3 ;Dac expr 1 este adevrat ( 0) se evalueaz expr 2 i expresiacondiional ia valoarea lui expr 2 iar dac expr 1 este fals (= 0) seevalueaz expr 3 i expresia condiional ia valoarea lui expr 3 (aceasta poate substitui instruciunea de decizie if_else cu dou alternative).Exemplu .
#include void main(){
double a, b, max;cout b ;max = (a>b) ? a : b ;cout
8/7/2019 21297279-programare-procedurala
28/60
- 200 - Elemente de algoritmic i limbaje de programare
Instruciunea if cu o alternativ are sintaxa :if (condiie) instr ;|{secvena de instruciuni }
undecondiie este orice expresie corect.Se evalueaz condiie i dac este adevrat( 0) se execut instruciunearespectiv secvena de instruciuni, din sintaxa lui if.Exemplu .
#include #include void main (){int k;clrscr();cout k;if (k>0) {
cout
8/7/2019 21297279-programare-procedurala
29/60
- 201 - Elemente de algoritmic i limbaje de programare
}else instr_2 ;
Exemplu .#include #include void main ()
{int i;clrscr();cout
8/7/2019 21297279-programare-procedurala
30/60
- 202 - Elemente de algoritmic i limbaje de programare
Are sintaxa : switch (expr){
case cst1 :instr 1 ;|set1 de instr; break;
case cst2 :instr 2 ;|set2 de instr; break;
.case cstn :
instr n ;|setn de instr; break;[default :
instr n+1 ; | setn+1 de instr;]}
unde: expr este o expresie cu valoare compatibil cu un ntreg (o
constant, o variabil, apel de funcie, etc); nu poate fi double saufloat
cst1, cst2,,cstn sunt constante de selecie cu valori diferite,convertibile la tipul lui expr. Fiecare etichetcase specific osingur constant,
break ncheie instrucuineaswitch prin salt la sfritul blocului{}. In absena sa execuia programului continu cu urmtoareaetichetcase .
default , dac apare , corespunde valorilor luiexpr ce nu apar nlista constantelor de selecie menionate explicit n instruciune.
Setul de instruciuni corespunztor fiecarei etichetecase nu trebuie inclusintre { }.Pentru execuie se evalueaz expresiaexpr i se compar valoareaobinut cu constantele specificate de etichetelecase . Dac apare printreacestea se executa instruciunea corespunztoare eticheteicase n care aaprut. Dac nu apare printre aceste constante se execut instruciuneacorespunztoare luidefault , dac aceasta exist sau se trece la primainstruciune de dupswitch n caz contrar.
8/7/2019 21297279-programare-procedurala
31/60
- 203 - Elemente de algoritmic i limbaje de programare
Instruciunea forPermite repetarea uneia sau mai multor instruciuni de un numr
fix de ori. Are sintaxa :for ( [expr 1] ; [expr 2] ; [expr 3])
instr ; | {secvena de instr} Parantezele drepte indic opionalitatea coninutului lor. expr 1 se evalueaz o singur dat inaintea primei iteraii. Ea
iniializeaz variabila sau variabilele de control (contoare). expr 2 se evalueaz i testeaz naintea fiecrei iteraii. Reprezint
condiia de ieire din ciclu . expr 3 este evaluat la sfritul fiecrei iteraii. Ea incrementeaz
sau decrementeaz variabilele de control ale ciclului .Se execut astfel: La nceput se iniializeaz contoarele i apoi setesteaz condiia de ieire. Dac aceasta este adevarat se executinstruciunile ciclului i se incrementeaz sau decrementeaz contoarele,repetnd testarea condiiei, altfel ciclulfor se ncheie .Exemplu .
#include void main(){char c;for (c = z ; c >= a ; c--)
cout
8/7/2019 21297279-programare-procedurala
32/60
- 204 - Elemente de algoritmic i limbaje de programare
Exemplu . Pentru inversarea unui ir de caractere :#include void main(){
int i, j;char v[5] = { abcde } , ch;cout
8/7/2019 21297279-programare-procedurala
33/60
- 205 - Elemente de algoritmic i limbaje de programare
Are sintaxa :do
instr ; | {secventa de instr.}while (conditie) ;
Aceast instruciune se folosete n special pentru operaiile cu meniuri.Opiunile meniului sunt afiate cel puin o dat i dac se alege orice altopiune diferit de quit se execut comanda selectat , altfel se iese.Exemplu . #include
void main(){
char ch=a ;cout
8/7/2019 21297279-programare-procedurala
34/60
- 206 - Elemente de algoritmic i limbaje de programare
Intruciunea gotoAre sintaxa :goto etichet ;Aceasta ntrerupe secvena curent i continu execuia de lainstruciunea precedat de eticheta din sintaxa instruciunii goto i care seafl n cadrul aceleiai funcii .Eticheta precede instruciunea referit ieste separat de aceasta prin caracterul :. Ea este un identificator.Instruciunea returnIncheie execuia unei funcii i determin revenirea la funcia apelant .Are sintaxa :
return ;
return(expresie);A doua form transmite o valoare funciei apelante i anume valoareaexpresiei din sintax.Instruciunea compus(blocul)Blocul este un grup de declaraii urmat de instruciuni, toate incluse ntreacolade. El nu este urmat de ;.Exemplu de instruciuni compuse:
corpul unei funcii, blocul ce urmeaz dup instruciunea if.
Are sintaxa:{lista de declaraii;lista de instruciuni;
}
Pointeri
Pointerul este un tip de date care stocheaz adresa unei zone dememorie. Diferena dintre un pointer i o variabil care are atribuit ovaloare este c variabila indic totdeauna aceiai zon de memorie (loculunde se afl valoarea variabilei) pe cnd un pointer poate fi modificatnct s adreseze zone de momerie diferite.
Pointerul permite adresarea a dou valori diferite valoarea stocat n interiorul su (adresa unei zone) valoarea elementului indicat de pointer (valoarea coninut n
zona indicat)Prima valoare, ce se obine prinafiarea pointerului , este adresa dememorie stocat n pointerul respectiv.
8/7/2019 21297279-programare-procedurala
35/60
- 207 - Elemente de algoritmic i limbaje de programare
A doua, este valoarea stocat n locaia precizat, accesul la ea fiindreferirea pointerului prin operatorului unar * numitreferin .Privind coninutul zonei de memorie adresate distingem :
pointer de date, care conine adresa unui tip de date ca: variabil,constant, tablou, structur, clas
pointer de funcii care conine adresa codului executabil al uneifuncii.
Tipul de date asociat pointerilor poate fi: predefinit definit de utilizator
Adresele obiectelor (datelor i funciilor) dintr-un program sunt nenule.Pointerul cu valoarea 0 nu conine adresa nici unui obiect sau funcie. Elreprezint pointerul NULL.Pointerii permit alocarea dinamic a memoriei stocnd adrese dememorie ale unor funcii fr nume sau a unor date a cror dimensiunenu este dinainte cunoscut.
Pointeri la variabile simple
Pointerii se declar ca i variabilele obinuite punnd * n faa numeluilor sub forma :tip *nume_pointer ;undetip este tipul datei a crei adres o va memora pointerul respectiv.La definire un pointer nu are valoare, el adreseaz un spaiu aleator.Compilatorul interpreteaz zona adresat de pointer ca un obiect de tipulspecificat prin declaraie cu atributele, dimensiunea i semnificaiainformaiei coninute n zona respectiv.Exemplu . int *a ; double *b ; float *c , y ;Deoarece o variabil pointer este un obiect putem declara pointer la pointer Exemplu . int **a;Aicia poate conine adresa unui pointer de obiecte de tipulint.
Inainte de folosire o variabil pointer trebuie iniializat cu 0 sau cuadresa unui obiect, altfel pot aprea erori grave care pot chiar bloca programul.Pentru a atribui adresa unei variabile unui pointer compatibil, folosimoperatorul unar & pentru determinarea adresei, sub forma:
pointer = &variabila ;Exemplu . int i,*p;
8/7/2019 21297279-programare-procedurala
36/60
- 208 - Elemente de algoritmic i limbaje de programare
p=&i;Aici se creaz pointerulp care apoi memoreaz adresa variabilei i.Pentru a accesa coninutul locaiei indicate de un pointer (referirea unui pointer) prin operatorul referin * folosim sintaxa :
variabila = *pointer;Exemplu.
# include void main(){
int i,j,*p;cout > i;cout
8/7/2019 21297279-programare-procedurala
37/60
- 209 - Elemente de algoritmic i limbaje de programare
Pointeri la tablouri
Numele unui tablou este un pointer constant de tipul elementelor tabloului.Valoarea sa este adresa primului element al tabloului. Astfel: pentru vectorulvect , expresiile vect i &vect[0] sunt echivalente pentru matriceamat , expresiile mat i &mat[0][0] sunt echivalentePointerii permit accesarea elementelor tabloului prin operaia de adunaredintre pointeri i ntregi. n acest caz adresa de baz a unui tabloutabeste locaia primului su element, dat s spunem de pointerul p. Adresa
elementului tab[i] din tablou va fi dat de expresia p+i .Trebuie fcut diferena ntre pointeri la tablouri i tablouri de pointeri.Exemplu.
int t[n][n] ; tablou cu nxn elementeint *p[n] tablou de pointeri la care se aloc n pointeri
Fiecare din cei n pointeri ,indic (pointeaz) ctre un tablou de intregi ,cu lungimi care pot fi diferite. Accesarea unui element se face indirect printr-un pointer fr a fi necesar indexarea.Alocarea i dealocarea (eliberarea) dinamic a unui tablou folosetesintaxa:
pointer-la-tablou = new tip-date-tablou[dim-tablou] ;delete pointer-la-tablou ;
Exemplul 1.#include void main(){
int v[10] = {1,2,3,4,5,6,7,8,9,10};int *pi, *pf, s=0, *ps; pi = &v[0];pf = &v[9];ps = &s;for( ; pi
8/7/2019 21297279-programare-procedurala
38/60
- 210 - Elemente de algoritmic i limbaje de programare
#include void main(){
int k;double *p; p=new double[4];cout
8/7/2019 21297279-programare-procedurala
39/60
- 211 - Elemente de algoritmic i limbaje de programare
strncpy()- copiaz un numr specificat de caractere din fiierulsurs n cel destinaie
strnicmp()- compar un numr specificat de caractere de lanceputul a dou iruri ignornd diferenele dintre majuscule iminuscule
strnset() -suprascrie un numr specificat de caractere dintr-un ir cu copii ale unui singur caracter
strrchr() -caut ultima apariie a unui caracter ntr-un ir strrev() -inverseaz ordinea caracterelor unui ir
strset()-nlocuie toate caracterele unui ir, excepie terminatorul
de ir, cu un caracter strspn()- d numrul caracterelor din prima parte a unui ir,
similare cu unul din caracterele unui ir ablon strstr() -caut prima apariie a unui subir ntr-un ir dat strtod()- convertete un ir de caractere n double strtok() -caut anumite simboluri sau subiruri dintr-un ir;
delimitatorii sunt dai printr-un al doilea ir de caractere strtol () -convertete un ir de caractere ntr-un ntreg de tip long
zecimal, octal sau hexazecimal strupr() -convertete minusculele n majuscule
Exemplu. Se definete i iniializeaz vectorul de pointerips prin carese ordoneaz alfabetic un ir de caractere ce conine numele unor persoane. Interschimbarea adreselor n vectorul de pointeri ps se face prinfuncia predefinitstrcmp () .#include #include #include void main(){
clrscr();int i,j;char *temp;char *ps[]={Paul, Vlad, Andrei, Iancu, Gheorghe ,Ion, Bogdan,Dumitru,Radu,Dan };cout
8/7/2019 21297279-programare-procedurala
40/60
- 212 - Elemente de algoritmic i limbaje de programare
cout
8/7/2019 21297279-programare-procedurala
41/60
- 213 - Elemente de algoritmic i limbaje de programare
}Apare pe ecran mesajul:Mijlocul segmentului ab este punctul : (1.5,5.5).
Funcii
Un program n C++ este o succesiune de funcii, succesiune n carefiecare funcie ndeplinete o sarcin bine definit. Funcia este o coleciede declaraii i instruciuni care execut o aciune.Funciile :
sunt eseniale n construcia blocurilor permit folosirea facilitilor oferite de programarea structurat permit elaborarea unor aplicaii proprii utilizatorului permit obinerea unor funcii mai complexe prin combinarea
unora mai simple, care scriu, citesc, testeaz i depaneaz programe
Un program C++ conine cel putin o funciemain() care este apelat lalansarea n execuie a programului, funcii predefinite (de bibliotec) ifuncii construite de programator.Inainte de utilizarea unei funcii ea trebuie fie definit, fie declarat.
Definirea funciilor
Funciile se definesc prin sintaxa :tip-rez nume(lista){decl-locale
instr}
unde:tip-rez = tipul reultatului ntors de funcie. Poate fi orice tip diferit detablou. Implicit se consider tipul int. Dac funcia nu ntoarce rezultate,se folosete cuvntulvoid .
8/7/2019 21297279-programare-procedurala
42/60
- 214 - Elemente de algoritmic i limbaje de programare
lista = o list de declaraii ale parametrilor separai prin ,. Ea areforma:tip1 np1, tip2 np2,., npi=parametru formal , i=1,2,...Daca lista este vid se pune ( ) sau (void). Nu este permis definirea unei funcii n blocul { } altei funcii. Nu este permis ieirea dintr-o funcie n afara ei prin instruciunea goto. Ofuncie se execut la apelarea ei prin una din formele:
nume (lista_argumente);nume ( );
undelista_argumente conine valorile parametrilor din lista parametrilor funciei. O funcie se poate apela ori de cite ori este nevoie. Dupexecutarea instruciunilor unei funcii se continu executarea programuluicu prima instructiune de dup cea de apel a funciei. Incheierea execuieiunei funcii i revenirea n funcia apelant se face prin instructiuneareturn care are una din sintaxele:
return(expr);return expr;return;
Valoarea expresieiexpr este rezultatul funciei. Ea este convertit la tipulfunciei nainte de a se transmite n funcia apelant. Funciile de tipvoidnu ntorc valoare i deci return are aici doar formareturn; .Exemplul 1.
#include.void desen(void){cout
8/7/2019 21297279-programare-procedurala
43/60
- 215 - Elemente de algoritmic i limbaje de programare
float zece(float x){float y=1;for(int k=1; k
8/7/2019 21297279-programare-procedurala
44/60
- 216 - Elemente de algoritmic i limbaje de programare
for(k=1;k
8/7/2019 21297279-programare-procedurala
45/60
- 217 - Elemente de algoritmic i limbaje de programare
Funcii recursive
Dac o funcie se autoapeleaz direct sau indirect se numeterecursiv .Astfel apelul unei funcii recursive poate aprea i n definiia sa.O funcie recursiv nu are sintax special. Ea implic existena uneistive care la fiecare apel al funciei recursive se ncarc cu valorile parametrilor, variabilelor locale i rezultatului. La fiecare revenire,aceast stiv este descarcat.Recursivitatea se aplic n special la prelucrarea structurilor de date de tiprecursiv cum ar fi liste, arbori, etc.Exemplu. Calculul nerecursiv i recursiv al factorialului unui numr natural.Calcul nerecursiv#include < iostream.h>int factorial (int n){
int rez=1;for (int i=1; inum;cout
8/7/2019 21297279-programare-procedurala
46/60
- 218 - Elemente de algoritmic i limbaje de programare
void main (){int num;cout >num;cout
8/7/2019 21297279-programare-procedurala
47/60
- 219 - Elemente de algoritmic i limbaje de programare
# include < stdarg.h>void prod (char*mes,){int rez=1, par;va_list ap;va_start (ap,mes);while ((par=va_arg(ap,int))!=0)
{rez*=par;}cout
8/7/2019 21297279-programare-procedurala
48/60
- 220 - Elemente de algoritmic i limbaje de programare
Exemplu.#include < iostream.h>void f(int, int=5);void main (){cout
8/7/2019 21297279-programare-procedurala
49/60
- 221 - Elemente de algoritmic i limbaje de programare
void main (){cout
8/7/2019 21297279-programare-procedurala
50/60
- 222 - Elemente de algoritmic i limbaje de programare
s + = p[i];return s;
}Funcia calculeaz suma elementelor lui vector. Parametrulint* este tipulde baz al parametrului vector.
Parametrul ir de caractereirurile de caractere n C + + sunt considerate tablouri de caractere. Dacun ir de caractere este parametrul unei funcii, pentru el sunt valabileaceleai reguli ca la parametrul tablou.Exemplu. Programul urmtor calculeaz numrul de caractere litere micidintr-un ir de caractere prin funciacontor care primete ca parametrurespectivul ir. Introducerea irului se face cu funcia de bibliotec predefinit gets () din fiierul antet stdio.h . Funciacontor atribuie adresa parametrului ir unui pointer local psir . Acesta este folosit de funcie pentru procesarea caracterelor din ir.
#include < iostream.h>#include < stdio.h>int contor (char *sir){int k=0;char *psir = sir;while (*psir! = \0) {
if (* psir >=a && * psir
8/7/2019 21297279-programare-procedurala
51/60
- 223 - Elemente de algoritmic i limbaje de programare
Sirul introdus UN907.12CD contine 0 caractere mici.
Parametrul structurAcest parametru se poate transfera funciilor C ++ prin valoare sau prinreferin. Tipul structurii apare n prototip i n antetul funciei ca latipurile predefinite.Exemplu.
#include < iostream.h>struct complex{float x;
float y;};complex operatie (complex, complex);
void main (){complex c1,c2;cout > c1y;cout > c2y;cout
8/7/2019 21297279-programare-procedurala
52/60
- 224 - Elemente de algoritmic i limbaje de programare
Parametrii transmii sunt: c1=(1,2) i c2=(-1,3)Rezultatul operaiei este: c=(-7,1)
Transferul parametrilor prin referin
Functiile C + + transfer n mod normal parametrii prin valoare. Ele primesc valorile efective ale parametrilor sub forma de copii ale datelor originale. Pot modifica n interiorul lor valorile parametrilor prin pointerifr a afecta datele originale. Modificarea valorilor parametrilor se poateface mai simplu prin transferul parametrilor nu prin valoare, ci prinreferin, eliminnd instruciunile care combin variabilele pointer cucele normale.O referina creaz un nume alternativ (alias ) pentru o variabil. Sedeclar prin sintax:
tip& nume_alias = variabila;unde:& (ampersand) se pune imediat dupa tip.
variabila = este cea pentru care referina este un aliasExemplu: int& intreg = n;
double& precizie = eps;float& media_adm = media;
Dup declararea uneireferine n program putem folosi atat variabila cti referina.Referina nu este o variabil. Ea nu mai poate fi modificat dup ce a fostasociat unei variabile. Folosirea unei referine ca identificator este utilcnd aceasta apare ca parametru formal al unei funcii. Spre deosebire de pointeri, referinele nu permit operaiile:
atribuirea unui pointer o referin; obinerea adresei unei referine cu operatoruladresa ; compararea valorilor referinelor prin operatorii relaionali; operaii aritmetice cum ar fi adunarea unui deplasament(a unei
adrese).
Transferul parametrilor unei funcii prin referin este fcut decompilator, ceea ce simplific scrierea funciei i apelul ei.Transferul parametrilor de tip structur prin referin formale ca i cel prin pointeri este mai eficient dect transferul prin valoare, deoareceelimin copierea structurii pe stiv, conducnd astfel la creterea vitezeide execuie. Rezultatul unei funcii poate fi transferat prin valoare, pointer sau referin.
8/7/2019 21297279-programare-procedurala
53/60
- 225 - Elemente de algoritmic i limbaje de programare
Exemplu. Funcia operaie() are 3 parametrii referin, al treilea obineinformaii de la funcia apelat i ntoarace rezultatul funciei.
#include < iostream.h>#include < conio.h>struct comp {
float x;float y;};
void operatie (comp& a, comp& b, comp& r){rx = ax * bx - ay * by;ry = ax * by + ay * bx;}void main ()comp c1, c2, c;cout >c1y;cout >c2y;cout
8/7/2019 21297279-programare-procedurala
54/60
- 226 - Elemente de algoritmic i limbaje de programare
lista_parametrii este de forma: tip_par 1, tip_par 2,.Exemplu. int(*pf) (int i); pf este pointer la o funcie care intoarce un
rezultat ntreg i are un singur parametru de tip ntregdouble (*h) (double x, double y); h este un pointer la o funciecare
ntoarce un rezultat de tip double iare 2 parametrii de tip double
void (*sort) (char *); sort este un pointer la o funcie care nu ntoarcerezultate i are ca parametru un ir de caractere
Inaintea folosirii unui pointer la o funcie acesta trebuie iniializat subforma:pointer_funcie = nume_funcie;unde nume_funcie este funcia atribuit pointerului la funcie, caretrebuie s ndeplineasc urmtoarele condiii:
1. tipul rezultatului ntors de funcie s fie acelai cu cel ntors de pointer;
2. lista parametrilor funciei s fie acceai cu cea a pointerului.Apelul pointerului la o funcie are sintaxa:
(*pointer_funcie) (lista_argumente);Exemplu. Pointerului pf i este atribuit adresa funciei f () carecalculeaz suma a 2 ntregi.
#include < iostream.h>int f(int i, int j){return i+j;}void main (){int x,y;int (*pf) (int, int);cout >y;cout
8/7/2019 21297279-programare-procedurala
55/60
- 227 - Elemente de algoritmic i limbaje de programare
Putem declara un tablou de pointeri ctre o funcie sub forma:tip_rez (*pointer_funcie [dim_tablou]) (lista_param.);
Exemplu.int (*pf [3]) (int i); declar un tablou pf de 3 pointeri la o
funcie. Fiecare element al tabloului pointeaz(indic) spre o funcie centoarce un rezultat de tip int
i are un singur parametru de tip int.double (*pg [2]) (double x, double y);declar un tablou pg de 2pointeri la o funcie. Fiecare element al
tabloului pointeaz (indic) ctre o funcie centoarce un rezultat de tip double i care are 2parametrii de tip double
Pentru a atribui o funcie unui element dintr-un tablou de pointeri la ofuncie, folosim sintaxa:
pointer_fct [indice] = nume_funcie;Fiecare pointer trebuie s ntoarc acelai tip de rezultat ca i funciaaccesat i s aib aceiai list de parametrii.Apelul unui tablou de pointeri la o funcie are sintaxa: (* pointer_fct [indice]) (lista_argumente);Exemplu. Un program ce conine tabloul de pointeri pf la o funcie,tablou cu dou elemente, fiecare indicnd ctre o funcie min () respectivmax () care ntorc un rezultat de tip int i au 2 parametrii de tip int, primul fiind un tablou unidimensional. Cu acest program calculm celmai mic i cel mai mare element al unui vector.
#include < iostream.h>#include < conio.h>int min (int w[], int n){int minw = w[0], i;for (i=1; i w[i]) minw = w[i];cout
8/7/2019 21297279-programare-procedurala
56/60
- 228 - Elemente de algoritmic i limbaje de programare
{int maxw = w[0], i;for (i=1; i
8/7/2019 21297279-programare-procedurala
57/60
- 229 - Elemente de algoritmic i limbaje de programare
Printre fiierele antet, enumerm: assert.h diagnosticheaz programul complex.h declar clasacomplex pentru operaii cu numere
complexe conio.h definete I/ E de la consol n MS DOS ctype.h declar funcii pentru clasificare i convertire de
caractere graphics.h definete pachetul de funcii GRAPHICS float.h definete un domeniu de valori care pot fi stocate n
tipurile virgul mobil fstream.h definete o clas ce reprezint fluxul de ieireofstream iostream.h definete fluxul de intrarecin i de ieirecout limits.h definete valorile limit pentru tipurile de date ntregi math.h definete funcii matematice pentru operaii cu numere
reale search.h declar funcii de cutare signal.h definete simbolurile i rutinele pentru tratarea
condiiilor excepionale stdarg.h definete macrocomenzi care furnizeaz acces la
argumente fr nume dintr-o funcie cu numr variabil de parametrii
stdlib.h declar rutinele de conversie de iruri, de alocare amemoriei, de control a proceselor i generatorul de numerealeatoare
stdio.h declar funcii i tipuri de date necesare operaiilor de I/E
string.h declar rutinele de manipulare a irurilor time.h definete tipuri de date i declar funcii care
manipuleaz timpul.Printre funciile matematice cu argumente reale din fiierul antetmath.h enumerm:
abs () cu prototipul:int abs (int x); d valoarea absolut a unuintreg
acos () cu prototipul:double acos (double x); calculeazarccos x, x real
asin () cu prototipul:double asin (double x); calculeaz arcsinx, x real
8/7/2019 21297279-programare-procedurala
58/60
- 230 - Elemente de algoritmic i limbaje de programare
atan () cu prototipul:double atan (double x); calculeaz arctgx ,x real
atan2 () cu prototipul:double atan2 (double y, double x); calculeaz arctg y/ x ,x, y reali
ceil () cu prototipul:double ceil (double x); d cel mai micntreg x
cos () cu prototipul:double cos (double x); calculeaz cos x, cux real n radiani
cosh () cu prototipul:double cosh (double x); d ch x, cu x real exp () cu prototipul: double exp (double x); calculeaz ex , x
real fabs() cu prototipul :double fabs(double x); d |x|, pentru x
real floor () cu prototipul:double floor(double x); d [x] , x real fmod() cu prototipul:double fmod(double x,double y) ;--d
restul mpririi lui x la y cu ct ntreg frexp () cu prototipul:double frexp(double x, int *expptr);
separ x n mantis i exponentul puterii lui 2 ldexp () cu prototipul: double ldexp(double x, int exp) ;--
reconstruiete x din mantis i exponentul puterii lui 2 (calculeazx*2exp)
log () cu prototipul: double log(double x) ; calculeaz lnx ,x>0 log10 () cu prototipul: double log10(double x) ; calculeaz
lgx ,x>0 modf() cu prototipul:double modf(double x, double *intptr) ;--
separ x n [x] i {x} pow() cu prototipul: double pow(double x, double y) ;--
calculeaz xy sin() cu prototipul:double sin(double x) ;-- calculeaz sin x , x
real n radiani sinh () cu prototipul:double sinh(double x ); calculeaz sh x, x
real sqrt () cu prototipul:double sqrt(double x) ; calculeaz x
,x>=0 tan () cu prototipul:double tan(double x) ; calculeaz tg x, cu
x n radiani tanh () cu prototipul:double tanh(double x) ; calculeaz th x,
x real
8/7/2019 21297279-programare-procedurala
59/60
- 231 - Elemente de algoritmic i limbaje de programare
Exemplu.#include #include void main (){double x, y;cout >x>>y;cout
8/7/2019 21297279-programare-procedurala
60/60
- 232 - Elemente de algoritmic i limbaje de programare
{return (x*y);}void main (){double a, b;cout >b;cout