Cristian Uscatu - Fisiere

59

Click here to load reader

description

Lucru cu fisiere in C

Transcript of Cristian Uscatu - Fisiere

Page 1: Cristian Uscatu - Fisiere

Încă î

n luc

ru47

un nartexttru întrplu

date• • • • •

fi fo

4.1toarșierplasrioamem

cunre anou

Fișierelrol importan

re sînt utilizat sînt utilizatdiverse aplic

re aplicații caprelucrarea

Exemplelor memorapreluarea daprelucrarea prelucrarea simularea osimularea o

Exemplfolosite și în a

4.1. Utili

.1. Fie un firea formă: torul are un sisează într-o are. (Se presmoria princip

Pentru noscută întîi a fișierului teuă parcurgere

Funcția

4

le constituie nt în problemate pentru păte ca rapoartcații. E posiare utilizeazădatelor dintrlele din acesate în fișiere:atelor de intrmasivelor mfișierelor bin

organizării reorganizării inlele care urmalte medii de

izarea fiși

șier text în coate elementingur rînd). zonă alocată

supune că mapală.)

a putea alocdimensiuneaext, cu număe, cu preluarea preluare_ve

4. Lucru

o extensie nmele prelucraăstrarea datelte destinate uibilă și o comă modalități r-o tabelă MSst capitol vor rare din fișie

memorate în fnare de date

elative a fișiendexate a fișimează au foste programare

ierelor tex

care este memtele se află pScrieți un suă dinamic în asivul are o

ca memoria da lui. O soluțărarea elemenea elementelector_1 rezo

ul cu fiș

nevolatilă a mare automată lor în vedereutilizatoruluimbinație a cediferite de pS Excel în car prezenta ur

re text, fișiere binareorganizate s

erelor binare erelor binaret scrise în m

e C++.

xt ca surs

morat un vee același rîndubprogram cmemoria indimensiune

dinamică neție este efectuntelor, urmatlor și plasarelvă problema

șiere

memoriei ina datelor. În

ea prelucrării sau surse de

elor două rolăstrare a dateadrul unui prrmătoarele a

e (vectori și msecvențial, de date,

e de date. mediul Visual

se de date

ctor cu elemd, separate p

care preia venternă, în ved

rezonabilă p

ecesară vectouarea unei pată de alocarea lor în mema enunțată m

nterne, de acen timp ce fiși în aplicații,e date de inturi: transferuelor binare (drogram C++)aspecte ale p

matrice),

l Studio 2010

e

mente reale suprin cîte un sectorul din fderea prelucrpentru a fi în

orului preluaarcurgeri supea memoriei

moria internă.mai sus.

Aplicații

eea joacă șierele bi-, fișierele trare pen-ul datelor de exem-). relucrării

0, dar pot

ub urmă-spațiu (fi-fișier și îl rării ulte-ncărcat în

at, trebuie plimenta-și apoi o

.

Page 2: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

// mas// flo{ f F v f i { } r}

aceEOde s

preEntia:

f f f

gramarea calcul

I - numelesivului preE - adresaoat* preluafloat* v,x;FILE* f; v=NULL; fopen_s(&f,if(f) { //determi *n=0; fscanf_s( while(!fe { (*n)++; fscanf_ } //alocare if(*n>0) { v=(floa //prelu rewind( *n=0; fscanf_ while(! { v[(*n fscan } } fclose(f)} return v;

Funcțide datNULL

eastă structurOF (cod ASCI

sfîrșit de liniAstfel d

cum Notepater după ultim

f=fopen("tefor(i=1;i<1 fprintf(ffclose(f);

latoarelor

extern al luat masivului re_vector_1

nume,"r+");

nare numar

f,"%f",&x);of(f))

_s(f,"%f",&x

memorie pe

t*)malloc(sare elementf);

_s(f,"%f",&xfeof(f)) )++]=x; f_s(f,"%f",

;

ia de mai suste fișier text L). Totuși, firă: se poate înII 27), care mie (perechea de fișiere, făd, Notepad+ma valoare)

st.txt","w"0;i++) ,"%5.2f ",

fisierului

alocat din1(char * nu

; //f=fopen

elemente i

;

x);

entru vecto

sizeof(floate din fisi

x);

,&x);

s este scrisă și este corecișierele text ntîmpla ca lamarchează sfCR/LF, coduără CR/LF du++, MS Visuasau create pr

");

(float)i);

i, adresa u

namic / NULume, int* n

n(nume,"r")

in fisier

or

at)*(*n));ier

ținînd cont dctă chiar dacă

utilizate în a sfîrșitul fișifîrșitul fișieruuri ASCII 13upă ultima val Studio 10, rin secvențe

unde se va d

LL in caz den)

;

de descriereaă fișierul estpractică nu ierului text sului text, și n3 și 10). aloare, pot fiWordPad (dde program

depune lung

e eroare

a teoretică a e gol (rezultrespectă înt

să nu existe cnici măcar m

fi obținute cudacă nu se apasemănătoar

48

gimea

structurii tatul va fi totdeauna caracterul

marcatorul

u editoare pasă tasta re aceste-

Page 3: Cristian Uscatu - Fisiere

Încă î

n luc

ru49

În cloarper

sfîrcon

f i a i e { } 4.1toarScrdinvul

pre 4.1estesepunede dcearea tru

cazul editorure, la salvare

rechea CR/LF Dacă fi

rșitul liniei, anstruit.

Exemplu

float *a; int i,l; a=preluare_if(!a) //actiuni //de exem printf("\else { //prelucr //pentru printf("\ for(i=0;i printf( free(a); }

.2. Fie un firea formă: frieți un subpramic în memare o dimen

Datoritmerice anterio

iau datele.

.3. Fie un fie organizat a

parate printr-ei linii din mdimensiunilo

a din fișier șiprelucrării ua fi încărcat

ului MS Wordea fișierului F după ultim

ișierul din caatunci funcți

u de utilizare

_vector_1("v

in cazul eplu, afisarn\nNu s-a p

area vectorverificarean\nVectorul<l;i++) "%5.2f ",a

șier text în cfiecare elemrogram care

moria internănsiune rezona

tă modului d din fișiere te

or, cu acelea

ișier text în castfel: pe pri-un spațiu. P

matrice, separor din prima i o plasează ulterioare. (Sîn memoria

d 2010, chiarîn format te

ma valoare.

are se preiauia de mai sus

e a funcției p

vector lini

esecului prrea unui meputut desch

rului a functiei,l preluat a

[i]);

care este mement se află ppreia vector

ă, în vederea abilă pentru a

de implemenext (inclusiv

ași observații

care este meimul rînd se

Pe fiecare dinate prin cîte linie a fișierîntr-o zonă a

Se presupuneprincipală și

r dacă nu se xt (cu opțiun

u datele nu cs nu o să inc

preluare_vec

ie.txt",&l)

reluarii esaj hide fisier

, poate fi are %d elem

morat un vepe un rînd srul din fișierprelucrării u

a fi încărcat î

ntare în C++v stdin), rezoli privind stru

emorată o maflă număru

n rîndurile uun spațiu (m

rului). Scriețialocată diname că masivul i că fișierul n

apasă tasta Enile implicite

conține măcacludă ultimu

tor_1:

;

rul sau nu

afisat pe emente: \n",

ctor cu elemseparat (nu er și îl plaseazulterioare. (Sîn memoria p

a funcțiilor lvarea este auctura fișier

matrice cu eleul de linii și următoare se

matricea este i un subprogmic din memare o dimen

nu este gol.)

Enter după ue) se adaugă

ar perechea Cul element în

sint elemen

ecran l);

mente reale suexistă rîndurză într-o zon

Se presupuneprincipală.)

care preiau ceeași ca la e

rului text din

emente realenumărul de

e află elemencompletă - c

gram care premoria internăsiune rezona

Aplicații

ultima va-ă automat

CR/LF la n vectorul

nte");

ub urmă-ri goale).

nă alocată că masi-

date nu-exemplul n care se

. Fișierul coloane,

ntele cîte corespun-eia matri-ă în vede-abilă pen-

Page 4: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

// pre// flo{ f i F x f i { } r}

priv

f i a i e

gramarea calcul

Funcția p

I - numeleeluate E - adresaoat** prelufloat **x; int i,j; FILE* f; x=NULL; fopen_s(&f,if(f) { //preluar fscanf_s( fscanf_s( //alocare x=(float* for(i=0;i x[i]=(f //preluar for(i=0;i for(j=0 fscan fclose(f)} return x;

Deoarcle cusfîrșitu

vind sfîrșitul

Exempl

float **a; int l,c,i,ja=preluare_if(!a) //actiuni printf("\else //prelucr { printf( for(i=0

latoarelor

preluare_ma

fisierului

matricei aare_matrice

nume,"r+");

e dimensiunf,"%d",m); f,"%d",n); memorie pe*)malloc(si<*m;i++) loat*)malloe elemente <*m;i++) ;j<*n;j++) f_s(f,"%f",;

rece fișierul cu număr cunului de fișierl de fișier pre

lu de utilizar

; _matrice_1("

in caz de n\nNu a put

area matric"\n\nMatric;i<l;i++)

atrice_1 rezo

i, adresele

alocate dine_1(char* n

; //f=fopen

ni matrice

entru matriizeof(float

oc(sizeof(fmatrice

,&x[i][j]);

conține dimenoscut de par. Ca urmareezentate la pu

re a funcției p

"matrice cu

esec, de etut fi desc

cei preluatce cu %d li

olvă problem

e unde se d

namic nume, int*

n(nume,"r")

ice t*)*(*m));

float)*(*n)

;

ensiunile exaași, nefiind e, această fununctul 4.1.1.

preluare_ma

u dimensiun

exemplu afichis fisier

te, de exeminii si %d

ma enunțată m

epun dimen

m, int* n)

;

);

acte ale matrnevoie de d

ncție nu este

atrice_1:

ni.txt",&l,&

isare mesajrul");

mplu afisarecoloane:\n

mai sus.

siunile mat

ricei, se pot fdetectarea ex

afectată de

&c);

e pe ecran",l,c);

50

tricei

folosi bu-xplicită a aspectele

Page 5: Cristian Uscatu - Fisiere

Încă î

n luc

ru51

4.1esteparde gramomen

minenue sunumoric realvande m ră: #de// pre// flo{ f i F c x f i {

{ for(j print print } for(i=0 free( free(a) }

.4. Fie un fie organizat arate prin cîte elemente). Dm care preiaria internă însiune rezon

Pentru anate dimensiunțului, număuficientă nummăr de elemecare rînd pen

Deoareliza prin citi

ntajul că trebmai jos se va

Funcția

efine MAX 1I - numeleeluate E - adresaoat** prelufloat **x; int i,j; FILE* f; char* rind;x=NULL; fopen_s(&f,if(f) { //numarar rind=(cha fgets(rin *m=0;

=0;j<c;j++)f("%6.2f",af("\n");

;i<l;i++) a[i]); ;

ișier text în castfel: pe fiec

un spațiu (mDimensiunilea matricea diîn vederea pnabilă pentru

a putea alocaiunile acesteiărul de linii amărarea rînduente – confo

ntru a afla nuce rîndurile siri repetate (buie alocat spa presupune ca preluare_m

000 fisierului

matricei aare_matrice

nume,"r+");

e rinduri r*)malloc(Md,MAX,f);

) a[i][j]);

care este mecare rînd se amatricea estee matricei nuin fișier și o relucrării ulta fi încărcat

a memoria dia – număruale matricei eurilor din fiș

orm enunțuluumărul de colsînt separate

(de exemplu pațiu de memcă sînt sufici

matrice_2 rez

i, adresele

alocate dine_2(char* n

; //f=fopen

MAX);

emorată o maflă elemente completă –u sînt memoplasează întterioare. (Set în memoria

inamică necel de linii și neste egal cu nșierul text. Dui – este sufiloane.

e prin perechecu funcția f

morie suficieiente 1000 cazolvă cerința

e unde se d

namic nume, int*

n(nume,"r")

matrice cu eletele cîte unei– toate rînduorate în fișier-o zonă alo

e presupune a principală.)

esară matricnumărul de cnumărul de r

Deoarece toaticientă numă

ea CR/LF, nufgets). Aceasnt pentru texaractere. problemei,

epun dimen

m, int* n)

;

emente realei linii din ma

urile au acelaer. Scrieți uncată dinamiccă masivul

ei, trebuie încoloane. În crînduri din fite rîndurile aărarea valori

umărarea lorstă variantă axtul citit. În e

cu restricția

siunile mat

Aplicații

. Fișierul atrice, se-ași număr n subpro-c din me-are o di-

ntîi deter-condițiile ișier, deci au același lor de pe

r se poate are deza-exemplul

anterioa-

tricei

Page 6: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} r}

acecon

