Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_NAZIV 20
- #define MAX_TIP 30
- #define MAX_SIZE 100
- // Iz zadate ulazne datoteke učitati niz struktura pri čemu se struktura emisija_st sastoji od sledećih
- // polja:
- // naziv emisije (jedna reč, do 20 karaktera)
- // frekvencija radio stanice na kojoj se emisija pušta (realan broj)
- // trajanje emisije u minutima (nenegativan ceo broj)
- // tip emisije (jedna reč, do 30 karaktera)
- // Nakon toga:
- // a) U izlaznu datoteku ispisati podatke o svim emisijama tako da vreme trajanja emisije bude
- // izraženo u satima.
- // b) Na standardni izlaz ispisati podatke o najkraćoj emisiji koja se emituje na frekvenciji većoj od
- // zadate.
- // c) Za zadati tip emisije izračunati prosečnu dužinu trajanja emisija tog tipa i taj podatak
- // sačuvati u fajlu koji nosi naziv tog tipa emisije sa ekstenzijom .txt.
- // PRIMER POZIVA : ./emisije emisije.txt izlaz.txt 100.2
- // Primer fajla : emisije.txt
- // Uzbudilnik 103.2 240 zabavna
- // Antidepresiv 91.8 150 zabavna
- // KlasikuMolim 95.3 105 muzicka
- // MuzickaApoteka 107.0 90 muzicka
- // RadioDrama 97.6 60 kulturna
- // ZvezdaniCasovi 104.0 45 kulturna
- // VeseloVece 94.9 150 kulturna
- typedef struct emisije_st {
- char naziv[MAX_NAZIV];
- float frekvencija;
- unsigned int trajanje;
- char tip[MAX_TIP];
- } emisije_st;
- FILE *safeOpen(char *file, char *mode);
- void ucitajEmisije(FILE *emisije, emisije_st niz[], int *brEmisija);
- void ispisUsatima(FILE *izlaz, emisije_st emisije[], int brEmisija);
- void filterEmisija(emisije_st emisije[], int brEmisija, double zadataFrekvencija);
- void prosekTrajanja(emisije_st emisije[], int brEmisija );
- int main(int argc, char *argv[]) {
- if (argc != 4) {
- printf("Pogresno ste pokrenuli program. \n PRIMER POZIVA : ./emisije emisije.txt izlaz.txt 100.2 ");
- exit(EXIT_FAILURE);
- }
- FILE *ulaz, *izlaz;
- int brEmisija = 0;
- emisije_st niz[MAX_SIZE];
- ulaz = safeOpen(argv[1], "r");
- ucitajEmisije(ulaz, niz, &brEmisija);
- fclose(ulaz);
- // izlaz
- izlaz = safeOpen(argv[2], "w");
- ispisUsatima(izlaz, niz, brEmisija);
- fclose(izlaz);
- // pod B
- filterEmisija(niz, brEmisija, atof(argv[3]));
- // pod C
- prosekTrajanja(niz, brEmisija );
- }
- FILE *safeOpen(char *file, char *mode){
- FILE *fp = fopen(file, mode);
- if(fp == NULL) {
- printf("Greska pri ucitavanju fajla : %s\n", file);
- exit(EXIT_FAILURE);
- }
- return fp;
- }
- void ucitajEmisije(FILE *emisije, emisije_st niz[], int *brEmisija) {
- int i = 0;
- while(!feof(emisije)) {
- fscanf(emisije, "%s %f %u %s",
- niz[i].naziv,
- &niz[i].frekvencija,
- &niz[i].trajanje,
- niz[i].tip);
- i++;
- }
- *brEmisija = i - 1;
- }
- void ispisUsatima(FILE *izlaz, emisije_st emisije[], int brEmisija) {
- int i = 0;
- for (i = 0; i < brEmisija; i++) {
- fprintf(izlaz, "%s %.1f %g %s\n",
- emisije[i].naziv,
- emisije[i].frekvencija,
- emisije[i].trajanje / 60.0,
- emisije[i].tip);
- }
- }
- void filterEmisija(emisije_st emisije[], int brEmisija, double zadataFrekvencija) {
- int i = 0;
- int minTrajanje = emisije[0].trajanje;
- int indexMinLen = 0;
- for (i = 0; i < brEmisija; i++) {
- if (emisije[i].trajanje < minTrajanje && emisije[i].frekvencija > zadataFrekvencija) {
- minTrajanje = emisije[i].trajanje;
- indexMinLen = i;
- }
- }
- printf("Najkraca emisija na frekvenciji vecoj od %.1lf je :\n%s %.1f %d %s\n\n",
- zadataFrekvencija,
- emisije[indexMinLen].naziv,
- emisije[indexMinLen].frekvencija,
- emisije[indexMinLen].trajanje,
- emisije[indexMinLen].tip);
- }
- void prosekTrajanja(emisije_st emisije[], int brEmisija ) {
- char tipEmisije[MAX_TIP] = {};
- char filename[MAX_TIP+4];
- float prosecnaDuzina = 0;
- int i = 0;
- int zadovoljavaju = 0; // broj emisija koje zaodovoljavaju kriterijum
- int suma = 0.0; // ukupno trajanje svih emisija koje zadovoljavaju kriterijum
- do {
- printf("\nUnesite zeljeni tip emisije (zabavna, kulturna, muzicka):");
- __fpurge(stdin);
- fscanf(stdin, "%s", tipEmisije);
- } while (strcmp(tipEmisije, "zabavna") != 0
- && strcmp(tipEmisije, "kulturna") != 0
- && strcmp(tipEmisije, "muzicka") != 0);
- // strcat doda ".txt" na promenjivu i promenjiva nakon toga menja vrednost.
- // strcpy(filename, strcat(tipEmisije, ".txt"));
- // printf("filename : %s\n", filename);
- for (i = 0; i < brEmisija; i++) {
- if(strcmp(tipEmisije, emisije[i].tip) == 0) {
- zadovoljavaju++;
- suma += emisije[i].trajanje;
- }
- }
- zadovoljavaju = zadovoljavaju > 0 ? zadovoljavaju : 1;
- prosecnaDuzina = suma / zadovoljavaju;
- FILE *izlaz = safeOpen(strcat(tipEmisije, ".txt")/* filename*/, "w");
- fprintf(izlaz, "Prosecna duzina emisija tipa %s je : %g\n", tipEmisije, prosecnaDuzina);
- fclose(izlaz);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement