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 CCiteste 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
ì¥Â@