Sunteți pe pagina 1din 30

Ministerul Educaiei al Republicii Moldova Universitatea Tehnic a Moldovei Catedra Sisteme Optoelectronice

Lucrare de curs
la disciplina: Programare

A efectuat studenta grupei IMT-031 A verificat lectorul superior

Butucioc Stela Istrati Sergiu

Chiinu 2004

Cuprins 1. Introducere ...............................................................................................................3 2. Sarcina ......................................................................................................................4 3. Schema logic a programului ..................................................................................5-17 4. Listingul programului ............................................................................................17-22 5. Descrierea programului .....................................................................................22-24 6.Rezultatele obinute ................................................................................................24-27 7. Concluzii ....................................................................................................................28 8. Lista literaturii utilizate ..............................................................................................29

1. Introducere .

Limbajul de programare C a fost elaborat n anul 1972 de ctre Denis Ritchi i Brain Kernigan . A fost descris detaliat n cartea Limbajul de programare C de ctre cei care l-au alctuit . Limbajul nu este legat de un anume sistem de operare sau calculator; i, dei a fost numit "limbaj de programare sistem", deoarece este util n scrierea sistemelor de operare, el a fost folosit la fel de bine n scrierea de programe importante ce trateaz probleme numerice, prelucrri de texte sau baze de date. C este un limbaj relativ "de nivel inferior". Acestea pot fi combinate i prelucrate cu operatori aritmetici i logici implementai pe actualele calculatoare. C nu posed operaii pentru a prelucra direct obiecte compuse, cum ar fi iruri de caractere, mulimi, liste sau tablouri considerate ca un ntreg. Cu toate c absena acestor caracteristici ar parea o grav deficien , pastrarea limbajului la o dimensiune modest a adus beneficii reale. Deoarece C este relativ mic, el poate fi descris ntr-un spaiu redus i nvaat repede. Un compilator pentru C poate fi simplu i compact. Aceasta dovedete marele grad de mobilitate a limbajului. Deoarece tipurile de date i structurile de control posedate de C sunt suportate de majoritatea calculatoarelor existente, biblioteca necesar execuiei [run - time] necesar pentru a implementa programele independente este minuscul. Din nou, deoarece limbajul reflect capacitile calculatoarelor curente, programele C tind s fie suficient de eficiente astfel c nu exist nici o constrngere pentru a le scrie n limbajul de asamblare. Cu toate c C se potrivete cu caracteristicile multor calculatoare, el este independent de arhitectura oricrui calculator particular i astfel, cu puin grij, este uor a scrie programe "portabile", adic programe care pot fi rulate fr modificri pe varietate de calculatoare. Limbajul C posed construciile fundamentale pentru controlul fluxului necesare pentru programele bine structurate: grupare de instruciuni; luare de decizii ("if"); buclare cu test de terminare la nceput ("while", "for") sau la sfirit ("do"), selectare a unui caz dintr-o mulime de cazuri posibile ("switch"). Limbajul C folosete pointeri i are abilitatea de a face aritmetica cu adrese. Argumentele funciilor sunt pasate copiind valoarea argumentului i este imposibil pentru funcia apelat s modifice argumentul real din apelant. Cnd se dorete s se obin un "apel prin referin", se trimite explicit un pointer, iar funcia poate modifica obiectul la care puncteaz pointerul. Numele de tablouri sunt trimise ca locaie a originii tabloului, aa ca argumentele tablouri sunt efectiv apeluri prin referin. Variabilele interne pot fi automate sau statice. Variabilele automate pot fi n registre pentru eficiena mrit, dar declaraia de registru este numai intern compilatorului i nu se refer la vreun registru specific al calculatorului. n fine, limbajul C, ca i alte limbaje, are defectele sale. Unii din operatori au o pondere greita; o parte sau prti ale sintaxei ar fi putut fi mai bune; exist mai multe versiuni ale limbajului diferind foarte puin una de alta. Cu toate acestea, limbajul C s-a dovedit a fi un limbaj extrem de eficace i expresiv pentru o larg varietate de aplicaii de programare.

