Programmazione ed
Esercitazioni di Programmazione


<-- 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;
}


<-- Torna alla lista delle soluzioni