Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44

    [C]allocazione dinamica vettore

    ciao a tutti, ho il seguente compito dove c'è un vettore "archivio"
    codice:
    typedef struct{ 
                  unsigned int posti_disponibili; 
                  list posti_acquistati; //è una lista
                  list posti_prenotati; // è una lista 
    }archivio;
    e devo risolvere le seguenti funzioni
    1)una funzione che alloca il vettore archivio, dato il numero n
    2) una funzione che inizializza il vettore archivio; la funzione oltre che inizializzare le 2 liste contenute in ogni elemento del vettore, deve assegnare un valore al campo Numero di Posti Disponibili (tale valore viene inserito da tastiera e può essere diverso per i vari voli)

    chi mi aiuta a risolverle???
    qui il testo del compito.
    grazie in anticipo x le vostre risposte

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma qui non si risolvono esercizi. Proponi una tua soluzione e se non funziona se ne parla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    per quanto riguarda la prima funzione pensavo di fare così:
    codice:
    typedef struct vettore{ 
         unsigned int posti_disponibili; 
         list posti_acquistati; 
         list posti_prenotati; 
    }archivio;  
    
    do{ 
          printf("\nInserisci il numero di elementi del vettore: "); 
          scanf("%u",&n); 
          FLUSH;//è una funzione che pulisce il buffer 
    }while(n<2); 
    
    archivio=(struct vettore)malloc(n*sizeof(struct vettore));
    è giusto?

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    No , non va bene , ci sono almeno due errori !

    archivio=(struct vettore)malloc(n*sizeof(struct vettore));

    archivio non è un puntatore , ma un TIPO di struct vettore

    il cast deve convertire ad un puntatore a struttura


    ---------------------------- Esempio :

    archivio *myarchivio ;// puntatore a struct vettore


    myarchivio =(archivio *)malloc(n*sizeof(struct vettore));





    visto che la faccenda si farà più complessa di come è ora lascio il campo agli esperti
    Tecnologia

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    sono riuscita a fare la prima funzione, ma la seconda non so come iniziare. qualcuno mi puo aiutare???

    codice:
    /*COMPITO 10 SETTEMBRE 2012*/ 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #define FLUSH while(getchar()!='\n')
     
    /*****tipobaseList*******/ 
    #define STR 20 
    typedef struct{ 
       char cognome[STR], nome[STR]; 
    }tipobaseList; 
    
    int Confronta(tipobaseList a, tipobaseList b){ 
       if(!strcmp(a.cognome,b.cognome)) 
             return(strcmp(a.nome, b.nome)); 
    else return(strcmp(a.cognome, b.cognome)); 
    } 
    
    void LeggiStringa(char s[], unsigned int dim){ 
       unsigned int i=0; 
       for(i=0; i<dim-1 && (s[i]=getchar())!='\n';i++) s[i]='\0'; 
       if(i==dim-1) while(getchar()!='\n'); 
    }
    
     /********list*************/ 
    #define LISTAVUOTA NULL 
    typedef struct nodoList{ 
       tipobaseList info; 
       struct nodoList *next; 
    } *list; 
    
    typedef short boolean; 
    
    typedef list position; 
    
    void MakeNullList(list *l){
        *l==LISTAVUOTA; 
    }
    
    boolean EmptyList(list l){ 
      return(l==LISTAVUOTA); 
    } 
    
    boolean FullList(list l){ 
      return(0); 
    }
    
    position End(list l){ 
       if(l==LISTAVUOTA) return(LISTAVUOTA); 
       while(l->next!=LISTAVUOTA) l=l->next; 
       return(l); 
    } 
    
    position First(list l){ 
       return(LISTAVUOTA); 
    } 
    
    void InsertList(list *l, position p,tipobaseList x){ 
       struct nodoList *tmp; 
       if(!FullList(*l)){ 
                  tmp=(struct nodoList *) malloc(sizeof(struct nodoList)); 
                  tmp->info=x; 
                  if(p==LISTAVUOTA){ 
                                          tmp->next=*l; 
                                          *l=tmp; 
                  }else{ 
                         tmp->next=p->next; 
                          p->next=tmp; 
                  } 
      } 
    } 
    
    void DeleteList(list *l, position p){ 
        struct nodoList *tmp; 
        if(p==LISTAVUOTA){ 
                  tmp=(*l)->next; 
                  free(*l); 
                  *l=tmp; 
          }else { 
                  tmp=p->next; 
                  p->next=tmp->next; 
                  free(tmp); 
           }  
    }
    
     position Next(list l, position p){ 
         if(p==LISTAVUOTA) return(l); 
         else return(p->next); 
    }
    
     tipobaseList Retrieve(list l, position p){ 
              if(l==LISTAVUOTA) return(l->info); 
              else return(l->next->info); 
    }
    
     position Locate(list l, tipobaseList x){ 
            if(!EmptyList(l)){ 
                   if(!Confronta(l->info,x)) return(LISTAVUOTA); 
                   while(l->next!=LISTAVUOTA){ 
                                                    if(!Confronta(l->next->info,x)) return(l); 
                                                    l=l->next; 
                    } return(l); 
             } 
    } 
    
    /*****archivio*******/ 
    typedef struct{ 
        unsigned int posti_disponibili; 
        list posti_acquistati; 
        list posti_prenotati; 
    }archivio; 
    archivio *archivio_voli; 
    
    void AllocaVettore(archivio *, unsigned int);
    
    main (){ 
       unsigned int n, scelta; 
       do{
            printf("\n/**********ARCHIVIO VOLI***************/"); 
            printf("\n1-Alloca Vettore"); 
            printf("\n2-Numero posti disponibili"); 
            printf("\n3-Prenotazione/Acquisto volo"); 
            printf("\n4-Conferma acquisto"); 
            printf("\n5-Esci"); 
            printf("\nscelta--------------->"); 
            scanf("%u", &scelta); 
            switch(scelta){
                                case 1: 
                                        do{ printf("\nInserisci il numero di elementi del vettore: ");
                                        scanf("%u",&n); 
                                        FLUSH; 
                                        }while(n<2); 
                                        AllocaVettore(archivio_voli, n); 
                                        break; 
                                case 2: 
            } 
        }while(scelta<4); 
    } 
    
    void AllocaVettore(archivio *x, unsigned int n){ 
           x=(archivio *)malloc(n*sizeof(archivio)); 
    }

  6. #6
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Intanto qua ti sei sbagliato:

    codice:
    void MakeNullList(list *l){
        *l==LISTAVUOTA;
    }
    Intendevi usare l' operatore = , altrimenti è un' istruzione inutile.
    Poi qua:

    codice:
    position Locate(list l, tipobaseList x){
        if(!EmptyList(l)){
            if(!Confronta(l->info,x)) return(LISTAVUOTA);
            while(l->next!=LISTAVUOTA){
                if(!Confronta(l->next->info,x)) return(l);
                l=l->next;
            } return(l);
        }
    }
    Devi tenere presente che se la lista è vuota la funzione non ritorna alcun valore.
    Ti conviene ritornare 0 fuori dall' if.

  7. #7
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Per quanto riguarda in punto 2 ti conviene iniziare a provarci, se conosci le funzioni di I/O (che sono le basi del C) non dovresti avere grosse difficoltà.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    Originariamente inviato da Who am I
    Per quanto riguarda in punto 2 ti conviene iniziare a provarci, se conosci le funzioni di I/O (che sono le basi del C) non dovresti avere grosse difficoltà.
    come faccio a inizializzare il vettore archivio?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Inizializzare? Penso che basti

    archivio.posti_disponibili = 0;
    archivio.posti_acquistati = NULL;
    archivio.posti_prenotati = NULL;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da oregon
    Inizializzare? Penso che basti

    archivio.posti_disponibili = 0;
    archivio.posti_acquistati = NULL;
    archivio.posti_prenotati = NULL;
    Ovvero, ora che guardo meglio, dopo aver allocato archivio_voli

    codice:
    archivio_voli->posti_disponibili = 0;
    archivio_voli->posti_acquistati = NULL;
    archivio_voli->posti_prenotati = NULL;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.