Salve a tutti,sto provando ad imparare il linguaggio C,con non poche difficoltà.Mi sto avvalendo del corso completo Deitel.Sono arrivato appena al terzo capitolo in cui parla dello sviluppo di programmi strutturati a partire da uno un algo sviluppato in pseudocodice con un processo per raffinamenti successivi(top down).In questo capitolo vengono introdotte le strutture di selezione con i comandi di selezione if , if...else e le strutture di iterazione(cicliche?) in particolare il comando di iterazione while.veniamo al punto.Il mio problema è quello di scrivere l'algo sotto forma di pseudocodice per poi tradurlo in C.
faccio un esempio con un esercizio del libro che mi sta mettendo in difficoltà:
Il programma deve prendere in input i Km percorsi e i litri usati per ogni pieno.Dovrà calcolare i Km percorsi con ogni litro per ogni pieno e visualizzarli.E infine dovrà calcolare e visualizzare i Km per litro percorsi complessivamente con tutti i pieni...
Un modo per risolvere il problema è quello di utilizzare un valore sentinella che all'immissione interrompa il ciclo while e proceda alla sequenza successiva.
1)Inizializzare le variabili
a- Inizializzare la media totale Km/l a 0
b- Inizializzare il contatore(numero pieni) a 0
2)Fichè il numero di litri è u valore diverso dal valore sentinella,prendere in input i Km percorsi e i litri usati per un pieno,calcolare i Km percorsi per ogni litro.
a- Prendere in input i Km percorsi e visualizzarli
b- Prendere in input i Litri usati e visualizzarli
c- Calcolare i Km percorsi per ogni litro e visualizzarli
d- Aggiungere 1 al Contatore (Numero pieni).
e- Prendere in input i dati del successivo pieno(o forse del valore sentinella)
3) Calcolare la media dei Km percorsi per ogni litro per tutti i pieni considerati.
a-Se il contatore non è uguale a 0
a1-Impostare la media con il totale diviso per il contatore
a2-Visualizzare la media.
b-Altrimenti
b1-Visualizzare "Non sono stati immessi dati"
questo è il codice che ho scritto,però non da il risultato che dovrebbe,quando il chiede l'input litri e inserisco il valore sentinella il ciclo dovrebbe interrompersi subito,invece,prima di passare all'istruzione successiva,mi chiede l'input Km...probabilmente il problema è a monte...
#include <stdio.h>
#include <stdlib.h>
int main()
{
float litri;
float km;
float media;
float mediatot = 0;
int counter = 0;
while(litri != -1){
printf("Inserisci i litri consumati(-1 per terminare): ");
scanf("%f" , &litri);
printf("Inserisci i Km percorsi con questo pieno: ");
scanf("%f" , &km);
media = (float) km / litri;
mediatot += media;
counter += 1;
printf("I km / litro percorsi per questo pieno sono %f\n\n" , media);
}
if(counter != 0){
mediatot = (float) mediatot / counter;
printf("La media complessiva km/l equivale a %f\n" , mediatot);
}
else{
printf("Non sono stati immessi dati!\n");
}
system("PAUSE");
return 0;
}