5
6. Laboratorijske vježbe Napomena: Uz svaki program potrebno je stvoriti datoteku na kojoj će se izvršiti testiranje zadatka. Datoteka mora sadržavati najmanje 10 zapisa. 6.1. Zadaci 1. Na disku se nalazi slijedna formatirana datoteka pjesme.txt, gdje je zapis o svakoj pjesmi smješten u jedan redak, a zapis se sastoji od naziva pjesme (najviše 50 znakova koji može uključivati praznine) i trajanje pjesme u sekundama (cijeli broj). Naziv pjesme i trajanje pjesme su odvojeni znakom #. Pretpostaviti da naziv pjesme ne uključuje znak #. Npr: Naziv pjesme 1 # 650 \n Naziv pjesme 2 # 328 \n .... Napisati funkciju koja će za zadani pokazivač na datoteku izračunati i vratiti naziv i trajanje (u sekundama) najdulje pjesme u datoteci. Napisati glavni program u kojem se otvara datoteka, poziva funkcija, te ispisuje naziv pjesme i trajanje pjesme u obliku mm:ss, gdje je mm broj minuta, a ss broj sekundi. 2. Na disku se nalazi slijedna formatirana datoteka pjesme.txt, gdje je zapis o svakoj pjesmi smješten u jedan redak, a zapis se sastoji od naziva pjesme (najviše 50 znakova koji može uključivati praznine) i trajanje pjesme u sekundama (cijeli broj). Naziv pjesme i trajanje pjesme su odvojeni znakom #. Pretpostaviti da naziv pjesme ne uključuje znak #. Npr: Naziv pjesme 1 # 650 \n Naziv pjesme 2 # 328 \n .... Napisati funkciju koja će za zadani pokazivač na datoteku i zadani naziv pjesme izračunati i vratiti trajanje pjesme. Napisati glavni program u kojem se otvara datoteka i učitava naziv pjesme, poziva funkcija, te ispisuje trajanje pjesme u obliku mm:ss, gdje je mm broj minuta, a ss broj sekundi. 3. Na disku se nalazi slijedna formatirana datoteka teretana.txt, u kojoj se nalaze zapisi o obavljenim vježbama na body-building treningu u teretani. Svaki zapis se nalazi u svome retku a sadrži sljedeća polja: datum (formata dd.mm.gggg.), naziv vježbe (do 40 znakova, s mogućim prazninama), težinu u kg (cijeli broj), broj ponavljanja (cijeli broj). Polja u jednom zapisu su odvojena znakom #. Npr: 01.05.2003. # Potisak na klupi # 60 # 12 \n 01.05.2003. # Potisak na klupi # 80 # 10 \n 01.05.2003. # Potisak na klupi # 100 # 8 \n 01.05.2003. # Pregib bicepsom # 30 # 12 \n U istom danu se ista vježba može pojavljivati više puta, s različitim (ili istim) težinama i brojem ponavljanja. Pod opterećenjem na vježbi se podrazumijeva umnožak težine i broja ponavljanja. Radi jednostavnosti pretpostavite da se zapisi sortirani po rastućem datumu. Napisati funkciju koja za zadani datum računa ukupno opterećenje (ukupno opterećenje je jednako zbroju opterećenja svih pojedinih obavljenih vježbi tog dana). Ukoliko tog dana nije bilo treninga, funkcija vraća 0. Napisati glavni program u kojem se otvara datoteka, unosi datum, poziva funkcija te ispisuje ukupno opterećenje za uneseni datum. 4. Na disku se nalazi slijedna formatirana datoteka teretana.txt, u kojoj se nalaze zapisi o obavljenim vježbama na body-building treningu u teretani. Svaki zapis se nalazi u svome retku a sadrži sljedeća polja: datum (formata dd.mm.gggg.), naziv vježbe (do 40 znakova, s mogućim prazninama), težinu u kg (cijeli broj), broj ponavljanja (cijeli broj). Polja u jednom zapisu su odvojena znakom #. Npr: 01.05.2003. # Potisak na klupi # 60 # 12 \n 01.05.2003. # Potisak na klupi # 80 # 10 \n 01.05.2003. # Potisak na klupi # 100 # 8 \n

Labos06

Embed Size (px)

DESCRIPTION

labos

Citation preview

Page 1: Labos06

6. Laboratorijske vježbe

Napomena: Uz svaki program potrebno je stvoriti datoteku na kojoj će se izvršiti testiranje zadatka. Datoteka mora sadržavati najmanje 10 zapisa.

6.1. Zadaci 1. Na disku se nalazi slijedna formatirana datoteka pjesme.txt, gdje je zapis o svakoj pjesmi smješten u jedan redak, a zapis se sastoji od naziva pjesme (najviše 50 znakova koji može uključivati praznine) i trajanje pjesme u sekundama (cijeli broj). Naziv pjesme i trajanje pjesme su odvojeni znakom #. Pretpostaviti da naziv pjesme ne uključuje znak #. Npr:

Naziv pjesme 1 # 650 \n Naziv pjesme 2 # 328 \n ....

Napisati funkciju koja će za zadani pokazivač na datoteku izračunati i vratiti naziv i trajanje (u sekundama) najdulje pjesme u datoteci. Napisati glavni program u kojem se otvara datoteka, poziva funkcija, te ispisuje naziv pjesme i trajanje pjesme u obliku mm:ss, gdje je mm broj minuta, a ss broj sekundi. 2. Na disku se nalazi slijedna formatirana datoteka pjesme.txt, gdje je zapis o svakoj pjesmi smješten u jedan redak, a zapis se sastoji od naziva pjesme (najviše 50 znakova koji može uključivati praznine) i trajanje pjesme u sekundama (cijeli broj). Naziv pjesme i trajanje pjesme su odvojeni znakom #. Pretpostaviti da naziv pjesme ne uključuje znak #. Npr:

Naziv pjesme 1 # 650 \n Naziv pjesme 2 # 328 \n ....

Napisati funkciju koja će za zadani pokazivač na datoteku i zadani naziv pjesme izračunati i vratiti trajanje pjesme. Napisati glavni program u kojem se otvara datoteka i učitava naziv pjesme, poziva funkcija, te ispisuje trajanje pjesme u obliku mm:ss, gdje je mm broj minuta, a ss broj sekundi. 3. Na disku se nalazi slijedna formatirana datoteka teretana.txt, u kojoj se nalaze zapisi o obavljenim vježbama na body-building treningu u teretani. Svaki zapis se nalazi u svome retku a sadrži sljedeća polja: datum (formata dd.mm.gggg.), naziv vježbe (do 40 znakova, s mogućim prazninama), težinu u kg (cijeli broj), broj ponavljanja (cijeli broj). Polja u jednom zapisu su odvojena znakom #. Npr:

01.05.2003. # Potisak na klupi # 60 # 12 \n

01.05.2003. # Potisak na klupi # 80 # 10 \n

01.05.2003. # Potisak na klupi # 100 # 8 \n

01.05.2003. # Pregib bicepsom # 30 # 12 \n

U istom danu se ista vježba može pojavljivati više puta, s različitim (ili istim) težinama i brojem ponavljanja. Pod opterećenjem na vježbi se podrazumijeva umnožak težine i broja ponavljanja. Radi jednostavnosti pretpostavite da se zapisi sortirani po rastućem datumu. Napisati funkciju koja za zadani datum računa ukupno opterećenje (ukupno opterećenje je jednako zbroju opterećenja svih pojedinih obavljenih vježbi tog dana). Ukoliko tog dana nije bilo treninga, funkcija vraća 0. Napisati glavni program u kojem se otvara datoteka, unosi datum, poziva funkcija te ispisuje ukupno opterećenje za uneseni datum. 4. Na disku se nalazi slijedna formatirana datoteka teretana.txt, u kojoj se nalaze zapisi o obavljenim vježbama na body-building treningu u teretani. Svaki zapis se nalazi u svome retku a sadrži sljedeća polja: datum (formata dd.mm.gggg.), naziv vježbe (do 40 znakova, s mogućim prazninama), težinu u kg (cijeli broj), broj ponavljanja (cijeli broj). Polja u jednom zapisu su odvojena znakom #. Npr:

01.05.2003. # Potisak na klupi # 60 # 12 \n

01.05.2003. # Potisak na klupi # 80 # 10 \n

01.05.2003. # Potisak na klupi # 100 # 8 \n

Page 2: Labos06

01.05.2003. # Pregib bicepsom # 30 # 12 \n

U istom danu se ista vježba može pojavljivati više puta, s različitim (ili istim) težinama i brojem ponavljanja. Pod opterećenjem na vježbi se podrazumijeva umnožak težine i broja ponavljanja. Radi jednostavnosti pretpostavite da se zapisi sortirani po rastućem datumu. Napisati funkciju koja će za zadani datum ispisati detaljan popis svih obavljenih vježbi (za svaku obavljeni vježbu ispisati naziv vježbe, težinu, broj ponavljanja i opterećenje). Također na kraju ispisati ukupno opterećenje. Također napisati i glavni program u kojem će se unijeti datum i korištenjem napisane funkcije ispisati sadržaj treninga za taj dan.

5. U slijednoj formatiranoj datoteci "ekipe.txt" nalazi se popis nogometnih ekipa na nastavničkom malonogometnom turniru na FER-u. Format datoteke je: redni_broj_ekipe#ime_ekipe\n Primjer: 1#ZPM\n 2#ZEMRIS\n 3#ZVNE\n 4#Cassandra\n Prvi podatak je redni broj ekipe, a drugi ime ekipe. Unaprijed se ne zna koliko ekipa ima u skupini, ali ih ne može biti više od 6. U slijednoj formatiranoj datoteci "rezultati.txt" nalaze se rezultati odigranih utakmica. Format datoteke je: #redni_broj_ekipe1#redni_broj_ekipe2#broj_golova_ekipe1#broj_golova_ekipe2\n Primjer: 1#2#7#2\n 3#4#3#3\n 2#3#4#7\n 4#1#2#6\n 3#1#5#5\n 2#4#3#6\n Napisati program koji će učitati s tipkovnice naziv ekipe i ispisati koliko je bodova ekipa osvojila. Napomena: pobjeda donosi 3 boda, neriješeno 1, a poraz 0 bodova. 6. U slijednoj formatiranoj datoteci "ekipe.txt" nalazi se popis nogometnih ekipa na nastavničkom malonogometnom turniru na FER-u. Format datoteke je: redni_broj_ekipe#ime_ekipe\n Primjer: 1#ZPM\n 2#ZEMRIS\n 3#ZVNE\n 4#Cassandra\n Prvi podatak je redni broj ekipe, a drugi ime ekipe. Unaprijed se ne zna koliko ekipa ima u skupini, ali ih ne može biti više od 6. U slijednoj formatiranoj datoteci "rezultati.txt" nalaze se rezultati odigranih utakmica. Format datoteke je: #redni_broj_ekipe1#redni_broj_ekipe2#broj_golova_ekipe1#broj_golova_ekipe2\n Primjer: 1#2#7#2\n 3#4#3#3\n 2#3#4#7\n 4#1#2#6\n 3#1#5#5\n 2#4#3#6\n Napisati program koji će učitati s tipkovnice naziv ekipe i ispisati koliko je prosječno golova davala po utakmici. 7. Na disku se nalazi slijedna formatirana datoteka rezultati.txt, u kojoj se nalaze rezultati natjecanja u slalomu u sljedećem obliku:

KOSTELIC Janica # CRO # 1 # 45.84 \n

Svaki redak datoteke predstavlja jedan zapis s rezultatima. Rezultati (zapisi) se sastoje od sljedećih dijelova: Prezime i ime skijašice, državljanstvo skijašice, rezultat (minuta), rezultat (sekundi) (U gornjem primjeru vrijeme je 1 minuta i 45,84 sekundi). Dijelovi zapisa su odvojeni znakom #, a

Page 3: Labos06

prezime i ime skijašice nema praznina na kraju i može imati najviše 25 znakova. Državljanstvo se sastoji od tri slova, vrijeme u minutama je točno jedan broj, a sekunde su formata nn.nn Potrebno je napisati program koji će u zadanoj datoteci pronaći i ispisati skijašicu s najboljim (najmanjim) vremenom. Pretpostaviti da nema dvije ili više skijašica s jednakim vremenima, i da postoji barem jedan zapis (Naputak: pretvoriti vremena u sekunde i onda uspoređivati). 8. Na disku se nalazi slijedna formatirana datoteka kino.txt, gdje su zapisi oblika kkNffpppffpppkkNffpppffpppffpppkkNffppp... kk šifra kina 0 – 10 N ukupan broj različitih filmova projekciranih u kinu kk (N<10) ff šifra filma od 0-20 ppp broj prodanih karata 0-100 za film ff u kinu kk Pročitati datoteku i ispisati statistiku gledanosti pojedinog filma u svim kinima: Film Broj posjetitelja (zbroj svih posjetitelja na projekciji filma ff) ff Upppp ff Upppp ff Upppp 9. Na disku se nalazi slijedna formatirana datoteka adresar.txt koja sadrži zapise slijedećeg oblika. Svaki zapis je smješten u svoj redak. Prezime i ime 25 znakova Adresa 20 znakova Telefon 10 znakova Napisati glavni program za pretraživanje adresara. Nudi se mali izbornik s opcijama

1. Pretraga po imenu ili dijelu imena 2. Pretraga po točno zadanom telefonskom broju 3. Kraj

Za izabranu opciju pretražuje se slijedna datoteka i ispisuju svi podaci o osobama koji zadovoljavaju postavljeni kriterij. Npr. Za uvjet 1 i ključ pretrage Ana ispisale bi se sve osobe imena Ana, ANA, IVANA, ANA-MARIJA i sl. Osigurati usporedbu neovisno o velikom i malom slovu u imenima. Ukoliko nema niti jednog zapisa ispisuje se odgovarajuća poruka. 10. U slijednoj formatiziranoj datoteci tosobe.txt nalaze se zapisi oblika: SGGGGIme Prezime\n .... gdje S označava spol (M,Z), GGGG godinu rođenja, zatim slijede Ime (točno 20 znakova), razmak, Prezime (max. 40 znakova) Napisati funkciju koja će izračunati postotak spolova, te prosječnu dob (uzeti da je sadašnja godina 2003) za zapise u datoteci. Napisati glavni program u kojem se otvara datoteka, poziva funkcija, te ispisuju izračunate vrijednosti. 11.U slijednoj formatiziranoj datoteci tosobe.txt nalaze se zapisi oblika: SGGGGIme Prezime\n .... gdje S označava spol (M,Z), GGGG godinu rođenja, zatim slijede Ime (točno 20 znakova), razmak, Prezime (max. 40 znakova) Napisati funkciju koja će u novu datoteku (po istom formatu) prepisati samo one zapise koji imaju dob veću od prosječne (kod računanja dobi uzeti da je sadašnja godina 2003) Napisati glavni program u kojem se otvara datoteka, poziva funkcija, te nakon toga ispisuje sadržaj nove datoteke.

Page 4: Labos06

12. Amater filatelist u datoteku marke1.txt sprema popis maraka koje je skupio. Datoteka je oblika:

Naziv\nVrijednost\nNaziv\nVrijednost ... Napisati program koji će od korisnika tražiti da upiše naziv neke marke. Novu marku treba dodati na kraj datoteke tako da se vrijednost marke izračuna kao prosjek vrijednosti maraka koje se već nalaze u datoteci. 13. Amater filatelist u datoteku marke2.txt sprema popis maraka koje je skupio. Zapis u datoteci se sastoji od: - Naziva marke (točno 50 znakova, može sadržavati i praznine) - Koliko komada navedene marke filatelist posjeduje (cijeli broj u formatu dddd) - Vrijednosti jedne navedene marke (float u formatu ffff.ff) Npr. 12345678901234567890123456789012345678901234567890123456789012 HRVATSKA FLORA – DALMATINSKA IGLICA 00120020.00 Na kraju svakog zapisa, prelazi se u novi red. Potrebno je napisati program koji će ispisati nazive svih maraka kojih filatelist posjeduje barem 5 komada te ukupan broj maraka koje filate list posjeduje.

