<-- Torna alla lista delle soluzioni
Esercitazione 8
Esercizio 1
/* Implementare la seguente procedura:
Distributore *Crea(int cokes, int fante, int birre);
La funzione Crea crea (dinamicamente) un nuovo valore di tipo Distributore e ne restituisce l’indirizzo. I parametri formali cokes, fante e birre rappresentano il numero iniziale di lattine di cocacola, fanta e birra, rispettivamente, e sono da utilizzarsi per inizializzare il campo disponibili. Il campo moneteInserite deve essere inizializzato a NULL, mentre il campo incasso a 0. */
Distributore *Crea(int cokes, int fante, int birre) {
Distributore *d = (Distributore *)malloc(sizeof(Distributore));
d->incasso = 0;
d->moneteInserite = NULL;
d->disponibili[coca] = cokes;
d->disponibili[fanta] = fante;
d->disponibili[birra] = birre;
return d;
}
Esercizio 2
/* Implementare la seguente funzione:
int bibita_selezionabile(Distributore d, Bibita bibita);
che restituisce 1 se la bibita indicata da bibita è disponibile e se il totale delle monete correntemente inserite nel distributore d raggiunge o supera il costo della bibita; altrimenti restituisce 0. */
int totale_monete(ListaMonete m) {
int totale = 0;
while(m != NULL) {
switch(m->coin) {
case cinque:
totale += 5;
break;
case dieci:
totale += 10;
break;
case venti:
totale += 20;
break;
case cinquanta:
totale += 50;
break;
case cento:
totale += 100;
break;
}
m = m->prossima;
}
return totale;
}
int bibita_selezionabile(Distributore d, Bibita bibita) {
if (d.disponibili[bibita] > 0 && COSTO[bibita] <= totale_monete(d.moneteInserite)) {
return 1;
}
else {
return 0;
}
}
Esercizio 3
/* Implementare la seguente procedura:
void stampa(Distributore d);
che stampa a video una rappresentazione dello stato dei campi del distributore passato come parametro attuale. In particolare, deve essere visualizzata una lista delle monete correntemente inserite. */
void stampaMonete(ListaMonete lista) {
if(lista == NULL) {
printf("nessuna moneta inserita.\n");
return;
}
while(lista != NULL) {
switch(lista->coin) {
case cinque:
printf("5 ");
break;
case dieci:
printf("10 ");
break;
case venti:
printf("20 ");
break;
case cinquanta:
printf("50 ");
break;
case cento:
printf("100 ");
break;
}
lista = lista->prossima;
}
printf("\n");
}
void stampa(Distributore d) {
printf("Incasso = %d\n", d.incasso);
printf("Cokes disponibili = %d\n", d.disponibili[coca]);
printf("Fante disponibili = %d\n", d.disponibili[fanta]);
printf("Birre disponibili = %d\n", d.disponibili[birra]);
printf("Lista correntemente inserite: ");
stampaMonete(d.moneteInserite);
return;
}
