Risolto Esercizio C semplice

ItsReal

Utente Electrum
30 Dicembre 2014
114
30
9
104
Ciao ragazzi, è tutta sera che sto provando un esercizio in C.
Praticamente è un programmino dove io inserisco i litri che ho usato e i km che ho percorso per calcolarne la media per quel "pieno" dando un valore alla fine di ogni input (litri-km) e calcolando, (a termine del programa, usando '-1'), la media totale di tutte le volte che faccio il calcolo.
Il programma si esegue ma non funge correttamente, vi linko il codice che ho provato a scrivere:

P.S. : Questo esercizio prevede di essere risolto utlizzando solo un ciclo while
C:
#include <stdio.h>

// la funzione main inizia l'esecuzione del programma
int main( void )
{
   // definisco le variabili
   int litres, kms;
   float overallAverage, tank;
   unsigned int totalLitres = 0;
   unsigned int totalKms = 0;
   unsigned int counter = 0;
  
   printf( "%s", " Enter the litres used (-1 to end): " ); // chiedo inserimento litri
   scanf( "%d", &litres ); // leggo i litri inseriti
  
   while ( litres != -1 ) {
         printf( "%s", " Enter the litres used (-1 to end): " ); // chiedo inserimento litri
         scanf( "%d", &litres );
        
         printf( "%s", " Enter the kms driven: " ); // chiedo inserimento kms
         scanf( "%d", &kms );
        
         tank = ( float ) kms / litres;
         printf( "The kms/litres for this tank was: %f\n", tank ); // stampo la media per questo tank
        
         ++counter;
         totalLitres += litres;
         totalKms += kms;
         } // fine di while
        
   overallAverage = ( float ) totalKms / totalLitres; // definisco overall totale (kms/litri)
   printf( "The overall average was: %f\n", overallAverage ); // stampo overall totale
  
} // fine di main
 
Non sei lontano dalla soluzione, ti è sufficiente non richiedere l'input fuori dal while e inizializzare a 0 litres:

C:
#include <stdio.h>

// la funzione main inizia l'esecuzione del programma
int main( void )
{
   // definisco le variabili
   int litres = 0, kms;
   float overallAverage, tank;
   unsigned int totalLitres = 0;
   unsigned int totalKms = 0;
   unsigned int counter = 0;
  
   while ( litres != -1 ) {
         printf( "%s", " Enter the litres used (-1 to end): " ); // chiedo inserimento litri
         scanf( "%d", &litres );
        
         printf( "%s", " Enter the kms driven: " ); // chiedo inserimento kms
         scanf( "%d", &kms );
        
         tank = ( float ) kms / litres;
         printf( "The kms/litres for this tank was: %f\n", tank ); // stampo la media per questo tank
        
         ++counter;
         totalLitres += litres;
         totalKms += kms;
         } // fine di while
        
   overallAverage = ( float ) totalKms / totalLitres; // definisco overall totale (kms/litri)
   printf( "The overall average was: %f\n", overallAverage ); // stampo overall totale
  
} // fine di main

Dovresti inserire un if dopo la lettura di litres per uscire dal ciclo quando viene inserito -1. A quel punto la condizione del for puoi anche lasciarla a while(true), creando un loop infinito (che viene interrotto dall'if che andrai ad inserire.

In alternativa, puoi racchiudere tutto in un if, quindi:

C:
#include <stdio.h>

// la funzione main inizia l'esecuzione del programma
int main( void )
{
   // definisco le variabili
   int litres = 0, kms;
   float overallAverage, tank;
   unsigned int totalLitres = 0;
   unsigned int totalKms = 0;
  
   while ( litres != -1 ) {
         printf( "%s", " Enter the litres used (-1 to end): " ); // chiedo inserimento litri
         scanf( "%d", &litres );
        
         if(litres != -1) {
             printf( "%s", " Enter the kms driven: " ); // chiedo inserimento kms
             scanf( "%d", &kms );
            
             tank = ( float ) kms / litres;
             printf( "The kms/litres for this tank was: %f\n", tank ); // stampo la media per questo tank
            
             totalLitres += litres;
             totalKms += kms;
         }
   } // fine di while
        
   overallAverage = ( float ) totalKms / totalLitres; // definisco overall totale (kms/litri)
   printf( "The overall average was: %f\n", overallAverage ); // stampo overall totale
  
} // fine di main

Ti ho rimosso anche counter, visto che non la utilizzavi.
 
Non sei lontano dalla soluzione, ti è sufficiente non richiedere l'input fuori dal while e inizializzare a 0 litres:

C:
#include <stdio.h>

// la funzione main inizia l'esecuzione del programma
int main( void )
{
   // definisco le variabili
   int litres = 0, kms;
   float overallAverage, tank;
   unsigned int totalLitres = 0;
   unsigned int totalKms = 0;
   unsigned int counter = 0;
 
   while ( litres != -1 ) {
         printf( "%s", " Enter the litres used (-1 to end): " ); // chiedo inserimento litri
         scanf( "%d", &litres );
       
         printf( "%s", " Enter the kms driven: " ); // chiedo inserimento kms
         scanf( "%d", &kms );
       
         tank = ( float ) kms / litres;
         printf( "The kms/litres for this tank was: %f\n", tank ); // stampo la media per questo tank
       
         ++counter;
         totalLitres += litres;
         totalKms += kms;
         } // fine di while
       
   overallAverage = ( float ) totalKms / totalLitres; // definisco overall totale (kms/litri)
   printf( "The overall average was: %f\n", overallAverage ); // stampo overall totale
 
} // fine di main

Dovresti inserire un if dopo la lettura di litres per uscire dal ciclo quando viene inserito -1. A quel punto la condizione del for puoi anche lasciarla a while(true), creando un loop infinito (che viene interrotto dall'if che andrai ad inserire.

In alternativa, puoi racchiudere tutto in un if, quindi:

C:
#include <stdio.h>

// la funzione main inizia l'esecuzione del programma
int main( void )
{
   // definisco le variabili
   int litres = 0, kms;
   float overallAverage, tank;
   unsigned int totalLitres = 0;
   unsigned int totalKms = 0;
 
   while ( litres != -1 ) {
         printf( "%s", " Enter the litres used (-1 to end): " ); // chiedo inserimento litri
         scanf( "%d", &litres );
       
         if(litres != -1) {
             printf( "%s", " Enter the kms driven: " ); // chiedo inserimento kms
             scanf( "%d", &kms );
           
             tank = ( float ) kms / litres;
             printf( "The kms/litres for this tank was: %f\n", tank ); // stampo la media per questo tank
           
             totalLitres += litres;
             totalKms += kms;
         }
   } // fine di while
       
   overallAverage = ( float ) totalKms / totalLitres; // definisco overall totale (kms/litri)
   printf( "The overall average was: %f\n", overallAverage ); // stampo overall totale
 
} // fine di main

Ti ho rimosso anche counter, visto che non la utilizzavi.
Si ora è chiaro. Mancava poco ahah ;)
Grazie ancora
 
  • Mi piace
Reazioni: DispatchCode