100%(1)100% au considerat acest document util (1 vot)
136 vizualizări39 pagini
Lucrare de an la structuri de date si algoritmi. Acest document prezinta un raport si un program care la rindul sau constituie o baza de date ce poate fi editata , completata etc.
Lucrare de an la structuri de date si algoritmi. Acest document prezinta un raport si un program care la rindul sau constituie o baza de date ce poate fi editata , completata etc.
Lucrare de an la structuri de date si algoritmi. Acest document prezinta un raport si un program care la rindul sau constituie o baza de date ce poate fi editata , completata etc.
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