Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C++] errore Windows durante esecuzione

    Ciao.
    Questo mio programma, fa caricare due LISTE con campo informativo intero.
    Gli elementi devono essere inseriti in ordine CRESCENTE in tutte e due le liste.
    Io dovrei crearne un'altra , ordinata in ordine decrescente.
    Adesso questo mio programma dovrebbe funzionare se le 2 liste hanno lo stesso numero di NODI.
    Questo e' il codice, compilandolo non mi da nessun errore, ma eseguendolo, dopo aver caricato le due liste, mi segnala di fare la segnalazione a Windows, perche' si e' verificato un errore.
    codice:
    #include <iostream>
    using namespace std;
    
    struct lista
    {
        int num;
        lista *punt; 
    };
    
    
    int main()
    {
        lista **x,*y,*T1,*T2;
        char ins;
        cout <<"Inserisci gli elementi nelle 2 LISTE in ordine crescente."<<endl;
        cout <<"Verra' creata una contenente i nuemri in ordine DECRESCENTE!.\n"<<endl;
        
        //Caricamento 1° LISTA
        lista p;                                     //P TESTA DELLA LISTA 1                              
        cout <<"LISTA 1 - Inserisci il numero = "; 
        cin >> p.num;
        x=&p.punt;                                    //conservo il campo puntatore            
        cout <<"Devi inserire ? (s/n) = ";
        cin >>ins;
        if (ins!='s' || ins!='S')                 // nel caso in cui viene inserito
                                  p.punt=NULL;   // solo un nodo
        
        while (ins=='s' || ins=='S')            
        { 
         lista *pp = new lista;
         cout <<"LISTA 1 - Inserisci il numero = ";
         cin >> pp->num;   
         *x=pp; 
         x=&pp->punt;                          //inserimenti in coda alla LISTA
         cout <<"Devi inserire ? (s/n) = ";
         cin >>ins; 
         if (ins=='n' || ins=='N')
                                  pp->punt=NULL;
        }
        // FINE caricamento 1° LISTA
        
        //Caricamento 2° LISTA
        lista q;                                       //Q TESTA DELLA LISTA 2                   
        cout <<"LISTA 2 - Inserisci il numero = "; 
        cin >> q.num;
        x=&q.punt;                                    //conservo il campo puntatore            
        cout <<"Devi inserire ? (s/n) = ";
        cin >>ins;
        if (ins!='s' || ins!='S')                 // nel caso in cui viene inserito
                                  q.punt=NULL;   // un solo nodo
                                  
        while (ins=='s' || ins=='S')            
        { 
         lista *qq = new lista;
         cout <<"LISTA 2 - Inserisci il numero = ";
         cin >> qq->num;   
         *x=qq; 
         x=&qq->punt;                          //inserimenti in coda alla LISTA
         cout <<"Devi inserire ? (s/n) = ";
         cin >>ins; 
         if (ins=='n' || ins=='N')
                                  qq->punt=NULL;
        }  
        T1=&q;    //Assegno T1 come indice al posto di 'q' (T1 = puntatore a LISTA)
        T2=&p;
        if (p.num >= q.num)
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num=q.num;
                           coda->punt=NULL;
                           T1=T1->punt;       
                           y=coda;
                          }
                          else
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num=p.num;
                           coda->punt=NULL;
                           T2=T2->punt;
                           y=coda;  
                          }  
       while (T1->punt || T2->punt != NULL) 
       {
         if (T1->num >= T2->num)
                               {
                                lista *t = new lista;
                                t->num = T2->num; 
                                T2=T2->punt;
                                t->punt=y;
                                y=t;          
                               }
                               else
                               {
                                lista *t = new lista; 
                                t->num = T1->num;  
                                T1=T1->punt;  
                                t->punt=y;
                                y=t;
                               }
       }    
       //STAMPA
       lista *TESTA=y;
    	while(TESTA) 
    	{
    		cout<<TESTA->num<<endl;;
    		TESTA=TESTA->punt;
    	}                            
    
    	
        system("PAUSE");
    }

  2. #2
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Sinceramente trovo un po' caotico il tuo codice(non me ne volere ), infatti ho difficoltà a capire quali sono le tue intenzioni in alcuni passaggi. Perchè se utilizzi più volte il caricamento di una lista non crei una funzione apposita e la richiami ogni volta che ne hai bisogno, così oltre risparmiare tempo miglioreresti anche la leggibilità del codice.

    Poi non capisco molto perchè dici che conservi il campo puntatore...

    Io la funzione per caricare la lista l'avrei fatta così:
    codice:
    lista* initLista(){
    	bool condition = true;
    	char c;
    	lista* li = NULL;
    	while(condition)
    	{	
    		lista* p = new lista;
    		cout << "Inserisci un valore: ";
    		cin >> p->num;
    		p->punt = li;
    		li = p;
    		cout << "Vuoi inserire un nuovo valore?(s/n)";
    		cin >> c;
    		if(c=='n' || c=='N')
    			condition = false;
    	}
    	return li;
    }

  3. #3
    Il commento che dico conservo il campo puntatore ho dimenticato di cancellarlo.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,302
    Il problema avviene nella linea

    codice:
       while (T1->punt || T2->punt != NULL)
    in conseguenza di un'assegnazione non corretta di T1 o T2 ...

    Ma non so cosa dirti perche' prima vorrei capire a cosa serve questa parte di codice ...

    codice:
       T1=&q;    //Assegno T1 come indice al posto di 'q' (T1 = puntatore a LISTA)
        T2=&p;
        if (p.num >= q.num)
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num=q.num;
                           coda->punt=NULL;
                           T1=T1->punt;       
                           y=coda;
                          }
                          else
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num=p.num;
                           coda->punt=NULL;
                           T2=T2->punt;
                           y=coda;  
                          }
    Dire che il codice e' abbastanza confuso, e' un eufemismo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Originariamente inviato da oregon
    Ma non so cosa dirti perche' prima vorrei capire a cosa serve questa parte di codice ...

    codice:
       T1=&q;    //Assegno T1 come indice al posto di 'q' (T1 = puntatore a LISTA)
        T2=&p;
        if (p.num >= q.num)
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num=q.num;
                           coda->punt=NULL;
                           T1=T1->punt;       
                           y=coda;
                          }
                          else
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num=p.num;
                           coda->punt=NULL;
                           T2=T2->punt;
                           y=coda;  
                          }
    Dire che il codice e' abbastanza confuso, e' un eufemismo ...
    Concordo pienamente. Per quanto riguarda il commento, nonostante sia stata una tua dimenticanza, non comprendo lo stesso quale sia l'utilità di salvare il "campo puntatore" che tu fai..

  6. #6
    Allora, ragazzi, vi rispiego il funzionamento del programma.
    Inserite due Liste in ordine crescente, ne viene creata un altra ordinata in DECRESCENTE.
    Quindi questo mio pezzo di programma, dovrebbe se sono inserite i seguenti numeri, stampare almeno '1' e '2'.
    Numeri da inserire: 1 LISTA = 1 , 2 , 3
    Numeri da inserire: 2 LISTA = 4 , 5 , 6
    codice:
    #include <iostream>
    using namespace std;
    
    struct lista
    {
        int num;
        lista *punt; 
    };
    
    
    int main()
    {
        lista *x,*y,*T1,*T2;
        char ins;
        cout <<"Inserisci gli elementi nelle 2 LISTE in ordine crescente."<<endl;
        cout <<"Verra' creata una contenente i numeri in ordine DECRESCENTE!.\n"<<endl;
        
        //Caricamento 1° LISTA
        lista p;                                     //P TESTA DELLA LISTA 1                              
        cout <<"LISTA 1 - Inserisci il numero = "; 
        cin >> p.num;
        x=&p;                                             
        cout <<"Devi inserire ? (s/n) = ";
        cin >>ins;
        if (ins!='s' || ins!='S')                 // nel caso in cui viene inserito
                                  p.punt=NULL;   // solo un nodo
        
        while (ins=='s' || ins=='S')            
        { 
         lista *pp = new lista;
         cout <<"LISTA 1 - Inserisci il numero = ";
         cin >> pp->num;   
         pp->punt = NULL;; 
         x->punt = pp; 
         x = pp;                         //inserimenti in coda alla LISTA
         cout <<"Devi inserire ? (s/n) = ";
         cin >>ins; 
        }
        // FINE caricamento 1° LISTA
        
        //Caricamento 2° LISTA
        lista q;                                       //Q TESTA DELLA LISTA 2                   
        cout <<"LISTA 2 - Inserisci il numero = "; 
        cin >> q.num;
        x=&q;                                        
        cout <<"Devi inserire ? (s/n) = ";
        cin >>ins;
        if (ins!='s' || ins!='S')                 // nel caso in cui viene inserito
                                  q.punt=NULL;   // un solo nodo
                                  
        while (ins=='s' || ins=='S')            
        { 
         lista *qq = new lista;
         cout <<"LISTA 2 - Inserisci il numero = ";
         cin >> qq->num;   
         qq->punt = NULL; 
         x->punt = qq; 
         x = qq;                                //inserimenti in coda alla LISTA
         cout <<"Devi inserire ? (s/n) = ";
         cin >>ins; 
        }  
        T1=&p;    //Assegno T1 =  'p' (T1 = puntatore a LISTA)
        T2=&q;
        if (T1->num >= T2->num)
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num = T2->num;
                           coda->punt = NULL;
                           T2 = T2->punt;       
                           y = coda;
                          }
                          else
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num = T1->num;
                           coda->punt = NULL;
                           T1 = T1->punt;
                           y = coda;  
                          }  
       while (T1->punt || T2->punt != NULL) 
       {
         if (T1->num >= T2->num)
                               {
                                lista *t = new lista;
                                t->num = T2->num; 
                                T2=T2->punt;
                                t->punt=y;
                                y=t;          
                               }
                               else
                               {
                                lista *t = new lista; 
                                t->num = T1->num;  
                                T1=T1->punt;  
                                t->punt=y;
                                y=t;
                               }
       }    
       lista *TESTA=y;
    	while(TESTA) 
    	{
    		cout<<TESTA->num<<endl;;
    		TESTA=TESTA->punt;
    	}                            
    
    	
        system("PAUSE");
    }
    Vi trovate secondo il mio ragionamento??.
    Invece durante l'esecizione mi segnala di fare la segnalazione errori a Windows.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,302
    Scusa ma questo tuo post e' inutile ...

    Non hai detto nulla di quanto ti ho chiesto e nulla di piu' di quanto non si sapesse ...

    Quello che ti avevo chiesto era di spiegare a cosa servisse il pezzo di codice che ti ho mostrato, ma non lo hai fatto ...

    Fra l'altro, e' inutile mostrare nuovamente TUTTO il codice che hai gia' mostrato ... mostra il pezzo di cui ti ho chiesto e indica, linea per linea, cosa intendi fare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    eeeeh, infatti quel pezzo di codice che mi hai mostrato, l'ho cambiato un po' nell'ultimo mio post.!
    codice:
        T1=&p;    //Assegno T1 =  'p' (T1 = puntatore a LISTA)
        T2=&q;
        if (T1->num >= T2->num)
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num = T2->num;
                           coda->punt = NULL;
                           T2 = T2->punt;       
                           y = coda;
                          }
                          else
                          {
                           lista *coda = new lista;  //crea coda della LISTA
                           coda->num = T1->num;
                           coda->punt = NULL;
                           T1 = T1->punt;
                           y = coda;  
                          }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,302
    Salvatore ... certe volte penso che tu non legga i post ...

    A COSA SERVE quel codice???
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Poiche' le due LISTE sono date in INPUT in ordine crescente, quel codice esegue il controllo tra il primo elemento della 1° lista e il primo elemento della 2° lista, dopodiche' trovato il piu' piccolo lo mette in uno nodo chiamato CODA che viene collegato a NULL.

    T1=T1->punt : fa avanzare il puntatore al nodo successivo (anche T2=T2->punt).
    coda->num = T2->num; : mette in coda->num, il valore presente in T2->num.

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 © 2020 vBulletin Solutions, Inc. All rights reserved.