Referat Structuri De Date Si Fisiere In C

Mai jos puteti citi fragmente din Referat Structuri De Date Si Fisiere In C si de asemenea puteti face Download Referat Structuri de date si fisiere in C

Citeste fragmente din Referat Structuri De Date Si Fisiere In C

Ministerul de Invatamint a RM UNIVERSITATEA TEHNICA DIN MOLDOVA La disciplina: STRUCTURI DE DATE SI ALGORITMI TEMA: Structuri de date si fisiere in “C” Chisinau 2002 CONDITIA LUCRARII Creati un fisier care contine urmatoarele structuri: Numarul, Numeralul, Tipul, Compozitia, Genul, Numarul, Cazul: Sa se efectueze: Selectarea si afisarea numeralelor dupa: tipul ordinal si cardinal genul masculine si femenin Sa se sorteze numeralele in ordine alfabetica. Crearea fisierului Corectarea in fisier Afisarea in fisier Adaugarea in fisier Iesire din program. CUPRINSUL Conditia lucrarii------------------- pag.2 Introducerea------------------------pag.4 Produse soft utilizate--------------pag.5 Descrierea functiilor utilizate----pag.6 Concluzia----------------------------pag.14 Bibliografia-------------------------pag.14 Anexa--------------------------------pag.15 a)Anexa1-Listingul programului---pag.15 b)Anexa2-Schema bloc---------------- INTRODUCERE Limbajul C a fost creat la începutul anilor 70 de către Dennis M. Ritchie şi Brian W. Kernigham de la Bell Laboratories, New Jersey, fiind iniţial destinat unei părţi a sistemului de operare UNIX. Lucrarea “The C Programming Language” a celor doi autori, apărută în mai multe versiuni, a rămas cartea de referinţă în domeniu, impunînd un standard minimal pentru orice implimentare. Limbajul C este un limbaj de programare care are o destinaţie universala. El este utilizat în rezolvarea problemelor ştiinţifice şi tehnico-inginereşti, în prelucrari de date, precum şi în scrierea programelor de sistem. Sistemul de operare UNIX, compilatorul C şi în esenţa toate aplicaţiile sub sistemul UNIX sunt scrise în C într-o proporţie mare. Astfel, din cele 13000 linii sursă ale sistemului de operare UNIX, numai 800 linii sunt scrise în limbaj de asamblare, restul fiind scrise în C. De asemenea, însăşi compilatorul C este scris în C în proporţie de 80%. În felul acesta limbajul C asigură o portabilitate bună pentru programele scrise în el. Noţiunea de portabilitate nu este încă definită riguros. În mod intuitiv, spunem că un program este portabil daca el poate fi transferat uşor de la un tip de calculator la altul. Portabilitatea mare a programelor scrise în C a condus la o raspîndire mare a limbajului C şi a sistemului de operare UNIX. În prezent limbajul C este implementat şi sub alte sisteme de operare. Practic el este disponibil pe toate calculatoarele, începînd cu microcalculatoarele personale şi terminînd cu supercalculatoarele. Pe calculatoarele de tip IBM PC este implementată o variantă a limbajului C numită TURBO C. Această variantă dispune de un mediu de programare menit să ajute utilizatorul în scrierea şi punerea la punct a programelo.Aceasta nu inseamna ca C este mai putin performant,mai greu de utilizat sau mai putin dezvoltat decit un limbaj de nivel inalt, cum ar fi BASIC sau Pascal,si nici ca are natura greoaie a limbajului. C este considerat ca un limbaj de nivel mediu pentru ca combina cele mai bune facilitati a unui limbaj de nivel inalt cu posibilitatile de control si flexibilitatea limbajului de asamblare. De asemenea, pe acelasi tip de calculatoare este implementată varianta quickC, care dispune şi ea de un mediu de programare dezvoltat. Trecînd la programul de sarcină, menţionăm că SCOPUL constă în crearea unei baze de date în C, care să includă funcţii de sortare şi alte funcţii de lucru în program,ce ne-ar ajuta să operăm cu eficacitate în baza de date. Produse Soft Utilizate In lucrarea de curs vom avea nevoie sa utilizam doua produse soft utilizate. Primul va fi Limbajul C in care se desfasoara programul dat, al doilea va fi Microsoft Word-de care vom avea nevoie pentru a infaptui lucrarea de curs sub forma de text si pentru a avea posibilitatea de a scoate la printer lucrarea intr-un mod mai frumos. Listingul programului este facut in C++ si este reredactat in Microsoft Word. Nevoia de a folosi Microsoft Word consta in faptul ca in lucrare vom avea nevoie sa construim si schema bloc care poate fi facuta prin intermediul capacitatilor Microsoft Wordului. Descrierea functiilor utilizate Programul de mai jos contine o serie de functii pe care le voi explica in parte. Functii pentru controlul atributelor: Controlul atributelor de obicei se face cu ajutorul functiilor standarte de culoare: „textcolor”-precizeaza culoarea textului; „textbackground”-precizeaza culoarea fondului. Functii pentru afisarea si manipularea textelor: Functiile standart de afisare si manipulare a textului se impart in trei categorii: Functii de afisare si citire a textului: „printf”-realizeaza iesiri cu format „scanf”-efectueaza citirea datelor sub controlul de citire „puts”-afiseaza siruri de caractere pe ecran „getch”-preia un caracter de la tastatura si il afiseaza pe ecran Functii care manipuleaza textul si cursorul pe ecran: „clrscr”-sterge textul din fereastra activa „seek_set”-pozitioneaza cursorul la inceputul tabloului „seek_cur”-pozitioneaza la mijloc „seek_end”-pozitioneaza la sfirsit. Functii destinate fisierelor: “fopen()”-deschide fisierul logic si il leaga cu fisierul fizic pentru a lucra in unul din regime-“w”-inregistrare “r”-citeste “a”-adauga. “fread()”-are rolul de prelucrare a fisierului ceea ce inseamna ca noi putem crea un fisier, sa citim: Functia fread are forma: fread(,,,); “fwrite()”- seamana cu functia fread dar spre deosebire functia fwrite poate crea , inregistra, adauga. fwrite(,,,); “fclose()”-utilizind aceasta functie noi inchidem fisierul dat dintr-o functie anumita in care am efectuat una din prelucrari:creare,adaugare,corectare. Vizual fclose are forma: fclose(f) ,f-este numele fisierului creat de dvs. Descrierea programului si functiile lui: Stim ca orice program in C incepe cu deschiderea unor biblioteci.Bibliotecile deschise depind de functiile pe care le veti utiliza.In programul dat sint folosite patru biblioteci: ,,,. Urmatorul pas este declararea fisierului: FILE *f. Asteristul * inseamna ca fisierul “f” este de tip pointer. Pentru a continua avem nevoie de a declara si o structura.Din conditiile programului structura programului va fi formata din: “struct gramatica”-struct inseamna ca noi declaram o structura,iar gramatica-va fi numele structurii.Urmatorul pas va fi declararea cimpurilor structurii gramatica. Deci urmatorul pas este declararea functiilor de care vom avea nevoie in program,si acestea sint: void creare(), void afisare(), void corectare(), void adaugare(), void afis_select1(), void afis_select2(), void sortare(). Functiile date sint doar declarate pentru a fi recunoscute de compilator atunci cind le vom utiliza una cite una. Este de dorit ca functiile sa fie declarate inaintea programului principal. Rolul si motivele crearii acestor functii vor fi lamurite mai jos cind vom ajunge la fiecare functie in parte. Dupa ce deschidem bibliotecile, declaram fisierul si cream structura cu cimpurile sale, este nevoie de alt pas declararea programului principal. Denumirea programului principal incepe cu numele void main()-ceea ce si inseamna ca programul dat este programul principal. Principala functie pe care o are programul principal este afisarea pe ecran a tuturor optiunilor pe care le are programul si a doua functie este posibilitatea utilizatorului de a putea allege de la tastatura una din optiuni apasind pe unul din butoanele de la 1 pina la 8, asta numai din motivul ca programul a fost construit in asa mod ca optiunile sa fie alese utilizind butoanele 1..8. Desigur la alegerea programatorului optiunile pot fi aranjate sub alta ordine, sau optiunile sa fie accesate in alt mod, nu prin cifre dar prin litere. Afisarea optiunilor pe ecran le facem cu ajutorul functiei printf(), iar accesul la ele cu ajutorul functiei case. Exemplu: case 1: creare();break;-vedem ca dupa functia case urmeaza o cifra (1),ceea ce inseamna ca optiunea de creare a fisierului poate fi accesata doar daca veti apasa cifra 1. Deci urmarind acest exemplu noi utilizam functia case de opt ori,deoarece avem opt optiuni. La momentul actual noi am facut posibil doar accesul la optiuni. Dar fiecare optiune urmeaza a fi creata in interior pentru asi putea indeplini functiile, ceea ce va avea loc mai jos indata dupa incheierea programului principal. Functia creare() Conform conditiilor programului noi avem nevoie de a crea un fisier. Pentru a face acest lucru posibil functia trebuie construita in asa fel incit ea sa infaptuiasca anume ceea ce este necesar si specific functiei creare(). deci in interiorul functiei void creare()-sint declarate citeva variabile locale care vor fi folosite doar in aceasta functie. In cazul dat am dat posibilitate programului de a crea la comanda utilizatorului cite un fisier nou de fiecare data cind are nevoie de alte date. Lipsa ecestei posibilitati ar aduce la faptul ca la o inregistrare noua vechile dati vor disparea, ceea ce creaza dupa parerea mea mari incomoditati. Inainte de afisarea datelor pe ecran este nevoie de a face urmatorul lucru f=fopen(“nume_fis”,”W”)- nume_fis este numele fisierului pe care il cream in interiorul programului, iar W inseamna ca noi vom avea nevoie de a inregistra in fisier. Deci urmatorul pas pentru creare este apelarea la cimpurile create de noi, adica cimpurile de care avem nevoie. Exemplu: --------------------------------------------- printf("Introdu numeralul-->"); scanf("%10s",lista1.Numeralul); fflush(stdin); printf("Indica tipul numeralului-->"); scanf("%10s",lista1.Tipul); fflush(stdin); ---------------------------------------------- Deci cu functia printf()-noi afisam pe ecran si cu ajutorul functiei scanf()-noi citim datele. Dupa declararea cimpurilor noi mai avem nevoie de declararea unei a doua structuri cu ajuorul careia vom putea accesa un anumit cimp de care avem nevoie.Deci ca in exemplu daca avem nevoie de cimpul:”Numeralul” si ”Tipul”, vedem ca in functia scanf(), apare variabila lista1.numeralul- unde lista1-este a doua structura de care am spus si cu ajutorul careia noi accesam cimpul “Numeralul” si “Tipul”. O alta functie pe care o vedem in exemplu este: ”fflush(stdin)”-folosim aceasta functie de fiecare data dupa ce afisam si citim un cimp, iar functia fflush o folosim pentru a elibera memorie in buffer.Astfel cind introducem numeralul, computerul automat ne rezerva memorie pentru acest cuvint. In acest mod noi trebuie sa procedam absolut cu toate cimpurile declarate de noi. Dupa ce terminam de introdus toate cimpurile este necesar pentru a folosi functia fwrite(&lista1,sizeof(lista1),1,f)-&lista1 este sursa,instructiunea sizeof calculeaza volumul sursei, 1-inseamna numarul de articole, f-inregistreaza continutul variabilei lista in fisierul f din memorie pe disc. Aici are loc si sfirsitul functiei creare(). Functia afisare() Rolul crearii acestei functii este deasemenea foarte important.Este clar ca dupa introducerea citorva date este nevoie de a le vizualiza intr-un oarecare mod, este evident ca ele trebuie sa fie aranjate dupa ordinea in care sint aranjate cimpurile Pina la afisarea acestor date noi sintem intrebati datele carui fisier doriti sa fie afisate. Este posibil ca dvs. sa aveti mai multe fisiere create si vreti sa deschideti anume un fisier din ele ,iata de ce este construita posibilitatea de a indica anume fisierul cimpurile caruia doriti sa fie afisate. Iarasi are loc folosirea functie f=fopen(), numai ca in acest caz in paranteze vedem o alta modalitate de descriere care este”r”-cu ajutorul ei noi putem doar citi datele din fisier. Este de dorit sa cream un table si acesta va si fi modul in care vor fi afisate datele, sub forma de tabel. Deoarece aici noi nu avem nevoie de careva inregistrari ci doar de afisare nu avem nevoie de a folosi functia fwrite() ci invers fread()- cu care citim doar datele. Mai apare o functie noua fseek- functia este folosita atunci cind avem sa dam comanda cursorului locul unde el trebuie sa fie.In cazul dat cursorul se va afla la inceputul articolului deoarece este inclusa variabila functiei fseek care se numeste Pentru ca cimpurile sa fie accesate trebuie sa utilizam o alta instructiune, adica un ciclu in care punem conditia ca pina la sfirsitul fisierului sa fie accesate toate cimpurile prin urmatoarea metoda: while(!feof(f)) { lista2.Numeralul, lista2.Tipul, lista2.Compozitia, lista2.Genul, lista2.Numarul, lista2.Cazul); Cimpurile trebuie indicate anume in modul in care au fost declarate in structura la inceputul programului.Indicarea trebuie parcursa in modul acesta pentru a evita erori in program si pentru ca respective cimpurilor informatia sa fie afisata correct. Dupa sfirsitul afisarii cimpurilor avem nevoie din nou de functia fread-pentru a infaptui aceleasi operatii care au fost explicate in functiile precedente. Am observat ca fread-ul- este folosit de doua ori intr-o functie, aceasta are loc la inceputul crearii functiei si la sfirsitul functiei. Aplicarea fread-ului la sfirsit este absolut necesara, deoarece este adusa o noua informatie care trebuie citita de catre compilator. Imediat dupa ce terminam crearea functiei intotdeauna inchidem si fisierul cu fclose(f). Functia corectare() O astfel de functie este in general creata pentru modificarea unor date din fisierele create in care posibil au fost scapate sau gresit scrise unele date.Astfel functia corectare() face posibil accesul la aceste date si modificarea lor. Aici in functia fopen vom vedea o alta modalitate de deschidere care este “r+” – ceea ce permite in acelasi timp citirea datelor si inregistrarea lor. Functia corectare incepe cu fread unde avem nevoie de citire, iar spre sfirsitul functiei avem fwrite pentru a inregistra. Am inceput din nou cu o creare a unui table in care vom putea vedea absolut toate datele din fisier.Am facut aceasta actiune pentru a vedea toate datele, pentru a putea depista data pe care trebuie sa o modificati.Dupa crearea tabelului este evident ca avem nevoie de a le modifica. Incepe din nou o alta parcurgere dar care nu se deosebeste de cea din functia creare() . printf("Introdu numeralul-->"); scanf("%10s",lista1.Numeralul); fflush(stdin); printf("Indica tipul numeralului-->"); scanf("%10s",lista1.Tipul); fflush(stdin); printf("Indica copozitia numeralului-->"); scanf("%10s",lista1.Compozitia); fflush(stdin); Dar aici introducerile sint folosite pentru alt scop, adica pentru a modifica ceea ce am creat in functia creare(). Dupa alegerea noastra desigur noi putem modifica anumite cimpuri din structura. In program am creat posibilitatea de a modifica toate datele din cimpuri. Avem nevoie din nou de o functie care a mai fost utilizata: fseek() unde indicam cursorului pozitionarea lui. Functia adaugare() Functia adaugare() este o functie care ne da o alta posibilitate pentru programul nostru. Aceasta functie ne ofera posibilitatea de a putea adauga in fisier careva date. Utilizatorul la rindul sau are posibilitatea de a introduce atitea date de cite are nevoie, deci functia adaugare nu este limitata in numarul de adaugari. De obicei toate datele adaugate se situeaza la sfirsitul fisierului creat. Continutul functiei adaugare() nu se deosebeste absolut cu nimic de functia creare(), unica mica deosebire este ca in functia adaugare(), se deosebeste prin deschiderea fisierului. f=fopen(“nume_fis”,”a”); Ca si celelalte functii functia adaugare incepe cu intrebarea: “In care fisier doriti sa adaugati?”, aici utilizatorul isi allege singur fisierul in care doreste adaugari. In continuare functia incepe cu aceeasi pasi ca si functia creare(): printf("Introdu numeralul--> "); scanf("%10s",&lista1.Numeralul); fflush(stdin); printf("Indica tipul numeralului--> "); scanf("%10s",&lista1.Tipul); fflush(stdin); printf("Indica compozitia numeralului--> "); scanf("%10s",&lista1.Compozitia); fflush(stdin); printf("Indica genul numeralului--> "); scanf("%10s",&lista1.Genul); fflush(stdin); Functia afisare si selectare dupa tip Functia data nu are un algoritm de rezolvare diferit de cel al functie afisare selectata, practice se efectueaza dupa acelasi algoritm.Unicul lucrul care face schimbator functia data este declararea unei variabile noi sub numele Tip[10] de tip char. Tinind cont de conditiile programului functia trebuie sa functioneze in modul urmator: la intrebarea care apare pe monitor ”Introdu tipul”, noi avem de ales intre doua componente a tipului: ordinal si cardinal. La alegerea numeralului de tip ordinal, in aceasta functie vor aparea sub o forma de tabel toate numeralele de tip ordinal. Tot asa functioneaza si la scrierea tipului cardinal. Computerul executa aceasta commanda numai dupa ce cream o instructioune if, in care punem conditia ca toate caracterele cimpului Tipul sa fie copiate in Tip. Introdu tipul: ordinal //Am ales ca exemplu ordinal Nr Numeralul Tipul … … … 1 trei ordinal 2 patru ordinal Este clar ca in functia afisare vor fi afisate toate numeralele, adica cu ambele tipuri. Iata acest exemplu ne arata afisarea in cazul alegerii numeralelor de tip ordinal. Vor fi afisate doar numeralele ordinale. Functia afisare selectata dupa gen Algoritmul de rezolvare este absolut identic cu cel al functie precedente. La inceputul functiei se declara o variabila Gen[10] de tip char. La fel alegind functia data veti fi intrebat sa introduceti genul: aici puteti introduce masculine sau femenin. Urmeaza crearea instructiunii if din nou in care se contine aceeasi conditie. Functia sortare() Sensul cuvintului sortare in programare inseamna un tablou cu intregi sau caractere care este aranjat intr-o forma crescatoare sau invers, descrescatoare.Importanta principala este ordinea in care este aranjat tabloul. Exemplu: Tabloul care va urma va fi un tablou cu cifre dar cu o ordine incurcata A=[1,9,6,7,3,5,4], daca sortam tabloul in ordine crescatoare rezultatul ar fi A=[1,3,4,5,6,7,9]. Algoritmul de sortare este ales de fiecare programator in parte, dar stim ca sint trei metode de sortare:1)metoda bulelor, 2)metoda selectiei 3)metoda Shell. Cam in asa mod functioneaza si functia data numai ca ea are rolul da a sorta cimpul numeralul in ordine alfabetica. Este neaparat sa declaram la inceputul functiei structura noastra “gramatica” careia trebuie sa-I mai adaugam un al doilea nume”aux” pe acre il vom folosi pentru a apela la structura. Functia se incepe cu doua cicluri pentru i si j. Indata dupa ciclu incepem cu o conditie in care avem nevoie sa folosim o functie de manevrare a sirului strcmp-care returneaza 0 daca s1 si s2 sint identice;mai mic de cit 0 daca s1s2. Mai departe are loc un shimb al datelor dintr-o variabila in alta Dupa acest pas se mai verifica o data cu functia strcmp daca lista[i].Numeralul si lista[i+1].Numeralul sint identice egalindule cu 0, iar cu functia strlen returneaza lungimea lui lista[i].Numeralul si lungimea lui lista[i+1].Numeralul, unde se pune si o conditie ca lungimea lui lista[i].Numeralul trebuie sa fie mai mare ca lungimea lui lista[i+1].Numeralul, dupa care se incepe din nou o combinatie a datelor. La sfisit se pune inca o conditie ca daca k=0 sortarea se opreste. ††††††††††഍഍഍഍潃据畬楺൩ În fine menţionăm că caracteristicile distinctive ale limbajului “C”sunt: Portabilitatea maximă Strucrurarea Posibilitatea efectuării operaţiilor la nivelul maşinii, cu păstrarea trăsăturilor unui limbaj evoluat În urma efectuării acestei lucrări am căpătat experienţa de a percepe lucrul cu baza de date în “C” . Deasemeni am depistat modul de lucru cu diferite funcţii ale programului şi ne-am convins că acest limbaj are a mare eficacitate de programare. Bibliografie: Catrina Octavian “Turbo C++” Bucureşti 1994 Constantin A. Sevici “Programarea în C” Bucureşti 1995 Nabajyoti Barkakati „Borland C++”Ghidul programatorului Herbert Schildt „C/C++” Manual complet Internet HYPERLINK "http://www.top100.ro" www.top100.ro #include #include #include #include #define vol 15 //********************************************************************** ***** FILE *f; struct gramatica{ char Numeralul[10]; char Tipul[10]; char Compozitia[10]; char Genul[10]; char Numarul[10]; char Cazul[10]; }lista1,lista[vol]; int i,n; //*******************Functiile****************************************** **** void creare(void);void afisare(void); void corectare(void);void adaugare(void);void afis_select1(void); void afis_select2(void);void sortare(void); //********************************************************************** **** void main() { int optiune; textcolor(1);textbackground(7); while(1){ clrscr(); printf(" "); printf(" ************************* "); printf(" | M E N I U | "); printf(" | | "); printf(" ************************* "); printf(" * ALEGE O OPTIUNE * "); printf(" * * "); printf(" ******************************************** "); printf(" * (1)-Crearea fisierului * "); printf(" * (2)-Afisarea fisierului * ); printf(" * (3)-Corectarea fisierului * "); printf(" * (4)-Adaugare in fisier * "); printf(" * (5)-Afisarea selectata dupa tip * "); printf(" * (6)-Afisare selectata dupa gen * "); printf(" * (7)-Sortarea numeraleor * "); printf(" * (8)-Iesire din program * "); printf(" ******************************************** "); scanf("%d",&optiune); switch(optiune) { case 1: creare();break; case 2: afisare();break; case 3: corectare();break; case 4: adaugare();break; case 5: afis_select1();break; case 6: afis_select2();break; case 7: sortare();break; case 8:exit(1); textcolor(1);textbackground(7); default: printf("Alegeti optia corect ");break; } } } //******************************CREARE********************************** ****** //********************************************************************** ******** void creare(){ char nume_fis[12],nume[8]; int ch; clrscr(); printf(" Creati numele fisierului Dvs!!! : "); scanf("%s",nume); strcpy(nume_fis,nume); strcat(nume_fis,".f3"); f=fopen(nume_fis,"w"); if(f==NULL){puts("Eroare");getch();return;} while(1){ clrscr(); puts(" Doriti sa continuati? (Y/N)"); puts(" ---------------------------"); ch=getch(); if(ch==121||ch==89){ printf(" Introdu numeralul-->"); scanf("%10s",lista1.Numeralul); fflush(stdin); printf(" Indica tipul numeralului-->"); scanf("%10s",lista1.Tipul); fflush(stdin); printf(" Indica compozitia numeralului-->"); scanf("%10s",lista1.Compozitia); fflush(stdin); printf(" Indica genul-->"); scanf("%10s",lista1.Genul); fflush(stdin); printf(" Indica numarul-->"); scanf("%10s",lista1.Numarul); fflush(stdin); printf(" Indica cazul-->"); scanf("%10s",lista1.Cazul); fflush(stdin); fwrite(&lista1,sizeof(lista1),1,f); } if(ch==78||ch==110){fclose(f);return;} } } //*********************END OF CREARE************************************** //********************************************************************** ***** //*********************************AFISARE****************************** ****** //********************************************************************** ******** void afisare() { char nume[8],nume_fis[12]; clrscr(); puts(" Introduceti fisierul care doriti sa fie afisat--"); scanf("%s",nume); strcpy(nume_fis,nume); strcat(nume_fis,".f3"); f=fopen(nume_fis,"r"); if(f==NULL){puts("Eroare");while(!kbhit());return;} printf("============================================================= " ); printf("| Nr | Numeralul | Tipul | Compozitia | Genul | Numarul | Cazul | "); printf("============================================================= " ); i=1; fseek(f,0L,0); fread(&lista1,sizeof(lista1),1,f); while(!feof(f)) { printf("| %-2d | %-10s | %-9s| %-10s | %-10s| %-9s| %-6s| ", i++, lista1.Numeralul, lista1.Tipul, lista1.Compozitia, lista1.Genul, lista1.Numarul, lista1.Cazul); fread(&lista1,sizeof(lista1),1,f); printf("============================================================= " ); } printf(" "); while(!kbhit()); fclose(f); } //********************************************************************** **** //********************************************************************** **** //*******************************CORECTARE****************************** **** //********************************************************************** ******** void corectare() { char nume[8],nume_fis[12],c; i=0; clrscr(); puts(" Pentru care fisier doriti sa modificati datele?"); scanf("%s",nume); strcpy(nume_fis,nume); strcat(nume_fis,".f3"); f=fopen(nume_fis,"r+"); if(f==NULL){puts("Eroare");while(!kbhit());return;} do{ clrscr(); fread(&lista1,sizeof(lista1),1,f); i++; printf("============================================================= " ); printf("| Nr | Numeralul | Tipul | Compozitia | Genul | Numarul | Cazul | "); printf("============================================================= " ); printf("| %-1d | %-10s | %-9s| %-10s | %-10s| %-9s| %-6s| ", i, lista1.Numeralul, lista1.Tipul, lista1.Compozitia, lista1.Genul, lista1.Numarul, lista1.Cazul); printf("============================================================= " ); puts(" Doresti -> y"); puts(" Nu ->ENTER"); puts(" ------------- "); scanf("%c",&c); if(c==121||c==89){ printf(" Introdu numeralul-->"); scanf("%10s",lista1.Numeralul); fflush(stdin); printf(" Indica tipul numeralului-->"); scanf("%10s",lista1.Tipul); fflush(stdin); printf(" Indica compozitia numeralului-->"); scanf("%10s",lista1.Compozitia); fflush(stdin); printf(" Indica genul-->"); scanf("%10s",lista1.Genul); fflush(stdin); printf(" Indica numarul-->"); scanf("%10s",lista1.Numarul); fflush(stdin); printf(" Indica cazul-->"); scanf("%10s",lista1.Cazul); fflush(stdin); fseek(f,ftell(f)-sizeof(lista1),0); fwrite(&lista1,sizeof(lista1),1,f); } }while(!feof(f)); puts(" Pentru a iesi apasati orice tasta"); while(!kbhit());getch(); fclose(f); } //*************************END OF CORECTARE********************************* //********************************************************************** ******** //***********************************ADAUGARE*************************** **** //********************************************************************** ******** void adaugare() { char nume[8],nume_fis[12]; int ch; clrscr(); printf(" In care fisier doriti sa adaugati?--"); scanf("%s",nume); strcpy(nume_fis,nume); strcat(nume_fis,".f3"); f=fopen("nume_fis","a"); if(f==NULL) {puts("EROARE");while(!kbhit()); return;} while(1){ clrscr(); puts(" Doriti sa adaugati (Y/N) ?"); puts(" --------------------------"); ch=getch(); if(ch==121||ch==89){ printf(" Introdu numeralul--> "); scanf("%10s",&lista1.Numeralul); fflush(stdin); printf(" Indica tipul numeralului--> "); scanf("%10s",&lista1.Tipul); fflush(stdin); printf(" Indica compozitia numeralului--> "); scanf("%10s",&lista1.Compozitia); fflush(stdin); printf(" Indica genul numeralului--> "); scanf("%10s",&lista1.Genul); fflush(stdin); printf(" Indica numarul numeralului--> "); scanf("%10s",&lista1.Numarul); fflush(stdin); + , , Y Z „ … ® ¯ Û Ü N P h j P n ᘉ遨㱱㸀*㠀j l n p r Æ scanf("%10s",&lista1.Cazul); fflush(stdin); fwrite(&lista1,sizeof(lista1),1,f); } if(ch==78||ch==110) {fclose(f);return;} } } //**********************AFISARE SELECTATA 1********************************** //********************************************************************** ******** void afis_select1() { char nume[8],nume_fis[12],Tip[10]; clrscr(); puts(" Introdu numele fisierului pe care doriti sa-l deschideti-->"); scanf("%s",nume); strcpy(nume_fis,nume); strcat(nume_fis,".f3"); f=fopen(nume_fis,"r"); if(f==NULL){puts("Eroare");while(!kbhit());return;} puts(" Introdu tipul"); scanf("%s",Tip); printf("============================================================= " ); printf("| Nr | Numeralul | Tipul | Compozitia | Genul | Numarul | Cazul | "); printf("============================================================= " ); i=1; fseek(f,0L,0); fread(&lista1,sizeof(lista1),1,f); while(!feof(f)) { if(!strcmp(lista1.Tipul,Tip)){ printf("| %-1d | %-10s | %-9s| %-10s | %-10s| %-9s| %-6s| ", i++, lista1.Numeralul, lista1.Tipul, lista1.Compozitia, lista1.Genul, lista1.Numarul, lista1.Cazul); printf("============================================================= " ); } fread(&lista1,sizeof(lista1),1,f); } while(!kbhit()); fclose(f); } //********************************************************************** ******** //********************************************************************** ******** //*********************AFISARE SELECTATA 2*********************************** //********************************************************************** ******** void afis_select2() { char nume[8],nume_fis[12],Gen[8]; clrscr(); puts(" Introdu numele fisierului care vreti sa deschideti?--"); scanf("%s",nume); strcpy(nume_fis,nume); strcat(nume_fis,".f3"); f=fopen(nume_fis,"r"); if(f==NULL){ puts("EROARE");while(!kbhit());return;} puts(" Introdu genul-->"); scanf("%s",Gen); printf("============================================================= " ); printf("| Nr | Numeralul | Tipul | Compozitia | Genul | Numarul | Cazul | "); printf("============================================================= " ); i=1; fseek(f,0L,0); fread(&lista1,sizeof(lista1),1,f); while(!feof(f)) { if(!strcmp (lista1.Genul,Gen)) { printf("| %-1d | %-11s | %-9s| %-10s | %-10s| %-9s| %-6s| ", i++, lista1.Numeralul, lista1.Tipul, lista1.Compozitia, lista1.Genul, lista1.Numarul, lista1.Cazul); printf("============================================================= " ); } fread(&lista1,sizeof(lista1),1,f); } while(!kbhit()); fclose(f); } //********************************************************************** ***** //********************************************************************** ******** //********************************************************************** ******** void sortare() { int i,j,k,loc; char nume[8],nume_fis[12]; struct gramatica aux; clrscr(); puts("Introdu fisierul in care doriti sa sortati datele-->"); scanf("%s",nume); strcpy(nume_fis,nume); strcat(nume_fis,".f3"); if(f==NULL){ puts("EROARE");while(!kbhit());return;} for(j=0; j0) { k=1; aux=lista[i+1]; lista[i+1]=lista[i]; lista[i]=aux; } if( ( (strcmp(lista[i].Numeralul, lista[i+1].Numeralul) )==0)&& (strlen(lista[i].Numeralul)>strlen(lista[i+1].Numeralul)) ) { k=1; aux=lista[i+1]; lista[i+1]=lista[i]; lista[i]=aux;} }if(k==0)break;} while(!kbhit()); } PAGE PAGE 1 쥁@