You are on page 1of 39

Universitatea Tehnic a Moldovei

Facultatea de Calculatoare, Informatic si Microelectronic


Catedra Informatica Aplicata
Lucrare de an
La disciplina: Structuri de date i al!oritmi"#
Tema: $relucrarea fisierilor si a structurilor dinamice"#
A efectuat : st.gr.ISBM-131 : Moscalu Adrian
A verificat : conf.univ.: Lucia Stadler

Ci!in"u #$1%

%

A$&'("
)eful catedrei
Informatica aplicat"
***********conf# univ#, dr#, +asie Moraru
Sarcina
La lucrarea de an la disciplina
&Structuri de date !i algoritmi'
Studentul !rupa ISBM-131
1. Tema: $relucrarea fiierelor i a structurilor dinamice#
#. (omeniul structurilor de date:
3. Componentele structurii:
%. Cerin)e: S se ela,ore-e un pro!ram .n C format din func/ii care se afl .n
,i,lioteca utili-atorului i sunt apelate din meniu care se afl .n func/ia main
pentru a reali-a urmtoarele activit/i cu fiiere :
crearea unui fiier ini/ial
formarea a dou fiiere suplimentare
afiarea fiierelor
adu!are .n fiiere
modificarea 0corectarea1 fiierelor
sortarea datelor .n fiiere 0metoda ,ulelor1
ieire din pro!ram
cu liste : crearea unei liste2 inserarea unui element2 ter!erea unui element

3ata .nm4nrii sarcinii 56 fe,ruarie 7%58
Termenul de pre-entare a lucrrii 95 mai 7%58
Conductorul lucrrii ******************** conf# univ#, dr# STA3L:& Lucia
Studentul *********************
5
Cuprins
5#Introducere#############################################################################9
7#Liste;;;;########################################################################<
9#Liste circulare simplu inlantuite############################################5%
8#Tipuri de fisiere#####################################################################58
<#Lucrul cu fiierele#################################################################5<
=#Citirea si scrierea fisierelor###################################################5>
>#Ster!erea, redenumirea si crearea fisierelor##########################75
6#Listin!ul pro!ramului###########################################################77
?#&e-ultatul final;;##############################################################97
Conclu-ii############################################################################9>
(i,lio!rafie #######################################################################96
7
1.Introducere
Scrierea unui pro!ram intr@un lim,aA de pro!ramare este doar primul pas
dintr@un proces care mai cuprinde si alti pasi# Mai corect ar fi sa spunem
scrierea unei versiuni initiale a pro!ramului, pentru ca intotdeauna aceasta
forma initiala este corectata, modificata sau eBtinsa pentru eliminarea unor
erori, pentru satisfacerea unor noi cerinte sau pentru im,unatatirea performantelor
in eBecutie#
Un pro!ram scris intr@un lim,aA independent de masina 0C, $ascal, s#a#1
tre,uie mai intai tradus de catre un pro!ram translator sau compilator#
Compilatorul citeste si anali-ea-a un teBt sursa 0de eBemplu in lim,aAul C1 si
produce un modul o,iect 0scris intr@un fisier1, daca nu s@au !asit erori in teBtul
sursa# $entru pro!ramele mari este u-ual ca teBtul sursa sa fie format din mai
multe fisiere sursa, care sa poata fi scrise, compilate, verificate si modificate
separat de celelalte fisiere sursa#
Mai multe module o,iect, re-ultate din compilari separate sunt le!ate
impreuna si cu alte module eBtrase din ,i,lioteci de functii standard intr@un
pro!ram eBecuta,il de catre un pro!ram numit editor de le!aturi 0LinCer" sau
(uilder"1# :Becutia unui pro!ram poate pune in evidenta erori de lo!ica sau
chiar erori de pro!ramare care au trecut de compilare 0mai ales in lim,aAul C1#
Cau-ele erorilor la eBecutie sau unor re-ultate !resite nu sunt de o,icei
evidente din cau-a ca ele sunt efectul unui numar mare de operatii efectuate de
calculator# $entru descoperirea cau-elor erorilor se poate folosi un pro!ram
depanator 03e,u!!er"1 sau se pot insera intructiuni de afisare a unor re-ultate
intermediare in pro!ramul sursa, pentru trasarea evolutiei pro!ramului#
Fa-ele de modificare 0editare1 a teBtului sursa, de compilare, linCeditare si
eBecutie sunt repetate de cate ori este necesar pentru a o,tine un pro!ram corect#
3e fapt, testarea unui pro!ram cu diverse date initiale poate arata pre-enta unor
erori si nu a,senta erorilor, iar efectuarea tuturor testelor necesare nu este posi,ila
pentru pro!rame mai compleBe 0pentru# un compilator sau un editor de teBte, de
eBemplu1#
$ro!ramele compilator si linCeditor pot fi apelate in mod linie de comanda
sau prin selectarea unor optiuni din cadrul unui mediu inte!rat de de-voltare a
pro!ramelor 0I3: D Inte!rated 3evelopment :nvironment1#
Alte pro!rame utili-ate in procesul de de-voltare a unor aplicatii mari sunt:
@ pro!ram ,i,liotecar pentru crearea si modificarea unor ,i,lioteci de su,pro!rame
pe ,a-a unor module o,iect re-ultate din compilare#
@ pro!ram pentru eBecutia unor fisiere de comen-i necesare pentru compilarea
selectiva si re@crearea pro!ramului eBecuta,il, dupa modificarea unor fisiere
sursa sau o,iect 0maCe"1#
@ pro!ram de control al versiunilor succesive de fisiere sursa#
Lim,aAul C s@a impus .n principal datoritE eBistentei unui standard care
contine toate facilitEtile necesare unui lim,aA pentru a putea fi folosit .ntr@o mare
diversitate de aplicatii, fErE a fi necesare a,ateri sau eBtinderi fatE de standard
9
0ca-ul lim,aAului $ascal1# Un eBemplu este recunoasterea posi,ilitEtii ca un
pro!ram sE fie format din mai multe fisiere sursE si a compilErii lor separate,
inclusiv referiri dintr@un fisier .n altul# In plus, eBistE un numEr relativ mare de
functii u-uale care fac parte din standardul lim,aAului si care contri,uie la
porta,ilitatea pro!ramelor C#
Lim,aAul C permite un control total asupra operatiilor reali-ate de procesor
si asupra functiilor sistemului de operare !a-dE, aproape la fel ca si lim,aAele de
asam,lare# Astfel se eBplicE de ce maAoritatea pro!ramelor de sistem si utilitare
sunt scrise de mai multi ani .n lim,aAul C, pe l4n!E multe pro!rame de aplicatii#
Lim,aAul C permite scrierea unor pro!rame foarte compacte, ceea ce poate fi
un avantaA dar si un de-avantaA, atunci c4nd pro!ramele devin criptice si !reu de
.nteles# Scurtarea pro!ramelor C s@a o,tinut prin reducerea numErului de cuvinte
cheie, prin eBistenta unui numEr mare de operatori eBprimati prin unul sau prin
douE caractere speciale dar si prin posi,ilitatea de a com,ina mai multi operatori si
eBpresii .ntr@o sin!urE instructiune 0acolo unde alte lim,aAe folosesc mai multe
instructiuni pentru a o,tine acelasi efect1#
3in perspectiva timpului se poate spune cE instructiunile C sunt o reusitE a
lim,aAului 0si au fost preluate fErE modificari de multe alte lim,aAe : CFF, Gava
s#a#1 dar functiile de intrare@iesire 0printf,scanf1 nu au fost un succes 0si au fost
.nlocuite .n alte lim,aAe1# Un alt neaAuns s@a dovedit a fi necesitatea ar!umentelor
de tip pointer pentru functiile care tre,uie sE modifice o parte din ar!umentele
primite si a fost corectat prin ar!umente de tip referintE# Utili-area directE de
pointeri 0adrese de memorie1 de cEtre pro!ramatorii C corespunde lucrului cu
adrese de memorie din lim,aAele de asam,lare si permite operatii imposi,ile .n alte
lim,aAe, dar .n timp s@a dovedit si o sursE importantE de erori la eBecutie, !reu de
depistat#
Au mai fost preluate .n lim,aAele post@C si anumite conventii, cum ar fi
diferenta dintre litere mici si litere mari, diferenta dintre caractere individuale si
siruri de caractere 0si terminarea sirurilor de caractere cu un octet -ero1, operatorii,
comentariile s#a#

8
#. Liste
Aspecte teoretice. (efini)ie. *pera)ii asupra listelor
' list L e o secven/ de -ero sau mai multe elemente, numite noduri, toate
fiind de acelai tip de ,a-a T# LDa
5
,a
7
,###,a
n
0nHD%1
3ac nHD5, a
5
se spune c este primul nod al listei, iar a
n
, ultimul nod# 3aca
nD%, lista este vida#
' proprietate important a unei liste este aceea c nodurile sale pot fi ordonate
liniar func/ie de po-i/ia lor .n cadrul listei# Se spune c a
i
precede pe a
iF5

0iD5,7,###,n@51, iar a
i
succede pe a
i@5
0iD7,9,###,n1, a
i
afl4ndu@se pe po-i/ia i#
Se postulea-0presupune1 eBistenta po-i/iei urmtoare ultimului element al
listei i se introduce func/ia FII0L1 ce va returna po-i/ia urmtoare po-i/iei n din
lista L de n elemente#
Folosind nota/iile anterioare i not4nd x0de tip T1 un nod al listei, iar p fiind
de tip po-i/ie, se introduce urmtorul set repre-entativ de operatori aplica,ili
o,iectelor de tip lista:
IIS:&:AJA0L,B,p1@ inserea- .n lista L nodul x, .n po-i/ia p2
dac LDa
5
,a
7
,###,a
n
, .n urma inser/iei:
pKFII0L1,LDa
5
,###,a
p@5
,B,a
pF5
,###,a
n
pDFII0L1,LDa5,###,an,B
pHFII0L1,re-ultatul inser/iei este imprevi-i,il#
Implementarea listelor . Structuri recursive de tip list"
Cu aAutorul tipului pointer, se definete structura unui nod al listei liniare care
apare ca o structur recursiv, av4nd o component de tip identic cu al
structurii complete#
tLpe $ointerIodDMIod2
IodDrecord
cheie:TipCheie2
urmator:$ointerIod2
info:TipInfo
end2
var nceput:$ointerIod2
Caracteristica unei astfel de structuri const .n pre-enta unei sin!ure
.nln/uiri# C4mpul cheie servete la identificarea nodului0 acest c4mp poate face
parte din informa/ia util, el este utili-at .n ca-ul cutrilor, sortrii;1, c4mpul
urmtor e pointer de .nln/uire la nodul urmtor, iar cel info con/ine informa/ia
util#
+aria,ila nceput indica spre primul nod al listei2 .n unele situa/ii .n locul lui
nceput se utili-ea- un nod fictiv, adic o varia,ila de tip nod cu c4mpurile cheie
i info nepreci-ate, dar c4mpul urmtor indic4nd spre primul nod al listei#
3e asemenea uneori e util a se pstra pointerul spre ultimul nod al listei#
<
' varianta este a listelor circulare la care dispare no/iunea de prim, ultim
nod#
Tenici de inser)ie a nodurilor !i de creare a listelor +nl"n)uite
a1inser/ia unui nod la .nceputul listei
3ac nceput e varia,ila pointer ce indica spre primul nod al listei, iar q o
varia,ila auBiliara de tip pointer, secven/a urmtoare reali-ea- inser/ia la
.nceputul listei i actuali-ea- pointerul .nceput:
new(q); {creeaz spaiu pentru un nou nod}
q^.urmator:inceput;
{asi!narea c"mpuri#or cheie $i info}
inceput:q;
Secven/a e corect i pentru inser/ia .ntr@o list vid, ca- .n care inceputDnil
0nil fiind pointerul vid, care nu se refera la nici o varia,il indicat1#
,1inser/ia unui nod la sf4ritul listei
3evine mai simpl dac se pstrea- o varia,il sf"r$it indic4nd spre ultimul
nod al listei:
new(q); {creeaz spatiu pentru nou# nod u#tim a# #istei}
sfirsit^.urmator:q;
q^.urmator:ni#;
{asi!narea c"mpuri#or cheie $i info}
sfirsit:q;
$entru inser/ia la sf4ritul listei e necesara eBistenta a cel pu/in un nod, care se
creea- prin procedura de la para!raful anterior#
c1inser/ia unui nod dup unul indicat 0p1
: simpl pentru c se cunoate pointerul spre nodul anterior i spre cel urmtor
celui ce se inserea- 0pointerul spre nodul urmtor e valoarea c4mpului urmtor al
nodului indicat1#
new(q);
q^.urmator:p^.urmator; {#e!m nodu# de nodu# anterior}
p^.urmator:q; {#e!m nodu# anterior de q}
d1inser/ia unui nod .n fata unui nod indicat
$rintr@un artificiu, se reduce acest ca- la cel anterior: se inserea- un nod dup
cel indicat, cheia i informa/ia din nodul indicat fiind atri,uite noului nod inserat
i fiind .nlocuite cu valorile nodului ce tre,uia inserat#
Tenici de suprimare
a1 Suprimarea nodului urmtor celui indicat de o varia,ila pointer q se face
astfel:
p:q^.urmator; {punem un indicator ctre nodu# care urmeaz a fi $ters}
=
q^.urmator:q^.urmator^.urmator;{nodu# anterior ce#ui ce urmeaz a fi $ters
pointeaz ctre nodu# urmtor acestuia}
dispose(p);{ e#i%erm memoria ocupat de nod}
$entru a eli,era memoria ocupat de nodul care va fi ters mai avem nevoie de un
pointer spre acest nod# 3up ce s@a fcut ruperea le!turilor se eli,erea- memoria
cu dispose#

,1 Suprimarea nodului indicat de o varia,il pointer q se face astfel:
p:q^.urmator;{se memoreaz #e!tura ctre nodu# urmtor}
q^:q^.urm^;{se copiaz coninutu# nodu#ui urmtor peste ce# curent}
dispose(p);{se deza#oc memoria}
Aceast metod nu poate fi utili-at pentru ultimul nod din list#
Traversarea unei liste +nl"n)uite
3ac nodul de .nceput al listei e indicat de varia,ila nceput, o varia,ila
auBiliara q, care parcur!e toate nodurile listei p4n c4nd valoarea ei devine nil,
permite accesul la fiecare nod i efectuarea opera/iei specifice traversrii#

Aplicatii ale listelor +nl"n)uite
Liste ordonate i reor!ani-area listelor
a1Cutarea intr@o lista neordonat2 tehnica fanionului#
Se considera o lista simplu .nln/uita, cu nodurile de tip Iod# 3aca .nceput
indica spre primul nod al listei, iar ordinea cheilor .n lista este aleatoare,
cutarea unei chei implica traversarea listei# Func/ia ,ooleana !sit returnea-
valoarea true i pointerul spre nodul cu cheia e!ala cu cea cutat, dac un astfel
de nod eBist i valoarea false .n ca- contrar:
function !asit0val:TipCheie2var po-:$ointerIod1:,oolean2
var found:,oolean2
,e!in
po-:Dinceput2found:Dfalse2
Nhile 0po-KHnil1 and not found do
if po-M#cheieDval then found:Dtrue
else po-:Dpo-M#urmator2
!asit:Dfound
end2
Cutarea se poate perfec/iona prin utili-area metodei fanionului, lista
prelun!indu@se cu un nod fictiv numit fanion, la creare lista con/in4nd acest unic
>
nod# On func/ia !asit, .nainte de ,aleierea listei, informa/ia cutat se introduce
.n
cheia nodului fanion, astfel .nc4t va eBista cel pu/in un nod cu cheia cutat:
var fanion:$ointerIod2
###
function !asit0val:TipCheie2var po-:$ointerIod1:,oolean2
,e!in
po-:Dinceput2fanionM#cheie:Dval2
Nhile po-M#cheieKHval do po-:Dpo-M#urmator2
!asit:Dpo-KHfanion
end2
,1Crearea unei liste ordonate2 tehnica celor doi pointeri
.n continuare se pre-int o metod foarte simpla pentru crearea unei liste
ordonate, tipurile $ointerIod i Iod fiind cele definite anterior# Lista se
ini/iali-ea- cu doua noduri fictive pointate de doua varia,ile pointer, inceput i
fanion:
var inceput, fanion:$ointerIod2
procedure init2
,e!in
neN0inceput12
neN0fanion12
inceputM#urmator:Dfanion
end2
$entru introducerea unei noi chei .n list, pstr4nd ordonarea, se va scrie o
func/ie !asit, care dac !sete cheia .n list returnea- valoarea true i pointerii
p& spre nodul !asit i p' spre cel anterior, respectiv .n ca-ul ne!asirii cheii,
valoarea false i pointerii p& i p' spre nodurile intre care tre,uie fcut inser/ia:
function !asit0val:TipCheie2var p5,p7:Tip$ointer1:,oolean2
,e!in
p7:Dinceput2
p5:Dp7M#urmator2
fanionM#cheie:Dval2
Nhile p5M#cheieKval do
,e!in
p7:Dp52
p5:Dp7M#urmator
end2
!asit:D0pM#cheieDval1 and 0p5KHfanion1
end2
6
Fra!mentul de pro!ram ce inserea- o noua cheie este:
var p5,p7,p9:$ointerIod2val:TipCheie2
###
if not !asit0val,p5,p71 then
,e!in
neN0p912
p7M#urmator:Dp92
Nith p9M do
,e!in
cheie:Dval2
PinfoQ
urmator:Dp5
end
end2
$entru o tiprire a cheilor dintr@o list ordonat astfel creat, pointerul ce
parcur!e nodurile tre,uie sa fie ini/iali-at cu valoarea pointerului spre primul
nod efectiv al listei, urmtor celui .nceput, iar parcur!erea listei se face p4n la
.nt4lnirea nodului fanion:
var p:$ointerIod2
###
p:DinceputM#urmator2
Nhile pKHfanion do
,e!in
Pprelucrare nodQ
p:DpM#urmator
end2
c1tehnica de cutare .n list cu reordonare
On compilatoare, structurile de date de tip list liniar sunt foarte avantaAoase
.n crearea i eBploatarea listei identificatorilor# Conform principiului
locali-rii, apari/ia unui identificator oarecare .n teBtul sursa, poate fi urmata cu
mare pro,a,ilitate de una sau mai multe reapari/ii#
$ornind de la acest principiu, s@a conceput metoda de cutare cu
reordonare, care consta .n aceea ca ori de c4te ori un identificator se caut i se
!sete .n list, el se aduce la .nceputul listei, astfel .nc4t la proBima apari/ie, deci
cutare, el se va !si la .nceputul listei, iar dac nu s@a !sit se inserea- la
.nceputul listei#
?
3. Liste circulare simplu inlantuite
' lista circulara simplu inlantuita este o lista in care ultimul element contine
campul ce adresea-a elementul urmator, adresa primului element#
1.1. (efinirea unei liste circulare simplu inlantuite
TLpe lista D Mnod2
nod D record
inf: inte!er2
adr: lista2
end2
var pr: lista2
Crearea unei liste circulare se reali-ea-a in mod asemanator cu o lista liniara
simplu inlantuita, cu deose,irea ca ultimul element adau!at in lista nu va mai avea
in campul de adresa valoarea IIL, ci adresa primului element adau!at#
1.#. Crearea unei liste circulare cu numar cunoscut de elemente
+om crea mai intai primul element al listei# Folosind un ciclu for vor fi
adau!ate la sfarsitul listei celelalte elemente# In final campul de adresa al ultimului
element adau!at va contine adresa primului element#
+om utili-a pointerii : pr R contine adresa primului element adau!at in lista2
u# R contine adresa ultimului element adau!at in lista2 p R contine adresa
elementului ce se adau!a#
$rocedure creare 0var p:lista12
+ar p, ul : lista2
i: inte!er2
,e!in
neN0pr12
readln0prM#inf12
ul:Dpr2
for i :D 5 to n@5 do ,e!in
neN0p12 readln0pM#inf12
ulM#adr:Dp2
ul:Dp2
5%
inf5 adr7 inf7 adr9 inf9 adr5
end2
ulM#adr:pr2
end2
1.3. Afisarea elementelor unei liste circulare
$arcur!em nodurile listei cu aAutorul unui pointer care plecand de la un
element al listei, va referi pe rand fiecare nod al listei, pana cand va adresa nodul
de pornire#
,arcurgerea folosind un ciclu -ile
$rocedure parc5 0pr:lista12
var p:lista2
,e!in
p:Dpr2
Nhile 0pM#adrKHpr1 do ,e!in
Nrite 0pM#inf,S S12 p:D pM#adr2
end2
Nrite 0pM#inf12
end2
,arcurgerea folosind un ciclu repeat
$rocedure parc7 0pr:lista12
var p:lista2
,e!in
p:Dpr2
repeat
Nrite 0pM#inf,S S12
p:DpM#adr2
until pDpr2
end2
1.%. Adaugarea unui element intr-o lista circulara
Sa se scrie un su,pro!ram ce reali-ea-a inserarea unui nod dupa elementul
de cheie ( dintr@o lista circulara#
',servam ca intr@o lista circulara putem accesa toate elementele listei
pornind din orice nod al acesteia# Avand in vedere acest lucru, pentru a evita
tratarea ca-ului particular de inserare inainte primului element, vom parcur!e lista
prin intermediul lui pr, salvand adresa primului element intr@o varia,ila p#
$rocedure adau! 0var pr:lista2 C:inte!er12
var p: lista2
,e!in
55
p:Dpr:
repeat
if prM#infDC then ,e!in
neN0T12 readln0TM#inf12
TMadr:D prM#adr2
pr:Dp2
end2
else pr:DprM#adr2
until 0prDp12
end2
1... /liminarea elementelor dintr-o lista circulara
Sa se scrie un su,pro!ram ce reali-ea-a eliminarea elementelor de cheie para
dintr@o lista circulara#
In situatia in care toate elementele sunt pare lista devine vida# $unem in
evidenta acest lucru prin pr:ni## $arcur!em lista prin pr, po-itionandu@ne pe
elementul anterior care tre,uie sters#
$rocedure elimin 0var pr:lista12
var p,T:lista2
,e!in
p:Dpr2
Nhile prM#adrKHp do
if prM#adrM#inf mod 7 D % then ,e!in
Pse elimina prM#adrQ
T:DprM#adr2
prM#adr:DTM#adr2
dispose0T12
end
else pr:DprM#adr2
if pM#adrDpr then ,e!in
Plista are un sin!ur elementQ
if prM#inf mod 7 D % the ,e!in
dispose0pr12
pr:Dnil2
end
end
else
Pse verifica daca nodul de pornire este par, situatie in care se eliminaQ
prM#inf mod 7 D % then ,e!in
dispose0p12
end2
end2
57
1.0. Crearea unei liste circulare cu numar necunoscut de elemente
Se sa fisierul )umere.in# Sa se cree-e o lista circulara simplu inlantuita ce
contine numerele pare din fisier#
tLpe lista D Mnod2
nod D record
inf:inte!er2
adr:lista2
end2
var pr:lista2 f:teBt2
procedure creare 0var pr:lista12
var p,ul:lista2 C:inte!er2
,e!in
assi!n0f,Snumere#inS12 reset0f12
pr:Dnil2
Nhile not seeCof0f1 do ,e!in
read0f,C12
if C mod 7D% then ,e!in
neN0p12
pM#inf:DC2
if prDnil then ,e!in
pr:Dp2
ul:p2
end
else ,e!in
ulM#adr:Dp2 ul:Dp2
end2
end2
end2
ulM#adr:D pr2 close0f12
end2
procedure parc 0pr:lista12
var p:lista2
,e!in
p:Dpr2
repeat
Nrite 0pM#inf, S S12
p:DpM#adr2
until pDpr2
end2
,e!in PmainQ
creare 0pr12
parc 0pr12
end#
59
%.Tipuri de fisiere
Un fisier 0UFileU1 este o colectie de date memorate pe un suport eBtern si care este
identificatE printr@un nume# Fisierele se folosesc fie pentru date initiale si pentru
re-ultate mai numeroase, fie pentru pEstrarea de duratE a unor date de interes
pentru anumite aplicatii#
Fisierele sunt entitEti ale sistemului de operare si ca atare ele au nume care
respectE conventiile sistemului, fErE le!EturE cu un lim,aA de pro!ramare#
'peratiile cu fisiere sunt reali-ate de cEtre sistemul de operare, iar compilatorul
unui lim,aA traduce functiile 0instructiunile1 de acces la fisiere .n apeluri ale
functiilor sistem# $ro!ramatorul se referE la un fisier printr@o varia,ilE2 tipul acestei
varia,ile
depinde de lim,aAul folosit si chiar de functiile utili-ate 0.n C1# Asocierea dintre
numele eBtern 0un sir de caractere1 si varia,ila din pro!ram se face la deschiderea
unui fisier, printr@o functie standard# 3e o,icei prin UfisierU se su,.ntele!e un fisier
disc 0pe suport ma!netic sau optic1, dar notiunea de fisier este mai !eneralE si
include orice fluB de date din eBterior spre memorie sau dinspre memoria internE
spre eBterior# 3ispo-itivele periferice u-uale au nume de fisiere predefinite2 de
eBemplu, .n lim,aAul C su, MS@3'S si MS@VindoNs se pot folosi urmEtoarele
nume :
C'I D consola sistem 0tastaura la citire si monitor la scriere1
$&I 0L$T1 D imprimanta sistem
$entru fisierele disc un nume de fisier poate include urmEtoarele:
@ Iumele unitEtii de disc sau partitiei disc 0 eB: A:, C:, 3:, ::1
@ UCaleaU spre fisier, care este o succesiune de nume de fisiere catalo!
0director1, separate printr@un caracter 0WXW .n MS@3'S si MS@VindoNs, sau WYW .n
UniB si LinuB1
@ Iumele propriu@-is al fisierului 0 maB 6 litere si cifre .n MS@3'S1
@ :Btensia numelui, care indicE tipul fisierului 0continutul sEu1 si care poate
avea .ntre % si 9 caractere .n MS@3'S1#
:Bemple de nume de fisiere disc:
A:,c#rar , c:X,orlandcX,inX,c#eBe
c:XNorCXp5#cpp , c:XNorCXp5#o,A
Sistemele MS@3'S si MS@VindoNs nu fac deose,ire .ntre litere mari si litere
mici, .n cadrul numelor de fisiere, dar sistemele de tip UniB sau LinuB fac
deose,ire .ntre litere mari si litere mici#
Consola si imprimanta sunt considerate fisiere teBt, adicE:
@ .ntre aceste fisiere si memorie se transferE caractere ASCII
@ se recunoaste caracterul sf4rsit de fisier 0Ctrl@J .n MS@3'S si MSVindoNs,
Ctrl@3 .n UniB1
@ se poate recunoaste la citire un caracter terminator de linie 0WXnW1#
Un fisier teBt pe disc contine numai caractere ASCII, !rupate .n linii si este
terminat printr@un caracter terminator de fisier 0Ctrl@J1, adEu!at automat la
.nchiderea fisierului, dupE scriere .n fisier# Functiile de citire sau de scriere numere
58
dinYin fisiere teBt reali-ea-E conversia automatE din format eBtern 0sir de caractere1
.n format intern 0,inarL vir!ulE fiBE sau vir!ulE mo,ilE1 la citire si conversia din
format intern .n format eBtern, la scriere#
Fisierele disc pot contine si numere .n repre-entare internE 0,inarE1 sau alte date ce
nu repre-intE numere 0de eBemplu, fisiere cu ima!ini !rafice, .n diverse formate1#
Aceste fisiere se numesc fisiere ,inare, iar citirea si scrierea se fac fErE conversie
de format# $entru fiecare tip de fisier ,inar este necesar un pro!ram care sE
cunoascE si sE interprete-e corect informatiile ,inare din fisier#
Fisierele disc tre,uie deschise si .nchise, dar fisierele consolE si imprimanta nu
tre,uie deschise si .nchise#
.. Lucrul cu fi!ierele
a1(esciderea fisierelor 2 functia fopen 3 1
FIL: Zfopen0char Znume*fisier, char Zmod12
Functia primeste in nume*fisier un pointer spre numele fisierului si un pointer, mod,
spre un sir de caractere care defineste modul de acces si returnea-a un pointer spre
fisier, daca operatia a decurs normal sau IULL, daca fisierul nu se poate deschide#
Acest pointer tre,uie testat inainte de a trece la alte prelucrari pentru a ne asi!ura ca
deschiderea s@a facut corect# +alorile pentru mod sunt date in ta,elul alaturat#
+alorile posi,ile care definesc modul de acces
Mod R Semnificatie
r @ deschiderea unui fisier teBt pentru CITI&: 0read1
N @ deschiderea unui fisier teBt pentru SC&I:&: 0Nrite1
a @ deschiderea unui fisier teBt pentru A3AU[A&: 0append1 dupa ultima
intre!istrare#Un fisier ineBistent poate fi creat in modurile N sau a
r\ @ citire si modificare 0scriere1 in mod teBt
N\ @ deschidere pentru modificare in mod teBt
a\ @ deschidere pentru modificare cu scriere la sfarsitul de fisier2 mod teBt
r, @ deschidere pentru citire in mod ,inar
N, @ deschiderea unui fisier pentru modificare in mod ,inar
a, @ adau!are in mod ,inar
r\, @ deschidere fisier ,inar pentru citireYscriere
N\, R deschidere fisier ,inar pentru scriere
a\, R adau!are la un fisier ,inar
5<
:Bista constantele predefinite:
FIL:IAM:*MA], care preci-ea-a lun!imea maBima a numelui unui fisier,
si
F'$:I*MA] care preci-ea-a numarul maBim de fisiere ce pot fi deschise
simultan#
41 Inciderea fisierelor 2 functia fclose 3 1
int fclose0FIL: Zf12
Functia primeste pointerul spre fisier f, o,tinut cu functia fopen01 si returnea-a -ero
daca se incheie cu succes sau R5 in ca- de eroare#
$rin inchiderea fisierului se pierde coneBiunea lo!ica intre pointer si fisier si au loc
operatiile:
5# scrierea datelor nescrise din ,ufferul de iesire in fisier 0tehnica se foloseste pentru
a mari eficienta accesului la fisiere deschise pentru scriereYactuali-are, prin
inlocuirea scrierii in fisier inre!istrare cu inre!istrare, cu scrierea intr@un ,uffer a mai
multor inre!istrari2 la umplerea ,ufferului acesta fiind scris o sin!ura data, automat,
pe disc# 'peratia se numeste *f#ushin! the %uffer* si poate fi apelata eBplicit cu
functia:
int fflush0FIL: Zf12
in scopul de a eli,era -ona tampon a fisierului#
7# a,andonarea datelor necitite din ,ufferul de intrare
9# eli,erarea automata a ,ufferelor alocate fisierelor

c1 5easignarea din program a fisierelor
FIL: Zfreopen0const char Znume*f,const char Zmod, FIL: Zf12
:fectul functiei este inchiderea fisierului pointat de pointerul f si deschiderea unui
nou fisier cu numele preci-at de nume*f in modul de acces dat de mod # $ointerul f
va deveni noul pointer spre fisier# Astfel, prin intermediul aceluiasi pointer f putem
avea acces la fisiere diferite, dar in momente de timp diferite
5=
0. Citirea si scrierea fisierelor
a1 intrari6iesiri la nivel de caracter
a51 int f!etc0FIL: Zf12
int !etc 0FIL: Zf12
Functia returnrea-a codul ASCII al urmatorului caracter citit din fisierul f# Caracterul
este convertit la intre! sau :'F in ca- de eroare sau detectie de sfarsit de fisier#
a71 int fputc0int c, FIL: Zf12
int putc 0int c, FIL: Zf12
Scrie in fisierul f caracterul c ca un unsi!ned char # Se returnea-a caracterul c sau
:'F in ca- de eroare#
a91 int !etchar0void12 @ citeste un caracter de la tastatura
int !etc0stdin12 @ citeste un caracter de la tastatura
int puchar0int c12 @ scrie un caracter pe ecran
int putc0int c, stdout12 @ scrie un caracter pe ecran
41 intrari6iesiri la nivel de sir de caractere
,51 char Zf!ets0char Zs, int n, FIL: Zf12
Citeste n@5 caractere din fisierul f in ta,loul s#Citirea se opreste la detectarea codului
WXnW#Caracterul WXnW se include in s ,apoi se adau!a Wi%W# Se returnea-a un pointer spre
sirul s sau IULL in ca- de eroare sau sfarsit de fisier#
,71 char Z!ets0char Zs12
Citeste o linie de la tastatura in sirul de caractere s # Caracterul WXnW nu se include in s,
dar la sfarsit se adau!a Wi%W#
,91 int fputs0const char Zs, FIL: Zf12
Se scrie sirul s in fisierul f# Se introduce :'F in ca- de eroare sau o valoare po-itiva
sau e!ala cu -ero in rest#
,81 int puts0const char Zs12 @ scrie sirul de caractere s pe ecran
5>
+xemp#u:
Un pro!ram care deschide fisierul de pe unitatea de disc c:, c:teBt#tBt in care se va
scrie un teBt citit de la tastatura# Fisierul se va inchide, apoi se va redeschide pentru
a@l citi si afisa pe ecran# In final fisierul se inchide #
\includeKstdio#hH
\incudeKstdli,#hH
void main0void1
P
FIL: Zf2
char mesaA^=%_, c, Zpsir2
printf0UXn Intoduceti un mesaA de maBim
=% de caractere :ihU12
!ets 0mesaA12
YY deschidem fisierul pentru scriere
if 00f D fopen 0Uc:teBt#tBtU,UNU11 D D IULL1P
printf 0UXn :roare la deschidere fisierU12
eBit 0512
Q
YY scriem in fisier
psir D mesaA2
Nhile0Zpsir1P
if0fputc0ZpsirFF, f1 DD :'F1P
printf 0UXn :roare la scriere in fisierU12
eBit 0512
Q
Q
YY inchidem fisierul
fclose0f12
YY redeschidem fisierul pentru citire
if 00f Dfopen0Uc:teBt#tBtU, UrU11 DD IULL 1 P
printf 0UXn :roare deschidere fisierU12
eBit 0512
Q
YY citim fisierul si scriem pe ecran
Nhile00c D f!etc0f1 `D :'F1 putchar0c12
YY inchidem fisierul
fclose0f12
Q
Se cere sa se rescrie pro!ramul folosind functiile fputs 0 1 si f!ets 0 1 #
c1 intrari6iesiri cu conversie de format
56
c51 int fprintf0 FIL: Zf, const char Zformat, ## ##12
Scrie in fisierul f , conform cu formatul dat, un anumit numar de ar!umente#
Iumarul descriptorilor din format tre,uie sa coincida cu numarul de ar!umente#
+xemp#u:
int ID=2
float rD=#%2
fprintf0fis5, Uaditaf, i, r12 YZ scrie in fisierul pointat de fis5 un
intre!, apoi un ta, si apoi un real ZY
c71 int fscanf0FIL: Zf, const char Zformat,## ###12
Citeste date din fisierul f su, controlul specificatorului de format si atri,uie valorile
ar!umentelor# ,r!umente#e tre%uie sa fie o%#i!atoriu pointeri# Citirea se termina la
epui-area sirului care preci-ea-a specificatorul de format #
+xemp#u:
fscanf0fis7, UafadU, bv, bi12
citeste din fis7 doua varia,ile: prima reala 0af1, a doua intrea!a 0ad1#
d1 intrari6iesiri pentru date 4inare
3esi functiile fprintf0 1 si fscanf sunt foarte utile pentru ca permit scriereaYcitirea
datelor su, controlul unui format, ele au de-avantaAul ca #a transfer rea#izeaza
con-ersia din format intern in format ,./00 si in-ers# Aceasta conversie duce la
cresterea timpului de acces la informatiile din fisiere sca-and vite-a de prelucrare#
Fisierele create cu aceste functii vor fi mai mari decat cele create cu functii in care
datele sunt scrise in format intern #
Functiile fread0 1 si fNrite0 1 permit citirea si scrierea fara nici o conversie si fara a
face vreo interpretare a datelor# Astfel, fisierul va fi eBact ima!inea datelor din
memorie# Se utili-ea-a notiunea de articol pentru a referi o varia,ila simpla sau
compusa de lun!ime fiBa#
d51 unsi!ned fread0void Zp,unsi!ned dim,
unsi!ned nr*artic, FIL: Zf1 2
Citeste un numar de nr*artic articole, fiecare de lun!ime dim octeti, din fisierul f
intr@o -ona de memorie pointata de pointerul p# Functia returnea-a numarul de
articole citite corect sau R5 in ca- de eroare #
1%ser-atii:
5?
@ pointerul p tre,uie sa pointe-e spre un tip de varia,ila in concordanta cu tipul
articolului sau catre o -ona de memorie alocata cu malloc0 12
@ pentru a prelucra fisiere ,inare ele se vor deschide in modul , 0modul ,inar1:
N, R creare
r, R citire
r\, R citireYscriere
N\, R scriere , modificare
a\, R adau!are
+xemp#u:
fread0bi, 7, 5, fis12 YZ citeste din fisierul fis 5 articol de 7 octeti si@i
depune in varia,ila i 0intre!1 ZY
p D malloc0812
fread0p, 8, 5, fis12 YZ citeste din fisierul fis 5 articol de 8 octeti si@i depune la adresa
data de p 0real1 ZY
d71 unsi!ned fNrite0void Zp, unsi!ned dim,
unsi!ned nr*artic, FIL: Zf12
Scriem in fisierul f un numar de nr*artic articole, fiecare de lun!ime dim octeti,
articole preluate din -ona de memorie pointata de p #
7%
7. Stergerea 8 redenumirea si crearea fisierelor
a1 int remove0const char Znume*fis12
int unlinC0const char Znume*fis12
Se ster!e fisierul cu numele nume*fis si se returnea-a % la reali-area cu succes a
functiei sau diferit de -ero % in ca- de eroare#
:Bemplu:
char nume*fis^57_
printf0UXnIntroduceti numele fis de sters:U12
!ets0nume*fis12
remove0nume*fis12
,1 int rename0const char Znume*nou,
const char Znume*vechi12
&edenumeste fisierul specificat de nume*vechi cu un alt nume, nume*nou#
c1 FIL: Ztempfile0void12
Se creea-a un fisier temporar in modul UN,\U, care se va ster!e automat la
inchiderea sau terminarea normala a pro!ramului# Functia intoarce un pointer la
fisier sau IULL in ca- de eroare# Apeluri succesive vor deschide fisiere distincte#
Functia este utili-ata in special atunci cand se manevrea-a un volum mare de date
care nu incape in memorie si pentru care este necesara crearea unor fisiere de
manevra pe disc# Aceste fisiere sunt transparente pentru utili-ator, ele fiind doar
-one de memorare temporara a datelor#
$entru lucrul cu mai multe fisiere care se !asesc in acelasi director eBista functiile:
findfirst R 0se apelea-a o sin!ura data1 po-itionea-a pointerul de fisiere pe
primul fisier care indeplineste anumite conditii le!ate de nume !eneric 0 Z#eBe, Z#Z1
75
8. Listingul programului
\include Kstdio#hH
\include Kconio#hH
\include Kstrin!#hH
\include Kstdli,#hH
\include KctLpe#hH
YYelementele listei@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tLpedef struct pacient*
P char nume*pacient^7%_2
char data*intern^5<_2
char sec*intern^5<_2
lon! nr*politei2
int an*nastere2
struct pacient* ZIeBt5, Z(acC52
Q pacient2
pacient ZFirst5DIULL, ZLast5DIULL2
YYstructura ce contine lista@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tLpedef struct List*
P pacient data2
struct List* ZIeBt, Z(acC2
Q List2
List ZFirstDIULL, ZLastDIULL2
const char ZfileDUpacient#tBtU2
int iConstr2
int operatie2
FIL: Zf2
int alocare0pacient Zitem12
pacient inc0pacient Constr12
int adau!are*pacient0pacient Constr, int i12
int creare0void12
int afisare0void12
int adau!are0void12
int salvare0List ZpFirst12
int open0void12
int sortare0void12
int cautare0List Zspital12
int modificare0void12
int eliminare0void12
int ster!e0void12
void meniu0void12
void contin0List ZConstr12
YYfunctiile@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int main01
P teBtcolor0c:LL'V12
Nhile051
P meniu012
fflush0stdin12
sNitch0operatie1
P case 5: clrscr012
77
puts0UXnXnXt(AJA 3: 3AT: A $ACI:ITIL'& UI:I
S:CTII 3: S$ITALXnXnU12
creare012 ,reaC2
case 7: clrscr012
afisare012 ,reaC2
case 9: open012 ,reaC2
case 8: clrscr012
adau!are012clrscr012
afisare012
,reaC2
case <: clrscr012
sortare012
clrscr012
afisare012
,reaC2
case =: clrscr012
cautare0First12 ,reaC2
case >: clrscr012
modificare012
clrscr012
afisare012
,reaC2
case 6: clrscr012
ster!e012 ,reaC2
case ?: salvare0First12 ,reaC2
case 5%: clrscr012
eliminare012
afisare012
,reaC2
case %: int C2
clrscr012
printf0UXnXt3oriti sa salvati schim,arile inainte de
iesiredXnU12
printf0UXnXt5@ 3a 7@ IuXnU12
scanf0UadU,bC12
if0CDD51
P salvare0First12
eBit0%12
Q
if0CDD71 eBit0%12
default: printf0UXnXnXtS@a produs o eroare#U
UXnXtXtApasati orice tasta pentru reintoarcere#U12
!etch012 ,reaC2
Q
Q
return %2
Q
YYalocare de memorie@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int alocare0pacient Zitem1
P List ZIeN*item2
IeN*item D 0List Z1malloc0si-eof0List112
if0`IeN*item1
79
P printf0UXnXtS@a produs o eroare#U
UXnXtMai incearca o data `U12
!etch012 return %2
Q
IeN*item@Hdata D Zitem2
if 0First1
First@H(acC D IeN*item2
0ZIeN*item1#(acC D IULL2
0ZIeN*item1#IeBt D First2
First D IeN*item2
return 52
Q
YYintroducerea datelor despre pacient@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
pacient inc0pacient Constr1
P fflush0stdin12
printf0UXnXtIumele pacientului: U12
scanf0Ua5<sU, Constr#nume*pacient12
fflush0stdin12
printf0UXt3ata*internarii as: U, Constr#nume*pacient12
scanf0Ua5<sU, Constr#data*intern12
fflush0stdin12
printf0UXtSec*Internarii as: U,Constr#nume*pacient12
scanf0Ua5<sU, Constr#sec*intern12
fflush0stdin12
printf0UXtIr*politei*de asi!urare as: U,Constr#nume*pacient12
scanf0UaldU, bConstr#nr*politei12
fflush0stdin12
printf0UXtAnul*nasterii as: U,Constr#nume*pacient12
scanf0UadU, bConstr#an*nastere12
fflush0stdin12
return Constr2
Q
YYadau!are pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int adau!are*pacient0pacient Constr, int i1
P int v2
do
P
iFF2
alocare0b0inc0Constr1112
puts0UXnXtMai aveti nevoie de audau!at pacientidU
U 5 @ 3a, % @ IesireXnU12
scanf0UadU,bv12
Q
Nhile 0v12
printf0UXnXtLista cu pacienti este creata si completatata```XnXtTastati o tasta pentru
continuare###XnU12 !etch012
Q
YYcrearea listei de pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int creare01
P pacient Constr2
int iD%,C2
if 0First `D IULL1
78
P printf0UXnXt:Bista deAa o lista,daca continuati U
Uo pierdeti``` XnXt5 @ Continuare %@AnulareXnU12
scanf0UadU,bC12
if 0C`D51return %2
else FirstDIULL2
Q
else
P alocare0b0inc0Constr1112
Q
adau!are*pacient0Constr, i12
return i2
Q
YY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int adau!are01
P pacient Constr2 int iD%2
adau!are*pacient0Constr, i12
return i2
Q
YYsalvarea listei de pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int salvare0List ZFirst1
P pacient Constr2 List Zspital2
int iD52
int r2
spitalDFirst2
if 0fDfopen0file, Ur,U11
P printf0UXnXt:Bista deAa fisier,U
U3aca continuati veti pierde informatia# XnU12
printf0UXnXnXt$entru rvenire tastati@5 XnXt$entru continuare tastati@%XnU12
scanf0UadU,br12
if 0r1 return %2
Q
fDfopen0file, UN,U12
Nhile0spital1
P fNrite0bspital@Hdata, si-eof0pacient1,5,f12
spitalD spital@HIeBt2
FFi2
Q
fclose0f12
printf0UXnXtLista cu pacienti este salvata cu succesU
Uin fisierul KasH```U, file12 !etch012
return %2
Q
YYdeschiderea fisierului pt actiune@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int open01
P pacient constr2
int iD%2
int c2
if 0First `D IULL1
P printf0UXnXtLista eBista, daca continuati U
Uo pierdeti``` XnXt5 @ Continua %@Anulea-aXnU12
scanf0UadU,bc12
if 0`c1
7<
return %2 else FirstDIULL2
Q
if0`0fDfopen0file, Ur,U111
P puts0UXnXtXtCreati mai intii fisierul pentru afisare ```U12
!etch012
return %2
Q
fread0bconstr,si-eof0pacient1, 5, f12
Nhile0` feof0f11
P alocare0bconstr12
fread0bconstr, si-eof0pacient1, 5, f12
Q
return 0afisare0112
Q
YYcontinutul listei de pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void contin0List Zspital1
P int iD52
Nhile0spital1
P printf0U e a7d eU, i12
printf0U a@5=seU,spital@Hdata#nume*pacient12
printf0U a@57seU,spital@Hdata#data*intern12
printf0U a@57seU,spital@Hdata#sec*intern12
printf0U a6ld eU,spital@Hdata#nr*politei12
printf0U a@=deU,spital@Hdata#an*nastere12
printf0U
*****************************************************************************
**XnU12
spital D spital@HIeBt2
FFi2
Q
Q
YYafisare listei de pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int afisare01
P int AD52
puts0UXnXtXtXtIIF'&MATIA 3:S$&: $ACI:ITI:XnU12
printf0U
*****************************************************************************
XnU12
printf0U e Ir# e Iume pacient e data*intern e sec*intern e nr*politei ean*nastereXnU12
printf0U e
*****************************************************************************e
XnU12
contin0First12
printf0UXnXtXtTastati o tasta pentru continuare###U12
!etch012
return 0A@512
Q
YYsortare listei de pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int sortare01
P List Ztemp5, Ztemp7, Zmin, Zprev, ZSortDIULL2
int i, A, iConstrD%,ales2
iConstrDafisare01@52
7=
puts0UU12
printf0UXnXt Sortati lista dupa:XnU12
puts0UXt 5 @ Iumele pacientuluiU12
puts0UXt 7 @ Sectia internariiU12
puts0UXt 9 @ Anul nasteriiU12
puts0UXt % @ InapoiXnU12
scanf0UadU,bales12
sNitch0ales1
P case 5:
P Nhile0First `D IULL1
P prev D IULL2
min D temp5 D First2
temp7 D First @H IeBt2
Nhile 0 temp7 `D IULL 1
P if0strcmpi0min @H data#nume*pacient, temp7 @H
data#nume*pacient1 H %1
P min D temp72 prev D temp52
Q
temp5 D temp72
temp7 D temp7 @H IeBt2
Q
if0prev DD IULL1
First D min @H IeBt2
else
prev @H IeBt D min @H IeBt2
min @H IeBt D IULL2
if0 Sort DD IULL 1
Sort D min2
else
P temp5 D Sort2
Nhile0 temp5 @H IeBt `D IULL1
temp5 D temp5 @H IeBt2
temp5 @H IeBt D min2
Q
Q ,reaC2
Q
case 7:
P Nhile0First `D IULL1
P prev D IULL2
min D temp5 D First2
temp7 D First @H IeBt2
Nhile 0 temp7 `D IULL 1
P if0min @H data#sec*intern H temp7 @H data#sec*intern1
P min D temp72 prev D temp52
Q
temp5 D temp72
temp7 D temp7 @H IeBt2
Q
if0prev DD IULL1
First D min @H IeBt2
else
prev @H IeBt D min @H IeBt2
7>
min @H IeBt D IULL2
if0 Sort DD IULL 1
Sort D min2
else
P temp5 D Sort2
Nhile0 temp5 @H IeBt `D IULL1
temp5 D temp5 @H IeBt2
temp5 @H IeBt D min2
Q
Q ,reaC2
Q
case 9:
P Nhile0First `D IULL1
P prev D IULL2
min D temp5 D First2
temp7 D First @H IeBt2
Nhile 0 temp7 `D IULL 1
P if0min @H data#an*nastere H temp7 @H data#an*nastere1
P min D temp72 prev D temp52
Q
temp5 D temp72
temp7 D temp7 @H IeBt2
Q
if0prev DD IULL1
First D min @H IeBt2
else
prev @H IeBt D min @H IeBt2
min @H IeBt D IULL2
if0 Sort DD IULL 1
Sort D min2
else
P temp5 D Sort2
Nhile0 temp5 @H IeBt `D IULL1
temp5 D temp5 @H IeBt2
temp5 @H IeBt D min2
Q
Q ,reaC2
Q
case %: ,reaC2
default:
P printf0UXnXtXtIu ati ales varianta potrivita``` XnXtU12
!etch012 ,reaC2 eBit0%12
Q
Q
FirstDSort2
printf0UXnXtXtTastati o tasta pentru continuare### U12 !etch012
return %2
Q
YYcautarea in lista de pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int cautare0List Zspital1
P int AD52 char eticheta^7%_2 List ZStart2
StartDspital2
76
if 0First DD IULL1
P printf0UXnXtXtLista este vida```U12
!etch012
return %2
Q
printf0UXnXtXtIntroduceti numele pacientului cautat:Xn U12
!ets0eticheta12
puts0UXnXtXtXtIIF'&MATIA 3:S$&: $ACI:ITI:XnU12
printf0U
**************************************************************************
XnU12
printf0U e Ir# e Iume pacient e data*intern e sec*internarii e nr*politei ean*naseXnU12
printf0U e
**************************************************************************eXnU1
2
Nhile0Start1
P if0strcmpi0Start@Hdata#nume*pacient, eticheta1 DD %1
P
printf0U e a7d eU, A12
printf0U a@5<seU,Start@Hdata#nume*pacient12
printf0U a@5%s eU,Start@Hdata#data*intern12
printf0U a@5%s eU,Start@Hdata#sec*intern12
printf0U a6ld eU,Start@Hdata#nr*politei12
printf0U ad eXnU,Start@Hdata#an*nastere12
printf0U
**************************************************************************XnU12
FFA2
Q
Start D Start@HIeBt2
Q
printf0UXnXtXtTastati orice tasta pentru continuare###U12
!etch012
return 0A@512
Q
YYeliminarea din lista@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int eliminare01
P int i,C,ales2
int C52
pacient Zdel2
pacient ZCurent2 pacient Constr2
Curent D First52
afisare012
printf0UXnXtIntroduceti numarul elementului pe care doriti sa@l eliminati: U12
scanf0UadU,bales12
fflush0stdin12
if 0ales K %1 return %2
for0iD52 iKales2 FFi1
P Curent D Curent@HIeBt52
if 0`Curent1
7?
P
printf0UXnXtXt:roare``` :lementul este !asit`Tastati o tasta pentru
continuare###U12
!etch012
return %2
Q
Q
if 0`First51
P
printf0UXnXtXtIu eBista nimic de sters```U12
!etch012
return %2
Q
printf0UXnXtAceasta operatie va ster!e elementulXnXtU
Udin lista```U
UXnXt3oriti sa ster!etidddU
UXnXt5 @ 3a, %@ IuXnU12
scanf0UadU,bC12
if 0C51
P
Nhile0First51
P del D First52
First5 D First5@HIeBt52
free0del12
Q
printf0UXnXtSter!erea a fost efectuata cu succes```U12
!etch012
Q
return 52
Q
YYmodificarea listei de pacienti@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int modificare01
P int i,C,ales2
List ZCurent2 pacient Constr2
Curent D First2
afisare012
printf0UXnXtIntroduceti numarul elementului pe care doriti sa@l monificati: U12
scanf0UadU, bales12
fflush0stdin12
if 0ales K %1 return %2
for 0iD52 iKales2 FFi1
P
Curent D Curent@HIeBt2
if 0`Curent1
P
printf0UXnXtXt:roare``` :lementul nu este !asit`Tastati o tasta pentru
continuare###U12
!etch012
return %2
Q
Q
9%
printf0UXnXtCare cimp doriti sa modificatidU
UXnXt5@ Iumele pacientuluiU
UXnXt7@ 3ata*internariiU
UXnXt9@ Sectia*internariiU
UXnXt8@ Ir*politei*de*asi!urareU
UXnXt<@ Anul nasteriiXnU12
scanf0UadU,bC12
sNitch0C1
P
case 5:
printf0UXnXtIntroduceti date noi despre U12
printf0UXnXtnumele pacientului: U12
scanf0UasU,Curent@Hdata#nume*pacient12
fflush0stdin12
,reaC2
case 7:
printf0UXnXtIntroduceti date noi despre U12
printf0UXnXtdata*internarii: U12
scanf0UasU,Curent@Hdata#data*intern12
fflush0stdin12
,reaC2
case 9:
printf0UXnXtIntroduceti date noi despre U12
printf0UXnXtsectia*internarii: U12
scanf0UasU, Curent@Hdata#sec*intern12
fflush0stdin12
,reaC2
case 8:
printf0UXnXtIntroduceti date noi despre U12
printf0UXnXtnr# politei de asi!urare: U12
scanf0UaldU, bCurent@Hdata#nr*politei12
fflush0stdin12
,reaC2
case <:
printf0UXnXtIntroduceti date noi despre U12
printf0UXnXtanul nasterii: U12
scanf0UadU, bCurent@Hdata#an*nastere12
fflush0stdin12
,reaC2
default: printf0UXnXtIu ati ales nici o varianta potrivita``` XnXtU12
!etch012 return %2
Q
return 52
Q
YYster!ere@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int ster!e01
P int C2
List Zdel2
if 0`First1
P
95
printf0UXnXtXtIu eBista nici o lista de sters```U12
!etch012
return %2
Q
printf0UXnXtAceasta operatie va ster!e lista de pacientiXnXtU
Udin memorie```U
UXnXt3oriti sa ster!eti listadddU
UXnXt5 @ 3a, %@ IuXnU,file12
scanf0UadU,bC12
if 0C1
P
Nhile0First1
P
del D First2
First D First@HIeBt2
free0del12
Q
printf0UXnXtLista este stearsa cu succes```U12
!etch012
Q
return 52
Q
YYmeniul@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void meniu01
P
clrscr012
puts0UXnXnXnXnXnXnXnU12
puts0UXtDDDDDDDDDDDDDDDDDDDDDDDDFM:IIUFDDDDDDDDDDDDDDDDDDDDDDDDDDDU12
puts0UXtee eeU12
puts0UXtee eeU12
puts0UXtee 51 Creare ,a-ei de date eeU12
puts0UXtee 71 Afisare ,a-ei de date eeU12
puts0UXtee 913eschiderea ,a-ei de date eeU12
puts0UXtee 81Adau!area informatiei eeU12
puts0UXtee <1Sortare ,a-ei de date eeU12
puts0UXtee =1Cautarea in ,a-a de date eeU12
puts0UXtee >1Modificarea ,a-ei de date eeU12
puts0UXtee 61Ster!erea ,a-ei de date eeU12
puts0UXtee ?1Salvarea ,a-ei de date eeU12
puts0UXtee 5%1:liminarea info# din ,-a de date eeU12
puts0UXtee %1Iesire eeU12
puts0UXtee eeU12
puts0UXtee eeU12
puts0UXtDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDU12
puts0UXnXtAle!eti optiunea dorita:XnU12
scanf0UadU,boperatie12
Q
97
.. Afisarea pe ecran:
Meniul principal :
Crearea 4a9ei de date :
99
Afisarea 4a9ei de date :
Adaugarea informatiei in 4a9a de date :
98
Sortarea 4a9ei de date :
Cautarea in 4a9a de date :
9<
Modificarea 4a9ei de date :
Salvarea 4a9ei de date :
9=
1$. Conclu9ii:
:fectuind aceasta lucrare de an am capatat a,ilitatea de creare a unei ,a-a de date#
In ca-ul meu ,a-a de date apartine unui spital si contine lista pacientilor sectia lor de
internare si date personale cum ar fi anul nasterii si numarul politei de asi!urare#
(a-a de date poate fi modificata sau reinoita ori de cite ori dorim#Toate datele care
se introduc in ,a-a de date se salvea-a in file@ul fpacient#tBt"#3easemenea ,a-a de
date poate fi sortata dupa citeva criterii si anume dupa Iumele pacientului dupa
sectia internarii si dupa anul nasterii#
9>
11. Bi4liografie
5# goN to pro!ram in C ,L $aul 3eitel and garveL 3eitel
7# L#Ie!rescu#Ini/iere .n lim,aAul C,CFF#@CluA,5???#
9# Internet:
http:YYNNN#cpro!rammin!#comY
http:YYNNN#pro!rami-#comY
http:YYNNN#pro!rammin!simplified#comY
http:YYc#learncodethehardNaL#or!Y,ooCY
http:YYNNN#learn@c#or!Y
http:YYNNN#tutorialspoint#comYcpro!rammin!Y
8#Ser!iu [# Istrati Lim,aAele de pro!ramareCYCFF"# Chisinau,7%%9#
<#(u-urniuc )tefan Ini/iere .n limaAul C "#Chiinu,7%%8#
=#3r#hris Gamsa@Lars Clander Totul despre C si CFF"#
(ucuresti#7%%5#
96