4.1caranum(untă. ganre s

N

gramarea calcul

while(!fe { (*m)++; fgets(r } //numarar //=numaru j=strlen( *n=1; for(i=0;i if(rind (*n)+ free(rind //alocare x=(float* for(i=0;i x[i]=(f //preluar rewind(f) for(i=0;i for(j=0 fscan fclose(f)} return x;

Funcția Deoarede liniipreluar

esta nu are mnsiderare, la f

.5. Fie un fișacterul virgume și prenumnele dintre elScrieți un pr

nizat secvențstudent. Fiec

Nume și pren

char[31]

latoarelor

of(f)) ind,MAX,f);

e elemente l de spatiirind);

<j;i++) [i]==' ') +; ); spatiu pen*)malloc(si<*m;i++) loat*)malloe elemente ; <*m;i++) ;j<*n;j++) f_s(f,"%f",;

a se utilizează

ece determini ale matricere_matrice_2

măcar CR/LF fel ca în cazu

șier text în fulă), exportame student (me pot fi 0, curogram care ial în vedereare înregistra

ume An

cha

;

pe un rindi plus 1

ntru matricizeof(float

oc(sizeof(fmatrice

,&x[i][j]);

ă la fel ca ce

narea număruei) se bazeaz2 depinde ddupă ultimu

ul exemplulu

format .CSV at din MS Emaxim 30 cu semnificațipreia aceste

ea prelucrărilarea va avea

n Grupa

ar int

d - ultimul

ce t*)*(*m));

float)*(*n)

;

ea din exemp

ului de linii dză pe detectae structura f

ul element, atui 4.1.1.

(valorile de Excel. Fiecar

aractere), ania că în pozițe date și le mlor ulterioareurmătoarea

nota 1char

l citit

);

plul 4.1.3.

din fișier (și area sfîrșitulufizică a fișietunci ultima

pe fiecare rre rînd conținul de studii,ția respectivă

memorează îne – cîte o înrestructură:

No1

…r

implicit a nui de fișier, șerului prelucr

linie nu va f

rînd sînt sepaine următoar, grupa și 20ă nu există (ntr-un fișier egistrare pen

ote

… no

52

numărului și funcția rat. Dacă fi luată în

arate prin rele date: 0 de note (încă) no-binar or-

ntru fieca-

ota 20 char

Page 7: Cristian Uscatu - Fisiere

Încă î

n luc

ru53

musus #in#in#in#in #de#de#de voi{ F t S c c i f i e {

Deoarel, nu vor apa. Programul

nclude <stdnclude <connclude <strnclude <std

efine MAX 2efine NUME1efine NUME2

id main () FILE *f, *gtypedef str STUDENT x; char rind[2char mc[23]int n,i,j,k

fopen_s(&f,if(!f) printf("\else { fopen_s(& if(!g) printf( else { //prelu fgets(r //cit t while(! { n=str //sep //in i=j=0 for(k { if( { m i j }

ce MS Exceare problemecare rezolvă

io.h> io.h> ing.h> lib.h>

00 "Studenti "Studenti

; uct{ char n char a int gr char n } STUDEN

00]; [31]; ;

NUME1,"r");

n\nFisierul

&g,NUME2,"wb

"\n\nFisier

area primulind,MAX,f);imp s-a prefeof(f)) len(rind);

arare cuvinvectorul de; =0;k<n;k++)rind[k]==',c[i][j]='\0++; =0;

l adaugă autele legate deă cerința este

.csv"

.dat"

nume[31]; an; rupa; note[20]; NT;

;

l %s nu poa

b");

rul %s nu p

lui rind di; eluat un ri

nte din line cuvinte m

) ,') 0'; //s-a

//trec //nici

tomat CR/LF detectarea surmătorul:

ate fi desc

poate fi de

in fisierul

ind

nia curentamc, 1 pe li

terminat cu la cuvintu o litera i

F după fiecasfîrșitului de

his",NUME1

eschis",NUM

l text

, inie

uvintul curul urmatorin cuvintul

are rînd, inclufișier prezen

);

E2);

rent

l urmator,

Aplicații

usiv ulti-ntate mai

inca

Page 8: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} _}

text f i { }

gramarea calcul

els { m j } }

//din //cur strcp x.an= x.gru for(i x.n

//scr fwrit

//pre fgets } fclose( } fclose(f)} _getch();

Pentru vt nou, folosin

fopen_s(&f,if(f) { fopen_s(&

frea while(!fe { fprintf

fo fprin

fr} fprifclofclo

}

Teme

latoarelor

e c[i][j]=rin++;

vectorul dent, cu cony_s(x.nume,atoi(mc[1])pa=atoi(mc=0;i<20;i++ote[i]=atoi

iere articoe(&x,sizeof

luarea urma(rind,MAX,f

g);

;

verificare, cond următoare

NUME2,"r");

&g,"Verificaad(&x,sizeoof(f)) (g,"\n\n%30or(i=0;i<20tf(g,"%2d "read(&x,siz

intf(g,"\n"ose(g); ose(f);

e

nd[k];

de cuvinte nversie und,mc[0]); ); [2]); +) i(mc[i+3]);

ol in fisief(STUDENT),

atorului rif);

onținutul fișiea secvență d

;

are.txt","wof(STUDENT)

0s %2d %4d 0;i++) ",x.note[i]zeof(STUDEN

);

//litera c//inca o l

se preiau de e nevoie

;

erul binar,1,g);

ind din fis

ierului text ade program:

w"); ,1,f);

",x.nume,x

]); T),1,f);

crt se adaulitera in c

datele pente

ierul text

ar putea fi viz

x.an,x.grupa

uga la cuvlcuvintul cu

tru student

zualizat, într

a);

54

crt rent

tul

r-un fișier

Page 9: Cristian Uscatu - Fisiere

Încă î

n luc

ru55

floaprevor 4.2pe c

career b #in#in

1. Pentru

fișierele2. Pentru

suplimetorului.

3. Reluați conținese aban

4. Pentru xim 100restricțidepindă

5. Pentru structur

6. Pentru parcurgtricei.

7. Reluați rînduril

8. Fie un text noudin fișierespectimea celconside

4.2. Mas Fie un

at). Fiecare ea mare pentr

r avea această

.1. Scrieți uncare apare el

Deoarecee apare acestbinar.

nclude <stdnclude <con

exemplul 4.e care nu au exemplul 4.1entară a fișie exemplul 4

e toate elemendonează iar exemplul 4.00 caractere ie, rezultatelă de această rexemplul 4.

ra fizică a fișexemplul 4.

gere suplime

exemplul 4le conțin acefișier text înu în care sînerul inițial, niv (primul rîlui mai scurterat șirul cup

sive memo

fișier binar îelement conru a fi încărcă structură.

n program cal (pozițiile re

e numărul deta vor fi rețin

io.h> io.h>

1.1. scrieți oCR/LF după1.1. găsiți o aerului pentru

4.1.3. incluzîentele, conforpointerul obț1.4. rezolvarpe un rînd). e vor fi eronrestricție. .1.4 găsiți o șierului prelu.1.4. găsiți ontară a fișie

4.1.4. incluzlași număr dn format .CSnt trecute urmnumărul maxînd are numt și a celui m

prins între do

orate în fi

în care este stituie un arcat în memo

are determinăelative în fiși

e apariții alenute ca vecto

o variantă cară ultima valoaltă rezolvaredeterminare

înd o verificrm dimensiuținut trebuie rea prezentatDacă fișieru

nate. Găsiți o

metodă de ucrat. o metodă deerului pentru

zînd o verifide elemente, pSV. Scrieți umătoarele infxim de cuvinărul 1), lung

mai lung cuvîi separatori c

ișiere bina

memorat unrticol al fișieorie. Fișierele

ă elementul er).

e maximului or cu elemen

re să funcțioare. e, care să nu

ea numărului

care a matricunilor din pri

să aibă valotă este supusul text nu se o variantă de

rezolvare ca

e rezolvare cdeterminare

care a matrprelucrarea s

un program cformații: numnte pe un rîngimea celui mînt (în caractconsecutivi d

are

n vector cu eerului. Vectoe folosite în

maxim din f

poate fi foante de tip int

oneze corect

execute o pai de elemente

cei – dacă fiimul rînd, pr

oarea NULL.să unei restriîncadrează î

e rezolvare c

are să nu de

care să nu nea dimensiun

icei – dacă se abandoneacare creează mărul total dd și numărulmai lung rîntere) – un cudin același rîn

elemente realorul are o dim

exemplele u

fișier și toate

arte mare, pomemorat înt

Aplicații

și pentru

arcurgere e ale vec-

ișierul nu relucrarea

icții (ma-în această are să nu

epindă de

necesite o nilor ma-

nu toate ază. un fișier

de rînduri l rîndului

nd, lungi-uvînt este nd.

le (de tip mensiune următoare

e pozițiile

ozițiile pe tr-un fiși-

Page 10: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

#de#de voi{ F f i f i e { (bi } _}

4.2

//s

gramarea calcul

efine NUME efine NUME2

id main() FILE *f, *gfloat x, maint poz;

fopen_s(&f,if(!f) printf("\else { fopen_s(& fread(&x, max=x; while(!fe { if(max< { max=x fclos fopen poz=f fwrit } else if(ma { poz fwr } fread(& } fclose(g) fclose(f) printf("\inar, int)\} _getch();

TemăScriețmaxim

.2. Scrieți un

În subprosortare vec

latoarelor

"Vector.dat "Pozitii.d

; x;

NUME,"rb");

n\nFisierul

&g,NUME2,"wbsizeof(floa

of(f)) x) ; e(g); _s(&g,NUME2tell(f)/size(&poz,size

x==x) =ftell(f)/site(&poz,si

&x,sizeof(fl

; ; n\nMaximul n",max,NUME

ă ți un programmului.

n subprogram

ogramul urmtor float m

t" dat"

;

l %s nu poa

b"); at),1,f);

2,"wb"); zeof(float)eof(int),1,

sizeof(floaizeof(int),

loat),1,f);

este %5.2fE2);

m pentru viz

m care sortea

mător sortareamemorat in

ate fi desc

)-1; ,g);

at)-1; ,1,g);

;

f iar pozit

zualizarea fi

ză crescător

a este realizafisier bin

his",NUME)

tiile se af

șierului cu p

fișierul.

ată prin metonar

;

la in fisie

pozițiile de a

oda bulelor.

56

erul %s

apariție a

Page 11: Cristian Uscatu - Fisiere

Încă î

n luc

ru57

// // int{ F i f i e f i { } r} 4.2fiși

#in#in #de#de#de voi

I - nume fE - cod sut Sortare(cFILE *f; int n,i,gatfloat x,y; int er;

er=0; fopen_s(&f,if(f) { er=1; fseek(f,0 n=ftell(f if(n>1) { gata=0; while(! { gata= for(i { fse fre fre if( { f f f g } } } } fclose(f)} return er;

.3. Scrieți unere sînt deja

nclude <stdnclude <con

efine NUME efine NUME2efine NUME3

id main()

isier cces: 1- suhar* nume)

a;

nume,"rb+")

,SEEK_END);)/sizeof(fl

gata) 1; =0;i<n-1;i+ek(f,i*sizead(&x,sizeoad(&y,sizeox>y) seek(f,i*siwrite(&y,siwrite(&x,siata=0;

;

n program casortate cresc

io.h> io.h>

"Vector.dat "Vector2.d "Vector_r

ucces, 0 -

);

; loat);

++) eof(float),of(float),1of(float),1

izeof(floatizeof(floatizeof(float

are interclasecător.

t" dat" .dat"

eroare la

,SEEK_SET);1,f); 1,f);

t),SEEK_SETt),1,f); t),1,f);

ează două fi

deschidere

T);

șiere care co

fisier

onțin vectori

Aplicații

. Ambele

Page 12: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

{ //4 F f f i e { } _} 4.2terv

rezofi cnou

gramarea calcul

4.2.3 FILE *f, *gfloat x,y; fopen_s(&f,if(!f) printf_s(else { fopen_s(& if(!g) printf( else { fopen_s fread(& fread(& while(( if(x< { fwr fre } else { fwr fre } while(! { fwrit fread } while(! { fwrit fread } fclose( fclose( fclose( } } _getch();

.4. Scrieți unval dat [a,b].

Deoareceolvarea nece

copiate într-uului fișier cre

latoarelor

,*h;

NUME,"rb");

"\n\nFisier

&g,NUME2,"rb

"\n\nFisier

(&h,NUME3,"&x,sizeof(fl&y,sizeof(fl!feof(f)) &y) ite(&x,sizead(&x,sizeo

ite(&y,sizead(&y,sizeo

feof(f)) e(&x,sizeof(&x,sizeof

feof(g)) e(&y,sizeof(&y,sizeof

h); g); f);

n subprogram

e nu este defesită un artifiun fișier noueat. Este posi

;

rul %s nu p

b");

rul %s nu p

"wb"); loat),1,f);loat),1,g);&& (!feof(g

eof(float),of(float),1

eof(float),of(float),1

f(float),1,(float),1,f

f(float),1,(float),1,g

m care elimin

finită operațiiciu: toate va, apoi fișieruibil ca noul f

poate fi de

poate fi de

; ; g)))

,1,h); 1,f);

,1,h); 1,g);

,h); f);

,h); g);

nă dintr-un f

a de ștergerealorile care seul inițial se șfișier să nu co

eschis\n",NU

eschis\n",NU

fișier valoril

e din fișiere oe află în afarșterge iar numonțină nici u

UME);

UME2);

