Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113

    [C] struct con vettori multidimensionali

    Ciao a tutti, devo fare un programmino sulle ordinazioni di un ristorante.
    Ciascuna prenotazione deve avere le seguenti informazioni:
    1) numero del tavolo ( da 1 a 20 )
    2) data (giorno, mese, anno)
    3) insieme ( vettore ) delle portate
    4) insieme ( vettore ) delle bevande
    5) costo totale del pasto

    Inoltre per ciascuna portata (quindi punto 3):
    1) codice della portata ( da 1 a 200 )
    2) numero di tale portata
    3) costo della portata

    Per ciascuna bevanda (punto 4)
    1) codice della bevanda ( da 1 a 20 )
    2) numero di tale bevanda
    3) costo della bevanda

    Ogni ordinazione può avere al massimo 20 portate diverse e 10 bevande diverse

    Avevo pensato di realizzare una struct fatta in questo modo
    codice:
    struct ordinazione {
        int num_tavolo;
        int data;
        int portata [1][3];
        int bevanda [1][3];
    }ord[max];
    e per inserire gli ingressi, ho pensato di fare in questo modo, ma il dubbio resta soprattutto sull'assegnamento dei dati nella struct per via degli indici

    codice:
    for ( i = 0; i < max; i++ ) {
            printf("Inserisci ordinazione\n");
            printf("Inserisci data : \n");
            scanf("%d", &dat)
            ord[i].data = dat;
    
            printf("Inserisci il numero del tavolo : \n");
            scanf("%d", &tav);
            if ( tav >=1 && tav <= 20 ) {
                ord[i].num_tavolo = tav;
            }else{
                printf("Numero tavolo errato\n");
            }
            num_max = 0;
            for ( j = 0; j < 3; j++ ) {
                printf("Inserisci il codice della portata : \n");
                scanf("%d", &cod_port);
                if ( cod_port >= 1 && cod_port <= 200 ) {
                    ord[i].portata[i][j] = cod_port;
                } else{ 
                    printf("Il codice della portata è errato\n");
                }
                printf("Inserisci il numero di portate ordinate : \n");
                scanf("%d", &num_port);
                num_max = num_max + num_port;
                if ( num_max <= 20 ) {
                    ord[i].portata[i][j];
                }........................................
    Per effettuare l'assegnazione dei dati ai campi di un vettore multidimensionale il quale è a sua volta un membro di una struttura è possibile usare gli indici in questo modo ????

    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ho capito da cosa hai dedotto questi

    int portata [1][3];
    int bevanda [1][3];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    Considerando la portata e la bevanda come vettori ad una riga e 3 colonne...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ha senso una riga e tre colonne ... sono sempre 3 elementi quindi [3]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    Brutto errore! in effetti è solo un vettore con 3 campi..quindi è corretto scrivere ord[i].portata[j] ???

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se sono 3 campi ovviamente sì

    Sarà

    int portata[3];

    e quindi

    ord[i].portata[j]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    113
    Il programmino delle ordinazioni descritto sopra, deve fare le seguenti cose:
    1. leggere da tastiera le ordinazioni di una giornata ( massimo 100 )
    2. con una funzione calcoli il costo totale per ciascuna ordinazione
    3. stampi e ordinazioni che hanno il numero maggiore di ordinazioni

    Per quanto riguarda i punti 1 e 2 credo di aver fatto bene. Il problema è il punto 3, infatti ho utilizzato un algoritmo bubble sort in senso decrescente per riordinare la struc in base al numero maggiore di portate ordinate: Sta di fatto che nella struct ho considerato 2 vettori multidimensionali ( portate e bevanda ) che non so come ordinare tramite il bubble sort!!

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 10
    #define max 100
    #define r1 20
    #define r2 10
    #define c 3
    
    /* prototipo di funzione */
    int totale (int x, int y);
    
    /* dichiarazione della struttura prenotazione */
    
    struct ordinazione {
        int num_tavolo;
        int data;
        int portata[r1][c];
        int bevanda[r2][c];
        int costo_totale;
    }ord[max];
    
    
    int main()
    {
    
    
        int tav;
        int i, j, k, dat;
        int cod_port, num_port, cost_porta, costotot_port;
        int cod_beva, num_beva, costotot_beva, cost_beva, costo_tot;
        int num_ordinazioni, app;
        char risp;
        int tot[max];
    
    
        for ( i = 0; i < max; i++ ) {
            printf("Inserisci ordinazione\n");
    
    
            printf("Inserisci il numero del tavolo : \n");
            scanf("%d", &tav);
            if ( tav >=1 && tav <= 20 ) {
                ord[i].num_tavolo = tav;
            }else{
                printf("Numero tavolo errato\n");
            }
    
            printf("Inserisci data : \n");
            scanf("%d", &dat);
            ord[i].data = dat;
    
            for ( j = 0; j < 20; j++ ) {
                for ( k = 0; k < 3; k++ ) {
                  printf("Inserisci codice portata : \n");
                    scanf("%d", &cod_port);
                    if ( cod_port >= 1 && cod_port <= 200 ) {
                        ord[i].portata[j][k] = cod_port;
                    } else{
                        printf("Il codice della portata è errato\n");
                    }
                        printf("Inserisci il numero di portata ordinate : \n");
                        scanf("%d", &num_port);
                        ord[i].portata[j][k] = num_port;
                        printf("Inserisci il costo della portata : \n");
                        scanf("%d", &cost_porta);
                    }
                    costotot_port = cost_porta * num_port;
    
                    printf("Ordinazione portate terminate ? \n");
                    printf("Inserisci S per terminare :\n");
                    scanf("%c", &risp);
                    if ( risp = 'S') {
                        break;
                    } else {
                        continue;
                    }
                }
    
    
    
    
                for ( j = 0; j < 20; j++ ) {
                    for ( k = 0; k < 3; k++ ) {
                        printf("Inserisci il codice della bevanda : \n");
                        scanf("%d", &cod_beva);
                        if ( cod_beva >= 1 && cod_beva <= 20 ) {
                            ord[i].bevanda[j][k] = cod_beva;
                        } else {
                            printf("Il codice della bevanda è errato\n");
                        }
                        printf("Inserisci il numero delle bevanda ordinate : \n");
                        scanf("%d", &num_beva);
                        ord[i].bevanda[j][k] = num_beva;
    
                        printf("Inserisci il costo della bevanda : \n");
                        scanf("%d", &cost_beva);
                        }
                        costotot_beva = cost_beva * num_beva;
    
                        printf("Ordinazione portate terminate ? \n");
                        printf("Inserisci S per terminare :\n");
                        scanf("%c", &risp);
                        if ( risp = 'S') {
                            break;
                        } else {
                            continue;
                        }
                    }
    
                costo_tot = totale( costotot_port, costotot_beva );
    
                /* stampa ordinazioni con numero maggiore di portate ordinate */
    
            for ( i = 0; i < max; i++) {
                for ( j = 0; j < 20; j++ ) {
                num_ordinazioni = num_ordinazioni + ord[i].portata[1];
                }
            tot[i] = num_ordinazioni;
            }
    
        /* Ordina in senso decrescente */
    
            for ( i = 0; i < max; i++ ) {
                for ( j = 1; j <= max; j++ ) {
                    if ( tot[i] < tot[j] ) {
                        app = tot[i];
                        tot[i] = tot[i + 1];
                        tot[i + 1] = app;
                        app = ord[i].num_tavolo;
                        ord[i].num_tavolo = ord[i + 1].num_tavolo;
                        ord[i + 1].num_tavolo = app;
                        app = ord[i].data;
                        ord[i].data = ord[i + 1].data;
                        ord[i + 1].data = app;
                        app = ord[i].portata;
                        ord[i].portata = ord[i + 1].portata;
                        ord[i + 1].portata = app;
                        app = ord[i].bevanda;
                        ord[i].bevanda = ord[i +1].bevanda;
                        ord[i + 1].bevanda = app;
                    }
                }
            }
    
        printf("Le 3 ordinazioni con il maggior numero di ordinazioni sono ")
    
        }
    
    return 0;
    
    }
    
    
    
    
            int totale ( int x, int y ) {
    
                int z:
    
                z = x + y;
    
                return z;
            }
    Potete suggerirmi come posso fare ?

    Grazie

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.