Fakultet elektrotehnike, strojarstva i brodogradnje Sveucilista u Splitu Studij racunarstva Kolegij: Programiranje 1 Sk.god. 2004/2005 Student:___________________________ DOMACI RAD - VJEZBA 13 1. Kratko opisite a) Pojam datoteka b) Nacin prijenosa podataka izmedju datoteka i programa c) Standardne datoteke d) Simbol FILE e) Simbol EOF 2. Odgovorite na sljedeca pitanja: a) Po cemu se razlikuju binarni odnosno tekstualni nacin pisanja(citanja) u(iz) datoteke? b) Kakve argumente funkcija fopen prima, a kakvu vrijednost vraca ?Koja je svrha funkcije fopen? c) Koja je svrha funkcija feof , fprintf i fscanf?Kratko opisite argumente svake od funkcija, te njihove povratne vrijednosti? d) Sto je pokazivac na medjuspremnik(stream pointer)? 3. Napisite program koji ce iz postojece baze podataka(npr."adresar.dat") koja sadrzi informacije o imenima osoba, njihovim adresama i telefonskim brojevima, traziti osobu koju korisnik programa zeli pronaci, te ispisati podatke o toj osobi na zaslon. Ako osobe nema u adresaru napisati ogovarajucu poruku. Program treba omoguciti korisniku programa da sam unese ime datoteke u kojoj se nalaze podaci. Informacije u datoteci spremljene su u slijedecem obliku: IME PREZIME ADRESA TEL.BROJ xxxxxx yyyyyyyy aaaaaabr ooo-ooo .... .... xxxxxx yyyyyyyy aaaaaabr ooo-ooo ---------------------------------------------------------------------- ODGOVORI / RJESENJA ---------------------------------------------------------------------- 1.) a)Datoteka je skup podataka smjestenih na uređaju za pohranjivanje. b)Postoje dva načina prijenosa podataka između datoteke i programa: I)Međuspremnički: U standardnoj bibliotecu je definiran niz funkcija koje omogućuju različite načie učitavanja i upisa podataka u datoteke.Funkcije sadrže ugrađena pravila za pohranjivanje podataka u međuspremnik....(lakši način) II)Direktni način prijenosa:direktno se komunicira s datotekom.Svaka datoteka se identificira pomoću deskriptora datoteke. c)Standardne datoteke su datoteke stndardnog ulaza i datoteke standardnog izlaza. d)U međuspremničkom sustavu datoteka podaci se prvo upisuju u međuspremnik, a zatim u datoteku. Svaki je međuspremnik opisan kontrolnom strukturom tipa FILE, koja sadrži sve potrebne podatke za komunikaciju programa i otvorene datoteke. e)EOF-(EndOfFile)Kraj datoteke **************************************************************************************************************************** 2.) a)Podaci u tekstualnim datotekama su organiziranipo redovima.Prije upisa u datoteku svi se podaci,bez obzira na njihove tipove, pretvaraju u nizove znakova.Pretvaranje obavljaju ulazno/izlazne funkcije. Podaci u binarnim datotekama se zapisuju kao nizovi bajtova.Pri upisu/učitavanju podataka u binarne datoteke nema dotatnih pretvaranja. Binarni način upisivanja/učitavanja je brži jer nema dotatnih pretvaranja podataka. b)fopen(ime_datoteke,mod) Funkcija fopen vraća pokazivač na kontrolnu strukturu tipa FILE,ili NULL pokazivač u slučaju greške. Pomoću funkcije fopen otvara se datoteka. c)Nije to to,ali: Funkcija fopen vraća pokazivač na kontrolnu strukturu tipa file,taj se pokazivač zove pokazivač na datoteku. **************************************************************************************************************************** 3.) //Za unos osoba u adresar: # include # include # include typedef struct { char ime [20]; char adresa [20]; int broj; } osoba; void upis(osoba *); void ispis (osoba*,FILE*); main() { osoba osob[100]; osoba *ps[100]; FILE *spis; int i,n; spis=fopen("adresar.dat","w"); puts("Koliko unosa ce te unijeti??"); scanf("%d",&n); //Unos podataka: for(i=0;iime); strupr(ps->ime); fflush(stdin); puts("Adresa:"); scanf("%[^\n]",ps->adresa); strupr(ps->adresa); fflush(stdin); puts("Telefonski broj:"); scanf("%d",&ps->broj); } void ispis(osoba *ps,FILE *spis) { printf("%s\n",ps->ime); fprintf(spis,"%s\t\t\t",ps->ime); printf("%s\n",ps->adresa); fprintf(spis,"%s\t\t\t",ps->adresa); printf("%d\n",ps->broj); fprintf(spis,"%d\n",ps->broj); puts(""); } -------------------------------------------------- //Program za trazenje osobe u adresaru: #include #include #include #define tocno 1 #define netocno 0 main() { //prijava varijabli int j,da; char spis[50],prezime[20],ime[20],p[20],i[20],adresa[20],a[20],broj[20]; FILE *pok; do { printf("Upisite ime spisa s adresama:"); gets(spis); if((pok = fopen(spis,"r"))==NULL) printf("\nPonovi unos--->>>> SPIS NE POSTOJI !!!"); } while(pok==NULL); printf("\nPREZIME:"); gets(prezime); strupr(prezime); printf("\nIME:");gets(ime); strupr(ime); da=netocno; //preskakanje tri retka for(j=0;j<3;j++) while((fgetc(pok))!='\n'); //trazenje while(feof(pok)==0) { fscanf(pok,"%s %s %s %s %s",p,i,adresa,a,broj); if(!(strcmp(prezime,p)) && !(strcmp(ime,i))) { da=tocno; printf("\n******* OSOBA JE PRONADENA U BAZI PODATAKA! *******\n"); printf(" --------------------------------------------\n"); fprintf(stdout," ****->Prezime : %s \n ****->Ime : %s \n ****->Adresa : %s %s\n ****->Broj tel: %s\n",p,i,adresa,a,broj); printf(" --------------------------------------------\n"); break; } } if(!da) printf("\nU BAZI NEMA TRAZENE OSOBE !!!"); rewind(pok); fclose(pok); return 0; }