e cuprinse în

organizate sera intervalulumele său est

un element.

58

ntr-un in-

ecvențial, ui dat vor te atribuit

Page 13: Cristian Uscatu - Fisiere

Încă î

n luc

ru59

//e// // int{ i F f e f i { } r} 4.2floaale matcare

int{ i F f e f i {

eliminare vI - nume fE - cod det Elimina(cint er; FILE *f,*g;float x;

er=0; fopen_s(&f,if(f) { fopen_s(& fread(&x, while(!fe { if((x<a fwrit fread(& } fclose(g) fclose(f) remove(nu rename("t er=1; } return er;

.5. Fie un fiat). La începmatricei, su

tricei, în orde au element

t Indici(chint er,esteFILE *f, *gfloat x,y;

er=0; fopen_s(&f,if(f) { er=1; fopen_s(& fread(&m, fread(&n, for(i=0;i { este=1;

alori din isier, cape succes: 1 har* nume,

nume,"rb");

&g,"temp.datsizeof(floaof(f)) )||(b<x)) e(&x,sizeof

&x,sizeof(fl

; ; me); emp.dat",nu

ișier binar înputul fișieruluub formă de ndine lexicogratele în ordine

ar* nume, c,m,n,i,j; ;

nume,"rb");

&g,nume2,"wbsizeof(int)sizeof(int)<m;i++)

[a,b] ete interva- succes, float a, f

;

t","wb"); at),1,f);

f(float),1,loat),1,f);

ume);

n care este mui sînt memnumăr întregafică. Scrieție strict crescă

char* nume2

;

b"); ),1,f); ),1,f);

al 0 - nu s-a

float b)

,g); ;

memorată o mmorate numărg (de tip int)i un subprogrătoare.

2)

putut des

matrice cu erul de linii și; în continuaram care det

chide fisie

elemente reali numărul deare se află elermină indic

Aplicații

erul

le (de tip e coloane lementele cii liniilor

Page 14: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} r}

floanumgra 4.2re a

// // triint{ i F f i e f i {

gramarea calcul

fseek(f fread(& for(j=1 { //fse fread if(x> est else x=y } if(este fwrit } fclose(g) fclose(f)} return er;

Fie un fat). La începmăr întreg (dfică. Fișierel

.6. Scrieți unau elementele

I - nume fE - cod suicea t Indici2(cint er,esteFILE *f,*g;float x,y; int m,n,i,j

er=0; fopen_s(&f,if(f) { er=1; fopen_s(& fread(&m, fseek(f,0 n=(ftell( for(j=0;j { este=1; fseek(f

latoarelor

,2*sizeof(i&x,sizeof(fl;(j<n)&&estek(f,2*size(&y,sizeof=y) e=0;

;

) e(&i,sizeof

; ;

fișier binar îutul fișierulu

de tip int); înle folosite în

n subprograme în ordine c

isier, numecces: 1 - s

har* nume, ;

;

nume,"rb");

&g,nume2,"wbsizeof(int),SEEK_END);f)-sizeof(i<n;j++) ,sizeof(int

int)+i*n*siloat),1,f);te;j++) eof(int)+(i(float),1,f

f(int),1,g)

în care este mui este memon continuare

exemplele u

m care determrescătoare.

e fisier resucces, 0 -

char* nume

;

b"); ),1,f); ; int))/(size

t)+j*sizeof

izeof(float;

i*n+j)*sizef);

);

memorată o orat numărulse află elem

următoare vo

mină coloane

ezultat - nu s-a pu

e2)

eof(float)*

f(float),SE

t),SEEK_SET

eof(float),S

matrice cu el de linii al m

mentele matrior avea aceas

ele din matric

utut deschid

m);

EK_SET);

);

SEEK_SET);

elemente reamatricei, sub icei, în ordintă structură.

cea aflată în

de fisierul

60

le (de tip formă de

ne lexico-

fișier ca-

l cu ma-

Page 15: Cristian Uscatu - Fisiere

Încă î

n luc

ru61

} r} 4.2cipamat

// // matint{ i F f i e f i {

fread(& for(i=1 { fseek fread if(x> est else x=y } if(este fwrit } fclose(f) fclose(g)} return er;

.7. Scrieți unală și suma etricea e pătra

I - nume fE - cod ertricea nu et SumeDiagoint er; FILE *f; float x; int m,n,i;

er=1; fopen_s(&f,if(f) { fread(&m, fseek(f,0 n=(ftell( if(m!=n) er=2; else { er=0; *sp=0; *ss=0; for(i=0 { fseek fread *sp+=

&x,sizeof(fl;(i<m)&&est(f,sizeof(i(&y,sizeof=y) e=0;

;

) e(&j,sizeof

; ;

n subprogramelementelor ată.

isier, adreoare: 0 - s patrata nale(char *

nume,"rb");

sizeof(int),SEEK_END);f)-sizeof(i

;i<m;i++) (f,sizeof(i(&x,sizeofx;

loat),1,f);te;i++) int)+(i*n+j(float),1,f

f(int),1,g)

m care determde pe diagon

esele unde succes, 1 -

* nume, flo

;

),1,f); ; int))/(size

int)+(i*m+i(float),1,f

;

j)*sizeof(ff);

);

mină suma enala secunda

se depun c- nu s-a pu

oat *sp, fl

eof(float)*

i)*sizeof(ff);

float),SEEK_

elementelor dară a matrice

ele 2 sumeutut deschid

loat* ss)

m);

float),SEEK_

_SET);

de pe diagoni aflate în fiș

de fisierul

_SET);

Aplicații

nala prin-șier, dacă

l, 2 -

Page 16: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} r} 4.2șier

// // // // int{ i F f i f i e {

gramarea calcul

fseek fread *ss+= } } fclose(f)} return er;

.8. Scrieți unre binare.

I - numeleE - cod er t Produs(chint er; FILE *f,*g,float x,y,zint m,n,p,q

fopen_s(&f,if(!f) er=1; else { fopen_s(& if(!g) er=2; else { fread(& fseek(f n=(ftel fread(& if(n!=p er=3; else { er=0; fseek q=(ft fopen fwrit for(i for { z f

latoarelor

(f,sizeof(i(&x,sizeofx;

;

n subprogram

celor douaoare: 0 - s 2 - n 3 - dar* nume1,

*h; ; ,i,j,k;

nume1,"rb")

&g,nume2,"rb

&m,sizeof(in,0,SEEK_ENDl(f)-sizeof

&p,sizeof(in)

(g,0,SEEK_Eell(g)-size_s(&h,nume3e(&m,sizeof=0;i<m;i++)(j=0;j<q;j+=0; seek(f,size

int)+(i*m+n(float),1,f

m care determ

a fisiere, succes, 1 -nu s-a putudimensiuni char* nume

);

b");

nt),1,f); D); f(int))/(m*nt),1,g);

END); eof(int))/(3,"wb"); f(int),1,h)) ++)

eof(int)+i*

n-i-1)*sizef);

mină produsu

numele fis- nu s-a puut deschidenepotrivit

e2, char* n

*sizeof(flo

(p*sizeof(f

);

*m*sizeof(f

eof(float),S

ul a două ma

ierului reutut deschide al doilea te pentru inume3)

oat));

float));

float),SEEK_

SEEK_SET);

atrice memor

zulat de primul ffisier

nmultire

_SET);

62

rate în fi-

fisier

Page 17: Cristian Uscatu - Fisiere

Încă î

n luc

ru63

} r}

baz

4.3cole

f { } f } fclos } fclose( } fclose(f)} return er;

Teme1

tru exunui ast

2. Scrieți plul 4.2fișier (î

3. Scrieți plul 4.2fișier (î

4. Scrieți într-un un fișie

5. Scrieți binar (ccaz afir

6. Scrieți tima corile des

4.3. Fișie Exerciți

ză asupra fiși

.1. Fie un fişele au următ

or(k=0;k<n; fread(&x,s fseek(g,si fread(&y,s z+=x*y; write(&z,si

e(h);

g);

;

e . Scrieți unxemplul 4.2tfel de fișier un program

2.5. și un proîntr-un fișier un program

2.5. și un proîntr-un fișier un subprogrfișier binar (

er binar (cu stun subprogracu una din strmativ, se va un program

oloană a uneicrise mai sus

ere binare

iile următoarierelor binare

şier organizatoarea structu

;k++) sizeof(floaizeof(int)+sizeof(floa

izeof(float

n program ca.1. și un pr(într-un fișiecare creează

ogram care ptext). care creează

ogram care ptext). ram care ca(cu structura tructura descam care detetructurile decalcula și decare adaugă

i matrice mems), dacă dime

e de date,

re vor exempe de date.

at secvenţialură:

at),1,f); +(k*p+j)*siat),1,g);

t),1,h);

are creează urogram care er text). ă un fișier cupermite vizua

ă un fișier cupermite vizua

alculează prodescrisă ma

crisă la exemermină dacă scrise mai sueterminantulă un vector mmorate într-uensiunea este

, organiza

plifica realiz

, cu date des

izeof(float

un fișier cu stpermite viz

u structura dalizare conțin

u structura dalizare conțin

odusul dintreai sus) și o mmplul 4.2.6.).

o matrice mus) este supe acestei matr

memorat într-un fișier binae potrivită.

ate secven

zarea operați

spre studenţi

),SEEK_SET)

tructura desczualizare con

descrisă pentnutului unui

descrisă pentnutului unui

e un vector matrice memo

emorată întrerior triunghrice. -un fișier binar (cu una din

nțial

unilor de ge

ii unei facult

Aplicații

);

crisă pen-nținutului

tru exem-astfel de

tru exem-astfel de

memorat orată într-

-un fișier iulară. În

nar ca ul-n structu-

stiune de

tăţi. Arti-

Page 18: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

N

#in#in typ voi{ F S c i p g f i e {

gramarea calcul

Nume şi prenu

char [30]

Scrieți u

nclude <stdnclude <con

pedef struc

id main() FILE *f; STUDENT x; char nume_fint i;

printf("\nNgets(nume_ffopen_s(&f,

if(!f) printf("\else { fseek(f,0 printf("\ fflush(st gets(x.nu while(!fe { printf( scanf(" printf( scanf(" printf( scanf(" for(i=0 { print scanf } fwrite( printf( fflush(

latoarelor

ume An de

ch

un program C

io.h> io.h>

t { char nu char an int gru char nr char no } STUDENT

[20];

ume fisier); nume_f,"rb+

nFisierul %

,SEEK_END);nNume si prdin); me); of(stdin)) "An %d",&x.an);"Grupa %d",&x.grup"Numar disc%d",&x.nrd);i<x.nrd;i+f("\tNota %("%d",&x.no

&x,sizeof(S"\nNume si stdin);

e studiu G

har

C pentru adă

ume[30]; n; upa; rd; ote[15]; T;

: ");

+");

%s nu poate

; renume (sau

: "); : ")

pa); cipline: ")); ++) %2d: ",i); ote[i]);

STUDENT),1,prenume (s

Grupa Nr. d

int

ăugarea de ar

e fi deschi

u CTRL-Z):

);

);

);

,f); sau CTRL-Z)

discipline

char ch

rticole în ace

is");

");

: ");

Note obţin1 2 …har char

est fișier.

64

nute… 15

char

Page 19: Cristian Uscatu - Fisiere

Încă î

n luc

ru65

} p p _} 4.3rea

#in#in typ voi{ F S c i S f i e {

gets(x. } fclose(f)} printf("\n\printf("\nA_getch();

.2. Fie fișierdatelor din f

nclude <stdnclude <con

pedef struc

id main() FILE *f; STUDENT x; char nume_fint i,n,j,gSTUDENT y;

fopen_s(&f,if(!f) printf("\else { fseek(f,0 n=ftell(f gata=0; while(!ga { gata=1; for(i=0 { fseek fread fread if( ( { gat fse fwr fwr

nume);

;

nAdaugarea Apasa o tast

rul prezentat fişier după an

io.h> io.h>

t { char nu char an int char nr char no } STUDENT

[20]; ata;

nume_f,"rb+

nFisierul %

,SEEK_END);)/sizeof(ST

ta) ;i<n-1;i++)(f,i*sizeof(&x,sizeof(&y,sizeofx.an>y.an) a=0; ek(f,i*sizeite(&y,sizeite(&x,size

s-a terminta");

în exercițiulnul de studiu

ume[30]; n; grupa; rd; ote[15]; T;

+");

%s nu poate

; TUDENT);

) f(STUDENT),(STUDENT),1(STUDENT),1|| ((x.an=

eof(STUDENTeof(STUDENTeof(STUDENT

nat");

l anterior. Scu şi grupă, pr

e fi deschi

,SEEK_SET);1,f); 1,f); ==y.an)&&(x

T),SEEK_SETT),1,f); T),1,f);

crieţi un prorin metoda bu

is");

x.grupa>y.g

T);

ogram C pentulelor.

rupa)) )

Aplicații

tru sorta-

Page 20: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

num } p _}

4.3anucu mner

#in#in typ voi{ F S c i c i f f i e {

gramarea calcul

} } } fclose(f) printf("\me_f); } printf("\nA_getch();

.3. Fie fișier

ul de studiu şmediile stud

rală.

nclude <stdnclude <con

pedef struc

id main() FILE *f,*g;STUDENT x; char nume_fint i; char can; int cgr,na,float mf,ma

fopen_s(&f,if(!f) printf("\else { //operati fopen_s(& fprintf(g mf=0; nf=0; fread(&x, while(!fe { //opera

latoarelor

; nFisierul %

Apasa o tast

rul prezentat şi grupă, scri

denţilor, med

io.h> io.h>

t { char nu char an int gru char nr char no } STUDENT

[20];

nf,ng; ,mg,s;

nume_f,"rb+

nFisierul %

i initiale &g,"Lista me,"Lista med

sizeof(STUDof(f)) tii initial

%s a fost s

ta");

în exercițiul ieţi un progria fiecărei gr

ume[30]; n; upa; rd; ote[15]; T;

+");

%s nu poate

la nivel dedii.txt","diilor stud

DENT),1,f);

le la nivel

sortat cres

4.3.1. Consiram C care grupe, media

e fi deschi

de fisier "w"); dentilor, g

;

l de an

cator dupa

iderînd că fişgenerează întfiecărui an d

is");

grupelor si

an si grup

şierul este sotr-un fişier tede studiu şi m

anilor\n\n

66

pa",

ortat după ext o listă media ge-

n");

Page 21: Cristian Uscatu - Fisiere

Încă î

n luc

ru67 Aplicații

can=x.an; ma=0; na=0; fprintf(g,"\n\nAnul: %2d",can); while((can==x.an)&&(!feof(f))) { //operatii initiale la nivel de grupa cgr=x.grupa; mg=0; ng=0; fprintf(g,"\n\n\tGrupa: %4d",cgr); while((can==x.an)&&(cgr==x.grupa)&&(!feof(f))) { //prelucrare articol s=0; for(i=0;i<x.nrd;i++) s+=x.note[i]; s=s/x.nrd; mg+=s; ng++; fprintf(g,"\n\t\t%-30s %5.2f",x.nume,s); fread(&x,sizeof(STUDENT),1,f); } //operatii finale la nivel de grupa mg/=ng; fprintf(g,"\n\tMedia grupei %4d este %5.2f",cgr,mg); ma+=mg; na++; } //operatii finale la nivel de an ma/=na; fprintf(g,"\nMedia anului %2d este %5.2f",can,ma); mf+=ma; nf++; } //operatii finale la nivel de fisier mf/=nf; fprintf(g,"\nMedia generala este %5.2f",mf); fclose(f); fclose(g); printf("\nLista se afla in fisierul \"Lista medii.txt\""); } printf("\nApasa o tasta"); _getch(); }

4.3.4. Fie 2 fişiere organizate secvenţial, cu date despre impozitele datorate statului pe raza a 2 administraţii financiare. Articolele au următoarea structură:

CNP

contribuabil Nume şi prenume

Adresa Impozit anual pe clădiri şi terenuri, calculat

Impozit anual pe clădiri şi terenuri, plătit

char [14] char [30] char [50] float float

Page 22: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

scri

#in#in typ voi{ F C c p g f i e {

gramarea calcul

Consideieţi un progra

nclude <stdnclude <con

pedef struc

id main() FILE *f,*g,CONTRIBUABIchar nume_f

printf("\nPgets(nume_ffopen_s(&f,if(!f) printf("\else { printf("\ fflush(st gets(nume fopen_s(& if(!g) printf( else { printf( fflush( gets(nu fopen_s fread(& fread(&

while(( if(x. { fwr fre } else { fwr fre }

latoarelor

erînd fişieream C pentru

io.h> io.h>

t { char cn char nu char ad float i } CONTRIB

*h; L x,y; [20];

rimul fisie); nume_f,"rb"

nFisierul %

nAl doilea din); _f);

&g,nume_f,"r

"\nFisierul

"\nFisier rstdin); me_f); (&h,nume_f,

&x,sizeof(CO&y,sizeof(CO

!feof(f)) &ic<y.ic) ite(&x,sizead(&x,sizeo

ite(&y,sizead(&y,sizeo

ele sortate crinterclasare

np[14]; ume[30]; dresa[50]; ic,ip; BUABIL;

er: ");

");

%s nu poate

fisier: ")

rb");

l %s nu poa

rezultat: "

,"wb"); ONTRIBUABILONTRIBUABIL

&& (!feof(g

eof(CONTRIBof(CONTRIBU

eof(CONTRIBof(CONTRIBU

rescător dupa celor 2 fişi

e fi deschi

);

ate fi desc

",nume_f);

L),1,f); L),1,g);

g)))

BUABIL),1,hUABIL),1,f)

BUABIL),1,hUABIL),1,f)

pă valoarea iere.

is",nume_f)

his",nume_f

h); ;

h); ;

impozitului

;

f);

68

calculat,

Page 23: Cristian Uscatu - Fisiere

Încă î

n luc

ru69

} p _}

4.3ză înea

#in#in typ voi{ F C f c i p g f i e {

while(! { fwrit fread } while(! { fwrit fread } fclose( fclose( } fclose(f)} printf("\nG_getch();

.5. Fie fișierîntr-un fişierachitată către

nclude <stdnclude <con

pedef struc

id main() FILE* f,*g,CONTRIBUABIfloat max; char nume_fint poz;

printf("\nNgets(nume_ffopen_s(&f,if(!f) printf("\else { fopen_s(& fread(&x, max=0; while(!fe

feof(f)) e(&x,sizeof(&x,sizeof

feof(g)) e(&y,sizeof(&y,sizeof

h); g);

;

ata, apasa

rul prezentat r text o listă e stat.

io.h> io.h>

t { char cn char nu char ad float i } CONTRIB

*h; L x;

[20];

ume fisier); nume_f,"rb"

nFisierul %

&g,"temp.datsizeof(CONT

of(f))

f(CONTRIBUA(CONTRIBUAB

f(CONTRIBUA(CONTRIBUAB

o tasta");

în exercițiulcu contribua

np[14]; ume[30]; dresa[50]; ic,ip; BUABIL;

: ");

");

%s nu poate

t","wb"); TRIBUABIL),

ABIL),1,h);BIL),1,f);

ABIL),1,h);BIL),1,f);

;

l anterior. Scabilii (contrib

e fi deschi

,1,f);

crieţi un progbuabilul) cu

is",nume_f)

gram C care cea mai mar

;

Aplicații

generea-re datorie

Page 24: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} p _} 4.3etăţ

î

Sfîr

gramarea calcul

{ if(max< { max=x poz=f fclos fopen fwrit } else if(ma { poz fwr } fread(& } rewind(g) fopen_s(& fprintf(h fprintf(h fprintf(h fread(&po while(!fe { fseek(f fread(& fprintf fread(& } fclose(g) fclose(h) printf("\ remove("t fclose(f)} printf("\nG_getch();

.6. Fie un fişţi de transpor

Număr de

înmatriculare

char [8]

Scrieţi urşitul introdu

latoarelor

x.ic-x.ip) .ic-x.ip; tell(f)/size(g); _s(&g,"tempe(&poz,size

x=x.ic-x.ip=ftell(f)/site(&poz,si

&x,sizeof(CO

; &h,"Lista.tx,"Lista cu ,"\nDatoria,” neachitaz,sizeof(inof(g)) ,poz*sizeof

&x,sizeof(CO(h,"\n%14s

&poz,sizeof

; ; nLista se aemp.dat"); ;

ata, apasa

şier organizart. Articolele

Dată ach

zi lunchar cha

un program Cucerii datelor

zeof(CONTRI

p.dat","wb"eof(int),1,

p) sizeof(CONTizeof(int),

ONTRIBUABIL

xt","w"); cele mai m

a maxima esata de urmant),1,g);

f(CONTRIBUAONTRIBUABIL%30s %50s"

(int),1,g);

afla in fis

o tasta");

at secvenţial,e au următoa

hiziţie km

nă an ar int

C care înregir este marcat

IBUABIL) -

"); ,g);

TRIBUABIL) ,1,g);

L),1,f);

mari datoriste %8.2 leatorii:\n”)

ABIL),SEEK_L),1,f); ",x.cnp,x.n;

sierul List

;

cu date desprea structură

m parcurşi

float

istrează plecstandard.

1;

- 1;

ii neplatiteei”, max); ;

_SET);

nume,x.adre

ta.txt");

pre flota de că:

Capacitat transpor

mc float fl

area în cursă

e:\n\n");

sa);

camioane a u

te rt

În cursă

t c

loat

ă a unor auto

70

unei soci-

ă/în garaj

char

ovehicule.

Page 25: Cristian Uscatu - Fisiere

Încă î

n luc

ru71 Aplicații

#include <stdio.h> #include <conio.h> #include <string.h> typedef struct { char zi; char luna; int an; } DATA; typedef struct { float mc; float t; } CAPACITATE; typedef struct { char nr[8]; DATA data; float km; CAPACITATE cap; char inc; // 1 - in cursa; 0 - in garaj } CAMION; void main() { FILE *f; CAMION x; char r; char nr[8]; char nume_f[20]; int gasit; printf("\nNume fisier: "); gets(nume_f); fopen_s(&f,nume_f,"rb+"); if(!f) printf("\nFisierul %s nu poate fi deschis"); else { printf("\nNr inmatriculare (sau CTRL+Z): "); fflush(stdin); gets(nr); while(!feof(stdin)) { rewind(f); gasit=0; fread(&x,sizeof(CAMION),1,f); while((!feof(f)) && (!gasit)) { if(strcmp(nr,x.nr)==0) { gasit=1; printf("\nVehiculul cu nr. %s ",x.nr); if(x.inc==1) printf("se afla deja in cursa!"); else { printf("pleaca acum in cursa? (D/N)"); r=_getch();

Page 26: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} p _} 4.3

Nr.

(înt

#in#in typ voi{ F S c i p g

gramarea calcul

i { } } } fread } printf( fflush( gets(nr } fclose(f)} printf("\nG_getch();

.7. Fie un fiş

. matri-col

Nume

int c

Să se sctr-un fișier te

nclude <stdnclude <con

pedef struc

id main() FILE *f,*g;STUDENT x; char nume_fint nr,i,re

printf("\nNgets(nume_f

latoarelor

f((r=='D') x.inc=1; fseek(f,ft fwrite(&x,

(&x,sizeof

"\nNr inmatstdin); );

;

ata, apasa

şier organiza

e și prenume student

char[30]

crie programext).

io.h> io.h>

t { int nrm char nu char an int gru char nr char no } STUDENT

[20]; stante;

ume fisier);

|| (r=='d'

tell(f)-siz,sizeof(CAM

(CAMION),1,

triculare (

o tasta");

at secvenţial,

An Grupă

char int

mul C pentru

mat; ume[30]; n; upa; rd; ote[20]; T;

: ");

'))

zeof(CAMIONMION),1,f);

,f);

(sau CTRL+Z

;

cu articole d

ă Nr. discip

char

realizarea un

N),SEEK_SET

Z): ");

de următoare

line 1

char c

nei liste cu s

);

ea structură:

Note obţinute2 …

char char

studenţilor in

72

e: 20

char

ntegralişti

Page 27: Cristian Uscatu - Fisiere

Încă î

n luc

ru73

f i e { } p _}

4.3

N

lor

#in#in typ

fopen_s(&f,if(!f) printf("\else { fopen_s(& fprintf(g fprintf(g nr=0; fread(&x, while(!fe { restant for(i=0 if(x. res if(!res { nr++; fprin for(i fpr } fread(& } if(!nr) printf( else printf( fclose(g) fclose(f)} printf("\nG_getch();

.8. Fie un fiş

Nr. înmatricu

char[8]

Să se mai vechi de

nclude <stdnclude <con

pedef struc

nume_f,"rb"

nFisierul %

&g,"Lista.tx,"Lista stu,"\n Nr. %-

sizeof(STUDof(f)) e=0; ;i<x.nrd;i+note[i]<5) tante=1; tante) tf(g,"\n%4d=0;i<x.nrd;intf(g,"%5

&x,sizeof(ST

"\n\nNu exi

"\n\nLista ; ;

ata, apasa

şier organiza

lare Ma

char

realizeze proe 10 ani şi cu

io.h> io.h>

t { char nr char ma int anf

");

%s nu poate

xt","w"); udentilor i-30s An Gru

DENT),1,f);

++)

d %-30s %2d;i++) .2f ",x.not

TUDENT),1,f

ista nici u

se afla in

o tasta");

at secvenţial,

arca An

r[20]

ogramul C pu peste 30000

rm[8]; arca[20]; f;

e fi deschi

integralistupa Note","

;

d %5d ",nr,

te[i]);