3. Schema logic .
m START 1 3:Citire din fisier si afisare a bazei

clrscr()

textcolor(15 )

gotoxy(5, werey()+1)

gotoxy(15,2 )

4:Adaugare

Alege din meniu

gotoxy(5, werey()+1)

gotoxy(5, wherey()+2)

5:nr de stud. ce au si ce nu nu bursa

1:Afis. cond. initiale

gotoxy(5, werey()+1)

gotoxy(5, werey()+1)

6:Aranj.in ord. cresc.si inscr. in fisier A

2:Compl. bazei

gotoxy(5, werey()+1)

1 5

gotoxy(5, werey()+1)

w=5

1 0
e

7:Afisarea bazei finale

w=6

1 0
g

gotoxy(5, werey()+1)

w=7

1 0
h

8:Iesire

w=8

1 0
i

m w=getch()

w=1

1
a

0
w=2

1 0
b

conditii()

w=3

1
m

0
w=4

1 0
d

n= =completare()

n=citire_fisier( baza)

scrie_fisier (n,baza)

read_file(n , burse)

c g

n=citire_fisier( baza)

n=citire_fisier( baza)
afisare(n, baza) aranjare(n)

d
scrie_fisier( n,bazanoua)

n=adaugare(n, baza) m

K Pentru iesire tastati <ENTER>

n=citire_fisier( bazanoua)

afisare(n, bazanoua)

getch()

STOP

conditii
START

clrscr() clrscr() gotoxy(15, 10) gotoxy(20, 2)

Intradevar doriti sa iesiti

Lucrare de curs la programare

v=getch()
gotoxy(29, 4)

v=n|| v=N

0
Conditiile problemei :

v=y|| v=Y

1
2

completare
START

gotoxy(29, 4)

clrscr()

De alc. o baza de date cu n inscrieri care ar contine informatia despre

k=0 z++ Indicati cantitatea de inscrieri

studentii unei facultati

a) De calculat bursa pentru fiecare din ei reiesind din rezultatele sesiunii

L
b) De aranjat inscrierile dupa valoarea bursei in ordine descrescatoare

i=0..k1
c) de scris in fisier nr. Studentilor ce au si ce nu au bursa

Indicati numarul examenelor

-------------------------|fam | nota medie| . . -------------------------| | |

na
| | | | | | | | | --------------------------

Indicati familia stud

Pentru iesire tastati <ENTER>


x[i].fam

getch()

STOP 9

d1=0; d1<na d1++

a=x[i].sn/na x[i].nota=a

Culegeti rezultatul

x[i].n ota<7

x[i].ra[ d1]

x[i].bursa=0

x[i].sn=0 x[i].bursa=150 Q d1=0; d1<na d1++

x[i]. nota >7& <8


x[i].bursa=180

x[i].sn=x[i].sn +x[i].ra[d1]

Pentru iesire tastati <ENTER>

getch()

return(k)

STOP

10

scrie_fisier
START

citire_fisier
START

1
z=0 Fisierul nu poate fi deschis

0
clrscr()

f=fopen( numef,w)

1
Fisierul nu poate fi deschis

f=fopen( numef,r )=NUL L

Z i=0..k1

i=0 z++

fwrite(&x[i] ,sizeof(x[i]), 1,f)

B z=0

U B fclose(f)

**

clrscr() i ++ Baza a fost inscrisa in fisier Z Pentru iesire tastati <ENTER> U fclose(f)

return(i) getch() STOP STOP 11

afisare
START

**fread(&x[i],sizeof(x[i]),1,f)==1 adaugare
2 START

1
z=0 clrscr()

0
clrscr() Doriti sa adaugati o inscriere ? y/n

clrscr()

Baza de date n-a fost citita din fisier

Baza de date

q=getch()

----------------------|fam |nota medie| -----------------------

q=y| | q=Y

0 1

i=0..k1
x[i].fam x[i].nota x[i].bursa

z =0 z ++ 4 Indicati fam stud

x[i].fam
-----------------------

Pentru iesire tastati <ENTER>

Indicati nr de examene

getch()

