2° Appello - 08/02/2019 - Parte Pratica

1 Mi Piace

Main.cpp

#include <iostream>
#include <cstdlib>
#include <time.h>
#include "dati.h"

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	Tcoda* impiantiRisalita = new Tcoda(DIM); 
	Timpianto imp;
	//srand(time(0));
	for (int i=0; i<5; i++) {
		newImpianto(&imp);
		addImpianto(impiantiRisalita, imp);
	}
	stampaImpianti(impiantiRisalita);
	cout << cancellaEconta(impiantiRisalita, NERA);
	return 0;
}

Dati.h

#ifndef DATI_H
#define DATI_H
	
#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

#define DIM 3
typedef enum Tpista{ NERA, ROSSA, BIANCA } Tpista;

const char* pista(Tpista p){
	switch(p){
		case NERA: return "NERA";
		case ROSSA: return "ROSSA";
		case BIANCA: return "BIANCA";
	}
}

int random(int min,int max){
	return rand()%(max-min+1)+min;
}

typedef struct Timpianto{
	char nomeImpianto[20]; 
	unsigned int lunghezza;
	float costo;
	Tpista tipoPista;
	Timpianto(){
		nomeImpianto[0]='\0';
		lunghezza=0;
		costo=0;
		tipoPista=BIANCA;
	}
	void stampa() {
		//nomeImpianto (tipoPista) LUN=lunghezza costo=costo
		printf("%s (%s) LUN=%d costo=%.2f\n",nomeImpianto,pista(tipoPista),lunghezza,costo);
	}
}Timpianto;

typedef struct Tcoda {
	Timpianto* is; // array con allocazione dinamica
	int head, tail; 
	int dim, n;
	Tcoda(int _dim){
		dim=_dim;
		tail=head=n=0;
		is= new Timpianto[dim];
	}
	~Tcoda(){
		delete[] is;
	}
	void stampa(){
		int i;
		if(n==0){
			cout<<"Coda Vuota"<<endl;
			return;
		}
		i=head;
		do{
			is[i].stampa();
			i=(i+1)%dim;
		}while(i!=tail);
	}
	void put(Timpianto d){
		is[tail]=d;
		tail=(tail+1)%dim;
		n++;
	}
	Timpianto get(){
		Timpianto im=is[head];
		head=(head+1)%dim;
		n--;
		return im;
	}
	bool isFull(){
		return n==dim;
	}
	bool isEmpty(){
		return n==0;
	}
}Tcoda; // CODA realizzata con array

void newImpianto(Timpianto* im){
	switch(random(0,2)){
		case NERA: im->tipoPista=NERA; break;
		case ROSSA: im->tipoPista=ROSSA; break;
		case BIANCA: im->tipoPista=BIANCA; break;
		default: cout<<"Errore nell'inserimento tipoimpianto\n";
	}
	do{
		cout<<"Lunghezza = ";
		cin>>im->lunghezza;
	}while(im->lunghezza<500 || im->lunghezza>2400);
	im->costo=(float)random(2500,3550)/100;
	cout<<"Inserire nome impianto ";
	cin>>im->nomeImpianto;
}

void addImpianto(Tcoda* cod,Timpianto imp){
	if(!cod->isFull()){
		cod->put(imp);
	} else {
		FILE* f_txt=fopen("impiantiExtra.txt","a");
		if(f_txt==NULL){
			cout<<"Errore nell'apertura del file\n";
		} else {
			fprintf(f_txt,"%s (%s) LUN=%d costo=%.2f\n",imp.nomeImpianto,pista(imp.tipoPista),imp.lunghezza,imp.costo);
			fclose(f_txt);
		}
	}
		
}

void stampaImpianti(Tcoda* cod){
	cod->stampa();
}

int cancellaEconta(Tcoda* cod,Tpista tp){
	Timpianto imp;
	int tot=0;
	while(!cod->isEmpty()){
		imp=cod->get();
		if(imp.tipoPista==tp){
			tot++;
		}
	}
	return tot;
}


#endif
	

Una domanda: nel main secondo voi, si può mettere la srand(time(0)) oppure va lasciato il main come te lo danno loro?