PDA

View Full Version : C++ esercizio


sici_90
04-03-2015, 16:44
Salve a tutti,
come da titolo vorrei una mano su un esercizio di programmazione.
il testo dell'esercizio è il seguente:
"Gli automobilisti sono sempre più attenti ai consumi delle proprie automobili. Un automobilista ha tenuto traccia del numero di km percorsi con la sua auto e del numero di litri di benzina acquistati durante il rifornimento. Così hanno fatto tutti gli automobilisti. Sviluppare un programma in c++ che immetta il numero di km percorsi ed il numero di litri di benzina acquistati da ogni automobilista e calcoli e mostri a video il numero di km percorsi con un litro di benzina. Questo calcolo e visualizzazione deve essere effettuato per un numero imprecisato di automobili, perchè alla fine dell'algoritmo si vuole ottenere una media dei km percorsi con un litro di benzina."

Allora devo utilizzare solo i comandi if , else , while.
il programma che ho scritto io è il seguente:
#include <iostream>
using namespace std;

int main() {
int a, b, totallitri, totalkm, counter;
float mediakm, media;
totallitri=0;
totalkm=0;
counter=0;
cout<<"inserire i litri di benzina acquistati";
cin>>a;
cout<<"inserire i km percorsi";
cin>>b;

while(a!=(-1)){
totallitri=totallitri+a;
counter=counter+1;
cout<<"inserisci il numero di litri";
cin>>a;
cout<<"inserisci i km percorsi";
cin>>b;
totalkm=totalkm+b;

}
if(counter!=0){
mediakm=totalkm/totallitri;
media=mediakm/counter;
cout<<"la media di km percorsi è : "<<media<<endl;
}
else
cout<<"non sono stati acquistati litri di benzina";
return 0;
}

ci sono ben 2 problemi
il primo:mi da sempre zero come media.
il secondo è che non si ferma quando viene immesso il valore -1 per i litri finchè non viene inserito il valore -1 anche per i km.

potreste aiutarmi per favore?

Grazie a tutti

sici_90
04-03-2015, 17:56
ehm...
non ne vedo.
per quanto riguarda il fatto che mi da sempre zero come media, penso sia dovuto al fatto che non gli ho detto che la media può essere un numero decimale.
è corretto?
se non ti scoccia potresti scrivere uno pseudo codice?
così io poi cerco di tradurlo?

sici_90
04-03-2015, 19:17
Grazie mille per le risposte,
mi potresti spiegare meglio la questione della posizione delle sommatorie?

sici_90
04-03-2015, 19:43
uguale a b giusto?

sici_90
05-03-2015, 10:15
Ok,
ma allora come devo procedere? :muro:

int main() {
int a, b, totallitri, totalkm, counter;
float media1, media;
totallitri=0;
totalkm=0;
counter=0;
cout<<"inserire i litri di benzina acquistati";
cin>>a;

while(a!=(-1)){
counter=counter+1;
cout<<"inserisci i km percorsi";
cin>>b;
media=static_cast<float>(b)/a;
cout<<"per questo serbatoio i km/ltso:"<<setprecision(6)<<setiosflags(ios::fixed | ios::showpoint)<<media<<endl;
totalkm=totalkm+b;
totallitri=totallitri+a;
cout<<"inserisci il numero di litri";
cin>>a;

}
if(counter!=0){
media1=static_cast<float>(totalkm)/totallitri;
cout<<"la media totale di km/lt è : "<<setprecision(6)<<setiosflags(ios::fixed | ios::showpoint)<<media1<<endl;
}
else
cout<<"non sono stati acquistati litri di benzina";
return 0;
}


è corretto?
ma mi sorge una curiosità: per questo eserfizio è necessario usare il counter??

sici_90
06-03-2015, 16:26
Allora vediamo un pò,
ho risolto quell'esercizio;
ma ora avrei bisogno di una mano con un altro esercizio.
devo scrivere un programma che stimi il valore della costante matematica e (numero di nepero)tramite la formula;
e=1+1/(1!)+1/(2!)....

allora ho cominciato a scriverlo è questo:

#include <iostream>

using namespace std;

int main()
{
int a, b;
float fatt, ris;
cout<<"inserisci a che termine della serie vuoi fermarti"<<endl;
cin>>a;

fatt=1;
b=1;
ris=1;
while(b<=a){
fatt=fatt*b;
ris=1/fatt;
b=b+1;
}

cout<<"il numero di nepero è : "<<ris<<endl;
return 0;
}


il problema sta nel risultato(ris)

perchè non fa la somma di tutte le frazioni, ma solo una frazione.

come faccio a fargli sommare tutte le frazioni?
(fatt sta per fattoriale)
grazie!

lorenzo001
06-03-2015, 16:43
Ma dove calcoli il fattoriale?

Per sommare le varie parti puoi scrivere

ris = ris + 1/fatt;

ma in fatt devi calcolare i vari fattoriali e questi non lo fai ...

sici_90
06-03-2015, 16:50
Ottimo grazie mille ora funziona!
nel ciclo while il fattoriale l'ho calcolato come
fatt=fatt*b

ho fatto prima un programma per calcolare il fattoriale di un numero!
il programma è questo :
#include <iostream>

using namespace std;

int main()
{
int a, b;
float fatt;
cout<<"inserisci il numero di cui vuoi sapere il fattoriale"<<endl;
cin>>a;
fatt=1;
b=1;
while(b<=a){
fatt=fatt*b;
b=b+1;
}
cout<<"il fattoriale del numero "<<a<<" è : "<<fatt<<endl;

return 0;
}

sici_90
06-03-2015, 17:24
vorrei chiedervi una mano su un altro esercizio ancora:D
devo scrivere un programma che calcoli il valore di e elevato alla x.
immagino che sia piu o meno come il programma precedente, ma non capisco come modificarlo.
devo utilizzare la formula e^x=1+x/(1!)+x^2/(2!)...
come posso procedere?

sici_90
06-03-2015, 18:45
questo è quello che ho fatto ... in linea teorica mi sembra corretto;
ma non riesco a far venire il risultato corretto.
mi dareste una mano ?
#include <iostream>
#include<cmath>

using namespace std;

int main()
{
int a, b, n;
float fatt, ris;
cout<<"inserisci il numero a cui vuoi elevare e"<<endl;
cin>>a;
fatt=1;
b=1;
ris=1;
n=1;

while(b<=a){

fatt=fatt*b;
ris=ris+a/fatt;
b=b+1;

n=n+1;
a=pow(a,n);
cout<<"il valore è : "<<ris<<endl;

}



return 0;
}