STOP 12

ex

a=x[i].sn/na x[i].nota=a

d1=0; d1<na d1++

x[i].n ota<7

Culegeti rezultatul

x[i].bursa=0

x[i].ra[ d1]

x[i]. nota >7& <8


x[i].bursa=150 x[i].bursa=180

x[i].sn=0
f=fopen(numef, a)

d1=0; d1<na d1++

fwrite(&x[i] ,sizeof(x[i]), 1,f)

x[i].sn=x[i].sn +x[i].ra[d1] fclose(f) 4


Daca ati facut o inscriere o puteti vedea accesind punct 3 din meniu

13

7 Pentru iesire tastati <ENTER>

getch()

Culege nr. cautat

return(k)

STOP

Rezultatul cautarii

read_file
START 8

1
z=0

clrscr()

clrscr()

Baza de date n-a fost citita din fisier 10

14

x[ i=0..ki]. 1 bu rs a! =0 Nrcub++ .0 0
i=0..k1

nrcub

10

nrfb

Pentru iesire tastati <ENTER>

getch()

STOP

x[i].b ursa= =0.00

Nrfb++

15

aranjare
START

z=0 T z=z+1

i=0..k1

max=x[i].burs a r=i

j=i..k-1

x[j].bu rsa> max

max=x[j].burs a r=j

aux=x[i] x[i]=x[r] x[r]=aux

16

X Baza de date a fost citita din fisier Inscr. au fost aranj. in ord . crescat.

Accesati punctul 7

Pentru iesire tastati <ENTER>

getch()

STOP

4. Listingul programului . #include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h> #include<string.h> //variabile globale int n,i; char w,v; char baza[20]="c:/baza.txt",bazanoua[20]="c:/bazanoua.txt",burse[20]="c:/burse.txt"; int z=0,nrcub,nrfb; int na;//na-numarul atestarilor;ra-rezultatul a maxim [10] atestari struct st { char fam[15]; float ra[10],sn,nota,bursa;}aux; struct st x[50]; //afisarea conditiilor initiale
17

void conditii (void) { clrscr(); gotoxy(20,2);textcolor(11); cprintf("Lucrare de curs la disciplina programare"); gotoxy(29,4);textcolor(15); cprintf("Conditiile problemei:"); gotoxy(5,5);textcolor(11); cprintf("De alcatuit o baza de date cu N inscrieri care ar contine informatia"); gotoxy(5,6); cprintf("despre studentii unei facultati."); gotoxy(1,7); cprintf("a)De calculat bursa pentru fiecare din ei reiesind din rezultatele unei sesiuni."); gotoxy(1,8); cprintf("b)De aranjat inscrierile dupa valoarea bursei in ordine descrescatoare."); gotoxy(1,9); cprintf("c)De scris in fisier numarul studentilor ce au bursa si numarul studentilor"); gotoxy(1,10); cprintf(" ce n-au bursa.");gotoxy(5,wherey()+2); printf("");gotoxy(5, wherey()+1); printf(" Familia Nota medie Bursa ");gotoxy(5,wherey()+1); printf("");gotoxy(5 ,wherey()+1); printf(" ");gotoxy(5,wherey()+1); printf(" ");gotoxy(5,wherey()+1); printf(""); textcolor(15);gotoxy(5,wherey()+2); cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); } //completarea bazei de date int completare(void) { int i,d1,k; float a,b; clrscr(); gotoxy(15,2); k=0; z++; printf("Culegeti cantitatea de inscrieri in baza : "); scanf("%d",&k); gotoxy(15,3); printf("Indicati numarul examenelor sesiunii : "); scanf("%d",&na); for(i=0;i<k;i++) { clrscr(); gotoxy(5,2); printf("Indicati familia studentului %d ",i+1); scanf("%s",x[i].fam); for(d1=0;d1<na;d1++){gotoxy(7,wherey()+1); printf(" -Culegeti rezultatul %d = ",d1+1);scanf("%f",&x[i].ra[d1]);} x[i].sn=0.0; for(d1=0;d1<na;d1++){ x[i].sn=x[i].sn+x[i].ra[d1]; } a=x[i].sn/float(na); x[i].nota=a; if(x[i].nota<7.0) x[i].bursa=0.00;
18

if((x[i].nota<8.0)&&(x[i].nota>=7.0)) x[i].bursa=150; if(x[i].nota>=8.0) x[i].bursa=180; } textcolor(15);gotoxy(5,wherey()+2); cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); return(k); } //**************************************************** //inscrierea bazei in fisier void scrie_fisier(int k, char numef[20]) { FILE *f; int i; //if((f=fopen(numef,"w"))==NULL) if(z==0){ clrscr();gotoxy(15,2);textcolor(15); cprintf("Fisierul nu poate fi deschis"); goto exit;}else f=fopen(numef,"w"); for(i=0;i<k;i++) fwrite(&x[i],sizeof(x[i]),1,f); fclose(f); clrscr(); textcolor(11); gotoxy(5,wherey()+2); cprintf("Baza de date a fost inscrisa in fisierul %s",numef); exit: gotoxy(5,wherey()+1);textcolor(15); cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); } //citirea bazei din fisier int citire_fisier(char numef[20]) { FILE *f; int i; clrscr(); if((f=fopen(numef,"r"))==NULL) { clrscr();gotoxy(15,2);textcolor(15); cprintf("Fisierul nu poate fi deschis"); z=0; goto exit;} i=0; z++; while( fread(&x[i],sizeof(x[i]),1,f)==1 ) i++; fclose(f); exit: return(i);} //afisarea bazei la monitor void afisare (int k, char numef[20]) { int i; if (z==0) {clrscr(); gotoxy(5,2); textcolor(15); cprintf ("Baza de date n-a fost citita din fisier"); goto exit;} else { clrscr(); gotoxy(5,2); textcolor(15); cprintf("Baza de date citita din fisierul %s este:",numef);gotoxy(5,wherey()+2); textcolor(15); printf("");gotoxy(5, wherey()+1); printf(" Familia Nota medie Bursa ");gotoxy(5,wherey()+1); printf("");gotoxy(5 ,wherey()+1); for(i=0;i<k;i++){ if (fmod(i,2)==0) {textbackground(12); textcolor(15);} else {textbackground(BLUE); textcolor(10);} cprintf("%15s%11.2f%8.2f",x[i].fam,x[i].nota,x[i].bursa);
19

gotoxy(5,wherey()+1);} textbackground(BLACK); textcolor(15); cprintf(""); textcolor(15); } exit: gotoxy(5,wherey()+2); cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch();} //adaugarea unei inscrieri in baza void add (char numef[20]) { struct st s; float a,b,aa,sa,ded; FILE *f;int i,e1; char q; //if((f=fopen(numef,"a"))==NULL) { //clrscr();gotoxy(5,2);textcolor(15); //cprintf("Fisierul nu poate fi deschis"); goto exit;} int ex,d1; clrscr();gotoxy(5,wherey()+2);textcolor(15); cprintf("Doriti sa adaogati inca o inscriere in baza de date? y/n "); q=getch(); if ((q=='y')||(q=='Y')) { z++; gotoxy(10,wherey()+2); textcolor(15); cprintf("Indicati familia studentului "); scanf("%s",s.fam); gotoxy(10,wherey()+1); cprintf("Indicati numarul de examene ");scanf("%d",&ex); for(d1=0;d1<ex;d1++){ gotoxy(7,wherey()+1); printf(" -Culegeti rezultatul %d = ",d1+1); scanf("%f",&ded); s.ra[d1]=ded;} s.sn=1.0; for(d1=0;d1<ex;d1++){ s.sn=s.sn+s.ra[d1]; } sa=s.sn/float(ex); s.nota=sa; if(s.nota<7.0) s.bursa=0.00; if((s.nota<8.0)&&(s.nota>=7.0)) s.bursa=150; if(s.nota>=8.0) s.bursa=180; f=fopen(numef,"a"); fwrite(&s,sizeof(s),1,f); fclose(f);}else z=0; textcolor(11); gotoxy(5,wherey()+2); cprintf("Daca ati facut o inscriere o puteti vedea "); cprintf("accesind punctul 3 din meniu"); exit: gotoxy(5,wherey()+2); textcolor(15); cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); } void read_file(int k,char numef[20]) { int i; FILE *f;
20

