Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    19

    [C] Stampare elementi di una coda

    quando provo a stampare gli elementi della coda, mi stampa correttamente solo l'ultimo inserito .. dov' è l'errore?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct SCoda{
           int n;
           int front;
           int back;
           int capienza;
           int *array;
           };
    typedef struct SCoda TCoda;
    
    TCoda Crea_Coda(int capienza);
    void Aggiungi_Elemento(TCoda *coda,int x);
    int Prelievo_Elemento(TCoda *coda);
    
    
    int main(int argc, char *argv[])
    {
        TCoda coda;
        int i,x,n,ext;
        
        coda=Crea_Coda(5);
        
        printf("Quanti elementi vuoi inserire?");
        scanf("%d",&n);
        
        for(i=0;i<n;i++){
                                     printf("Elemento da inserire:");
                                     scanf("%d",&x);
                                     Aggiungi_Elemento(&coda,x);}
        for(i=0;i<n;i++){
                                     printf("%d  ",coda.array[i]);}
                                     
        
      
      system("PAUSE");	
      return 0;
    }
    
        
       TCoda Crea_Coda(int capienza){
          TCoda coda;
          coda.n=0;
          coda.back=0;
          coda.front=0;
          coda.capienza=capienza;
          coda.array=(int*)malloc(sizeof(int)*capienza);
          return coda;}
          
       void Aggiungi_Elemento(TCoda *coda,int x){
            coda->array[coda->front]=x;
            coda->back++;
            coda->n++;}
       int Prelievo_Elemento(TCoda *coda){
           int x;
           x=coda->array[coda->front];
           coda->front++;
           coda->n--;
           return x;}

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Inserisci gli elementi sempre nello steso punto!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    19
    Perchè nello stesso punto?
    Ho incrementato back nella funzione aggiungi_Elemento..

    a giusto devo incrementare front!!!!!!!!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    19
    Ora ho un altro problema:
    stampa la pila senza l'elemento in coda anzichè senza l'elemento in testa...
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct SCoda{
           int n;
           int front;
           int back;
           int capienza;
           int *array;
           };
    typedef struct SCoda TCoda;
    
    TCoda Crea_Coda(int capienza);
    void Aggiungi_Elemento(TCoda *coda,int x);
    int Prelievo_Elemento(TCoda *coda);
    
    
    int main(int argc, char *argv[])
    {
        TCoda coda;
        int i,x,n,ext;
        
        coda=Crea_Coda(5);
        
        printf("Quanti elementi vuoi inserire?");
        scanf("%d",&n);
        
        for(i=0;i<n;i++){
                                     printf("Elemento da inserire:");
                                     scanf("%d",&x);
                                     Aggiungi_Elemento(&coda,x);}
        for(i=0;i<n;i++){
                                     printf("%d  ",coda.array[i]);}
                                     
        printf("\n");
        ext=Prelievo_Elemento(&coda);
        printf("il numero estratto e':%d\n",ext);
        
        printf("Ora la coda e' formata da\n:");
        for(i=0;i<coda.n;i++){
                                     printf("%d  ",coda.array[i]);}
                                     printf("\n");
                                     
        
      
      system("PAUSE");	
      return 0;
    }
    
        
       TCoda Crea_Coda(int capienza){
          TCoda coda;
          coda.n=0;
          coda.back=0;
          coda.front=0;
          coda.capienza=capienza;
          coda.array=(int*)malloc(sizeof(int)*capienza);
          return coda;}
          
       void Aggiungi_Elemento(TCoda *coda,int x){
            coda->array[coda->back]=x;
            coda->back++;
            coda->n++;}
            
       int Prelievo_Elemento(TCoda *coda){
           int x;
           x=coda->array[coda->front];
           coda->front++;
           coda->n--;
           return x;}

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Il motivo per cui ti stampa un elemento in meno è che prima di scorrere la coda chiami la funzione Prelievo_Elemento, che hai scritto così:

    codice:
    int Prelievo_Elemento(TCoda *coda){
        int x;
        x=coda->array[coda->front];
        coda->front++;
        coda->n--;
        return x;}
    Per cui n non ha più il valore di prima.
    Se ad esempio hai inserito 5 elementi, hai prelevato un elemento e ti stampa i primi 4.
    Togli l' istruzione coda->n-- in Prelievo_Elemento e quando scorri la lista parti da coda.front anziché zero:

    codice:
    for(i=coda.front;i<coda.n;i++)
    {
            printf("%d  ",coda.array[i]);
    }

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.