f);

un student

n fisierul

;

cu articole d

fabricaţie

int

entru listarea00 km.

is");

ti\n\n"); Nume");

x.nume,x.a

integralist

Lista.txt"

de următoare

Nr. km

long

a într-un fişi

n,x.grupa);

t");

);

ea structură:

Val

fl

er text a auto

Aplicații

;

loare

oat

oturisme-

Page 28: Cristian Uscatu - Fisiere

Încă î

n luc

ruProgramarea calculatoarelor 74

long km; float val; } VEHICUL; void main() { FILE *f,*g; VEHICUL x; int an,ani,nr; long km; char nume_f[20]; printf("\nNume fisier: "); gets(nume_f); fopen_s(&f,nume_f,"rb"); if(!f) printf("\nFisierul %s nu poate fi deschis"); else { fopen_s(&g,"Lista.txt","w"); printf("\nAnul curent: "); scanf("%d",&an); //anul curent poate fi preluat si automat din data calculatorului printf("\nLimita nr. kilometri: "); scanf("%d",&km); printf("\nVechime minima (ani): "); scanf("%d",&ani); fprintf(g,"Lista vehiculelor mai vechi de %d ani si cu mai mult de %d kilometri\n\n",ani,km); fprintf(g,"\n Nr. %-20s An Km Valoare","Marca"); nr=0; fread(&x,sizeof(VEHICUL),1,f); while(!feof(f)) { if((an-x.anf>ani) && (x.km>km)) { nr++; fprintf(g,"\n%4d %-20s %4d %6d %10.2f",nr,x.marca,x.anf,x.km,x.val); } fread(&x,sizeof(VEHICUL),1,f); } if(!nr) printf("\nNici un vehicul nu indeplineste conditiile date"); else printf("\nLista se afla in fisierul Lista.txt"); fclose(g); fclose(f); } printf("\nGata, apasa o tasta"); _getch(); }

Page 29: Cristian Uscatu - Fisiere

Încă î

n luc

ru75

zateori ascde pot

prin

tiuntomaflăîn idoa

creatorugra

#in#in#in // // // int{ l i n i { }

Teme

1progr

necesar

4.4. Simu Pentru r

e relativ fie se nevoie),

unzînd gestigeneralitate fi utilizate p

În contn subprogram

Fișierul Rne de bază p

mat articoleloă în primul ointeriorul funar structura c

Se presate folosind ul de stare înmelor este u

nclude <stdnclude <malnclude <str

numar totaI - fisierE - nr. art NrSpatii(long p; int nr; nr=-1; if(f) { p=ftell(f fseek(f,0 nr=ftell( fseek(f,p}

e . Pentru to

rame multifure.

ularea or

rezolvarea pse implemenfie se scriu

iunea indicatridicat; nefii

pentru orice pinuare se pr

me.

Relative.cpp entru fișiere

or logice, obțoctet al articoncțiilor, progcorespunzătosupune că fișaceste funcțin primul oct

un compromi

io.h> loc.h> ing.h>

l spatii inul, dimensiticole fiziFILE* f, lo

); ,SEEK_END);f)/(dim+1);,SEEK_SET);

ate fișierele uncționale ca

ganizării

problemelor dntează pas cu funcții caretorului de staind legate deproblemă de rezintă un ex

conține funcle organizateținînd articololelor fizice.gramul care are articolulușierele cu carii (adică au atet); această s acceptabil.

n fisier (niunea unui ice (-1 dacong dim)

; ; ;

organizate sare realizeaz

relative a

de gestiune a pas operațiie simulează are în interioe structura aracest tip.

xemplu de im

cțiile care ime relativ. Indlele fizice ale. Deoarece inle utilizeazăui logic. re se lucreazaceeași structlimitare a gr

nr. articolarticol lo

ca fisierul

ecvențial deză toate ope

a fișierelo

a fișierelor ble de gestiunoperațiile d

orul lor. Acesrticolelor fiși

mplementare

mplementeazădicatorul de se fișierului. Indicatorul deă trebuie să d

ză în exempltură fizică a radului de ge

le fizice) ogic l nu e desc

scrise mai suerațiunile de

or binare

binare de datne de bază (ode gestiune ste funcții auierelor prelu

e a acestor o

ă operațiunilstare este adăIndicatorul de stare rămîndeclare și să

ele următoararticolelor, ceneralitate a

his)

Aplicații

us, scrieți gestiune

te organi-ori de cîte

de bază, u un grad crate, ele

operațiuni

le de ges-ăugat au-e stare se ne ascuns

utilizeze

re au fost cu indica-l subpro-

Page 30: Cristian Uscatu - Fisiere

Încă î

n luc

ruProgramarea calculatoarelor 76

return nr; } // pozitia curenta in fisier // I - fisierul, dimensiunea unui articol logic // E - pozitia curenta, in nr. de articole, -1 daca fisierul e inchis int Pozitia(FILE* f, long dim) { int nr; nr=-1; if(f) nr=ftell(f)/(dim+1); return nr; } // preformare fisier // I - fisierul, dim. art., nr. art. pentru preformare/extindere // E - cod eroare: 0 - succes, 1 - fisierul era inchis int Preformare(FILE* f, long dim, int nr) { int i,er; char *art; er=1; if(f) { fseek(f,0,SEEK_END); art=(char*)malloc(dim+1); art[0]=0; for(i=0;i<nr;i++) fwrite(art,dim+1,1,f); er=0; free(art); } return er; } // pozitionare // I - fisierul, dim. art., pozitia dorita in nr. relativ articol // E - cod eroare, 0 - succes, 1 - pozitia prea mare, 2 – fis. inchis int Pozitionare(FILE* f, long dim, int p) { int er; er=2; if(f) if(p<NrSpatii(f,dim)) { fseek(f,p*(dim+1),SEEK_SET); er=0; } else er=1; return er; } // citire in acces secvential, urmatorul articol

Page 31: Cristian Uscatu - Fisiere

Încă î

n luc

ru77 Aplicații

// I - fisierul, dim. art., adresa la care se depune articolul citit // E - cod eroare, 0 – art. citit, 1 – fis. inchis, 2 - sfirsit fisier int CitesteUrmatorul(FILE* f, long dim, void* adresa) { char* art; int er=1; if(f) { art=(char*)malloc(dim+1); fread(art,dim+1,1,f); while((!feof(f)) && (er==1)) { if(art[0]) { er=0; memcpy(adresa,art+1,dim); } else fread(art,dim+1,1,f); } if(er==1) er=2; free(art); } return er; } // citire in acces direct // I - fisierul, dim. art., cheia art., adresa unde se depune articolul // E - cod eroare, 0 – art. citit, 1 – fis. inchis sau poz. prea mare, // 2 - cheie invalida int CitestePozitia(FILE* f, long dim, int poz, void* adresa) { char* art; int er; er=Pozitionare(f, dim, poz); if(!er) { art=(char*)malloc(dim+1); fread(art,dim+1,1,f); if(art[0]==0) er=2; else { er=0; memcpy(adresa, art+1, dim); } free(art); } return er; } // scriere articol in acces direct // I - fisierul, dim. art., adresa articolului, cheia articolului // E - cod eroare, 0 - succes, 1 – fis. inchis, 2 - cheie invalida int ScriePozitia(FILE* f, long dim, void* adresa, int poz) { char* art; int n,er=1;

Page 32: Cristian Uscatu - Fisiere

Încă î

n luc

ruProgramarea calculatoarelor 78

if(f) { n=NrSpatii(f,dim); if(poz>=n) Preformare(f,dim,poz-n+1); art=(char*)malloc(dim+1); Pozitionare(f,dim,poz); fread(art,dim+1,1,f); if(art[0]==1) er=2; else { er=0; memcpy(art+1,adresa,dim); art[0]=1; Pozitionare(f,dim,poz); fwrite(art,dim+1,1,f); } free(art); } return er; } // suprascriere articol in vederea modificarii, in acces direct // I - fisierul, dim. art., adresa articolului, cheia articolului // E - cod eroare: 0 - succes, 1 – fis. inchis, 2 - pozitia e prea mare int RescriePozitia(FILE* f, long dim, void* adresa, int poz) { char* art; int n,er=1; if(f) { n=NrSpatii(f,dim); if(poz>=n) er=2; else { art=(char*)malloc(dim+1); Pozitionare(f,dim,poz); er=0; memcpy(art+1,adresa,dim); fwrite(art,dim+1,1,f); } free(art); } return er; } // sterge articolul cu cheia data // I - fisierul, dimensiunea unui articol, cheia articolului de sters // E - cod eroare, 0 - succes, 1 – fis. inchis sau pozitie prea mare, // 2 - cheie invalida (spatiu gol), int Sterge(FILE*f, long dim, int poz)

Page 33: Cristian Uscatu - Fisiere

Încă î

n luc

ru79

{ c i e i { } r} 4.4lectrefolog

m

trod

#in#in#in typ voi{ F C u i

char* art; int er; er=Pozitionif(!er) { art=(char fread(art if(art[0] er=2; else { er=0; art[0]= Pozitio fwrite( } free(art)} return er;

.1. Fie un fiştare a materiolosibil. Dateică:

Tip

material Num

cochar c

Cheia relSă se scr

ducerii datelo

nclude <stdnclude <connclude "Rel

pedef struc

id main() FILE* f; COLABORATORunsigned inint i,er,n;

are(f,dim,p

*)malloc(di,dim+1,1,f)==0)

0; nare(f,dim,art,dim+1,1

;

şier organizaialelor refoloele se referă

me/denumire olaborator char [20] i

lativă a fişierrie programuor de la tasta

io.h> io.h> ative.cpp"

t { char ti char int c } COLAB

x; t codc;

poz);

im+1); );

,poz); 1,f);

at relativ, cu osibile. Fieca

la un an cal

1 2 3 int int int

rului este codul C pentru aatură este ma

ipm; nume[20];

cant[12]; BORATOR;

date despre are colaboratolendaristic. A

Cantita4 5

int int

dul colaboradăugarea de

arcat standard

colaboratoriior predă un s

Articolele au

ate predată lun6 7 8

int int int

torului. noi articole

d.

i unei societăsingur tip deurmătoarea

nar 9 10

t int int

în fişier. Sfî

Aplicații

ăţi de co-e material

structură

11 12 int int

fîrşitul in-

Page 34: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

l c d p g i e { } p _}

4.4rea anume/

#in#in#in

gramarea calcul

long dim; char nume_f

dim=sizeof(

printf("\nNgets_s(numeif(fopen_s( printf("\else { printf_s( scanf_s(" while(!fe { er=Cite if(er== print else { print fflus gets( print scanf if(x. x.t print for(i x.c Scrie } printf_ scanf_s } fclose(f)} printf("\nA_getch();

.2. Fie fișiercolaboratoru

umit tip de m/denumire şi

nclude <stdnclude <connclude "Rel

latoarelor

[20];

COLABORATOR

ume fisier _f); &f,nume_f,"nFisierul %

"\nCod cola%d",&codc);of(stdin)) stePozitia2) f("\nCodul

f("\nNume/dh(stdin); x.nume); f("Tip mate("%c",&x.titipm<'a') ipm=x.tipm+f("Cantitat=0;i<12;i++ant[i]=0; Pozitia(f,d

_s("\n\nCod ("%d",&codc

;

Apasa o tast

rul descris înului (colabor

material refocantitate tot

io.h> io.h> ative.cpp"

R);

colaborato

"wb+")) %s nu a put

aborator no;

(f,dim,codc

introdus a

denumire co

erial (H/S/ipm);

+'a'-'A'; tile se ini+)

dim,&x,codc

colaboratoc);

ta!");

n exercițiul aratorilor) carlosibil (introtală.

ori: ");

tut fi desc

ou: ");

c,&x);

apartine de

olaborator:

/A/F): ");

itializeaza

c);

or nou: ");

anterior. Să sre au predatodus de la ta

his", nume_

eja altui co

");

cu 0");

e scrie progrcantități anu

astatură). Se

_f);

olaborator"

ramul C penuale maximevor preciza

80

");

ntru afişa-e dintr-un

cod, nu-

Page 35: Cristian Uscatu - Fisiere

Încă î

n luc

ru81 Aplicații

typedef struct { char tipm; char nume[20]; int cant[12]; } COLABORATOR; void main() { FILE* f; COLABORATOR x; unsigned int codc; int er,n; long dim; char nume_f[20],mat; int cod_max[50],nr,max,s,i; dim=sizeof(COLABORATOR); printf("\nNume fisier colaboratori: "); gets_s(nume_f); if(fopen_s(&f,nume_f,"rb+")) printf("\nFisierul %s nu a putut fi deschis", nume_f); else { nr=0; max=0; printf("Tip material (H/S/A/F): "); scanf("%c",&mat); if(mat<'a') mat=mat+'a'-'A'; er=CitesteUrmatorul(f,dim,&x); while(!er) { if(x.tipm==mat) { s=0; for(i=0;i<12;i++) s+=x.cant[i]; if(s>max) { nr=1; max=s; cod_max[0]=Pozitia(f,dim)-1; } else if(s==max) cod_max[nr++]=Pozitia(f,dim)-1; } er=CitesteUrmatorul(f,dim,&x); } printf("\nCantitatea maxima anual de <%c> este %d si a fost primita de la\n"); for(i=0;i<nr;i++) { CitestePozitia(f,dim,cod_max[i],&x); printf("\n%6d %-30s",cod_max[i],x.nume); }

Page 36: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} p _}

4.4mer

trecvalo

#in#in#in typ voi{ F F l c i d p g e i e {

gramarea calcul

fclose(f)} printf("\nA_getch();

.3. Fie un fişrcială. Artico

Nume client

char [30]

Cheia rSă se sc

cut a căror voare.

nclude <stdnclude <connclude "Rel

pedef struc

id main() FILE* f,*g;FACTURA x; long dim; char nume_fint codf,va

dim=sizeof(

printf("\nNgets(nume_fer=fopen_s(if(er) printf("\else { printf("\

latoarelor

;

Apasa o tast

şier organizaolele au urmă

t Datazi

char

elativă a fişicrie programaloare depăş

io.h> io.h> ative.cpp"

t { char nu char zi char lu int an; int nr; int val } FACTURA

[20]; l_lim,an,er

FACTURA);

ume fisier); &f,nume_f,"

nNu se poat

nNume fisie

ta!");

at relativ, cu ătoarea struc

a facturării luna an char int

erului este nmul C pentru şeşte o limită

ume[30]; i; una; ; ; l[50]; A;

r,s,i;

: ");

"rb");

te deschide

er lista: "

date despre ctură logică:

Nr. pro

int

umărul factulistarea într-ă dată. Se vo

e fisierul

");

facturile em

duse

t 1

flo

urii. -un fişier texor preciza nu

%s",nume_f

mise de o soci

Valoare pro1 2 …oat float

t a facturilorumăr factură,

);

82

ietate co-

oduse … 50

float

r din anul , client şi

Page 37: Cristian Uscatu - Fisiere

Încă î

n luc

ru83

%d\ } p _}

4.4

duc

#in#in#in typ

fflush(st gets(nume fopen_s(& printf("\ scanf("%d printf("\ scanf("%d fprintf(g\n\n",val_l fprintf(g

er=Citest while(!er { if(x.an { s=0; for(i s+= if(s> fpr } er=Cite } fclose(f) fclose(g) printf("\} printf("\nA_getch();

.4. Fie un fiş

Denumire

produs char[30]

Codul pSă se sc

c de la tastatu

nclude <stdnclude <connclude "Rel

pedef struc

din); _f);

&g,nume_f,"wnAnul cauta",&an); nValoare mi",&val_lim),"Lista facim,an); ,"\nNr.fact

eUrmatorul) ==an)

=0;i<x.nr;ix.val[i]; =val_lim) intf(g,"\n%

steUrmatoru

; ; nLista se a

Apasa o tast

şier organiza

U.M. P

char[5]

produsului incrie programură. Sfîrşitul

io.h> io.h> ative.cpp"

t { char de char um float p

w"); at: ");

inima: "); ); cturilor cu

t %-30s Val

(f,dim,&x);

i++)

%7d %-30s %

ul(f,dim,&x

afla in fis

ta!");

at relativ, cu a

Preţ unitar

float

ndică numărumul C pentru

introducerii

enumire[30]m[5]; pretu;

u valoarea

loare","Num

;

%6d",Poziti

x);

sierul %s",

articole avîn

Ca1

int

ul relativ al aştergerea prodatelor de la

];

mai mare de

me / denumi

ia(f,dim)-1

nume_f);

nd următoarea

antităţi vîndut2

int

articolului în oduselor ale a tastatură es

ecit %d din

re client")

,x.nume,s);

a structură lo

te lunar: …

fişier. căror coduri

ste marcat sta

Aplicații

n anul

);

;

ogică:

12 int

i se intro-andard.

Page 38: Cristian Uscatu - Fisiere

Încă î

n luc

ruProgramarea calculatoarelor 84

int cant[12]; } PRODUS; void main() { FILE* f,*g; PRODUS x; long dim; char nume_f[20],r; int codp,er; dim=sizeof(PRODUS); printf("\nNume fisier: "); gets(nume_f); er=fopen_s(&f,nume_f,"rb"); if(er) printf("\nNu se poate deschide fisierul %s",nume_f); else { printf("\Cod produs: "); scanf("%d",&codp); while(!feof(f)) { er=CitestePozitia(f,dim,codp,&x); if(er) printf("\nCodul %d nu crespunde unui produs",codp); else { printf("\nCodul %d corespunde produsului:\n",codp); printf("\nDenumire: %s, unitate de masura: %s, pret unitar: %8.2f",x.denumire,x.um,x.pretu); printf("\nConfirmati stergerea? (D/N): "); r=_getche(); if(r!='D') printf("\nStergere abandonata"); else { Sterge(f,dim,codp); printf("\nProdusul cu codul %d a fost sters",codp); } } printf("\nCod produs: "); scanf("%d",&codp); } fclose(f); } printf("\nApasa o tasta!"); _getch(); }

4.4.5. Fie un fişier organizat relativ, cu articole avînd următoarea structură logică:

Denumire fond fix

Tip fond fix Data achiziţiei Valoare

inventar Gestionar

an lună zi

Page 39: Cristian Uscatu - Fisiere

Încă î

n luc

ru85

inv

#in#in#in typ voi{ F F l c i d p g e i e { fix fix %d.

char[30]

NumăruSă se sc

entar se intro

nclude <stdnclude <connclude "Rel

pedef struc

id main() FILE* f,*g;FOND_FIX x;long dim; char nume_fint nri,er;

dim=sizeof(

printf("\nNgets(nume_fer=fopen_s(if(er) printf("\else { printf("\ scanf("%d while(!fe { er=Cite if(er) printx",nri); else { printx:\n",nri); print%d.%d",x.d print

char[2

ul de inventacrie programoduc de la ta

io.h> io.h> ative.cpp"

t { char de char ti int an; char lu char zi float v char ge } FOND_FI

[20];

FOND_FIX);

ume fisier); &f,nume_f,"

nNu se poat

Numar inven",&nri); of(f)) stePozitia

f("\Numarul

f("\Numarul f("\nDenumienumire,x.tf("\nValoar

20] int

ar indică nummul C pentruastatură. Sfîrş

enumire[30]ip[20]; ; una; i; val_inv; est[30]; IX;

: ");

"rb");

te deschide

ntar: ");

(f,dim,nri,

l de invent

l de invent

ire: %s \nTtip,x.zi,x.re inventar

char cha

mărul relativ u afişarea fonşitul introduc

];

e fisierul

,&x);

tar %d nu c

tar %d core

Tip: %s \nd.luna,x.an)r: %8.2f",x

ar float

al articoluluindurilor fixecerii datelor e

%s",nume_f

respunde u

espunde fond

ata achizit;

x.val_inv);

char[3

i în fişier. e ale căror nueste marcat s

);

nui fond

dului

tiei:

Aplicații

30]

umere de standard.

Page 40: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

} p _}

4.4

N

în uvec

#in#in#in typ voi{ F S l c i d p g e i

gramarea calcul

print } printf( scanf(" } fclose(f)} printf("\nA_getch();

.6. Fie un fiş

ume şi prenum

char [30]

NumăruScrieţi u

urma susţinectorul de note

nclude <stdnclude <connclude "Rel

pedef struc

id main() FILE* f; STUDENT x; long dim; char nume_fint nrm,er,

dim=sizeof(

printf("\nNgets(nume_fer=fopen_s(if(er) printf("\

latoarelor

f("\nGestio

"\nNumar in%d",&nri);

;

Apasa o tast

şier organiza

me An de s

cha

ul matricol inun program erii unor exae. Sfîrşitul in

io.h> io.h> ative.cpp"

t { char nu char an int gru char nr char no } STUDENT

[20]; i,n;

STUDENT);

ume fisier); &f,nume_f,"

nNu se poat

onar: %s",x

nventar: ")

ta!");

at relativ, cu a

tudiu Gr

ar in

ndică număruC pentru îns

amene. Fiecantroducerii da

ume[30]; n; upa; rd; ote[15]; T;

: ");

"rb");

te deschide

x.gest);

);

articole de u

rupa Nr.

nt

ul relativ al ascrierea interare materie aatelor este m

e fisierul

rmătoarea st

discipline

char

articolului înractivă în fişare asociată

marcat standar

%s",nume_f

tructură:

Note obţi1 2

char char

n fişier. şier a notelor

o anumită prd.

);

86

inute … 15

char

r obţinute poziție în

Page 41: Cristian Uscatu - Fisiere

Încă î

n luc

ru87

e { } p _}

4.4cula

#in#in#in typ voi{ F S l c i

else { printf("\ scanf("%d while(!fe { er=Cite if(er) print else { print print print print scanf print scanf x.not Rescr } printf( scanf(" } fclose(f)} printf("\nA_getch();

.7. Fie fișierarea studenți

nclude <stdnclude <connclude "Rel

pedef struc

id main() FILE* f; STUDENT x; long dim; char nume_fint nrm,er,

Numar matri",&nrm); of(f)) stePozitia

f("\Numarul

f("\Numarulf("\nNume: f("\nAn: %df("Indice m("%d",&i); f("\nNota: ("%d",&n); e[i]=n; iePozitia(f

"\nNumar ma%d",&nrm);

;

Apasa o tast

rul descris înilor cu mai m

io.h> io.h> ative.cpp"

t { char nu char an int gru char nr char no } STUDENT

[20]; i,n;

icol: ");

(f,dim,nrm,

l matricol

l matricol %s ",x.num

d Grupa: ",materie (1-

");

f,dim,&x,nr

atricol: ")

ta!");

n exercițiul amult de 5 rest

ume[30]; n; upa; rd; ote[15]; T;

,&x);

%d nu cres

%d corespume); ,x.an,x.gru-%d): ",x.n

rm);

);

anterior. Scritanțe.

punde unui

unde student

upa); nrd);

eți un progra

student",n

tului:\n",n

am C pentru

Aplicații

nrm);

nrm);

exmatri-

Page 42: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

d p g e i e { } p _}

4.4anutre rul

#in#in#in typ voi{ F S l c

gramarea calcul

dim=sizeof(

printf("\nNgets(nume_fer=fopen_s(if(er) printf("\else { er=Citest while(!er { n=0; for(i=0 if(x. n++ if(n>5) Sterg er=Cite } printf("\ fclose(f)} printf("\nA_getch();

.8. Fie fișier

ului de studiudouă valori matricol a.

nclude <stdnclude <connclude "Rel

pedef struc

id main() FILE* f; STUDENT x; long dim; char nume_f

latoarelor

STUDENT);

ume fisier); &f,nume_f,"

nNu se poat

eUrmatorul)

;i<x.nrd;i+note[i]<5) ; e(f,dim,PozsteUrmatoru

nPrelucrare;

Apasa o tast

rul descris înu (se va trecedate de la ta

io.h> io.h> ative.cpp"

t { char nu char an int gru char nr char no } STUDENT

[20];

: ");

"rb");

te deschide

(f,dim,&x);

++)

zitia(f,dimul(f,dim,&x

ea s-a inch

ta!");

n exercițiul 4e anul 1) penstatură (a, b)

ume[30]; n; upa; rd; ote[15]; T;

e fisierul

;

m)-1); x);

heiat");

.4.6. Scrieți untru studenți). Se presupu

%s",nume_f

un program ii cu număruune că există

);

C pentru moul matricol cuă un student c

88

odificarea uprins în-cu numă-

Page 43: Cristian Uscatu - Fisiere

Încă î

n luc

ru89

i d p g e i e { } p _}

gesgrudatede

int nrm,er,

dim=sizeof(

printf("\nNgets(nume_fer=fopen_s(if(er) printf("\else { printf("\ scanf("%d er=Citest if(er) printf( else { while(( { x.an= Rescr er=Ci } } printf("\ fclose(f)} printf("\nA_getch();

Teme1

rea opsiune arespectiincluzîn(struct)

2. Pentru tnale car

4.5. Simu Fie urm

stionate urmăupa de studiue să se facă 10 caractere

a,b;

STUDENT);

ume fisier); &f,nume_f,"

nNu se poat

nPrimul num",&a); ePozitia(f,

"\nNumarul

!er)&&(Pozi1; iePozitia(ftesteUrmato

nPrelucrare;

Apasa o tast

e . Se observperațiunilor

articol logic.ive au accendu-le împre). toate fișierelre realizează

ularea or

mătoarea proătoarele dateu, anul de stu

prin interme– acesta va c

: ");

"rb");

te deschide

mar matrico

,dim,a,&x);

matricol %

itia(f,dim)

f,dim,&x,Poorul(f,dim,

ea s-a inch

ta!");

vă că toate fude gestiune Se poate eves direct laeună cu cele

le relative deă toate operaț

ganizării

oblemă: în ce referitoare udiu, note obediul coduluconstitui che

e fisierul

ol: ");

;

%d nu cores

)<=b+1))

ozitia(f,di,&x);

heiat");

funcțiile implde bază folovita transmit

a aceste vardouă variab

escrise mai suțiunile de ges

indexate

cadrul unei ola studenți:

bținute (maxui matricol, ceia indexată.

%s",nume_f

punde unui

im)-1);

lementate mosesc ca paraterea lor expriabile. Rescbile într-o str

us, scrieți prstiune necesa

a fișierel

organizații dcod matrico

xim 20). Se care este o seSe cere să se

);

