Advertisement
filip710

2016KOL2_Z3_GRUPA B

Jul 6th, 2016
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.14 KB | None | 0 0
  1. //PROGRAM.C
  2. #include <stdio.h>  
  3. #include "functions.h"
  4.  
  5. /* Zadana je datoteka tracks.txt u kojoj se nalazi popis pjesama na računalu.
  6.  * Datoteka ima slijedeći format: prvi podatak je broj pjesama u fileu, nakon
  7.  * njega slijedi duljina trajanja pjesme, beats per minute pjesme (predstavlja
  8.  * tempo pjesme) i naziv pjesme. Svaki podatak je u svom redu, pogledajte
  9.  * strukturu ulazne datoteke.
  10.  *
  11.  * Zadana vam je main funkcija koja treba, pozivima funkcija iz functions.c
  12.  * datoteke, pronaci pjesme brzeg tempa od 130 i ispisati ukupnu duljinu takve
  13.  * playliste. Iznad poziva funkcija nalazi se objasnjenje.
  14.  *
  15.  * Vas zadatak je implementirati funkcije get_tracks_faster_than() i
  16.  * get_playlist_length_sec(). Main ne morate mijenjati, ali smijete radi
  17.  * debuggiranja.
  18.  *
  19.  * U program se ne učitavaju podaci sa stdin-a pa možete pokrenuti program na
  20.  * RUN radi debugiranja.
  21.  *
  22.  * Grader ce samo provjeravati ispisanu duljinu playliste, ali cemo svaki zadatak
  23.  * prekontrolirati. */
  24.  
  25. int main(void)
  26. {
  27.   Playlist *all, *fast_tracks;
  28.   int length;
  29.   // Ova funkcija ce ucitati sve pjesme u strukturu all. Funkcija ce dinamicki
  30.   // alocirati memoriju za pjesme i vratiti adresu gdje se nalaze. Ova funkcija
  31.   // je zadana.
  32.   all = load_tracks("tracks.txt");
  33.  
  34.   // Ova funkcija vam je takodjer zadana, a moze vam sluziti za debugging.
  35.   print_playlist(all); //ovom funkcijom provjerite ucitavanje
  36.  
  37.   // Ovu funkciju morate implementirati, funkcija prima dva argumenta:
  38.   // vrijednost bpm-a i playlistu. Funkcija treba stvoriti i vratiti novu
  39.   // playlistu u koju ce spremiti sve one pjesme iz predane playliste koje
  40.   // imaju tempo brzi od predanog parametra trajanja pjesme.
  41.   fast_tracks = get_tracks_faster_than(130,all);
  42.  
  43.  
  44.   // Ovu funkciju isto morate implementirati, funkcija prima playlistu a vraca
  45.   // ukupnu duljinu svih pjesama u playlisti pretvorenu u sekunde
  46.   length = get_playlist_length_sec(fast_tracks);
  47.  
  48.   // ispis ukupnu duljinu playliste u sekundama ispisuje kao
  49.   // minute i sekunde
  50.   printf("The playlist length is: %.d:%.2d\n", length/60, length%60);
  51.  
  52.   return 0;
  53. }
  54.  
  55. //HEADER
  56. #ifndef FUNCTIONS_H
  57. #define FUNCTIONS_H
  58.  
  59. typedef struct track {
  60.   char track[250];
  61.   float bpm;
  62.   int mm, ss;
  63. } Track;
  64.  
  65. typedef struct playlist {
  66.   int count;
  67.   Track **tracks;
  68. } Playlist;
  69.  
  70.  
  71. void print_playlist(Playlist *list);
  72.  
  73. Playlist* load_tracks(char *filename);
  74.  
  75. int get_playlist_length_sec(Playlist *list);
  76.  
  77. Playlist* get_tracks_faster_than(int bpm, Playlist* all);
  78.  
  79. #endif
  80.  
  81. //FUNKCIJE
  82.  
  83. #include <stdio.h>  
  84. #include <stdlib.h>
  85. #include <string.h>
  86. #include "functions.h"
  87.  
  88.  
  89. void print_playlist(Playlist *list) {
  90.   int i;
  91.   for (i = 0; i < list->count; i++) {
  92.     printf("%s (%.2d:%.2d) [%.2f]\n", list->tracks[i]->track, list->tracks[i]->mm, list->tracks[i]->ss, list->tracks[i]->bpm);
  93.   }
  94. }
  95.  
  96. Playlist* load_tracks(char *filename) {
  97.   int n,i;
  98.   Playlist *list = (Playlist*) malloc(sizeof(Playlist));
  99.   Track *tracks;
  100.  
  101.   FILE *f = fopen(filename, "r");
  102.   fscanf(f, "%d", &n);
  103.   printf("Tracks: %d\n", n);
  104.  
  105.   tracks = (Track*) malloc(n*sizeof(Track));
  106.   list->tracks = (Track**) malloc(n*sizeof(Track*));
  107.  
  108.   for (i = 0; i < n; i++) {
  109.     fscanf(f, "%d:%d", &tracks[i].mm, &tracks[i].ss);
  110.     fscanf(f, "%f", &tracks[i].bpm);
  111.     fgetc(f); //cistimo stream zbog scanf-a
  112.     fgets(tracks[i].track, 250, f);
  113.     tracks[i].track[strlen(tracks[i].track)-1] = '\0'; //ubij \n koji fgets ucitava
  114.     list->tracks[i] = &tracks[i];
  115.   }
  116.  
  117.   list->count = n;
  118.   return list;
  119. }
  120.  
  121. Playlist* get_tracks_faster_than(int bpm, Playlist* all) {
  122.  
  123.     Playlist *longSongs = malloc(sizeof(Playlist));
  124.     longSongs->tracks = malloc(all->count*sizeof(Track*));
  125.  
  126.     int i, n = 0;
  127.  
  128.     for(i=0;i<all->count;i++)
  129.     {
  130.         if(all->tracks[i]->bpm > bpm)
  131.         {
  132.             longSongs->tracks[n++] = all->tracks[i];
  133.         }
  134.     }
  135.  
  136.     longSongs->count=n;
  137.     return longSongs;
  138. }
  139.  
  140. int get_playlist_length_sec(Playlist *list) {
  141.     int i;
  142.     int min_secs = 0;
  143.    
  144.     for(i=0;i<list->count;i++)
  145.     {
  146.         min_secs+=list->tracks[i]->mm*60 + list->tracks[i]->ss;
  147.     }
  148.     return min_secs;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement