DEMO Verifica-2H-2015/16-FunzioniC++

logoScuola LICEO SCIENTIFICO STATALE “ARTURO TOSI”

DEMO VERIFICA INFORMATICA

 

 

Tempo

1 ora

 

Consegna

Su File nella cartella compiti di iDrive.

 

Valutazione

Ogni domanda ha lo stesso peso.

 

Problema

Sia dato il programma “Tutto Autostrade” che estrae i dati relativi ad un tratto autostradale da due file (uscite e distributori) e li visualizza a video:

tabellec++

La prima tabella “uscite” elenca i nomi delle uscite e a quale chilometro si trovano.

La seconda tabella “distributori” elenca i nomi dei distributori, a quale chilometro si trovano e i relativi prezzi dei carburanti serviti (benzina, diesel e gpl).

NB il numero -1 in corrispondenza di un prezzo di carburante indica l’assenza di quel carburante in quel distributore.

 

  1. Calcolare la media dei prezzi di Benzina lungo il tratto autostradale.
  2. Sapendo che si è entrati da U1 chiedere all’utente da dove vuole uscire e calcolare il numero di uscite che incontra.
  3. Determinare il distributore di GPL più conveniente lungo il tratto autostradale.
  4. Chiedere all’utente da dove vuole uscire e determinare il nome del distributore immediatamente precedente a questa uscita.
  5. Extra. Visualizzare i nomi dei distributori che si incontrano prima di uscire dalla uscita desiderata.

 

Soluzione

NB Attenzione che copiando il codice qui sotto riportato alcuni simboli dovranno essere riscritti, per esempio, i doppi apici obliqui devono essere sostituiti dai doppi apici generati in DevC++, il simbolo di decremento (meno meno) – -.

1.

/*
Calcola la media dei prezzi di Benzina nel tratto da U1 a U7
*/
void mediaBenzina(){
int somma=0, media;
for(int i=0; i<numDistributori; i++){
somma=somma+prezzoBenzina[i];
}
media=somma/numDistributori;
cout<<“\nMedia Prezzi Benzina: “<<media<<endl;
}

 

2.

/*
ES02 – Nel tratto da U1 a U7, sapendo da dove si vuole uscire
contare il numero di uscite che incontra
*/
void contaUsciteVer1(){
string nomeUscita;
cout<<“Da dove esci: “;
cin>>nomeUscita;
int i=0;
while(nomeUscita!=uscita[i]){
i++;
}
cout<<“Num Uscite: “<<i<<endl;
}

 

3.

/*
ES03 – Determinare il distributore di GPL più conveniente
nel tratto da U1 a U7
(-1 indica l’assenza di GPL in quel distributore)
*/
void GPLconveniente(){
int minGPL=-1;
string minNomeDistributore=”NULL”;
for(int i=0; i<numDistributori; i++){
if(minGPL==-1 || minGPL>prezzoGPL[i]){
minGPL=prezzoGPL[i];
minNomeDistributore=nomeDistributore[i];
}
}
cout<<“\nMIN GPL: “<<minGPL<<” presso “<<minNomeDistributore<<endl;
}

 

4.

/*
ES04 – Determinare il nome del distributore immediatamente precedente all’uscita desiderata
*/
void distributoreDesiderato(){
string nomeUscita;
int kmUscita;
cout<<“Da dove esci: “;
cin>>nomeUscita;

for(int i=0; i<numUscite; i++){
if(nomeUscita==uscita[i])
kmUscita=km[i];
}

string miFermoAlDistributore;
int i=numDistributori-1;
do{
if(kmDistributore[i]<kmUscita)
miFermoAlDistributore=nomeDistributore[i];
i–;
}while(kmDistributore[i+1]>=kmUscita);
cout<<“Nome distributore prima di uscire: “<<miFermoAlDistributore<<endl;
}

 

/* Versione 2 */

void distributoreDesiderato2(){
string nomeUscita;
int kmUscita;
cout<<“Da dove esci: “;
cin>>nomeUscita;

for(int i=0; i<numUscite; i++){
if(nomeUscita==uscita[i])
kmUscita=km[i];
}

string miFermoAlDistributore;
for(int i=0; i<numDistributori; i++){
if(kmDistributore[i]<kmUscita)
miFermoAlDistributore=nomeDistributore[i];
}
cout<<“Nome distributore prima di uscire: “<<miFermoAlDistributore<<endl;
}

 

5.

/*5. Extra. Visualizzare i nomi dei distributori che si incontrano prima di uscire dalla uscita desiderata.
*/

void visualizzoUscite(){
string nomeUscita;
int kmUscita;
cout<<“Da dove esci: “;
cin>>nomeUscita;

for(int i=0; i<numUscite; i++){
if(nomeUscita==uscita[i])
kmUscita=km[i];
}

for(int i=0; i<numUscite; i++){
if(km[i]<kmUscita)
cout<<“Uscita:”<<uscita[i];
}
}