DEMO Verifica-2H-2015/16-FunzioniC++
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:
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.
- Calcolare la media dei prezzi di Benzina lungo il tratto autostradale.
- Sapendo che si è entrati da U1 chiedere all’utente da dove vuole uscire e calcolare il numero di uscite che incontra.
- Determinare il distributore di GPL più conveniente lungo il tratto autostradale.
- Chiedere all’utente da dove vuole uscire e determinare il nome del distributore immediatamente precedente a questa uscita.
- 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];
}
}