Documente Academic
Documente Profesional
Documente Cultură
LUCRARE DE CURS
LA DISCIPLINA PROGRAMARE
CHISINAU 200__
Cuprins
1. Introducere ................................................................................................................... 3
2. Sarcina .....................…................................................................................................ 4
7. Concluzii ................................................................................................................... 21
2
1. Introducere.
In timpul anilor 60 au aparut câteva noi limbaje de programare, precum ALGOL 60 care a
adunat din FORTRAN conceptele programarii structurate, care în final vor ajunge a fi utilizate de CPL
si succesorii sai (precum C++). Mai târziu, ALGOL 68 a influentat de asemenea in mod direct si
dezvoltarea tipurilor de date din C. De asemeni adevarat este faptul ca ALGOL a fost un limbaj
nespecific si modul sau abstract l-au facut putin folosit în practica pentru rezolvarea sarcinilor
obisnuite.
In 1963 se pare ca CPL (Combined Programming language) a fost mai specific pentru sarcini concrete
de programare la aceea vreme decât ALGOL. Cu toate acestea, aceasta caracteristica -l a facut un
limbaj cunoscut si, de asemeni, dificil de învatat si implementat.
In 1967, Martin Richards a dezvoltat BCPL (Basic Combined Programming Language), care a
însemnat o simplificare a CPL, luând cele mai bune parti de la acesta. Dar a continuat sa fie un limbaj
foarte abstract, si care a fost facut portabil putin câte putin, în functie de caracteristicile unei masini
concrete.
In 1970, Ken Thompson, adâncit în dezvoltarea UNIX la Bell Labs, a creat limbajul B. A fost o portare
a BCPL pentru o masina specifica si a unui sistem specific (DEC PDP-7 si UNIX), si care a fost
adaptat pentru gustul si necesitatile lui particulare. Rezultatul final a fost o simplificare enorma a CPL,
desi dependenta de sistem. Avea mari limitari, ca de exemplu nu compila în cod executabil, ci doar în
cod pe fire de executie, care genera cod lent în executie si de asemenea inadecvat pentru dezvoltarea
unui sistem de operare cu acest limbaj. Motiv pentru care, din 1971, Denis Ritchie, din echipa Bell
Labs, a început dezvoltarea unui compilator de B, care printre multe alte lucruri, a fost capabil sa
genereze în mod direct cod executabil. Acest "nou B", în final numit C, introducea în plus, câteva noi
concepte limbajului, ca tipul de date char.
Devreme în 1973, Denis Ritchie, a dezvoltat bazele limbajului C. Includerea tipurilor, a manipularii
lor, a îmbunatatirii pentru siruri si pointeri, alaturi de capacitatea demonstrata de portabilitate a fost
motivul pentru care a devenit un limbaj de nivel înalt, contribuind la extinderea C. A fost consacrat cu
volumul "The C Programming Language" (Programarea în C) de Brian Kernighan si Denis Ritchie,
cunoscut si ca White Book, si care a servit standard de facto pâna la publicarea oficiala a standardului
ANSI (ANSI X3J11 committee) in 1989.La începutul anilor '80, Bjarne Stroustrup, de la Bell labs, a
început dezvoltarea limbajului C++, care va primi formal acest nume la sfârsitul anului 1983, când
primul sau manual a fost publicat. In Octombrie 1985,a
aparut prima versiune comerciala a limbajului si prima
editie a cartii "Limbajul de programare C++" ("The C++
Programming Language") de Bjarne Stroustrup.
In timpul anilor '80, limbajul C++ a evoluat pâna a
devenit un limbaj cu propria personalitate. Toate acestea
fara practic a pierde compatibilitatea codului sau a unora
dintre cele mai importante caracteristici ale sale. De fapt,
standardul ANSI pentru limbajul C, publicat în 1989 a
adunat laolalta o buna parte din contributiile C++ la
programarea structurata.
Din 1996 comisia ANSI X3J16 a început dezvoltarea
propriului standard pentru c++. In perioada ce a trecut
pâna la publicarea versiunii finale in Noiembrie 1997,
C++ a cunoscut o mare dezvoltare în folosirea sa iar în
zilele noastre este cel mai folosit limbaj pentru dezvoltare
aplicatiilor. De asemenea, pâna la publicarea
standardului, C++ a cunoscut mari schimbari si a
încorporat noi concepte.
Evolutia familiei limbajului C(grafic):
O linie solida reprezinta o mostenire masiva de caracteristici, o linie întrerupta înseamna împrumutarea
caracteristicilor majore, o linie punctata împrumutul unor caracteristici minore.
3
Ministerul Educatiei al Republicii Moldova
Aprob
____________________ P. Nistiriuc
_____ ___________________ ______
SARCINA
pentru îndeplinirea lucrarii de curs la disciplina “Programare”
De alcatuit o baza de date cu n înscrieri care ar contine informatia despre utilizatorii unui sistem
informational accesat prin parola.
a)Pentru a intra în sistem utilizatorul trebuie sa culeaga numele si parola personala.
b) Utilizatorii sa fie aranjati în ordine alfabetica dupa nume.
c) Intrînd în sistem, utilizatorul sa primeasca informatia despre drepturile sale în sistem (citire,
redactare, creare, stergere de fisiere).
d) Sa fie posibila cautarea utilizatorilor dupa nume (fara afisarea parolelor).
Lucrarea trebuie sa fie alcatuita conform standardelor pentru îndeplinirea documentelor soft.
În timpul îndeplinirii lucrarii de curs de respectat indicatiile generale.
4
3. Schema logica a programului.
conditia pasmodif pass
START START START
j=0;j<strl j=0;j<n;
Conditia en(s);j++ j++
...
s[j]=s[ (strcmp(s,M[j].
nume)==0)&&(
j]+30 strcmp(p,M[j].p
as)==0)
STOP
return(1)
STOP
return(0)
STOP
inscr
citire
START
START
(f=fopen(s,
"w"))==NU
(f=fopen(s, LL
"r"))==NU
LL
fread(&M[i
\7Utilizatori cu ],sizeof(M[i Fisierul %s
]),1,f)==1
numele %s nu nu poate fi
sint inscrisi deschis
ex
i++
i=0;i<n;i+
+
e
x
fwrite(&M[
i],sizeof(M[
return(i) i]),1,f)
STOP return(1)
e
x
return(1)
STOP
5
add 1
START
Culege Culege dreptul
dreptul la la formarea
citirea bazei bazei noi
(f=fopen(s,
"a"))==NU
LL
c=getch() c=getch()
a
d (c!='Y')&& (c!='Y')&&
(c!='y')&&( (c!='y')&&(
c!='n')&&( c!='n')&&(
Adaogare?
aux[0].dr.r=c aux[0].dr.r=c
c c
(c=='y')||(c=
='Y')||(c==1
3)
e
x
c=getch() c=getch()
ad
1
(c!='Y')&& (c!='Y')&&
(c!='y')&&( (c!='y')&&(
c!='n')&&( c!='n')&&(
Culege
numele
utilizatorului
aux[0].dr.r=c aux[0].dr.r=c
aux[0].nume
c c
Fisierul %s
strlen(aux[0
].nume)>10 nu poate fi
deschis Doriti sa
adaugati
inscrierea noua
! numele
ad
2 prea lung !
c=getch()
Culege
parola
utilizatorului
(c=='y')||(c=
aux[0].pas ='Y')||
(c==13)
e
x
strlen(aux[0
].pas)>8 fwrite(&au
x[0],sizeof(
Confirma aux[0]),1,f)
! parola parola
utilizatorului
prea lunga !
Baza a fost
STOP inscrisa
ux
strcmp(aux[
0].pas,ux)!
=0
! parola pasmodi
gresita! f(aux[0].
pas)
6
culmasiv 1
START
i=k;i<n;i+
+
k=0
wr Doriti sa
1
inscriti baza
de date
Doriti sa
creati o baza Culege
de date noua? numele
utilizatorului
(c=='y')||(c=
='Y')||(c==1
3)
(c=='y')||(c= M[i].nume
='Y')||(c==1
3)
i=inscr(s
,n)
strlen(M[i].
Culege nume)>10
numarul nou
de utilizatori wr
! numele
2
k=0
M[i].pas
pastrati
accesul DV?
strlen(M[ STOP
i].pas)>8
(c=='y')||(c=
='Y')||(c==1
Confirma
3)
parola
! parola utilizatorului
prea lunga !
aux[0]=M[po
z];M[0]=aux[ ux
0];k=1;poz=0
*
Complecteaz strcmp(M[i
a cimpurile ].pas,ux)!= c=getch()
0
bazei de date:
! parola pasmodi
gresita ! f(aux[0].
(c!='Y')&&
1 pas) (c!='y')&&(
c!='n')&&(
Culege
dreptul la aux[0].dr.r=c
citirea bazei
c
*
Culege dreptul Doriti sa
la completarea adaugati
bazei inscrierea noua
* c=getch()
Culege dreptul
la formarea
baze i noi
*
Culege dreptul
la cautarea
utilizatorului
*
7
afisare caut
START
START
+---------------------- ---+ e
¦ UTILIZATORUL ¦ DREPTUL ¦
¦-----------+-------------¦ x
¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+
+-------------------------+
* Culege
numele
i=0;i<n;i+ tex tbackground(BLAC utilizatorului
+ K);textcolor(WHITE);g STOP
textbackground(BLAC textbackground(RED);t
K);textcolor(6+BLINK) extcolor(BLUE);
strcmp(s1,
M[i].nume)
==0
z=186;
\r%d%9s %c ******** %c %c
%c %c %c %c %c %c
%c \n",i+1,M[i].nume,z,z,M[i].d
r.r,z,M[i].dr.add,z,M[i].dr.scr,z,
r++
M[i].dr.c,z
textbackground(0);textc
olor(7);z=205; i<n-1 r>0
+-------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦-----------+-------------¦
¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+
\r%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c \n
\r%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c \n
",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z
* \7Utilizatori cu
",204,z,z,z,z,z,z,z,z,z,z,206,z,z,z
,z,z,z,z,z,z,z,206,z,z,z,206,z,z,z, ,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
206,z,z,z,206,z,z,z,185 202,z,z,z,202,z,z,z,188 numele %s nu
i=0;i<n;i+ sint inscrisi
+
strcmp(s1,
M[i].nume)
==0 e
x
+-------------------------+
¦ UTILIZATORUL ¦ DREPTUL
¦-----------+-------------¦
¦
¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
Doriti sa
+-------------------------+
cautati un alt
** nume
aranj (c=='y')||(c=
='Y')||(c==1
3)
START
i=0;i<n-
1;i++ STOP STOP
afis drept
i=0;i<n-
1;i++ START
+-------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦ - ----------+-------------¦
strcmp(M[i ¦ ume ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+
].nume,M[j +-----------------------------+
].nume)>0
*
i=0;i<n;i+
+
poz==i
pass(p,s,n)==1)
&&(strc mp(p,
return(i)
M[i].pas)==0)&
&(strcmp(s,M[i
poz=j ].nume)==0)
+-------------------------+
STOP
¦ UTILIZATORUL ¦ DREPTUL ¦
¦-----------+-------------¦
¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+
aux[0]=M[i];
M[i]=M[j];M
[j]=aux[0];
**
8
main
START me
niu
start
nfis meniu*
n=citir nfis
s
e(nfis) new
condit
c==’1’ h1
n==0
inscr(nfis
,n)==0
ia()
poz=afis
Baza de date c==’ 2’ h2 drept(p,s
Culege
lipseste. ,n)
numele:
s c==’ 3’ h3 add(nfis)
culmasiv
(nfis)==0
exit
Culege
parola: c==’ 4’ h4
(M[poz].dr.add
=='Y')||(M[poz]
.dr.add=='y')
start
i=0
c==’ 5’ h5 noac
ACCESS
ba cess INTERZIS
k
c=getch() c==’ 6’ h6
c==27 nop
ass (M[poz].dr.c==' caut(n)
c==’ 7’ h7 Y')||(M[poz].dr.
c=='y')
c==8 i>=1
c==’ 0’ exit
(i>=8)&
i--
&(c!=13) \7EXIT
?(Y/N):
c<<"
"<<c
c!=13 gotoxy(whe
rex()-
1,wherey())
c='\0' "%c",15
Y
p[i]=c;i++ c=getch()
c!='\0'
c=='n')||(c= (c!='Y')&&
='N')||(c==2 (c!='y')&&(
7) c!=13)
p[i]=c pass(p,s nop
,n)==0 ass
pasmo N
START
dif(p) poz=afis
drept(p,s c=getch()
,n)
sta (c!='N')&&
(c!='n')&&(
me rt c!=13)
niu
9
h3 h5 h6
n=citire(
(M[poz].d r . noa (M[poz].dr.
r=='Y')||(M[
poz].dr.r=='
cce scr=='Y')||(
M[poz].dr.s
nfis)
ss
poz==0
inscr(nfis
n==0 nfi 2,n)==0
sne
w
sta
rt
me
fraza="BAZA
INITIALA"
niu inscr(nf
s
is,n);
afisare(n
,fraza)
(M[poz].dr.
r=='Y')||(M[
poz].dr.r=='
me
niu
s fraza="BAZA
FINALA"
afisare(
n,fraza)
Baza finala a
nopa fost inscrisa in
ss fisierul %s
c=getch()
(c=='N')||(c
=='n')||(c==
sta
27) rt
(c=='Y')||(c
no
=='y')||(c==
13) pas
s
10
4. Listingul programului.
#include<conio.h>//clrscr,getch,getpass,gotoxy
#include<stdio.h>//fclose,fopen,printf
#include<iostream.h>//cin,cout
#include<math.h>//fmod
#include<string.h>//strcmp,strcpy
FILE *f;
int i,j,n,poz;
char c,z,nfis[20]="D:\\baza.txt",nfis2[20]="D:\\bazanew.txt",ux[10];
struct drept{char r;char add;char scr;char c;};
struct masiv{char nume[10];char pas[8];struct drept dr;};
struct masiv M[20],aux[10];
void conditia(){clrscr();textcolor(4);textbackground(0);
cprintf("Conditia :\n\r"
" De alcatuit o baza de date cu n inscrieri care ar contine informatia despre\n\r"
" utilizatorii unui sistem informational accesat prin parola.\n\r"
" a) Pentru a intra in sistem utilizatorul trebuie sa culeaga numele\n\r"
" si parola personala.\n\r"
" b) Utilizatorii sa fie aranjati in ordine alfabetica dupa nume.\n\r"
" c) Intrand in sistem, utilizatorul sa primeasca informatia despre\n\r"
" drepturile sale in sistem (citire,redactare,creare,stergere de fisiere).\n\r"
" d) Sa fie posibila cautarea utilizatorului dupa nume (fara afisarea parolei).\n\n\r");
cout<<"Drepturile utilizatorului in sistem :\n\n"
" R - (read)citirea bazei de date.\n\n"
" A - (add)adaugarea unui nou utilizator.\n\n"
" W - (write)scrierea unei noi baze de date.\n\n"
" C - cautarea utilizatorului dupa nume.\n\n";
getch();};
11
void add(char s[20]){
if((f=fopen(s,"a"))==NULL){
clrscr();gotoxy(15,2);textcolor(15+128);
cprintf("Fisierul %s nu poate fi deschis pentru completare !",s);
getch();goto ex;}
ad:clrscr();
cprintf("Doriti sa adaogati inca o inscriere in baza de date(Y/N)? ");c=getch();
if((c=='y')||(c=='Y')||(c==13)){
cprintf(" \r\nComplecteaza cimpurile bazei de date:\n\n");
ad1:
cprintf(" \r\n Culege numele utilizatorului : ");gets(aux[0].nume);
if(strlen(aux[0].pas)>10){textcolor(RED+128);
cprintf("! numele prea lung !"); textcolor(3);goto ad1;}
ad2:
cprintf(" \r\n Culege parola utilizatorului : ");gets(aux[0].pas);
if(strlen(aux[0].pas)>8){textcolor(RED+128);
cprintf("! parola prea lunga !"); textcolor(3);goto ad2;}
cprintf(" \r\n Confirma parola utilizatorului : "); gets(ux);
if(strcmp(aux[0].pas,ux)!=0){textcolor(RED+128);
cprintf("! parola gresita !"); textcolor(3);goto ad2;}
pasmodif(aux[0].pas);
cprintf(" \r\n Culege dreptul la citirea bazei (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.r=c;cout<<c;
cprintf(" \r\n Culege dreptul la completarea bazei (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.add=c;cout<<c;
cprintf(" \r\n Culege dreptul la formarea bazei noi (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.scr=c;cout<<c;
cprintf(" \r\n Culege dreptul la cautarea utilizatorului dupa nume (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.c=c;cout<<c;
cprintf(" \r\n\nDoriti sa inscriti baza de date in fisierul %s (Y/N)?",s);c=getch();
if((c=='y')||(c=='Y')||(c==13)){ fwrite(&aux[0],sizeof(aux[0]),1,f);
cout<<" \nBaza a fost inscrisa";} goto ad;} fclose(f);ex:}
14
void main(void){
clrscr();char s[10],p[10],*fraza;
start:
textcolor(7);textbackground(0);clrscr();
n=citire(nfis);
if(n==0){
if(inscr(nfis,n)==0)goto nfisnew;
cprintf(" \r\nBaza de date lipseste.");
if(culmasiv(nfis)==0)goto exit;
goto start;}
textcolor(RED);textbackground(0);
cprintf("Culege numele: ");gets(s);
cprintf("Culege parola personala:");
i=0;
do{
bak:c=getch();
if(c==27)goto nopass;
if(c==8){if(i>=1){i--;cout<<c<<" "<<c;}goto bak;}
if((i>=8)&&(c!=13))goto bak;
if(c!=13){printf("%c",15);p[i]=c;i++;}
else c='\0';}
while(c!='\0');p[i]=c;
pasmodif(p);
if(pass(p,s,n)==0)goto nopass;
poz=afisdrept(p,s,n);
meniu:textcolor(3);textbackground(0);clrscr();
cprintf(" \rAlege din meniu :\n\n\r"
"1. Afisarea conditiilor problemei.\n\n\r"
"2. Afisarea dreptului utilizatorului.\n\n\r"
"3. Citirea bazei de date din fisierul 'baza.txt' si afisarea ei la monitor.\n\n\r"
"4. Adaugarea unei noi inscrieri la sfirsitul fisierului existent 'baza.txt'.\n\n\r"
"5. Crearea bazei noi de date si inscrierea ei in fisierul 'baza.txt'.\n\n\r"
"6. Aranjarea utilizatorilor in ordine alfabetica dupa nume si inscrierea bazei\n\n\r"
" finale in fisierul 'bazanew.txt'.\n\n\r"
"7. Cautarea utilizatorului dupa nume.\n\n\r"
"0. Iesire");c=getch();clrscr();
switch(c){
case'1':goto h1;
case'2':goto h2;
case'3':goto h3;
case'4':goto h4;
case'5':goto h5;
case'6':goto h6;
case'7':goto h7;
case'0':goto exit;
default:goto meniu;}
h1:
conditia();goto meniu;
h2:
poz=afisdrept(p,s,n);goto meniu;
15
h3:
if((M[poz].dr.r=='Y')||(M[poz].dr.r=='y')){n=citire(nfis);
if(n==0)goto start;
fraza="BAZA INITIALA";afisare(n,fraza);goto meniu;}
else goto noaccess;
h4:
if((M[poz].dr.add=='Y')||(M[poz].dr.add=='y')){add(nfis);goto meniu;}
else goto noaccess;
h5:
if((M[poz].dr.scr=='Y')||(M[poz].dr.scr=='y')){n=culmasiv(nfis);if(poz==0)goto meniu;}
else goto noaccess;
h6:
n=citire(nfis);
aranj(n);if(inscr(nfis2,n)==0)goto nfisnew;inscr(nfis,n);
if((M[poz].dr.r=='Y')||(M[poz].dr.r=='y')){n=citire(nfis2);
fraza="BAZA FINALA";afisare(n,fraza);}
cprintf(" \rBaza finala a fost inscrisa in fisierul %s",nfis2);getch();
goto meniu;
h7:
if((M[poz].dr.c=='Y')||(M[poz].dr.c=='y')){caut(n);goto meniu;}
else goto noaccess;
nfisnew:
cprintf(" \n\rCulege numele de fisier dorit: ");
gets(nfis);goto start;
nopass:
clrscr();textcolor(RED+BLINK);
cprintf(" \7! Numele sau parola gresita !\n\n\rEXIT(Y/N)? ");
textcolor(RED);c=getch();
if((c=='N')||(c=='n')||(c==27))goto start;
else if((c=='Y')||(c=='y')||(c==13))goto exit;
else goto nopass;
noaccess:
clrscr();textcolor(RED+BLINK);
cprintf(" \7! ACCESS INTERZIS !");
getch();goto meniu;
exit:
textcolor(RED);clrscr();gotoxy(30,10);
cprintf(" \7EXIT ?(Y/N): "); textcolor(RED+128);
cprintf("Y");gotoxy(wherex()-1,wherey());
c=getch();
if((c=='n')||(c=='N')||(c==27)){
cout<<"N";c=getch();
if((c!='N')&&(c!='n')&&(c!=13))goto exit;
else goto start;}
else if((c!='Y')&&(c!='y')&&(c!=13))goto exit;
}
16
5. Descrierea programului.
18
6. Rezultatele obtinute.
+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
¦ ion ¦ ******** ¦ y ¦ y ¦ n ¦ y ¦
+-------------------------------------+
BAZA INITIALA
+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
1 lamer ¦ ******** ¦ y ¦ y ¦ y ¦ y ¦
¦----------+----------+---+---+---+---¦
2 serii ¦ ******** ¦ y ¦ n ¦ y ¦ n ¦
¦----------+----------+---+---+---+---¦
3 luser ¦ ******** ¦ y ¦ y ¦ n ¦ y ¦
+-------------------------------------+
19
6. Aranjarea utilizatorilor in ordine alfabetica dupa nume si inscrierea bazei
BAZA FINALA
+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
1 lamer ¦ ******** ¦ y ¦ y ¦ y ¦ y ¦
¦----------+----------+---+---+---+---¦
2 luser ¦ ******** ¦ y ¦ y ¦ n ¦ y ¦
¦----------+----------+---+---+---+---¦
3 serii ¦ ******** ¦ y ¦ n ¦ y ¦ n ¦
+-------------------------------------+
+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
1 serii ¦ ******** ¦ y ¦ n ¦ y ¦ n ¦
+-------------------------------------+
0. Iesirea
EXIT?(Y/N):Y
7. Concluzii.
20
8. Lista literaturii utilizate.
5. www.istrati.com
21