Cristian Uscatu - Fisiere
Click here to load reader
-
Upload
andrei-bouariu -
Category
Documents
-
view
269 -
download
8
description
Transcript of 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
.
Î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-
Î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-
Î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
Î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
Î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
Î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
Î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
Î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-
Î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
Î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
Î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
Î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
Î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-
Î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 -
Î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
Î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-
Î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
Î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-
Î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");
Î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
Î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,
Î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
Î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.
Î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();
Î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
Î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-
Î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(); }
Î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-
Î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
Î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;
Î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)
Î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-
Î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-
Î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); }
Î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
Î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.
Î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
Î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.
Î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
Î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-
Î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ă-
Î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
Î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
Î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);
Î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+"); }
Î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;
Î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;
Î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; }
Î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
Î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
Î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.
Î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-
Î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.
Î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-
Î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
Î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();
Î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
Î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