if (z==0) {clrscr(); gotoxy(5,2); textcolor(15); cprintf ("Baza de date n-a fost citita din fisier"); goto exit;} else {clrscr(); for(i=0;i<k;i++){ if (x[i].bursa!=0.00) nrcub++; else if (x[i].bursa==0.00) nrfb++;} f=fopen(numef,"w"); printf("\n\n\tNumarul studentilor ce au bursa este %d\n",nrcub); printf(" \tNumarul studentilor ce nu au bursa este %d\n",nrfb); fprintf(f,"Numarul studentilor ce au bursa este %d",nrcub); fprintf(f," Numarul studentilor ce nu au bursa este %d",nrfb);fclose(f); printf("\n\n\n\tIn fisierul c:\\burse.txt au fost inscris numarul de studenti ce\n"); printf("\tprimesc si care nu primesc bursa"); }exit: gotoxy(5,11); cprintf("Pentru iesire in meniu culegeti <ENTER>"); getch(); } // aranjare in ordine descrescatoare dupa nota medie void aranjare (int k) { int i,j,r; float max; if (z==0)goto exit; else{ for (i=0;i<k;i++) { max=x[i].bursa; r=i; for (j=i;j<k;j++) { if (x[j].bursa>max) {max=x[j].bursa; r=j;}} aux=x[i]; x[i]=x[r]; x[r]=aux;} clrscr(); gotoxy(5,2);textcolor(15); cprintf("Baza de date a fost citita din fisierul c:\\baza.txt");gotoxy(5,4); cprintf("Inscrierile au fost aranjate in ordine descrescatoare dupa valoarea bursei"); gotoxy(5,6); cprintf("Pentru a vedea rezultatul accesati punctul 7 din meniu"); gotoxy(5,7); cprintf("Pentru iesire in meniu culegeti <ENTER>"); } getch();exit:} void main(void) { meniu: clrscr(); textcolor(15); gotoxy(15,2); cprintf("Alege din meniu:"); gotoxy(5,wherey()+2); cprintf("1: Afisarea conditiilor initiale"); gotoxy(5,wherey()+1); cprintf("2: Completarea bazei de date"); gotoxy(5,wherey()+1); cprintf(" si inscrierea ei in fisierul c:\\baza.txt"); gotoxy(5,wherey()+1); cprintf("3: Citirea bazei de date din fisierul c:\\baza.txt"); gotoxy(5,wherey()+1); cprintf(" si afisarea ei la monitor"); gotoxy(5,wherey()+1); cprintf("4: Adaugarea unei inscrieri in baza de date"); gotoxy(5,wherey()+1); cprintf("5: Inscrierea in fisierul c:\\burse.txt a numarului de studenti "); gotoxy(5,wherey()+1); cprintf(" ce au si nu au bursa"); gotoxy(5,wherey()+1);
21

cprintf("6: Aranjarea inscrierilor dupa valoarea bursei in ordine descrescatoare"); gotoxy(5,wherey()+1); cprintf("7: Afisarea bazei finale la monitor"); gotoxy(5,wherey()+1); cprintf("8: Iesirea din program"); w=getch(); switch (w) { case '1': goto m1; case '2': goto m2; case '3': goto m3; case '4': goto m4; case '5': goto m5; case '6': goto m6; case '7': goto m7; case '8': goto m8; default : goto meniu;} m1: conditii(); goto meniu; m2: n=completare(); scrie_fisier(n,baza); m3: n=citire_fisier(baza); afisare(n,baza); goto meniu; m4: add(baza); goto meniu; m5: n=citire_fisier(baza); read_file(n,burse); goto meniu; m6: n=citire_fisier(baza); aranjare(n); scrie_fisier(n,bazanoua); goto meniu; m7: n=citire_fisier(bazanoua); afisare(n,bazanoua); goto meniu; m8: clrscr(); gotoxy(15,2); textcolor(15); cprintf("Intradevar doriti sa iesiti ? Y/N"); v=getch(); if ((v=='n')||(v=='N')) goto meniu; gotoxy(15,4); textcolor(15); cprintf("Pentru iesire din program culegeti <ENTER>"); getch(); }

>i5. Descrierea algoritmului programului .

Programul elaborat de mine prelucreaz o baz de date care conine informaia despre studenii unei grupe. Numrul nscrierilor se introduce de tastatur n dependen de dorina utilizatorului . Execuia programului se ncepe cu apariia unui meniu din care putem alege ce funcie s ndeplineasc programul . Trecerea de la un punct la altul se face cu ajutorul tastelor 1 8. Apsnd tasta 1 la monitor apar condiiile problemei . Introducerea nscrierilor este fcut de funcia completare apsnd tasta 2 . La dorin putem s mai adugm una sau mai multe nscrieri cu ajutorul funciei adaugare apsnd tasta 4 , fr ca informaia introdus mai nainte s se piard . Vizualizarea informaiei introduse o face funcia afisare apsnd tasta 3 ,ns , nainte de asta are loc citirea informaiei din fiier cu ajutorul funciei citeste_fisier . Dac baza nu a fost
22

completat , atunci la monitor apare informaia c fiierul nu poate fi deschis (fiindc el nu a fost creat) . Tastnd una din tastele 4, 5 , 6, 7, vom primi acelai rezultat . Dac baza a fost competat nscrierile apar aranjate ntr-un tabel cu 3 coloane care aproximativ arat cam aa : +-----------------------------------------+ Familia Nota medie Bursa ---------------+--------------+---------- +-----------------------------------------+ Pentru ieire n meniu culegei <ENTER> Apsnd tasta 5 la monitor se vor afia numrul studenilor ce au burs i numrul studenilor ce nu au burs . Tastnd tasta 6 are loc aranjarea nscrierilor dup valoarea bursei n ordine cresctoare. Apsnd tasta 7 la monitor se afieaz tabelul care conine baza nou aranjat . Afiarea se face tot de funcia afisare . Dac dorim s prsim execuia programului , atunci apsm tasta 8 . La monitor apare o ntrebare Intradevar doriti sa iesiti ? y/n i tastnd tasta y ieim din execuia programului . Altfel tastnd orice alt tast ne ntoarcem n meniul programului . n elaborarea programului am folsit urmatoarele funcii : a) printf() funcie de ieire cu format . Ea permite afiarea la monitor a unui ir de caractere . Are urmtorii parametri printf(irul cu format , ir de date) . De exemplu : printf("x=%d",x) ; b) scanf() funcie de intrare cu format . Ea are urmtorii parametri scanf(irul cu format , irul de date) i permite introducerea de la tastatur a datelor . Exemplu : scanf("%d%d",&a,&b) ; c) gotoxy() funcie ce mut cursorul n fereastra activ de execuie . Parametrii ei sunt gotoxy(coordonata x ,coordonata y) . Exemplu gotoxy(2,10) ; d) wherex() i wherey() funcii care ntorc ca valoare coordonata curent a lui x (wherex()) i a lui y (wherey()) ; e) getch() funcie de intrare care permite citirea de la tastatur a unui caracter ; f) cprintf() echivalent cu printf() numai c afieaz textul la monitor colorat ; g) textcolor() funcie care scris nainte de cprintf() permite de afiat textul n diferite culori . De exemplu textcolor(12) ; h) textbackground() funcie ce coloreaz fonul textului n culori diferite ; i) clrscr() funcie ce cur ecranul de tot ce se afl pe el . j) fopen() funcie ce deschide un fiier aflat n memoria calulatorului dac el exist i dac fiierul nu exist , atunci funcia creaz fiierul i l deschide pentru scriere dac folosim modul de deschidere w care poziioneaz cursorul la nceputul fiierului astfel pierzndu-se toat informaia care se afla nscris n el (dac a fost nscris ceva informaie mai nainte) sau a care poziioneaz cursorul la sfritul fiierului astfel pstrndu-se informaia inscris (dac a avut
23

loc o nscriere ma nainte) . Folosind modul de deschidere r fiierul se deschide pentru citire . Funcia fopen() ntoarce un indicator la nceputul fiierului . Am folosit instruciunea de ramificare if . Funcia selecteaz varianta corect din alternativele sale . Ea are urmtoarea sintax : if(c) I1;else I2 ; unde c este expresie logic . Instruciunea funcioneaz astfel : se evaluiaz expresia c , dac rezultatul este 1, atunci se execut I1 , dar dac rezultatul este 0 , atunci se execut I2 . Pentru trecerea uoar din meniul programului n funcii i invers am folosit instruciunea de selectare switch . Ea este destinat pentru selectarea unei variante dintr-o mulime posibil de ramificri . Sintaxa : switch (E){case EC1: I1;case EC2: I2; ... case ECN: IN;default I;}. Expresia E trebuie s fie de tip ordonat (int ,char) , tipul EC trebuie s corespund cu cel al E . Principiul de funcionare al ei este : se calculeaz valoarea expresiei E , apoi aceast valoare se compar cu expresiile constante ale prefixelor case i ndeplinete instruciunea I pentru care aceste valori coincid . Dac valoarea expresiei E nu coincide nici cu o valoare din prefixele case , atunci sau se ndeplinete instruciunea ramurei default sau nu se ndeplinete nimic dac ea lipsete . Am mai folosit instruciunile ciclice for i while . Ciclu for posed urmtoarele caracteristici : numrul de repetri ale ciclului este cunoscut de la nceputul executrii lui ; conducerea ciclului este efectuat cu ajutorul unei variabile de tip ntreg numit parametrul ciclului care n acest proces ciclic primete valori diferite consecutiv de la valoarea iniial pn la valoarea final dat . Instruciunea are sintaxa : for(E1;E2;E3;){I;} E1,E2,E3 expresii , I instruciune (corpul ciclului) , E1 expresia de atribuire a valorii iniiale parametrului ciclului , E2 expresia de control (logic) , E3 expresia de corecie (schimbare) a valorii parametrului ciclului . Principiul de funcionare : la nceput se ndeplinete expresia E1 de iniializare a parametrului ciclului , apoi se verific valoarea E2 . Dac este primit valoarea 1 atunci se ndeplinete corpul ciclului I . Dup aceasta se execut E3 de corecie , apoi este din nou controlat valoarea E2 . Ciclul continu pn cnd E2 are valoarea 1 i se sfrete cnd E2 are valoarea 0 . Instruciunea for poate folosi n calitate de corp a ciclului o instruciune compus .

6. Rezultatele obinute . Lansnd programul , la monitor a aprut un meniu format din 8 puncte :

Alege din meniu: 1: Afisarea conditiilor initiale 2: Completarea bazei de date si inscrierea ei in fisierul c:\baza.txt 3: Citirea bazei de date din fisierul c:\baza.txt
24

si afisarea ei la monitor 4: Adaugarea unei inscrieri in baza de date 5: Inscrierea in fisierul c:\burse.txt a numarului de studenti ce au si nu au bursa 6: Aranjarea inscrierilor dupa valoarea bursei in ordine descrescatoare 7: Afisarea bazei finale la monitor 8: Iesirea din program Tastnd tasta 1 s-a afiat Lucrare de curs la disciplina programare Conditiile problemei: De alcatuit o baza de date cu N inscrieri care ar contine informatia despre studentii unei facultati. a)De calculat bursa pentru fiecare din ei reiesind din rezultatele unei sesiuni. b)De aranjat inscrierile dupa valoarea bursei in ordine descrescatoare. c)De scris in fisier numarul studentilor ce au bursa si numarul studentilor ce n-au bursa. +-----------------------------------------+ Familia Nota medie Bursa ---------------+---------------+---------- +------------------------------------------+ Pentru ieire n meniu culegei <ENTER>

