Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //MAIN
- #include <stdio.h>
- #include "functions.h"
- /* Zadana je datoteka tracks.txt u kojoj se nalazi popis pjesama na
- * računalu. Datoteka ima slijedeći format: prvi podatak je broj pjesama u
- * fileu, nakon njega slijedi duljina trajanja pjesme, beats per minute pjesme
- * (predstavlja tempo pjesme) i naziv pjesme. Svaki podatak je u svom redu,
- * pogledajte strukturu ulazne datoteke.
- *
- * Zadana vam je main funkcija koja treba, pozivima funkcija iz functions.c
- * datoteke, pronaci pjesme duze od 3 i pol minute i ispisati prosjecan bpm svih
- * takvih pjesama. Iznad poziva funkcija nalazi se objasnjenje.
- *
- * Vas zadatak je implementirati funkcije get_tracks_longer_than() i
- * get_avg_bpm(). Main ne morate mijenjati, ali smijete radi debuggiranja.
- *
- * U program se ne učitavaju podaci sa stdin-a pa možete pokrenuti program na
- * RUN radi debugiranja.
- *
- * Grader ce samo provjeravati ispisani broj avg_bpm-a, ali cemo svaki zadatak
- * prekontrolirati. */
- int main(void)
- {
- Playlist *all, *long_tracks;
- float avg_bpm;
- // Ova funkcija ce ucitati sve pjesme u strukturu all. Funkcija ce dinamicki
- // alocirati memoriju za pjesme i vratiti adresu gdje se nalaze. Ova funkcija
- // je zadana.
- all = load_tracks("tracks.txt");
- // Ova funkcija vam je takodjer zadana, a moze vam sluziti za debugging.
- // print_playlist(all); //ovom funkcijom provjerite ucitavanje
- // Ovu funkciju morate implementirati, funkcija prima tri argumenta: broj
- // minuta, broj sekundi i playlistu. Funkcija treba stvoriti i vratiti novu
- // playlistu u koju ce spremiti sve one pjesme iz predane playliste koje su
- // duze od predanih parametara trajanja pjesme.
- long_tracks = get_tracks_longer_than(3,30,all);
- print_playlist(long_tracks);
- // Ovu funkciju isto morate implementirati, funkcija prima playlistu a vraca
- // vrijednost prosjecnog tempa svih pjesama u playlisti.
- avg_bpm = get_avg_bpm(long_tracks);
- printf("Average BPM of the playlist is: %.2f\n", avg_bpm);
- return 0;
- }
- //HEADER
- #ifndef FUNCTIONS_H
- #define FUNCTIONS_H
- typedef struct track {
- char track[250];
- float bpm;
- int mm, ss;
- } Track;
- typedef struct playlist {
- int count;
- Track **tracks;
- } Playlist;
- void print_playlist(Playlist *list);
- Playlist* load_tracks(char *filename);
- Playlist* get_tracks_longer_than(int mm, int ss, Playlist* all);
- float get_avg_bpm(Playlist *list);
- #endif
- //FUNKCIJE
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "functions.h"
- void print_playlist(Playlist *list) {
- int i;
- for (i = 0; i < list->count; i++) {
- printf("%s (%d:%d) [%f]\n", list->tracks[i]->track, list->tracks[i]->mm, list->tracks[i]->ss, list->tracks[i]->bpm);
- }
- }
- Playlist* load_tracks(char *filename) {
- int n,i;
- Playlist *list = (Playlist*) malloc(sizeof(Playlist));
- Track *tracks;
- FILE *f = fopen(filename, "r");
- fscanf(f, "%d", &n);
- printf("Tracks: %d\n", n);
- tracks = (Track*) malloc(n*sizeof(Track));
- list->tracks = (Track**) malloc(n*sizeof(Track*));
- for (i = 0; i < n; i++) {
- fscanf(f, "%d:%d", &tracks[i].mm, &tracks[i].ss);
- fscanf(f, "%f", &tracks[i].bpm);
- fgetc(f); //cistimo stream zbog scanf-a
- fgets(tracks[i].track, 250, f);
- tracks[i].track[strlen(tracks[i].track)-1] = '\0'; //ubij \n koji fgets ucitava
- list->tracks[i] = &tracks[i];
- }
- list->count = n;
- return list;
- }
- Playlist* get_tracks_longer_than(int mm, int ss, Playlist* all) {
- int min_secs = mm*60 + ss;
- Playlist *longSongs = malloc(sizeof(Playlist));
- longSongs->tracks = malloc(all->count*sizeof(Track*));
- int i, n = 0;
- for(i=0;i<all->count;i++)
- {
- if(all->tracks[i]->mm*60 + all->tracks[i]->ss > min_secs)
- {
- longSongs->tracks[n++] = all->tracks[i];
- }
- }
- longSongs->count=n;
- return longSongs;
- }
- float get_avg_bpm(Playlist *list) {
- float avg_bpm=0;
- int i;
- for(i=0;i<list->count;i++)
- {
- avg_bpm+=list->tracks[i]->bpm;
- }
- return avg_bpm/=list->count;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement