Gestione tabella in memoria

di il
5 risposte

Gestione tabella in memoria

Ciao a tutti,
devo sviluppare un'applicazione in C che mantenga un contatore aggiornato per ogni elemento presente in una tabella in memoria. Mi spiego meglio: la tabella in questione ha 15 elementi ed il relativo contatore; non appena l'utente inserisce un nuovo articolo, devo cercare l'elemento in tabella(qui pensavo di usare la ricerca binaria, dopo aver ordinato gli elementi) e incrementare di 1 il contatore. Devo usare le struct, ma non è che le conosco bene. Qualche dritta?

Grazie mille!!!!

5 Risposte

  • Re: Gestione tabella in memoria

    struct _articolo
    {
       int articolo;
       int contatore;
    };
    Prova a buttare giù qualche codice e vediamo di venirne a capo.
  • Re: Gestione tabella in memoria

    Ciao,
    ho semplificato un po' il codice mantenedo la parte che non riesco a gestire, ovvero come referenziare la tabella in memoria e il suo aggiornamento. Grazie mille

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>

    typedef struct cod_trans {
    // Nomi
    char articolo[15][5];
    int contatore[15];
    } variabile_tabella;


    //funzione per la ricerca binaria del codice inserito

    int ricerca(char *lista[], int n, char *x)
    {
    int p,u,m;
    p = 0;
    u = n-1;
    while(p<=u) {
    m = (p+u)/2;
    if(strcmp(lista[m],x) == 0)
    lista.contatore[m] += 1; {
    return m; // valore x trovato alla posizione m
    }
    if(strcmp(lista[m]<x))
    p = m+1;
    else
    u = m-1;
    }
    // se il programma arriva a questo punto vuol dire che
    // il valore x non è presente in lista, ma se ci fosse
    // dovrebbe trovarsi alla posizione p (nota che qui p > u)
    return -1;
    }

    /* ---------------
    ** MAIN
    ** --------------- */
    int main()
    {
    char *tabella_in_memoria[] = variabile_tabella;
    char codice_da_ricercare;

    printf("Inserisci il codice ");
    scanf("%s", &codice_da_ricercare; );

    int indice = ricerca(tabella_in_memoria, 15, codice_da_ricercare);
    .
    .
    .
    .
    .
    .
    system("PAUSE");
    return 0;
    }
  • Re: Gestione tabella in memoria

    Metti i code tag per favore?
  • Re: Gestione tabella in memoria

    Chiedo scusa....spero di averlo messo correttamente
    
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h> 
    
    typedef struct cod_trans {
        // Nomi
        char articolo[5];
        int  contatore;
    } pippo;
    
    /* ---------------
    ** MAIN 
    ** --------------- */
    int main()
    {
      char codice_da_ricercare[5]; 
      struct cod_trans variabile_tabella[15]; 
      printf("Inserisci il codice ");
      scanf("%s", codice_da_ricercare );
    
    
        int p,u,m;
        p = 0;
        u = 15-1;
        while(p<=u) {
            m = (p+u)/2;
            if(variabile_tabella[m].articolo == codice_da_ricercare)
                 variabile_tabella[m].contatore += 1; {
                return m; // valore x trovato alla posizione m
              }
            if(variabile_tabella[m].articolo<codice_da_ricercare)
                p = m+1;
            else
                u = m-1;
        }
        // se il programma arriva a questo punto vuol dire che 
        // il valore x non è presente in lista, ma se ci fosse
        // dovrebbe trovarsi alla posizione p (nota che qui p > u)
    
      system("PAUSE");
      return 0;
    
    
    }
  • Re: Gestione tabella in memoria

    Devi imparare a fare la comparazione tra vettori di char. Non si fa col == ma devi usare delle funzioni apposite nel header string.h
    Guarda il strcmp
Devi accedere o registrarti per scrivere nel forum
5 risposte