Advertisement
filip710

2016KOL2_Z3_GRUPA A

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