Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //PROGRAM.C
- #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 brzeg tempa od 130 i ispisati ukupnu duljinu takve
- * playliste. Iznad poziva funkcija nalazi se objasnjenje.
- *
- * Vas zadatak je implementirati funkcije get_tracks_faster_than() i
- * get_playlist_length_sec(). 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 ispisanu duljinu playliste, ali cemo svaki zadatak
- * prekontrolirati. */
- int main(void)
- {
- Playlist *all, *fast_tracks;
- int length;
- // 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 dva argumenta:
- // vrijednost bpm-a i playlistu. Funkcija treba stvoriti i vratiti novu
- // playlistu u koju ce spremiti sve one pjesme iz predane playliste koje
- // imaju tempo brzi od predanog parametra trajanja pjesme.
- fast_tracks = get_tracks_faster_than(130,all);
- // Ovu funkciju isto morate implementirati, funkcija prima playlistu a vraca
- // ukupnu duljinu svih pjesama u playlisti pretvorenu u sekunde
- length = get_playlist_length_sec(fast_tracks);
- // ispis ukupnu duljinu playliste u sekundama ispisuje kao
- // minute i sekunde
- printf("The playlist length is: %.d:%.2d\n", length/60, length%60);
- 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);
- int get_playlist_length_sec(Playlist *list);
- Playlist* get_tracks_faster_than(int bpm, Playlist* all);
- #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 (%.2d:%.2d) [%.2f]\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_faster_than(int bpm, Playlist* all) {
- 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]->bpm > bpm)
- {
- longSongs->tracks[n++] = all->tracks[i];
- }
- }
- longSongs->count=n;
- return longSongs;
- }
- int get_playlist_length_sec(Playlist *list) {
- int i;
- int min_secs = 0;
- for(i=0;i<list->count;i++)
- {
- min_secs+=list->tracks[i]->mm*60 + list->tracks[i]->ss;
- }
- return min_secs;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement