Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.47 KB | None | 0 0
  1. Zadaća 5
  2.  
  3.  
  4. Zadaća nosi 2 boda, a sastoji se od 4 zadatka. Svaki zadatak nosi po 0,5 bodova. Zadaci će biti bodovani proporcionalno broju uspješnih testova. Oblast zadaće su strukture i datoteke (gradivo predavanja 18 i 19).
  5. U ovoj zadaći je potrebno pridržavati se i pravila za pisanje čitljivog koda (P13), u suprotnom studenti mogu izgubiti dio bodova.
  6.  
  7. Važna napomena: Ovaj dokument će možda biti mijenjan radi popravljanja grešaka. Koristite najnoviju verziju! Na dnu dokumenta nalaziće se dnevnik izmjena.
  8.  
  9.  
  10. 1. (0,5 bodova) Napisati funkciju apsolutna koja prima dva stringa. Prvi string predstavlja relativnu putanju, a drugi tekući direktorij. Funkcija treba prepraviti prvi primljeni string tako da on sadrži apsolutnu putanju (pretpostavite da je string dovoljno veliki da primi sve dodatne karaktere). Ako je nemoguće formirati apsolutnu putanju, funkcija ne treba raditi ništa. Radi lakšeg lančanog pozivanja, funkcija u svakom slučaju (čak i kad ne radi ništa) treba vratiti pokazivač na početak prvog stringa.
  11.  
  12. NIJE dozvoljeno koristiti funkcije iz biblioteka string.h i stdlib.h, kao ni funkcije sprintf i sscanf iz biblioteke stdio.h.
  13.  
  14.  
  15. 2. (0,5 bodova) Date su strukture:
  16. struct Tacka {
  17. double x,y;
  18. };
  19. struct Kruznica {
  20. struct Tacka centar;
  21. double poluprecnik;
  22. };
  23. struct Kvadrat {
  24. struct Tacka dl;
  25. double stranica;
  26. };
  27.  
  28. Pri čemu je Kvadrat definisan preko tačke donjeg lijevog ugla i dužine stranice, a sve stranice su paralelne koordinatnim osima. Napisati funkciju sa sljedećim prototipom:
  29.  
  30. int izbaci_visak(struct Kruznica* kr, int velkr, struct Kvadrat* kv, int velkv)
  31.  
  32. Funkcija prima niz kružnica i niz kvadrata, te iz niza kvadrata izbacuje (uz očuvanje redoslijeda elemenata!) sve članove koji nisu potpuno obuhvaćeni barem jednom kružnicom. Za kvadrat se smatra da je potpuno obuhvaćen kružnicom ako se sva četiri njegova vrha nalaze unutar kružnice ili na kružnici.
  33.  
  34.  
  35. 3. (0,5 bodova) Genetski kod DNK sastavljen je od nukleotida (Adenin, Guanin, Timin i Citozin) koje predstavljamo slovima A, C, T i G. Pored toga definisaćemo genetsku sekvencu kao niz od tri nukleotida (bilo koja). Npr. “CTA” ili “GGC” su primjeri genetskih sekvenci.
  36.  
  37. Napisati program koji iz datoteke “genetski_kod.txt” učitava opis genetskog koda te pronalazi i na ekran ispisuje genetsku sekvencu koja se uzastopno ponavlja najviše puta. Ako postoji više takvih sekvenci, treba ispisati prvu. Npr. ako datoteka glasi:
  38. CTGATGAACGGCGGCGGCGGCAGTGA
  39. Najviše puta uzastopno se ponavlja sekvenca “CGG” (četiri puta – označeno boldom), dok se sekvenca “TGA” ponavlja po dva puta uzastopno (na početku i kraju datoteke). Sekvenca "GGC" se također ponavlja četiri puta uzastopno, ali se CGG pojavljuje prva.
  40.  
  41. U datoteci se sigurno nalazi barem jedna sekvenca. U slučaju da datoteka ne postoji ili format datoteke ne odgovara datom iz bilo kojeg razloga, na ekranu treba ispisati poruku "Pogresan format" i prekinuti rad pozivom naredbe return (zbog autotestova nemojte koristiti exit()).
  42.  
  43. U zadatku je strogo zabranjeno koristiti bilo kakve pomoćne nizove ili stringove! Rješenje sa pomoćnim nizovima ili stringovima će dobiti 0 bodova. Dozvoljeno je koristiti pojedinačne promjenljive tipa int ili char.
  44.  
  45.  
  46. 4. (0,5 bodova) Data je main funkcija na serveru. Potrebno je da napišete definiciju struktura Datum i Mjerenja te funkcije ucitaj, zapisi i prosjek tako da program obavlja sljedeći zadatak:
  47.  
  48. Funkcija ucitaj treba u niz struktura Mjerenja koji je primljen kao parametar učitati podatke iz datoteke mjerenja.txt. Drugi parametar je kapacitet niza, te se program ne smije krahirati ako se u datoteci nalazi veći broj mjerenja od primljenog. Svaki red datoteke sastoji se od sljedećih elemenata razdvojenih znakom razmaka:
  49. naziva grada, dužine maksimalno 20 znakova, koji može sadržavati i razmake ali ne cifre ili tačke;
  50. tri cijela broja razdvojena razmacima koji predstavlja datum (dan, mjesec i godinu) prvog mjerenja;
  51. nepoznat broj realnih brojeva (maksimalno 1000) razdvojenih razmakom koji predstavljaju mjerenja temperature u gradu; kraj niza mjerenja je znak \n za prelazak u novi red.
  52. Prvo mjerenje vršeno je na datum koji je dat u datoteci, drugo mjerenje na sljedeći dan (sutradan), treće mjerenje na treći dan itd.
  53. Funkcija zapisi prima niz mjerenja i jedan datum, a treba da u datoteku izlaz.txt zapiše sljedeće podatke razdvojene znakom razmaka: naziv grada, a zatim sva mjerenja nakon datuma koji primljen kao parametar (fiksno na dvije decimale). Gradovi se trebaju nalaziti u zasebnim redovima datoteke. Ako za neki grad nema niti jednog mjerenja poslije navedenog datuma, u datoteku ne treba uopšte zapisivati taj grad!
  54.  
  55. Konačno, funkcija prosjek prima niz mjerenja, naziv jednog grada i dva datuma, a treba vratiti aritmetičku sredinu vrijednosti mjerenja za taj grad između dva navedena datuma (ne uključujući ta dva datuma). Ako grad ne postoji ili ako između dva datuma nije zabilježeno niti jedno mjerenje, funkcija treba vratiti nulu.
  56.  
  57. Funkcije zapisi i prosjek trebaju ispravno raditi sa svim datumima te uzimati u obzir i prestupne godine. Podsjetimo se, prestupne godine imaju 29 dana u februaru (ostale imaju 28 dana), a to su one godine koje su djeljive sa 4, osim godina koje su djeljive sa 100, ali godine koje su djeljive sa 400 ipak jesu prestupne. Tako npr. 2004. jeste bila prestupna (djeljiva sa 4) kao i 2000. (djeljiva sa 400), ali 1900. nije bila prestupna (djeljiva sa 4 i sa 100 ali nije sa 400).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement