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

    [C] Problema con array di puntatori a struct

    Salve !
    Ho problema a risolvere il seguente esercizio per quanto riguarda l' array di puntatori a struttura. Ho una struttura di tipo lago e un puntatore a lago next. Nel main viene passato il puntatore a lago head alla funzione crea_lista() che prende in input un file e un array di puntatori a lago. Come utilizzo il puntatore ad array per creare la lista ?
    Grazie anticipatamente !

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>



    typedef struct lago *next;
    typedef struct lago
    {
      
    char nome[15];
      
    int profond;
      
    next succ;
    }
    lago;


    /*Prototipi di funzione*/
    void crea_lista(FILE*, lago**);
    void calcolo_max_prof(lago*, int**);
    void scrivi_file(FILE*, lago*, int*);


    int main(char argv[])
    {
      
    lagohead;
      
    FILE *input, *output;
      
    int *max_profond;
      
    input fopen(argv[1], "r");
      
    crea_lista(input, &head);
      
    calcola_max_prof(head, &max_profond);
      
    scrivi_file(outputheadmax_profond);
      return 
    0;
    }


    /*Crea una lista di record di tipo lago a partire da un file input
     * (il cui nome viene passato sulla linea di comando con l'eseguibile)
     * in cui sono contenuti dati del tipo (nome lago, profondita'),etc
     * (Es. Bracciano 160 Garda 346 Trasimeno 6 Como 410 Maggiore 372).
     * Ogni recordo creato dalla funzione conterra' nel campo nome il nome
     * del lago, nel campo profond la profondita' e nel campo succ un puntatore
     * al prossimo record(eventualmente NULL).La funzione NON restituisce il
     * puntatore alla testa della lista che invece e' memorizzata nella variabile
     * head passata per riferimento.*/
     
    void crea_lista(FILEinputlago** first)
     {

     }


     
    /*Determina la profondita' massima dei laghi presenti nella lista. La funzione
      * NON restituisce il puntatore alla testa della lista che invece e' memorizzato
      * nella variabile head passata per riferimento.*/
     
    void calcola_max_prof(lagofirstint** max)
     {

     }


     
    /*Stampa nel file output (il cui nome viene passato sulla linea di comando con
      * l' eseguibile e il file input) il record (nome lago + profondita') relativo
      * al lago di profondita' massima.*/
     
    void scrivi_file(FILEoutputlagofirstintmax)
     {

     } 
    HTML.it 4Ever !!

  2. #2
    Io gestirei un array di puntatori nel seguente modo. Ma non sono sicuro se vada bene per quel esercizio .


    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>

    typedef struct data
    {
      
    int value;
      
    struct data *next;
    }
    data;


    int main()
    {
      
    int i;
      
    data **calloc(3sizeof(data));

      for(
    03i++)
      {
        
    d[i] = calloc(1sizeof(data));
        
    scanf("%d", &d[i]->value);
        
    printf("d[%d]= %d\n"id[i]->value);
      }

      for(
    03i++)
      {
        if(
    i<3)
           
    d[i]->next d[i+1];
      }

      for(
    03i++)
      {
        if(
    d[i]->next != NULL)
            
    printf("Successivo di d[%d]: %d\n"id[i]->next->value);
      }

      return 
    0;

    HTML.it 4Ever !!

  3. #3
    Qualcuno può aiutarmi gentilmente ?
    HTML.it 4Ever !!

  4. #4
    Come si utilizza quella struttura lago *next ?
    Intendo
    Codice PHP:
    typedef struct lago *next
    Non riesco ad utilizzarla ><.
    HTML.it 4Ever !!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma qual e' esattamente il tuo problema? Non lo capisco ... Con

    typedef struct lago *next;

    indichi un nuovo tipo di dato, che chiami next e che è un puntatore ad una struttura ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Hai ragione , mi sono spiegato male. Il problema è che non sò se procedo bene per quanto riguarda gli array di puntatori come ho fatto nell' esempio sopra con la struct data o è sbagliato ? Spero di essere stato più chiaro !
    HTML.it 4Ever !!

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da silverfox5010
    non sò se procedo bene
    Che vuol dire "non so se procedo bene"?

    Se spieghi cosa volevi fare (e in quale parte di codice) ti si dice se l'hai fatta bene ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Mi riferisco a questa parte qui in particolare :
    Codice PHP:
      data **calloc(3sizeof(data));

      for(
    03i++)
      {
        
    d[i] = calloc(1sizeof(data));
        
    scanf("%d", &d[i]->value);
        
    printf("d[%d]= %d\n"id[i]->value);
      } 
    HTML.it 4Ever !!

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intanto non devi chiamare tutto quello che ti capita

    data

    altrimenti non si capisce nulla.

    Ad esempio, potresti chiamare il tipo di dato, nodo

    codice:
    typedef struct data 
    { 
      int value; 
      struct data *next; 
    } nodo;
    Poi, se vuoi usare un puntatore puoi chiamarlo

    parray

    e se deve essere un doppio puntatore (perche'?) allora dovrai scrivere (nota il sizeof)

    nodo **parray = (nodo **)calloc(3, sizeof(nodo *));

    e in seguito, allocare ogni puntatore con

    parray[i] = (nodo *)calloc(1, sizeof(nodo));

    per un array 3x1 ... ma il seguito del programma non si capisce ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Hai ragione. Avrei dovuto scrivere meglio ><...
    In questa altra parte di codice

    Codice PHP:
      for(03i++)
      {
        if(
    i<3)
           
    d[i]->next d[i+1];
      } 
    ho pensato che per ogni elemento dell' array di puntatori dovessi
    far puntare next allo struct successivo già presente nell' array.
    Sono sicuro di aver sbagliato anche perchè mi era poco chiaro
    l' utilizzo dell' array di puntatori. Per questo motivo ho scritto questo
    breve esempio di come utilizzerei l' array di puntatori per l' esercizio scritto
    nel mio post.
    Premetto che l' esercizio sopra è stato dato dal docente ad una prova di esame.
    HTML.it 4Ever !!

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.