Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106

    [C]Creazione, visualizzazione e somma di due liste

    Ciao a tutti sto cercando di creare e visualizzare due liste il problema solo che il codice che ho sviluppato stampa solo il primo elemento delle due liste e poi dei numeri tipo 9713624 posto il codice
    codice:
    #include <stdio.h>
    #include <malloc.h>
    struct elemento{
           int val;
           struct elemento *succ;
           };
    struct elemento *crealista();
    void visualizza(struct elemento *);
    main()
    {
          struct elemento *puntlista1,*puntlista2;
          printf("Inserisci la prima lista:\n\n");
          puntlista1=crealista();
          printf("\nInserisci la seconda lista:\n\n");
          puntlista2=crealista();
          printf("\nVisualizzazione prima lista: \n\n");
          visualizza(puntlista1);
          printf("\nVisualizzazione seconda lista: \n\n");
          visualizza(puntlista2);
          printf("\nPremi invio per uscire...");
          getchar();
          getchar();
    }
    
    struct elemento *crealista()
    {
           int i,n;
           struct elemento *primo,*corpo;
           printf("Quanti valori vuoi inserire?: ");
           scanf("%d",&n);
           primo=(struct elemento *)malloc(sizeof(struct elemento));
           printf("Inserisci il 1%c valore: ",248);
           scanf("%d",&primo->val);
           corpo=primo;
           for(i=2;i<=n;i++){
                             corpo->succ=(struct elemento *)malloc(sizeof(struct elemento));
                             corpo=corpo->succ;
                             printf("Inserisci il %d%c valore: ",i,248);
                             scanf("%d",&corpo->succ);
                             }
                             corpo->succ=NULL;
           return(primo);
    }
    
    void visualizza(struct elemento *p)
    {
         while(p!=NULL){
                        printf("%d --->",p->val);
                        p=p->succ;
                        }
                        printf("NULL\n\n");
    }
    Esempio:
    inserisco la lunghezza della prima lista : 3
    inserisco gli elementi 5 , 4 , 2
    inserisco la lunghezza della seconda lista: 4
    inserisco gli elementi: 1 , 3 , 6 , 8
    Stampa questo:
    Prima lista: 5---> 9713624---> 9713624---> NULL
    Seconda lista: 1---> 9713624---> 9713624---> 9713624--->NULL

    Come posso fare per risolvere il problema??
    Grazie per l'aiuto.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Scusa, ma questa

    scanf("%d",&corpo->succ);

    a che serve?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Talè !!!! Non me n'ero accorto completamente! Correggo subito con scanf("%d",&corpo->val).
    Grazie mille !

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da giumanji
    Talè !!!!
    Io comprendo l'esclamazione, non so gli altri nel forum ...

    (traduz. "ma guarda un po' !")

    Non me n'ero accorto completamente! Correggo subito con scanf("%d",&corpo->val).
    Piuttosto disattento per un aspirante programmatore ...

    Grazie mille !
    Di nulla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Ahah scusa per il talè ! Siccome non l'avevo sbagliata mai questa cosa neanche andavo a controllare gli scanf! Cmq per fortuna non sono un aspirante programmatore ...vado in mate e ho l'esame di programmazione xD.
    Adesso ho un altro problema sto sommando le due liste solo che nella somma anzichè avere lunghezza uguale alla minore ha un elemento in più della minore...ho inserito la funzione somma e puntlista3.
    codice:
    struct elemento *somma(struct elemento *,struct elemento *);
    main()
    {
          struct elemento *puntlista1,*puntlista2,*puntlista3;
          printf("Inserisci la prima lista:\n\n");
          puntlista1=crealista();
          printf("\nInserisci la seconda lista:\n\n");
          puntlista2=crealista();
          printf("\nVisualizzazione prima lista: \n\n");
          visualizza(puntlista1);
          printf("\nVisualizzazione seconda lista: \n\n");
          visualizza(puntlista2);
          puntlista3=somma(puntlista1 , puntlista2);
          visualizza(puntlista3);
          printf("\nPremi invio per uscire...");
          getchar();
          getchar();
    }
    
    
    Questa è la funzione somma:
    
    struct elemento *somma(struct elemento *p1, struct elemento *p2)
    {
           struct elemento *p3,*p3corpo;
           if(p1!=NULL && p2!=NULL){
                       p3=(struct elemento *)malloc(sizeof(struct elemento));
                       p3->val=(p1->val)+(p2->val);
                       p3corpo=p3;
                       for(;p1!=NULL && p2!=NULL;){
                                     p3corpo->succ=(struct elemento *)malloc(sizeof(struct elemento));
                                     p3corpo=p3corpo->succ;
                                     p3corpo->val=(p1->val)+(p2->val);
                                     p1=p1->succ;
                                     p2=p2->succ;
                                     }
                                     p3corpo->succ=NULL;
                                     }
                       printf("Visualizza somma Liste:\n\n");
                       return(p3);
    }
    Es:
    inserisco prima lista lunghezza 3 valori 1 2 3
    inserisco seconda lista lunghezza 5 valori 1 2 3 4 5
    visualizza la somma: 2-->2-->4--->6--->NULL

    C'è il primo valore che si ripete e non dovrebbe...non capisco perchè..

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Risolto il problema dimenticavo di far scorrere avanti le due liste dopo la creazione del primo elemento somma.

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