student",a

mai sus pentruametri fișier șplicită, dacă crieți acesteructură de d

rograme multare.

or binare

de învățămînol, nume și pdorește ca aecvență alfane scrie progr

Aplicații

a);

u simula-și dimen-funcțiile

e funcții, ate unică

tifuncțio-

e

nt trebuie prenume,

accesul la numerică rame care

Page 44: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

să rgarsprepenPenrii p

ții cimpmo

plem //t#de //ttyp //ttyp //ttyp

de bdexindși in #in#in#in

gramarea calcul

realizeze urmrea de noi stue studenții u

ntru o grupă ntru toate opepînă la apăsa

Pentru a

care implemplementarea dalitate de im

Fișierul mentarea op

tipul fisieefine TFISI

tipul cheiipedef char

tipul articpedef struc

tipul articpedef struc

Fișierul Ibază pentru

xat: fișierul dexat (fără exndex) prin ad

nclude <stdnclude <strnclude "tip

latoarelor

mătoarele opudenți, vizuaunei grupe, î

de studențierațiile datelarea combina

a simplifica mentează oper

operațiilor emplementare

Tipuri.h conerațiilor de b

r ER FILE*

TCHEIE[11];

ol din tabet{ char is; TCHEIE c long nr_ } TART_IND

ol din fisit{ TCHEIE c char num int grup int an; int note } TARTICOL

Indexat.cpp fișierul orgade date, tabextensie) – dindăugarea ext

io.h> ing.h> uri.cpp"

perațiuni de galizarea datelînscrierea un, eliminarea le se preiau dației de taste

gestiunea fișrațiile de gesenunțate maie a acestor op

nține declarațbază cît și pe

;

ela index ; cheie; _rel; DEX;

ierul de dacheie; me[35]; pa;

e[20]; L;

conține funcanizat indexaela index, unn acesta se otensiilor resp

gestiune: poplor despre unnei note pent

unui studende la tastaturCTRL-Z.

șierelor organstiune de bazi sus. În exeperații.

țiile tipurilorntru rezolvar

ate

cții care implat și variabilen articol, numobțin numelepective.

pularea inițian student, viztru un student (exmatricuă și se asigur

nizate indexază. Acestea vemplul urmă

r de date utirea probleme

lementează oe asociate unmele extern ae celor două

ală a fișierulzualizarea da

ent, înscriereulare, absolvră repetarea

at se pot realvor fi utilizaător este prez

ilizate atît peelor enunțate

operațiile denui fișier orgaal fișierului ofișiere fizice

90

lui, adău-atelor de-a notelor

vire etc.). prelucră-

liza func-ate pentru zentată o

entru im-e.

e gestiune anizat in-organizat

e (de date

Page 45: Cristian Uscatu - Fisiere

Încă î

n luc

ru91 Aplicații

TARTICOL x; char nume[20],numed[20],numei[20]; TFISIER f; TFISIER ind; // Extindere nume prin adaugarea extensiilor void Extinde() { strcpy(numei,nume); strcat(numei,".idx"); strcpy(numed,nume); strcat(numed,".dat"); } // Sortarea tabelei index si eliminarea inregistrarilor sterse // I - // E - void Sort() { TART_INDEX a,b; TFISIER ind1; long i,j; //copierea tabelei index intr-un fisier temporar (numai art. valide) ind1=fopen("temp.idx","wb+"); rewind(ind); fread(&a,sizeof(a),1,ind); while(!feof(ind)) { if(a.is) fwrite(&a,sizeof(a),1,ind1); fread(&a,sizeof(a),1,ind); } fclose(ind); //sortarea fisierului temporar fseek(ind1,0,SEEK_END); long n=ftell(ind1)/sizeof(a); for(i=0;i<n-1;i++) { fseek(ind1,i*sizeof(a),SEEK_SET); fread(&a,sizeof(a),1,ind1); for(j=i+1;j<n;j++) { fseek(ind1,j*sizeof(a),SEEK_SET); fread(&b,sizeof(a),1,ind1); if(strcmp(a.cheie,b.cheie)>0) { fseek(ind1,i*sizeof(a),SEEK_SET); fwrite(&b,sizeof(a),1,ind1); fseek(ind1,j*sizeof(a),SEEK_SET); fwrite(&a,sizeof(a),1,ind1); } } } fclose(ind1);

Page 46: Cristian Uscatu - Fisiere

Încă î

n luc

ruProgramarea calculatoarelor 92

//inlocuirea tabelei index cu fisierul sortat remove(numei); rename("temp.idx",numei); ind=fopen(numei,"rb+"); } /* Cautarea articolului cu cheia Key si plasarea pointerului de fisier in tabela de indexuri pe articolul respectiv*/ // I - cheia cautata // E - cod succes: 1 - a fost gasit articolul; 0 - nu a fost gasit arti-colul int SeekKey(char *Key) { long ls=0, ld, m, n; TART_INDEX a; int gasit=0; fseek(ind,0,SEEK_END); n=ftell(ind)/sizeof(TART_INDEX); ld=n-1; while((ls<=ld)&&(!gasit)) { m=(ls+ld)/2; fseek(ind,m*sizeof(a),SEEK_SET); fread(&a,sizeof(a),1,ind); if(strcmp(a.cheie,Key)==0) gasit=1; else if(strcmp(a.cheie,Key)>0) ld=m-1; else ls=m+1; } if(gasit) fseek(ind,m*sizeof(a),SEEK_SET); return gasit; } // Crearea unui fisier indexat nou // I - // E - void New_index() { f=fopen(numed,"wb+"); ind=fopen(numei,"wb+"); } // Deschiderea unui fisier indexat existent // I - // E - void Open_index() { f=fopen(numed,"rb+"); ind=fopen(numei,"rb+"); }

Page 47: Cristian Uscatu - Fisiere

Încă î

n luc

ru93 Aplicații

// Inchiderea tabelei index // I - // E - void Close_index() { fclose(ind); fclose(f); } // Citirea urmatorului articol in acces secvential // I - adresa unde se depune articolul citit // E - cod de succes: 1 - a fost citit; 0 - nu a fost gasit nici un ar-ticol int ReadSec(TARTICOL *a) { TART_INDEX a1; int r; fread(&a1,sizeof(a1),1,ind); if(feof(ind)) r=0; else { fseek(f,a1.nr_rel*sizeof(*a),SEEK_SET); fread(a,sizeof(*a),1,f); r=1; } return r; } // Citirea articolului cu o cheie data, in acces direct // I - adresa unde se depune articolul citit, cheia articolului cautat // E - cod de succes: 1 - a fost citit; 0 - nu a fost gasit nici un ar-ticol int ReadKey(TARTICOL *a,char *Key) { TART_INDEX a1; int r; if(SeekKey(Key)) { fread(&a1,sizeof(a1),1,ind); fseek(f,a1.nr_rel*sizeof(*a),SEEK_SET); fread(a,sizeof(*a),1,f); r=1; } else r=0; return r; } // Scrierea unui articol in acces secvential // I - articolul care trebuie scris // E - cod de succes: 1 - a fost scris; 0 - nu a fost scris articolul int WriteSec(TARTICOL a) { TART_INDEX a1, ai;

Page 48: Cristian Uscatu - Fisiere

Încă î

n luc

ruProgramarea calculatoarelor 94

long n, n1; int r,r1; r=0; fseek(ind,0,SEEK_END); n=ftell(ind)/sizeof(a1); if(n>0) { fseek(ind,(n-1)*sizeof(a1),SEEK_SET); fread(&a1,sizeof(a1),1,ind); if(strcmp(a1.cheie,a.cheie)>=0) r1=0; else r1=1; } if((n==0)||(r1==1)) { ai.is=1; strcpy(ai.cheie,a.cheie); fseek(f,0,SEEK_END); n1=ftell(f)/sizeof(a); ai.nr_rel=n1; fseek(ind,0,SEEK_END); fwrite(&ai,sizeof(ai),1,ind); fwrite(&a,sizeof(a),1,f); r=1; } return r; } //scrierea unui articol in acces direct // I - fisierul de date, articolul care trebuie scris (contine cheia) // E - cod de succes: 1 - a fost scris; 0 - nu a fost scris articolul int WriteKey(TARTICOL a) { char Key[7]; TART_INDEX a1; long n; int r; strcpy(Key,a.cheie); if(SeekKey(Key)) r=0; else { a1.is=1; strcpy(a1.cheie,a.cheie); fseek(f,0,SEEK_END); n=ftell(f)/sizeof(a); a1.nr_rel=n; fwrite(&a,sizeof(a),1,f); fseek(ind,0,SEEK_END); fwrite(&a1,sizeof(a1),1,ind); Sort(); r=1; } return r;

Page 49: Cristian Uscatu - Fisiere

Încă î

n luc

ru95 Aplicații

} // Stergerea urmatorului articol, in acces secvential // I - // E - cod de succes: 1 - a fost sters; 0 - nu a fost sters articolul int DeleteSec() { TART_INDEX a1; int r; long pos=ftell(ind); fread(&a1,sizeof(a1),1,ind); if(feof(ind)) r=0; else { fseek(ind,pos,SEEK_SET); a1.is=0; fwrite(&a1,sizeof(a1),1,ind); Sort(); r=1; } return r; } // Stergerea articolului cu o anumita cheie, in acces direct // I - cheia articolului care trebuie sters // E - cod de succes: 1 - a fost scris; 0 - nu a fost scris articolul int DeleteKey(char *Key) { int r; if(SeekKey(Key)) r=DeleteSec(); else r=0; return r; } // Suprascrierea ultimului articol citit, cu scopul modificarii // I - articolului care trebuie suprascris // E - cod de succes: 1 - suprascrierea a reusit, 0 - suprascrierea a esuat // esec daca ultima cheie citita difera de a noului articol int RewriteKey(TARTICOL a) { int r; long p; TART_INDEX ai; r=0; p=ftell(ind)/sizeof(TART_INDEX); if(p>0) { fseek(ind,(p-1)*sizeof(TART_INDEX),0); fread(&ai,sizeof(TART_INDEX),1,ind); if(strcmp(ai.cheie,a.cheie)==0) r=1; }

Page 50: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

i { } r}

4.5trărde pblemtă, vîn ovendire

#in#in#in voi{ i p f g E O i { } // p p f g w {

gramarea calcul

if(r) { fseek(f,a fwrite(&a} return r;

.1. Popularri, după crearpopularea inme de prelucva fi întîi creordinea crescnțial. La adăuect.

În conti

nclude "indnclude <connclude <std

id main() int i,n;

printf("\nNfflush(stdigets(nume);

Extinde(); Open_index(if(f==NULL){ printf("\ New_index}

4.5.1.a. P

printf("\nAprintf("\nCfflush(stdigets(x.cheiwhile(!feof{ printf("N fflush(st gets(x.nu printf("G scanf("%d

latoarelor

i.nr_rel*si,sizeof(TAR

rea inițială a rea unui fișie

nițială este căcrare pot fi reeat. În mod ncătoare a cheugarea ulteri

inuare sînt pr

exat.cpp" io.h> lib.h>

umele fisien);

); nFisierul v();

OPULARE / A

Adaugarea inod matricoln); e); (stdin)) ume si prendin); me); rupa: "); ",&x.grupa)

izeof(TARTIRTICOL),1,f

fișierului seer nou. La adă lucrează cuezolvate cu anormal, la poeilor, deci seoară de artic

rezentate am

erului inde

va fi creat

ADAUGARE in

n acces dirl: ");

nume: ");

);

ICOL),0); f);

realizează pdăugarea de nu un fișier exacelași progropularea inițe folosește ocole se folose

mbele variante

exat:");

t");

n acces dir

rect dupa c

prin adăugarenoi studenți

xistent. Ca urram: dacă fișială a fișieruperația de adește operația

e de adăugar

rect

heie\n");

ea repetată desingura diferrmare, cele dșierul de dateului datele sedăugare în ade adăugare

re.

96

e înregis-rență față două pro-e nu exis-e introduc acces sec-e în acces

Page 51: Cristian Uscatu - Fisiere

Încă î

n luc

ru97

} C p g}

#in#in#in voi{ i p f g E O i { } // p p f

printf("A scanf("%d for(i=0;i x.note[ printf("N scanf("%d for(i=0;i { printf( scanf(" } if(WriteK printf( else prin getch(); printf("\ fflush(st gets(x.ch}

Close_index

printf("\nAgetch();

nclude "indnclude <connclude <std

id main() int i,n;

printf("\nNfflush(stdigets(nume);

Extinde(); Open_index(if(f==NULL){ printf("\ New_index}

4.5.1.b. P

printf("\nAprintf("\nCfflush(stdi

An: "); ",&x.an); <20;i++) i]=0; umar note ",&n); <n;i++) "Nota %2d: %d",&x.note

ey(x)) "\nArticolutf("\nCheie

nCod matricdin); eie);

();

Apasa o tast

exat.cpp" io.h> lib.h>

umele fisien);

); nFisierul v();

OPULARE / A

Adaugarea inod matricoln);

(maxim 20):

",i); e[i]);

ul a fost ae invalida\

col: ");

ta");

erului inde

va fi creat

ADAUGARE in

n acces dirl: ");

: ");

adaugat\n")\n");

exat:");

t");

n acces sec

rect dupa c

;

vential

heie\n");

Aplicații

Page 52: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

g w { } C p g}

4.5

#in#in#in voi{ i p f g E O i {

gramarea calcul

gets(x.cheiwhile(!feof{ printf("N fflush(st gets(x.nu printf("G scanf("%d printf("A scanf("%d for(i=0;i x.note[ printf("N scanf("%d for(i=0;i { printf( scanf(" } if(WriteS printf( else prin getch(); printf("\ fflush(st gets(x.ch} Close_index

printf("\nAgetch();

.2. Vizuali

nclude "indnclude <connclude <std

id main() int i,n;

printf("\nNfflush(stdigets(nume);

Extinde(); Open_index(if(f==NULL){ printf("\

latoarelor

e); (stdin)) ume si prendin); me); rupa: "); ",&x.grupa)

An: "); ",&x.an); <20;i++) i]=0; umar note ",&n); <n;i++) "Nota %2d: %d",&x.note

ec(x)) "\nArticolutf("\nCheie

nCod matricdin); eie);

();

Apasa o tast

izarea tuturor

exat.cpp" io.h> lib.h>

umele fisien);

); nFisierul p

nume: ");

);

(maxim 20):

",i); e[i]);

ul a fost ae invalida\

col: ");

ta");

r datelor din

erului inde

poate fi de

: ");

adaugat\n")\n");

fișier: se va

exat:");

eschis");

;

genera o listtă într-un fiși

98

ier text.

Page 53: Cristian Uscatu - Fisiere

Încă î

n luc

ru99

} T g r f fme" R w { } f p C p g} 4.5dul

#in#in#in voi{ i p f g E O i { } T p

return; }

TFISIER g; g=fopen("Curewind(ind)fprintf(g,"fprintf(g,""); ReadSec(&x)while(!feof{ fprintf(g for(i=0;( fprintf ReadSec(&} fclose(g); printf("\nLClose_index

printf("\nAgetch();

.3. Vizualiui matricol i

nclude "indnclude <connclude <std

id main() int i,n;

printf("\nNfflush(stdigets(nume);

Extinde(); Open_index(if(f==NULL){ printf("\ return; }

TCHEIE c; printf("\nC

rsanti.txt"; \n%20c List\n%-10s %-3

; (ind)) ,"\n%10s %3i<20)&&(x.n(g,"%2d ",x

&x);

ista cursan();

Apasa o tast

izarea datelontrodus de la

exat.cpp" io.h> lib.h>

umele fisien);

); nFisierul p

od matricol

","w");

ta cursanti35s Grupa A

35s %5d %2dnote[i]);i+x.note[i]);

ntilor se a

ta");

r despre un a tastatură.

erului inde

poate fi de

l: ");

ilor inregiAn Note\n",

d ",x.cheie++) ;

afla in fis

student: stud

exat:");

eschis");

istrati\n\n"Cod matr.

e, x.nume, x

ierul Cursa

dentul este id

",' '); ","Nume si

x.grupa, x.

anti.txt");

dentificat pe

Aplicații

prenu-

.an);

;

baza co-

Page 54: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

g w { } C p g}

4.5duc

#in#in#in voi{ i p f g E O i { } T i

gramarea calcul

gets(c); while(!feof{ if(SeekKe { ReadSec printf( printf( printf( printf( printf( for(i=0 print printf( } else printf( printf("\ gets(c); } Close_index

printf("\nAgetch();

.4. Vizualice numărul g

nclude "indnclude <connclude <std

id main() int i,n;

printf("\nNfflush(stdigets(nume);

Extinde(); Open_index(if(f==NULL){ printf("\ return; }

TFISIER g; int gr;

latoarelor

(stdin)) y(c)) (&x); "\nAm gasit"\nNume "\nCod matr"\nAn si gr"\nNote ;(i<20)&&(xf("%2d ",x"\n");

"\nNu e inrn\nCod matr

();

Apasa o tast

izarea datelogrupei iar list

exat.cpp" io.h> lib.h>

umele fisien);

); nFisierul p

t studentul : %-35

ricol: %-10rupa : %2d : ");

x.note[i]);.note[i]);

registrat uricol: ");

ta");

or despre studa cu datele s

erului inde

poate fi de

l:\n"); 5s",x.nume)0s",x.cheie/ %4d",x.a

;i++)

un cursant

denții unei gtudenților va

exat:");

eschis");

; e); n,x.grupa)

cu acest co

grupe: de la a fi generată

;

od matricol

tastatură se într-un fișier

100

l.\n");

va intro-r text.

Page 55: Cristian Uscatu - Fisiere

Încă î

n luc

ru101

c p s w { %d\ %s" } C p g}

4.5meda de

#in#in#in voi{ i p f g E

1

char num[20printf("\nGscanf("%d",while(!feof{ sprintf(n g=fopen(n rewind(in fprintf(g\n\n",' ',g fprintf(g ReadSec(& while(!fe { if(x.gr { fprin for(i fpr } ReadSec } fclose(g) printf("\",gr,num); printf("\ scanf("%d} Close_index

printf("\nAgetch();

.5. Înscrierdiul codului epășit lungim

nclude "indnclude <connclude <std

id main() int i,n;

printf("\nNfflush(stdigets(nume);

Extinde();

]; rupa: "); &gr); (stdin)) um,"%d.txt"um,"w"); d); ,"\n%20c Lir); ,"\n%-10s %

&x); of(ind)) upa==gr) tf(g,"\n%10=0;(i<20)&&intf(g,"%2d

(&x);

; nLista curs

nGrupa: ");",&gr);

();

Apasa o tast

rea unei notematricol. No

mea maximă.

exat.cpp" io.h> lib.h>

umele fisien);

",gr);

ista cursan

%-35s An No

0s %35s %2d&(x.note[i]d ",x.note[

santilor gr

;

ta");

e pentru un ota va fi adău.

erului inde

ntilor inre

ote\n","Cod

d ",x.cheie]);i++) [i]);

rupei %d se

student: stuugată la sfîrș

exat:");

egistrati pe

matr.","N

e, x.nume, x

e afla in f

udentul este ișitul vectorul

entru grupa

ume si pren

x.an);

isierul

identificat plui de note, d

Aplicații

a

nume");

rin inter-dacă nu s-

Page 56: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

O i { } T i p g w { } C p g}

4.5mărvecși s

#in#in

gramarea calcul

Open_index(if(f==NULL){ printf("\ return; }

TCHEIE c; int nr; printf("\nCgets(c); while(!feof{ if(SeekKe { ReadSec printf( printf( printf( printf( for(i=0 print if(i<20 { print scanf Rewri print } else print printf( } else printf( printf("\ gets(c); } Close_index

printf("\nAgetch();

.6. Înscrierrul grupei, ap

ctorul de notee va trece la

nclude "indnclude <con

latoarelor

); nFisierul p

od matricol

(stdin)) y(c)) (&x); "\nAm gasit"\nNume "\nAn si gr"\nNote ;(i<20)&&(xf("%2d ",x) f("\nNoua n("%d",&x.noteKey(x); f("\nS-a ad

f("\nStuden"\n");

"\nNu e inrn\nCod matr

();

Apasa o tast

rea notelor ppoi, pentru fe nu mai esturmătorul st

exat.cpp" io.h>

poate fi de

l: ");

t studentul : %-35

rupa : %2d : ");

x.note[i]);.note[i]);

nota: "); ote[i]);

daugat nota

ntul are de

registrat uricol: ");

ta");

pentru o grupfiecare studete loc pentru tudent.

eschis");

l:\n"); 5s",x.nume)/ %4d",x.a

;i++)

a");

eja destule

un cursant

pă de studențnt se afișeazîncă una, se

; n,x.grupa)

e note");

cu acest co

ți: de la tastază numele și e va afișa un

;

od matricol

atură se introse cere nota

n mesaj cores

102

l.\n");

oduce nu-a. Dacă în spunzător

Page 57: Cristian Uscatu - Fisiere

Încă î

n luc

ru103 Aplicații

#include <stdlib.h> void main() { int i,n; printf("\nNumele fisierului indexat:"); fflush(stdin); gets(nume); Extinde(); Open_index(); if(f==NULL) { printf("\nFisierul poate fi deschis"); return; } int gr; printf("\nGrupa: "); scanf("%d",&gr); while(!feof(stdin)) { rewind(ind); ReadSec(&x); while(!feof(ind)) { if(x.grupa==gr) { printf("\nAm gasit studentul:\n"); printf("\nNume : %-35s",x.nume); printf("\nAn si grupa : %2d / %4d",x.an,x.grupa); printf("\nNote : "); for(i=0;(i<20)&&(x.note[i]);i++) printf("%2d ",x.note[i]); if(i<20) { printf("\nNoua nota: "); scanf("%d",&x.note[i]); RewriteKey(x); printf("\nS-a adaugat nota"); } else printf("\nStudentul are deja destule note, se trece la urmatorul"); printf("\n"); } ReadSec(&x); } printf("\nGrupa: "); scanf("%d",&gr); } Close_index(); printf("\nApasa o tasta"); getch();

Page 58: Cristian Uscatu - Fisiere

Încă î

n luc

ruProg

}

4.5ficaexp

#in#in#in voi{ i p f g E O i { } T i c p g w {

gramarea calcul

.7. Eliminaat prin codulplicită a elim

nclude "indnclude <connclude <std

id main() int i,n;

printf("\nNfflush(stdigets(nume);

Extinde(); Open_index(if(f==NULL){ printf("\ return; }

TCHEIE c; int nr; char r; printf("\nCgets(c); while(!feof{ if(SeekKe { ReadSec printf( printf( printf( printf( for(i=0 print printf( r=getch if((r== { Delet print } else print printf(

latoarelor

area unui stul matricol. Pinării.

exat.cpp" io.h> lib.h>

umele fisien);

); nFisierul p

od matricol

(stdin)) y(c)) (&x); "\nAm gasit"\nNume "\nAn si gr"\nNote ;(i<20)&&(xf("%2d ",x"\nConfirma(); 'D')||(r==eKey(c); f("\nCursan

f("\nAnular"\n");

udent (exmatPe ecran se v

erului inde

poate fi de

l: ");

t studentul : %-35

rupa : %2d : ");

x.note[i]);.note[i]); ati sterger

'd'))

ntul a fost

re, cursant

triculare, absva afișa num

exat:");

eschis");

l:\n"); 5s",x.nume)/ %4d",x.a

;i++)

rea? (D / N

t eliminat"

tul ramine

solvire etc.): ele său și se

; n,x.grupa)

N): ");

);

inregistrat

studentul ese va cere con

;

t");

104

ste identi-nfirmarea

Page 59: Cristian Uscatu - Fisiere

Încă î

n luc

ru105

} C p g}

5

} else printf( printf("\ gets(c); } Close_index

printf("\nAgetch();

Teme1

stude2. Scrieți

ților din3. Enunțaț

indexat4. Scrieți

gestiun5. Proiecta

lor de gSugestianterior

"\nNu e inrn\nCod matr

();

Apasa o tast

e . Scrieți pr

ent de la o gruprogramul cntr-o grupă cți o problemtă a acestora.un programe pentru probați o modalitgestiune de bie: folosiți mr și tema 1 di

registrat uricol: ");

ta");

rogramul carupă la alta, înare realizeaz

către o altă grmă de gestiun.

m multifuncțiblema enunțatate mai bun

bază, eliminîmodelul de si

in același sub

un cursant

re realizează n contextul dză operațiunerupă. ne a datelor

ional care săată anterior.

nă (mai genend restricțiilmulare a orgbcapitol.

cu acest co

operațiunea de mai sus. ea de transfe

care să se p

ă realizeze t

erală) de impe incluse în ganizării rela

od matricol

de transfera

erare a tuturo

preteze la org

toate operaț

plementare a exemplul deative din sub

Aplicații

l.\n");

are a unui

or studen-

ganizarea

țiunile de

operații-e mai sus. bcapitolul