5° Appello – 10/09/2018 - Parte Pratica

MAIN.CPP

#include iostream
#include "dati.h"

int main(int argc, char** argv) {
	Tnodo* negozio[DIM];
	for (int i=0; i<DIM; i++) { negozio[i] = NULL; }
	Tordine o;
	for (int i=0; i<5; i++) { newOrdine(&o); addOrdine(negozio, DIM, o); }
	stampaNegozi(negozio, DIM);
	o = cercaOrdine(negozio, DIM);
	o.stampa();
	
	return 0;
}

DATI.H

#include <cstring>
#include <cstdlib>

#ifndef __DATI_H__
#define __DATI_H__

#define DIM 2
typedef enum Trichiesta { WEB, TELEFONO, UFFICIO } Trichiesta;

typedef struct Tordine{
	char materiale[20];
	int quantita;
	float prezzo;
	Trichiesta tipoRichiesta;
	Tordine () {
		strcpy(materiale, "");
		quantita = 0;
		prezzo = 0;
		tipoRichiesta = WEB;
	}
	void stampa() const{
		switch(tipoRichiesta){
			case WEB:
				printf("%s QTA=%d(%s) prezzo=%.2f", materiale, quantita, "WEB", prezzo);		
				break;
			case TELEFONO:
				printf("%s QTA=%d(%s) prezzo=%.2f", materiale, quantita, "TELEFONO", prezzo);		
				break;
			case UFFICIO:
				printf("%s QTA=%d(%s) prezzo=%.2f", materiale, quantita, "UFFICIO", prezzo);		
				break;
		}
	}
} Tordine;

typedef struct Tnodo {
	Tordine dato;
	Tnodo* next;
	Tnodo* prev;
	Tnodo () {
		dato = Tordine();
		next = NULL;
		prev = NULL;
	}
	
	Tnodo (Tordine o, Tnodo* n, Tnodo* p) {
		dato = o;
		next = n;
		prev = p;
	}
	
	void stampa() const{
		dato.stampa();
	}
} Tnodo;

void newOrdine(Tordine* o){
	int randTipoRichiesta = rand()%(UFFICIO-WEB+1)+WEB;
	int quantitaIN;
	
	switch(randTipoRichiesta){
		case WEB:
			o->tipoRichiesta = WEB;
			break;
		case TELEFONO:
			o->tipoRichiesta = TELEFONO;
			break;
		case UFFICIO:
			o->tipoRichiesta = UFFICIO;
			break;
	}
	
	printf("Quantita: ");
	scanf("%d", &quantitaIN);
	
	while(quantitaIN<1 || quantitaIN>20){
		printf("\nErr.\n");
		printf("Quantita: ");
		scanf("%d", &quantitaIN);
	}
	
	o->quantita = quantitaIN;
	
	o->prezzo = (rand()%(9999-1000+1)+1000)/100.0;
	
	printf("Materiale: ");
	scanf("%s", o->materiale);
	
}

Tnodo* insertFirst(Tnodo* p, Tordine o){
	return new Tnodo(o, p, NULL);
}

void addOrdine(Tnodo** neg, int dim, Tordine o){
	int x = rand()%(1-0+1)+0;
	neg[x] = insertFirst(neg[x], o);
}

void stampaNegozi(Tnodo** neg, int dim){
	int i;
	Tnodo* tmp = NULL;
	
	for(i=0; i<dim; i++){
		tmp = neg[i];
		while(tmp!=NULL){
			tmp->stampa(); printf("\n");
			tmp = tmp->next;
		}
	}
}


float getCostoMedio(Tnodo* nodo){
	return (float)(nodo->dato.prezzo)/(nodo->dato.quantita);
}

Tordine cercaOrdine(Tnodo** neg, int dim){
	Tnodo* massimo = NULL;
	Tnodo* tmp = NULL;
	int i;
	float costoMedio;
	FILE* fp;
	
	for(i=0; i<dim; i++){
		tmp = neg[i];
		massimo = tmp;
					
		while(tmp!=NULL){
			if(getCostoMedio(tmp)>getCostoMedio(massimo)){
				massimo = tmp;
			}
			tmp = tmp->next;
		}
	}
	
	if(fp=fopen("costoso.txt", "w")){
		switch(massimo->dato.tipoRichiesta){
			case WEB:
				fprintf(fp, "%s QTA=%d(%s) prezzo=%f\n", massimo->dato.materiale, massimo->dato.quantita, "WEB", massimo->dato.prezzo);
				break;
			case TELEFONO:
				fprintf(fp, "%s QTA=%d(%s) prezzo=%f\n", massimo->dato.materiale, massimo->dato.quantita, "TELEFONO", massimo->dato.prezzo);
				break;
			case UFFICIO:
				fprintf(fp, "%s QTA=%d(%s) prezzo=%f\n", massimo->dato.materiale, massimo->dato.quantita, "UFFICIO", massimo->dato.prezzo);
				break;			
		}
	}else{
		printf("Errore nell'apertura del file.\n");
	}

	return massimo->dato;	
}

#endif

Questo penso sia sbagliato… comunque bel programma

1 Mi Piace

Vero…momento di defaillance