Programma che gestisce una lista di film

di il
4 risposte

Programma che gestisce una lista di film

Salve a tutti... mi sto preparando per l'esame di programmazione, e tra le dispense degli esami degli anni scorsi ho trovato questo:
"Definire le strutture dati necessarie a rappresentare una lista di film. Ogni
film ha un titolo, un regista e una durata. Si assuma che dato un titolo esista al
massimo un film con quel titolo. Definire le seguenti funzioni:
• una funzione che dato un regista restituisce la durata totale dei suoi film"
In realtà ci sono altre 2 funzioni dopo, ma per ora ho fatto solo la prima.
Che ne dite, secondo voi funziona?

struct film{

   char titolo[30];
   char regista[30];
   int minuti;
   film *successivo;

};

typedef film* ptr_film;

int durata_totale(ptr_film head, char regista[]);
//Precondition : prende in input il nome di un regista;
//Postcondition: ritorna la durata totale dei film di quel regista;

int durata_totale(ptr_film head, char regista[]){

ptr_film tmp;
int minuti = 0;
tmp = head;

    while(tmp != NULL){

        if(tmp->regista == regista){

            minuti = minuti + tmp->minuti;
            tmp = tmp->successivo;

        } else tmp = tmp->successivo;

    }

return(minuti);

}

4 Risposte

  • Re: Programma che gestisce una lista di film

    Stai pensando di creare una lista?

    Ma non hai creato una lista, hai solo dichiarato una struct, che potrà accogliere un solo film, poi scritto una funzione che teoricamente dovrebbe ricercare in una lista, ma che in realtà non può farlo.

    Io comunque opterei per una struttura dati più efficiente di una lista, un BST oppure un HASH TABLE.
  • Re: Programma che gestisce una lista di film

    SVNiko ha scritto:


    Stai pensando di creare una lista?

    Ma non hai creato una lista, hai solo dichiarato una struct, che potrà accogliere un solo film, poi scritto una funzione che teoricamente dovrebbe ricercare in una lista, ma che in realtà non può farlo.

    Io comunque opterei per una struttura dati più efficiente di una lista, un BST oppure un HASH TABLE.
    Lo so che non ho creato una lista, avevo fatto solo la funzione, che comunque in linea teorica doveva funzionare... L'idea era semplicemente di considerare una lista, con tanti nodi quanti sono i film totali. Quindi la funzione fa un controllo su ogni nodo, e verifica se il il campo regista del nodo contiene la stessa stringa che viene passata alla funzione dal main; in tal caso la funzione tiene memoria della durata di quel film, sommandola alla durata degli altri film di quel regista. Alla fine viene ritornata la somma dei minuti totali dei film di quel regista.
    Purtroppo per ora, in quanto a strutture dati, conosco solo le liste, le pile e gli alberi. Questo era solo un esercizio per esercitarmi su stringhe e liste, niente di più, per questo non avevo fatto il main, ma solo la funzione... comunque oggi ho anche creato un semplice main per testare la funzione, e funziona perfettamente Se ti interessa ecco il codice:
    
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    struct film{
    
       char titolo[50];
       char regista[30];
       int minuti;
       film *successivo;
    
    };
    
    typedef film* ptr_film;
    ptr_film add(const char titolo[], const char regista[], int min_tot, ptr_film head);
    //Precondition: regista è un regista
    //Postcondition: ritorna il puntatore alla testa della nuova lista, con un nuovo nodo inserito in testa
    ptr_film add(const char titolo[], const char regista[], int min_tot, ptr_film head){
    
    	ptr_film p = new film;
    	strcpy(p->titolo,titolo);
    	strcpy(p->regista, regista);
    	p->minuti = min_tot;
    	p->successivo = head;
    	return(p);
    
    }
    
    int durata_totale(ptr_film head, char regista[]);
    //Precondition : prende in input il nome di un regista;
    //Postcondition: ritorna la durata totale dei film di quel regista;
    int durata_totale(ptr_film head, char regista[]){
    
    ptr_film tmp;
    int minuti = 0;
    tmp = head;
    
        while(tmp != NULL){
    
            if(strcmp(tmp->regista,regista)==0){
    
                minuti = minuti + tmp->minuti;
                tmp = tmp->successivo;
    
            } else tmp = tmp->successivo;
    
        }
    
    return(minuti);
    
    }
    
    int main(){
    
    ptr_film head = NULL;
    head = add("Harry Potter e i doni della morte", "David Yates", 288, head);
    head = add("Harry Potter e il principe mezzosangue", "David Yates", 200, head);
    head = add("Harry Potter e l'Ordine della fenice", "David Yates", 190, head);
    head = add("Harry Potter e la pietra filosofale", "Alfonso Cuaron", 150, head);
    cout << "La durata totale dei film diretti da David Yates è: " << endl;
    cout << durata_totale(head, "David Yates");
    cout << " minuti" << endl;
    return(0);
    
    }
    
    In realtà ho dovuto apportare una piccola modifica alla funzione, inserendo la funzione strcmp, ma ora funziona perfettamente
  • Re: Programma che gestisce una lista di film

    Alessio Innocenzi ha scritto:



    Purtroppo per ora, in quanto a strutture dati, conosco solo le liste, le pile e gli alberi. Questo era solo un esercizio per esercitarmi su stringhe e liste, niente di più, per questo non avevo fatto il main, ma solo la funzione... comunque oggi ho anche creato un semplice main per testare la funzione, e funziona perfettamente Se ti interessa ecco il codice:

    In realtà ho dovuto apportare una piccola modifica alla funzione, inserendo la funzione strcmp, ma ora funziona perfettamente
    No, grazie! Non mi interessa il codice cercavo solo di darti un suggerimento, lo dici pure tu che quella funzione non funzionava, hai dovuto fare un aggiustamento.

    Poi visto che hai fatto gli alberi, cioè i BST. Alberi binari di ricerca or binary search tree, questi sono più efficienti di una lista per fare operazioni di ricerca. Più efficienti ancora sono le tabelle di hash or hash table: esse sono ad accesso diretto.

    Quindi in conclusione già con le tue conoscenze, dovresti fare una struttura dati più efficiente per risolvere il problema.
  • Re: Programma che gestisce una lista di film

    Ah, non sapevo che si chiamassero BST i binari di ricerca... grazie comunque del consiglio
Devi accedere o registrarti per scrivere nel forum
4 risposte