Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18

Hybrid View

  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da mygametech Visualizza il messaggio
    (sai mica come si chiude una discussione qui sul forum?)

    Semplicemente... non si chiudono.

    Se qualcun altro avrà altre cose da aggiungere o altre richieste da fare pertinenti a questa discussione, potrà farlo; altrimenti la discussione andrà a "morire" da sola.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    Allora riscrivo in questa discussione per non aprirne una nuova.
    Oggi ho rifatto un nuovo esercizio sempre di preparazione all'esame che dovrò dare tra poco, in questo caso il testo è il seguente:

    http://it.tinypic.com/r/290sftu/8

    in cui devo creare una lista per il noleggio di dvd, il mio codice come sempre è diviso in file.h e file.cpp, nel file.h metto la dichiarazione di classe mentro nel file.cpp vado proprio a scrivere le funzioni.

    ecco i due file:

    file.h

    codice:
    #include <iostream>
    #include <cstring>
    
    
    using namespace std;
    
    
    struct elem {
    		char titolo [36];
    		char cliente [21];
    		bool stato; // False: dvd presente , True: dvd noleggiato
    		elem *pun;
    	};
    
    
    class NoleggioDVD {
    
    
    	elem *testa;
    
    
    
    
    public:
    
    
    	NoleggioDVD ();
    	bool insDVD (const char *);
    	bool noleggia (const char *,const char *);
    	friend ostream& operator<<(ostream& , const NoleggioDVD& );
    };
    mentre questo è il file.cpp


    codice:
    #include <iostream>
    #include "compito8.h"
    using namespace std;
    
    
    NoleggioDVD::NoleggioDVD () {
    	testa=NULL;
    };
    
    
    bool NoleggioDVD::insDVD (const char *s) {
    
    
    	if (strlen(s)>35)
    		return false;
    
    
    	//inserimento in testa
    
    
    	if (testa==NULL){
    		strcpy (testa->titolo, s);
    		testa->stato=false;
    		testa->pun=NULL;
    
    
    	}
    
    
    	//inserimento in coda
    	
    	else {
    		elem *p=testa;
    		while (p->pun!=NULL)
    			p=p->pun;
    		
    		elem *r=new elem;
    		p->pun=r;
    		r->pun=NULL;
    		r->stato=false;
    		strcpy (r->titolo, s);
    	}
    
    
    return true;
    }
    
    
    
    
    
    
    
    
    bool NoleggioDVD::noleggia (const char *s,const char *c) {
    	
    	//controllo
    
    
    	if (strlen(s)>35 || strlen (c)>20 || testa==NULL)
    		return false;
    
    
    
    
    
    
    
    
    	//scorro la lista
    
    
    	elem *p=testa;
    
    
    
    
    	while (p!=NULL && !(strcmp(p->titolo, s)==0))
    		p=p->pun;
    
    
    	//caso in cui non esista il dvd inserito o sia già noleggiato
    
    
    	if (p==NULL || p->stato==true)
    		return false;
    
    
    	//il dvd esiste-->il cliente lo noleggia
    
    
    	else {
    		p->stato=true;
    		strcpy(p->cliente, s);
    	}
    
    
    
    
    return true;
    
    
    }
    
    
    
    
    
    
    
    
    ostream& operator<<(ostream& os, const NoleggioDVD& n) {
    	elem *p;
    
    
    	if (n.testa==NULL)
    		os<<"Non ci sono DVD presenti in videoteca";
    
    
    
    
    	for (p=n.testa; p!=NULL; p=p->pun) {
    		
    		os<<p->titolo<<',';
    		
    		if (!p->stato)
    			os<<"PRESENTE";
    
    
    		else {
    			os<<"ASSENTE"<<'('<<p->cliente<<')';
    		}
    
    
    	os<<endl;
    	}
    
    
    
    
    
    
    }
    il main.cpp datomi dai professori è il seguente:

    codice:
    #include <iostream>
    #include "compito8.h"
    using namespace std;
    
    
    int main(){
        
        // test prima parte
        
        NoleggioDVD n;
        
        n.insDVD("Madagascar 3");
        n.insDVD("Sherlock Holmes - Gioco di ombre");
        n.insDVD("Lo Hobbit");
        n.insDVD("Django Unchained");
        n.insDVD("Battleship");
    	
        cout<<n<<endl;
        
        n.noleggia("Lo Hobbit", "MARIO.ROSSI");
        n.noleggia("Django Unchained", "LUIGI.BIANCHI");
        n.noleggia("Madagascar 3", "GIOVANNI.VERDI");
        
        cout<<n<<endl;
       /* 
        // test seconda parte
        n.riconsegna("LUIGI.BIANCHI");
        cout<<n<<endl;
        {
            NoleggioDVD n2(n);
            cout<<n2<<endl;
        }
        NoleggioDVD n3=!n;
        cout<<n3<<endl;
        */
        return 0;
    }
    la seconda arte è commentata perchè non ho scritto le funzioni riguardanti questa parte, comunque ora il mio problema è che quando vado a compilare il computer mi da errore di segmentazione, in questo modo: http://i62.tinypic.com/2s68od2.png

    in effetti devo dire che ogni volta che faccio un esercizio con puntatori mi da sempre questo errore, quindi è qualche sbaglio che faccio ripetutamente, potreste aiutarmi a capire quel'è tale sbaglio?

    inoltre ho anche un'altra domanda da fare, infatti inizialmente avevo messo la struct all'interno della classe ma poi vedendo la soluzione del professore, ho notato che lui la mette fuori, così l'ho fatto anche io, ma che differenza ci sarebbe?

    Grazie mille a tutti per le risposte! non immaginate quanto io sia grato dell'aiuto che mi state dando!

  3. #3
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Quote Originariamente inviata da mygametech Visualizza il messaggio
    Allora riscrivo in questa discussione per non aprirne una nuova.
    Oggi ho rifatto un nuovo esercizio sempre di preparazione all'esame che dovrò dare tra poco, in questo caso il testo è il seguente:

    http://it.tinypic.com/r/290sftu/8

    in cui devo creare una lista per il noleggio di dvd, il mio codice come sempre è diviso in file.h e file.cpp, nel file.h metto la dichiarazione di classe mentro nel file.cpp vado proprio a scrivere le funzioni.

    ecco i due file:

    file.h

    codice:
    #include <iostream>
    #include <cstring>
    
    
    using namespace std;
    
    
    struct elem {
            char titolo [36];
            char cliente [21];
            bool stato; // False: dvd presente , True: dvd noleggiato
            elem *pun;
        };
    
    
    class NoleggioDVD {
    
    
        elem *testa;
    
    
    
    
    public:
    
    
        NoleggioDVD ();
        bool insDVD (const char *);
        bool noleggia (const char *,const char *);
        friend ostream& operator<<(ostream& , const NoleggioDVD& );
    };
    mentre questo è il file.cpp


    codice:
    #include <iostream>
    #include "compito8.h"
    using namespace std;
    
    
    NoleggioDVD::NoleggioDVD () {
        testa=NULL;
    };
    
    
    bool NoleggioDVD::insDVD (const char *s) {
    
    
        if (strlen(s)>35)
            return false;
    
    
        //inserimento in testa
    
    
        if (testa==NULL){
            strcpy (testa->titolo, s);
            testa->stato=false;
            testa->pun=NULL;
    
    
        }
    
    
        //inserimento in coda
        
        else {
            elem *p=testa;
            while (p->pun!=NULL)
                p=p->pun;
            
            elem *r=new elem;
            p->pun=r;
            r->pun=NULL;
            r->stato=false;
            strcpy (r->titolo, s);
        }
    
    
    return true;
    }
    
    
    
    
    
    
    
    
    bool NoleggioDVD::noleggia (const char *s,const char *c) {
        
        //controllo
    
    
        if (strlen(s)>35 || strlen (c)>20 || testa==NULL)
            return false;
    
    
    
    
    
    
    
    
        //scorro la lista
    
    
        elem *p=testa;
    
    
    
    
        while (p!=NULL && !(strcmp(p->titolo, s)==0))
            p=p->pun;
    
    
        //caso in cui non esista il dvd inserito o sia già noleggiato
    
    
        if (p==NULL || p->stato==true)
            return false;
    
    
        //il dvd esiste-->il cliente lo noleggia
    
    
        else {
            p->stato=true;
            strcpy(p->cliente, s);
        }
    
    
    
    
    return true;
    
    
    }
    
    
    
    
    
    
    
    
    ostream& operator<<(ostream& os, const NoleggioDVD& n) {
        elem *p;
    
    
        if (n.testa==NULL)
            os<<"Non ci sono DVD presenti in videoteca";
    
    
    
    
        for (p=n.testa; p!=NULL; p=p->pun) {
            
            os<<p->titolo<<',';
            
            if (!p->stato)
                os<<"PRESENTE";
    
    
            else {
                os<<"ASSENTE"<<'('<<p->cliente<<')';
            }
    
    
        os<<endl;
        }
    
    
    
    
    
    
    }
    il main.cpp datomi dai professori è il seguente:

    codice:
    #include <iostream>
    #include "compito8.h"
    using namespace std;
    
    
    int main(){
        
        // test prima parte
        
        NoleggioDVD n;
        
        n.insDVD("Madagascar 3");
        n.insDVD("Sherlock Holmes - Gioco di ombre");
        n.insDVD("Lo Hobbit");
        n.insDVD("Django Unchained");
        n.insDVD("Battleship");
        
        cout<<n<<endl;
        
        n.noleggia("Lo Hobbit", "MARIO.ROSSI");
        n.noleggia("Django Unchained", "LUIGI.BIANCHI");
        n.noleggia("Madagascar 3", "GIOVANNI.VERDI");
        
        cout<<n<<endl;
       /* 
        // test seconda parte
        n.riconsegna("LUIGI.BIANCHI");
        cout<<n<<endl;
        {
            NoleggioDVD n2(n);
            cout<<n2<<endl;
        }
        NoleggioDVD n3=!n;
        cout<<n3<<endl;
        */
        return 0;
    }
    la seconda arte è commentata perchè non ho scritto le funzioni riguardanti questa parte, comunque ora il mio problema è che quando vado a compilare il computer mi da errore di segmentazione, in questo modo: http://i62.tinypic.com/2s68od2.png

    in effetti devo dire che ogni volta che faccio un esercizio con puntatori mi da sempre questo errore, quindi è qualche sbaglio che faccio ripetutamente, potreste aiutarmi a capire quel'è tale sbaglio?

    inoltre ho anche un'altra domanda da fare, infatti inizialmente avevo messo la struct all'interno della classe ma poi vedendo la soluzione del professore, ho notato che lui la mette fuori, così l'ho fatto anche io, ma che differenza ci sarebbe?

    Grazie mille a tutti per le risposte! non immaginate quanto io sia grato dell'aiuto che mi state dando!
    Ciao ... Devi stare attento agli accessi di memoria (in particolare ad acccesso a puntatori nulli). Non devi mai accedere a puntatori nulli (con valore NULL o 0) a membri di strutture non allocati.
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  4. #4
    up

  5. #5
    si questo lo so. il problema è che non riesco a capire in quale parte del programma vado a toccare un area di memoria "sbagliata"

  6. #6
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Controlla
    codice:
    if (testa==NULL){
            strcpy (testa->titolo, s);
            testa->stato=false;
            testa->pun=NULL;
    ...
    Non c' è niente di "strano" nel codice???
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.