Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C]Problema creazione albero e ordinamento lista

    Salve ancora una volta e scusatemi nuovamente il disturbo. Sapreste indicarmi gli errori in questi due codici? Nel primo caso non riesco ad inizializzare "inizioalbero" con la malloc, mi dà errore il compilatore, mentre nel secondo non funziona la funzione "inserimentoordinato" (mi crasha l'exe). Grazie ancora, se supero l'esame vi faccio un monumento.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct albero{
           int elemento;
           struct albero* ramodestro;
           struct albero* ramosinistro;
           };
    void creaalbero (struct albero **inizioalbero, int numero);
    void stampaalbero (struct albero inizioalbero);
    
    int main(int argc, char *argv[])
    {
      struct albero* inizioalbero=NULL;  
      int numero, scelta;
      printf ("Digita 1 per inserire un numero, o 0 per terminare il programma");
      scanf ("%d", scelta);
      while (scelta==1){
            printf ("Digita il numero da inserire nell'albero:\n");
            scanf ("%d", &numero);
            if (inizioalbero == NULL){
                           inizioalbero=malloc(sizeof(albero));
                           inizioalbero->elemento=numero;
                           inizioalbero->ramodestro=NULL;
                           inizioalbero->ramosinistro=NULL;}
         else {
              if (numero < inizioalbero->elemento)
              {creaalbero(&(inizioalbero->ramosinistro), numero);}
              else if (numero > inizioalbero->elemento)
              {creaalbero(&(inizioalbero->ramodestro), numero);}
              else
              printf ("Numero gia' inserito");}
            printf ("Digita 1 per inserire un numero, o 0 per terminare il programma");
            scanf ("%d", scelta)};
            
      system("PAUSE");	
      return 0;
    }



    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct numeri{
           int elemento;
           struct numeri *succ;
           };
    
    void inseriscitesta(struct numeri **il);
    void stampalista (struct numeri* il); 
    void inseriscicoda(struct numeri **il); 
    void distruggilista(struct numeri **il);
    void ricerca(struct numeri* il, int z);
    void cancellanodo(struct numeri **il, int l);
    void inserimentoordinato(struct numeri **il);
         
    int main(int argc, char *argv[])
    {
      int y;
      struct numeri* il=NULL;
      inserimentoordinato(&il);
      inseriscicoda (&il);
      stampalista(il);
      il= malloc (sizeof (struct numeri));
      il->succ=NULL;
      printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
      scanf ("%d", &y);
      if (y==1)
      {printf ("Inserisci il nuemero:\n");
      scanf ("%d", &il->elemento);}
       
         inseriscitesta(&il);
         stampalista (il);
         distruggilista (&il);
         stampalista (il);
         inseriscicoda (&il);
         stampalista (il);
         
         int l;
         printf ("Inserisci il numero da cancellare\n");
         scanf ("%d", &l);
         cancellanodo (&il, l);
         stampalista (il);
         distruggilista (&il);
         inserimentoordinato(&il);
         stampalista(il);
         
         int z;
         printf ("Inserisci il numero da cercare\n");
         scanf ("%d", &z);
         ricerca (il, z);
         
         
      
      system("PAUSE");	
      return 0;
    }
    
    void inseriscitesta(struct numeri **il){
         int y;
         printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
         scanf ("%d",&y);
         while (y==1)
         {
         
         struct numeri* p2 = NULL;
         p2= malloc (sizeof(struct numeri));
         p2->succ=NULL;
         printf ("Digita il numero da inserire:\n");
         scanf ("%d", &p2->elemento);
         p2->succ = *il;
         *il = p2;
         printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
         scanf ("%d",&y);}}
    
    void stampalista (struct numeri *il){
         while ( il!=NULL)
      {
        printf ("%d ---->", il->elemento);
        il=il->succ;}}
        
    void inseriscicoda(struct numeri **il){
         int m;
         printf ("\nDigita 1 per inserire un numero, altrimenti digita 0\n");
         scanf ("%d",&m);
         while (m==1)
         {
         if (*il==NULL){
         struct numeri* p2 = NULL;
         p2= malloc (sizeof(struct numeri));
         p2->succ=NULL;
         printf ("Digita il numero da inserire:\n");
         scanf ("%d", &p2->elemento);
         p2->succ = *il;
         *il = p2;}
               else
               {
                     struct numeri* tm= *il;
                     while (tm->succ!=NULL)
                           tm = tm->succ;
                           
                   struct numeri* nuovo= malloc(sizeof(struct numeri));
                   printf("Digita il numero\n");
                   scanf("%d", &nuovo->elemento);
                   nuovo->succ=NULL;
                   tm->succ=nuovo;}
                   printf ("Digita 1 per inserire un numero, altrimenti digita 0\n");
         scanf ("%d",&m);}}
         
    void distruggilista(struct numeri **il){
         struct numeri* tmp = NULL;
         while (*il != NULL)
         {
               tmp= (*il)->succ;
               free(*il);
               *il=tmp;}}
                
    void ricerca (struct numeri *il, int z){
          while (il != NULL && z!=il->elemento)
          il=il->succ;
          
          if (il->elemento==z)
          printf ("Il numero e' stato trovato\n");
          else printf ("Il numero non e' stato trovato\n");} 
           
    void cancellanodo (struct numeri **il, int l){
         struct numeri* nodoprecedente;
         struct numeri* nodocorrente;
         struct numeri* nodotemporaneo;
         
         if ((*il)->elemento == l){
                         nodotemporaneo = *il;
                         *il = (*il)->succ;
                         free (nodotemporaneo);}
         else{
              nodoprecedente = *il;
              nodocorrente = (*il)->succ;
              while(nodocorrente != NULL && nodocorrente->elemento != l){
                                 nodoprecedente = nodocorrente;
                                 nodocorrente = nodocorrente->succ;}
         
         if (nodocorrente != NULL) {
                          nodotemporaneo = nodocorrente;
                          nodoprecedente->succ = nodocorrente->succ;
                          free (nodotemporaneo);
                          }}}                       
    
    void inserimentoordinato (struct numeri **il){
        struct numeri* nodoprecedente;
        struct numeri* nodocorrente;
        struct numeri* nuovonodo;
        int h;
        printf ("Digita 1 per inserire un numero o 0 per terminare\n");
        scanf ("%d", h);
        while (h==1){
              int u;
              nuovonodo = malloc(sizeof(struct numeri));
              printf ("Digita il numero da inserire\n");
              scanf ("%d",&u);
              nuovonodo->elemento=u;
              
              nodoprecedente=NULL;
              nodocorrente=*il;
              
              while(nodocorrente!=NULL && u > nodocorrente->elemento){
                                       nodoprecedente=nodocorrente;
                                       nodocorrente=nodocorrente->succ;}
              
              if (nodoprecedente == NULL){
                                 nuovonodo->succ = *il;
                                 *il=nuovonodo;}
              else {
                   nodoprecedente->succ=nuovonodo;
                   nuovonodo->succ=nodocorrente;}
              printf ("Digita 1 per inserire un numero o 0 per terminare\n");
              scanf ("%d", h);}}

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

    Re: [C]Problema creazione albero e ordinamento lista

    Originariamente inviato da Metalmino
    mi dà errore il compilatore
    Quando hai degli errori non serve solamente dirlo. Devi riportare tutti i dettagli dell'errore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Per quanto riguarda l'albero l'errore è il seguente:
    In function `main':
    23 albero' undeclared (first use in this function)
    (Each undeclared identifier is reported only once
    for each function it appears in.)
    35 syntax error before '}' token


    mentre per la lista mi compila ma crasha quando arriva alla funzione ordinamento


    EDIT: per quanto riguarda l'errore di sintassi ho sbagliato a mettere il ; fuori dalla graffa, piccola svista, ma rimane l'errore nell'allocazione della memoria all'albero.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh ... fossi in te seguirei le indicazioni del messaggio d'errore, controllando la riga 23 che (sembra) essere

    inizioalbero=malloc(sizeof(albero));

    e che dovrebbe essere

    inizioalbero=malloc(sizeof(struct albero));

    e poi la linea 35

    scanf ("%d", scelta)};

    in cui manca il ;

    scanf ("%d", scelta);};
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ok ho rifatto il programma inserendo la funzione ricorsiva, ora compila ma crasha all'inserimento del numero.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct albero{
           int elemento;
           struct albero* ramodestro;
           struct albero* ramosinistro;
           };
    void creaalbero (struct albero **inizioalbero, int numero);
    void stampaalbero (struct albero inizioalbero);
    
    int main(int argc, char *argv[])
    {
      struct albero* inizioalbero=NULL;  
      int numero;
      int scelta;
      printf ("Digita 1 per inserire un numero, o 0 per terminare il programma");
      scanf ("%d", scelta);
      while (scelta==1){
            printf ("Digita il numero da inserire nell'albero:\n");
            scanf ("%d", &numero);
      creaalbero (&inizioalbero, numero);
      printf ("Digita 1 per inserire un numero, o 0 per terminare il programma");
      scanf ("%d", &scelta);}
            
            
      system("PAUSE");	
      return 0;
    }
    
    void creaalbero (struct albero **inizioalbero, int numero){
    if (*inizioalbero == NULL){
                           *inizioalbero=malloc(sizeof(struct albero));
                           (*inizioalbero)->elemento=numero;
                           (*inizioalbero)->ramodestro=NULL;
                           (*inizioalbero)->ramosinistro=NULL;}
         else {
              if (numero < (*inizioalbero)->elemento)
              {creaalbero(&((*inizioalbero)->ramosinistro), numero);}
              else if (numero > (*inizioalbero)->elemento)
              {creaalbero(&((*inizioalbero)->ramodestro), numero);}
              else
              printf ("Numero gia' inserito");
            }}
    Scusate però sto letteralmente fumando...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    C'è anche questa

    scanf ("%d", scelta);

    che dovrebbe essere

    scanf ("%d", &scelta);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    20
    codice:
    scanf ("%d", scelta);
    scelta è un intero, manca qualcosa :P

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.