Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da mygametech Visualizza il messaggio
    tuttavia noi a lezione non l'abbiamo mai utilizzata
    Scusa la perplessità... ma immagino che a scuola ti abbiano spiegato come "scorrere una matrice". Che tu debba scorrerla tutta o scorrerne metà, o scorrere solo i primi 5 elementi, dipende dal tipo di elaborazione che devi fare... spero che voi studenti non pretendiate che vi si insegni separatamente come scorrere i primi 2 elementi, poi i primi 3 elementi, poi i primi 4 elementi, ecc.

    La richiesta del professore è quella di scrivere un metodo che scambi i valori di determinati elementi della matrice. Non serve che ve lo dica il professore che se vai nella cella A e la scambi con B, poi vai sopra a B e la scambi con A, hai ri-ottenuto la situazione iniziale. Questo si chiama "ragionamento" ed è ciò che si fa quando si approccia un problema per risolverlo.

    Ora, per invertire una matrice devo scambiare tra di loro due elementi opposti... a me viene "naturale" pensare (ragionare) che, quindi, non dovrò prendere in considerazione tutti gli elementi di quella matrice... mi basterà prenderne in considerazione la metà e scambiarli con l'altra metà. Quindi dovrò scorrere solo metà matrice. Ma se qualcuno mi ha spiegato come scorrere una matrice (tutti gli elementi della matrice), non mi serve andargli a chiedere come fare per scorrerne solo metà... ti pare?


    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. #12
    grazie mille del tuo aiuto, come sempre chiarissimo! in effetti hai proprio ragione. non che io non ragioni quando programmo ma anzi il ragionamento è proprio alla base della programmazione altrimenti non riuscirei a fare nulla, grazie del tuo aiuto!

    (sai mica come si chiude una discussione qui sul forum?)

  3. #13
    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

  4. #14
    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!

  5. #15
    up

  6. #16
    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

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

  8. #18
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.