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