Dac tastm una din tastele 3 , 5-7 primim informaia Baza de date n-a fost citit din fiier Tastnd tasta 2 mi s-a propus culegerea numrului de nscrieri i am cules 3 nscrieri ntroducnd mai apoi pe rnd numrul examenelor sesiunii, familia studentului i mai apoi rezultatele examenelor. Baza completat am vzut-o tastnd tasta 3 . Ea arta astfel

25

Baza de date citita din fisierul c:/baza.txt este: +--------------------------------------------+ Familia Nota medie Bursa -----------------+--------------+----------- Clopot 9.00 180.00 Telefca 7.33 150.00 Nistor 7.67 150.00 +--------------------------------------------+ Pentru ieire n meniu culegei <ENTER> Tastnd tasta 4 mi s-a propus adugarea unei noi nscrieri i am cules datele unei noi persoane . Rezultatul adugrii l-am vzut apsnd tasta 3 . El arta astfel :

Baza de date citita din fisierul c:/baza.txt este: +------------------------------------------+ Familia Nota medie Bursa ---------------+--------------+----------- Clopot 9.00 180.00 Telefca 7.33 150.00 Nistor 7.67 150.00 Sorocian 7.50 150.00 +------------------------------------------+ Pentru ieire n meniu culegei <ENTER> Alegnd punctul 5 din meniu s-a afiat numrul studenilor ce au burs i numrul studenilor ce nu au burs .

Numarul studentilor ce au bursa este 5 Numarul studentilor ce nu au bursa este 0 n fiierul c:\burse.txt au fost inscris numrul de studeni ce primesc i care nu primesc burs Pentru ieire n meniu culegei <ENTER>
26

Tastnd tasta 6 am efectuat aranjarea nscrierilor dup valoarea bursei n ordine descresctoare.

Baza de date a fost citita din fisierul c:\baza.txt Inscrierile au fost aranjate in ordine descrescatoare dupa valoarea bursei Pentru a vedea rezultatul accesati punctul 7 din meniu Pentru ieire n meniu culegei <ENTER> Accesnd punctul apte al meniului am primit. Baza de date citita din fisierul c:/bazanoua.txt este: +----------------------------------------+ Familia Nota medie Bursa ---------------+-------------+---------- Clopot 9.00 180.00 Telefca 7.33 150.00 Nistor 7.67 150.00 Sorocian 7.50 150.00 +----------------------------------------+ Pentru ieire n meniu culegei <ENTER> Tastnd tasta 8 am ieit din meniul programului i din execuia lui.

27

7. Concluzii . De la nceput studierea ei i ndeosebi a limbajului C++ era cam dificil , ns rezolvnd ct mai multe probleme am deprins sintaxa acestui limbaj i acum nu mi se pare a fi programarea un obiect dificil . Programarea este o disciplin care dezvolt gndirea logic . Cu ajutorul programului C++ se rezolv foarte simplu i ntr-un timp foarte scurt unele probleme pe care mintea omului nu le poate rezolva zile ntregi . Un argument n favoare celor spuse mai sus este acest program care ntr-un timp foarte scurt poate gsi studentul cutat dup anul , luna i ziua de natere , n intervalul propus de ani i nu este greu de fcut ca acest program s efectuieze cutarea dup numele studentului . Folosind cteva instruciuni se poate de aranjat baza n orice ordine dorim ceea ce este greu de fcut fr calculator . Deci cunoaterea unui limbaj de programare n prezent este n favoarea noastr cci ni se deschid noi perspective n alegerea domeniului n care vom activa mai departe .

28

8. Lista literaturii utilizate . 1. Negrescu L. Limbajele C i C++ pentru nceptori . - Bucureti : 1996. 2. Cojocaru O. Turbo C++ . - Chiinu: 1994. 256 p. 3. Gremalschi A. Calculatoare personale . - Chiinu: 1997. 224 p. 4. Kris Jamsa (tradus Ion Fatu). Succes cu C++
5. Ringaci V.D., Latul G.V., Socol V.V. Programare n limbajul Turbo C

(Manual n trei pri). USM,Chiinu 1993

29

30

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