Matrice di stringhe

di il
41 risposte

41 Risposte - Pagina 3

  • Re: Matrice di stringhe

    astrumbale ha scritto:


    Però come mi ha detto SVNiko riesco anche a passarla alla funzione
    Certo, ma tu avevi chiesto altro ...
    perché non mi ritorna un valore uguale a 0?
    Perché le due stringhe non sono uguali
  • Re: Matrice di stringhe

    La scrivo come nell'esercizio, quindi:

    int inserire_prodotto(char prodotti[][M], float prezzi[], int n, char nuovo_prodotto[])
    {
    int i, m;
    scanf("%s", nuovo_prodotto);

    for(i=0; i<n; i++)
    {
    if(strcmp(prodotti, nuovo_prodotto)==0)
    {
    m=0;
    }
    else
    {
    m=1;
    }
    }

    return m;
    }
  • Re: Matrice di stringhe

    No ma anche se nella riga i-esima della matrice c'è il nome della nuova stringa mi ritorna valore 0
  • Re: Matrice di stringhe

    Quel ciclo è sbagliato ... Rifletti ... Il ciclo viene fatto tutto e la variabile m cambia sempre
  • Re: Matrice di stringhe

    Dovrei fare due cicli for, uno che mi dà m=0, e l'altro che mi dà m=1 quindi ?
  • Re: Matrice di stringhe

    Intanto per evitare equivoci cosa fa quella funzione?
  • Re: Matrice di stringhe

    La funzione dovrebbe tornare m=0 se la nuova stringa è già presente nella matrice, tornare m=1 se non è presente
  • Re: Matrice di stringhe

    Per favore usa i tag code nel postare il codice. Prova a mettere un flag nella condizione del ciclo e otterrai l'effetto che desideri.
  • Re: Matrice di stringhe

    Quindi
    
    int i, m=1;
    
    scanf("%s", nuovo_prodotto);
    
    for(i=0; i<n; i++)
       if(strcmp(prodotti[i], nuovo_prodotto)==0)
       {
         m=0;
         break;
       }
    
       return m;
    
  • Re: Matrice di stringhe

    Ok ora mi funziona, grazie
    Ancora una cosa, come faccio a copiare questa nuova stringa in uno spazio libero della matrice ?
    Cioè, io ho n righe nella matrice, facendo n++, aumento il numero di righe della matrice, come faccio poi a copiare la nuova striga in questo nuovo spazio ?

    io ho provato così:
    char prodotti[N][M];
        float prezzi[N];
        int nprodotti, prezzo_nuovo_prodotto;
    
        char nuovo_prodotto[M-1];
    
    
    (Qui c'è l'inserimento di nprodotti, prodotti[nprodotti][M] e prezzi[nprodotti])
    
    nprodotti++;
                    printf("\n listino non ancora pieno,inserimento avvenuto");
    
                    printf("\n inserire nuovo prodotto:");
                    scanf("%s %f", nuovo_prodotto, prezzo_nuovo_prodotto);
                    strcpy(prodotti[nprodotti++], nuovo_prodotto);
                    strcpy(prezzi[nprodotti++], prezzo_nuovo_prodotto);
    Ma mi segna errori nelle strcpy
  • Re: Matrice di stringhe

    La strcpy si usa solo per le stringhe (array di char) non per i valori numerici (float).
  • Re: Matrice di stringhe

    Si scriva un programma in grado di gestire un listino prezzi, ovvero un
    programma con cui sia possibile gestire un elenco di prodotti e i loro
    relativi prezzi in €. Il programma utilizza una matrice di caratteri chiamata
    warehouse di dimensione NxM per memorizzare i nomi dei prodotti
    (massimo N prodotti) e un vettore di numeri decimali chiamato price di
    dimensione N usato per memorizzare i prezzi dei prodotti (il prezzo
    presente nell’i-esima cella di price corrisponde al prezzo del prodotto il cui
    nome è memorizzato nell’i-esima riga di warehouse). Di seguito la
    visualizzazione logica dei dati definiti.

    Nel vettore price, il valore -2 indica linea libera (ossia nessun prodotto
    nella riga corrispondente in warehouse), mentre un valore positivo indica
    che la linea corrispondente in warehouse contiene un prodotto valido a cui
    è stato associato un prezzo. All’avvio del programma, il vettore price è
    totalmente inizializzato a -2 (ossia il listino è vuoto/non contiene prodotti).
    Il programma propone all’utente un elenco di operazioni possibili
    sottoforma di menu. L’utente decide quale operazione eseguire
    selezionando il numero associato all’operazione di suo interesse.
    Le operazioni possibili sono:
    1) Inserimento di un nuovo prodotto e relativo prezzo
    2) Stampa listino attuale (elenco dei prodotti con i relativi prezzi)
    3) Uscita dal programma
    Le prime due operazioni devono essere realizzate tramite l’invocazione
    delle seguenti due funzioni di cui si forniscono prototipo e funzionalità:
    ? insert_product: è una funzione che permette di inserire un nuovo
    prodotto e il suo prezzo nel listino (il nome del prodotto deve essere di
    max M-1 caratteri). La funzione restituisce il valore 1 se il prodotto
    non era ancora presente nel listino e il suo inserimento nel listino è
    avvenuto con successo, 0 se già presente (ossia prodotto già inserito in
    precedenza), 2 se il listino è pieno (e quindi non risulta possibile
    inserire il nuovo prodotto). Se il prodotto non era ancora presente nel
    listino la funzione deve inserire il suo nome nella prima cella libera
    presente in warehouse e il prezzo a lui associato nella cella
    corrispondente di price.
    int insert_product(char warehouse[][M], float price[], int n, char new_product[],
    float price_new_product);
    Il parametro n corrisponde al numero di righe della matrice
    warehouse, che corrisponde anche al numero di celle del vettore price
    (in fase di invocazione nel nostro caso passeremo il valore N).
    ? print_all: è una funzione che permette di visualizzare a video il
    contenuto del listino (elenco prodotti e relativi prezzi). Inoltre, la
    funzione restituisce due valori (tramite due parametri passati per
    indirizzo): il prezzo medio ed il prezzo massimo dei prodotti presenti
    nel listino. Visualizzare a video i due valori restituiti.
    void print_all(char warehouse[][M], float price[], int n, float *avg, float *max);


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 100
    #define M 50
    
    int inserire_prodotto(char prodotti[][M], float prezzi[], int n, char nuovo_prodotto[]);
    void stampa_tutto(char prodotti[][M], float prezzi[], int n, float *media, float *prezzo_max);
    
    int main()
    {
        char prodotti[N][M];
        float prezzi[N], *media, *prezzo_max, somma;
        int menu, i, j, condizione, nprodotti, prezzo_nuovo_prodotto;
    
        char nuovo_prodotto[M-1];
    
        for(i=0; i<N; i++)
        {
            prezzi[i]=-2;
        }
    
        printf("Inserire numero prodotti : ");
        scanf("%d", &nprodotti);
    
        printf("listino prezzi annuale:\n\n");
    
        for(i=0; i<nprodotti; i++)
        {
            scanf("%s %f", prodotti[i], &prezzi[i]);
        }
        if(nprodotti>=N)
        {
            printf("\n Raggiunto Numero massimo di elementi consentiti");
    
        }
        do
        {
    
            printf("\n1--> inserire nuovo prodotto e nuovo prezzo");
            printf("\n2--> stampare prodotti e relativi prezzi acquisiti");
            printf("\n3--> uscire dal programma\n");
    
    
            scanf("%d", &menu);
    
            switch(menu)
            {
    
            case 1:
            {
    
                condizione = inserire_prodotto(prodotti, prezzi, nprodotti, nuovo_prodotto);
    
                if(condizione==1)
                {
    
                    printf("\nlistino non ancora pieno,inserimento avvenuto");
    
    
                    printf("\ninserire nuovo prodotto:");
                    scanf("%s", nuovo_prodotto);
                    scanf("%d", &prezzo_nuovo_prodotto);
    
                    nprodotti++;
                    nuovo_prodotto[M-1] = prodotti[nprodotti][M];
                    prezzi[nprodotti++] = prezzo_nuovo_prodotto;
    
                }
    
                else
                {
                    if(condizione==0)
    
                        printf("inserimento prodotto non possibile!\nNOME GIA' PRESENTE!");
                    else
                        printf("listino pieno");
                }
    
                break;
            }
    
    
    
            case 2:
            {
                prezzo_max=0;
                media=0;
                somma = 0;
                for(i=0; i<nprodotti; i++)
                {
                    somma = somma + prezzi[i];
                }
                *media = somma/nprodotti;
    
                for(i=0; i<nprodotti-1; i++)
                {
                    for(j=1; j<nprodotti; j++)
                    {
                        if(prezzi[i]<prezzi[j])
                            *prezzo_max = prezzi[j];
                    }
                }
    
                stampa_tutto(prodotti, prezzi, nprodotti, media, prezzo_max);
    
                break;
    
            }
            case 3:
            {
                printf("fine del programma");
                break;
            }
            default:
            {
                printf("\nERRORE digitazione nel menù\n");
    
            }
    
            }
        }
        while (menu!=3);
        return 0;
    }
    
    
    int inserire_prodotto(char prodotti[][M], float prezzi[], int n, char nuovo_prodotto[])
    {
        int i, m;
    
        if(n<N)
        {
            printf("\ninserisci nuovo prodotto:");
            scanf("%s", nuovo_prodotto);
    
            for(i=0; i<n; i++)
            {
                    if(strcmp(prodotti[i], nuovo_prodotto)==0)
                    {
                        m=0;
                        break;
                    }
                    else
                    {
                        m=1;
                        break;
                    }
            }
        }
        else
        {
            m=2;
        }
        return m;
    }
    
    void stampa_tutto(char prodotti[][M], float prezzi[], int n, float *media, float *prezzo_max)
    {
        int i;
    
        for(i=0; i<n; i++)
        {
            printf("\n%s\t%f", prodotti[i], prezzi[i]);
        }
    
        printf("\nmedia = %f", *media);
        printf("\nprezzo massimo = %f", *prezzo_max);
        return;
    }
    
    Qui ho scritto il testo dell'esercizio e ciò che ho scritto io per eseguire il programma. Ci sono alcuni problemi che ho notato, come:
    l'inserimento della nuova stringa nella matrice, l'esecuzione del case 2 e la quantità di nprodotti (poiché se il numero massimo di prodotti fosse 4, io ne inserisco 2, me ne fa aggiungere solo un altro con il case 1 invece che 2)
Devi accedere o registrarti per scrivere nel forum
41 risposte