14. Napisati funkciju s prototipom:

int obradiDatoteku (FILE *finput, FILE *foutput)

Datoteka na koju pokazuje finput predstavlja datoteku u kojoj se može pojaviti bilo koji znak (ASCII kodovi od 0 do 255). Funkcija treba prebrojati pojavljivanja pojedinog slova abecede (pritom razlikujući velika i mala slova) u toj datoteci, te ujedno i zabilježiti poziciju prvog pojavljivanja svakog od njih. Takve podatke treba zapisati u datoteku na koju pokazuje pokazivač foutput. Datoteka na koju pokazuje foutput treba sadržavati podatke u obliku. znak#ukupan broj pojavljivanja#prvo pojavljivanje#

Funkcija vraća koliko se slova abecede nije nijednom pojavilo u datoteci. Napisati glavni program koji će učitati naziv datoteke, otvoriti datoteku (ako otvaranje nije uspjelo ispisati odgovarajuću poruku), pozvati funkciju i ispisati dobiveni rezultat na zaslon. Postupak ponavljati sve dok se za naziv datoteke ne unese riječ KRAJ. 15. Napisati funkciju s prototipom int prosječne_duljine(FILE *finput, int *arit_sr, int *pros_duljina)

koja će za datoteku brojevi_i_recenice.txt izračunati prosječan broj riječi u rečenici (vrijednost vratiti preko reference pros_duljina) te zbroj brojeva u datoteci (vrijednost vratiti preko reference arit_sr). Funkcija mora vratiti koliko je ukupno rečenica i brojeva bilo u datoteci. podaci u datoteci su oblika tip#podatak#tip#podatak#tip#podatak... gdje tip (char) određuje da li je sljedeći podatak broj ili jedan ili više rečenica. Svaku rečenicu ispisati na ekran u svom retku. Napomena: Kraj rečenice može biti . ili znak #.

Npr. B#2453#B#123#B#118#R#Neka recenica#R#Test. Druga recenica#B#124 Napisati glavni program koji će učitati naziv datoteke, otvoriti datoteku (ako otvaranje nije uspjelo ispisati odgovarajuću poruku), pozvati funkciju i ispisati dobiveni rezultat na zaslon. Postupak ponavljati sve dok se za naziv datoteke ne unese riječ KRAJ. 16. Na disku se nalazi slijedna formatirana datoteka ocjene.txt koja sadrži zapise o uspjehu studenata na ispitu iz jednog predmeta. Svaki zapis je smješten u svoj redak. Zapis se sastoji od

JMBAG-a studenta (točno 10 znamenki) ime studenta (točno 25 znakova s mogućim prazninama) prezime studenta (točno 25 znakova s mogućim prazninama) ocjena(cijeli broj iz intervala od 1 do 5)

Npr: 0036555555Ana Marija Marić 4

Page 5: Labos06

Napisati funkciju koja vraća broj ocjena koje cu veće od 1 i prosječnu ocjenu. Napisati glavni program u kojem se otvara datoteka, poziva funkcija i ispisuje broj ocjena većih od 1 i prosječna ocjena, te podaci (jmbag, ime i prezime, ocjena) o studentima koji su dobili ocjenu 5. 17. Na disku se nalazi slijedna formatirana datoteka ocjene.txt koja sadrži zapise o uspjehu studenata na ispitu iz jednog predmeta. Svaki zapis je smješten u svoj redak. Zapis se sastoji od

JMBAG-a studenta (točno 10 znamenki) ime studenta (točno 25 znakova s mogućim prazninama) prezime studenta (točno 25 znakova s mogućim prazninama) ocjena(cijeli broj iz intervala od 1 do 5)

Npr: 0036555555Ana Marija Marić 4

Napisati funkciju koja vraća broj studenata koji su dobili ocjenu 4 i broj studenata koji su dobili ocjenu 5. Napisati glavni program u kojem se otvara datoteka, poziva funkcija i ispisuje broj studenata s ocjenom 5 i broj studenata s ocjenom 4, te podaci (jmbag, ime i prezime, ocjena) o studentima koji su dobili ocjenu 1.