Problema 1 (18 punti)
Un sito web mette a disposizione delle play list che sono file contenenti un elenco di brani mp3 con relativo link al sito dove il brano è presente. In particolare ogni record di una play list ha la seguente struttura:
dove
Progettare una funzione C che prenda come parametri di ingresso
Progettare una funzione C che prenda come parametri di ingresso
Ad esempio, se il file nf contiene la seguente play list:
all_you_need_is_love beatles 04:30 http://www.beatles.com/mp3/all_you_need.mp3 jumping_jack_flash rolling_stones 03:22 http://www.rollingstones.com/downloads/jjf.mp3 symphathy_for_the_devil rolling_stones 11:23 http://www.rollingstones.com/downloads/sd.mp3 tangled_up_in_blue bob_dylan 05:11 http://www.bobdylan.com/mp3/tub75.mp3 penny_lane beatles 05:20 http://www.beatles.com/mp3/penny_lane.mp3
la funzione al punto 2, se invocata con la soglia 5:15, deve costruire la seguente lista:
+-----------+----+ +-----------+----+ +-----------+----+ |all_you... | | |jumping... | | |tangled... | /| ---->|beatles | ---------->|rolling... | ---------->|bob_dylan | / | |4 30 http..| | |3 22 http..| | |5 11 http..| / | +-----------+----+ +-----------+----+ +-----------+----+Inoltre, se la funzione al punto 3 viene invocata passandole come parametri tale lista e la durata 8:00, deve eliminare dalla lista solo l'ultimo elemento. Se la durata è invece 3:50, deve eliminare dalla lista tutti gli elementi.
Suggerimento: per i calcoli sui tempi, si consiglia di trasformare minuti e secondi in secondi.
Problema 2 (4 punti)
Descrivere un algoritmo di ordinamento a scelta (utilizzando pseudocodice o codice C) e discuterne la complessità computazionale. Fornire un esempio di vettore per cui l'algoritmo esibisce il comportamento del caso peggiore.
Problema 3 (4 punti)
Si rappresentino in complemento a due il proprio giorno di nascita e le ultime due cifre del proprio anno di nascita e se ne calcolino la somma e la differenza. Utilizzare il minimo numero di bit necessari per non avere overflow nelle operazioni.
Problema 4 (4 punti)
Si consideri il seguente programma C:
#include <stdio.h> int cosafa (int x) { if (x == 0) return 0; else if (x % 2 == 0) return x + cosafa(x-2); else return cosafa(x-1); } int main(void) { printf("%d\n", cosafa(5)); }