PDA

View Full Version : [C]Dubbi su uso di una funzione


Composition86
23-08-2008, 17:48
Sto facendo un esercizio per il calcolo dei costi di un parcheggio.
La richesta è calcolare i costi di un parcheggio sapendo che:
-fino a 3 ore il costo è fisso a 3.00 $;
-dopo le 3 ore costa in aggiunta 0.50 $ per ogni ora in più.

Al momento ho tirato fuori questo programma (ancora da raffinare per quanto riguarda il secondo punto):
/*Programma sull'uso della funzione calcolaAddebito*/
#include <stdio.h>
#include <stdlib.h>

float calcolaAddebito(float); /*Prototipo della funzione*/

main()
{
float tempo; /*Definisco le variabili del main*/

printf ("Inserire le ore di parcheggio della vettura (es. 4.5, max 24.0)\n");
scanf ("%.1f", &tempo);
printf ("L'addebito e': %.2f$\n", calcolaAddebito(tempo));
/*calcolaAddebito(tempo) è la funzione chiamante*/
system("pause");
return 0;
}
/*Definizione della funzione calcolaAddebito*/
float calcolaAddebito(float ore)
{
float s = 0.50, max = 10.00, addebitomin = 3.00, addebito; /*Variabili della funzione*/

if (ore > 3.0) {
addebito = addebitomin + s * ore;
}
else
addebito = addebitomin;

return addebito;
}

Il problema è che, senza valutare il numero di ore, il programma mi da' in output sempre un costo fisso di 3.00 $.
Errori di sintassi non ce ne sono, in qualche modo non viene valutato il fattore "+ s * ore". Mi sapete aiutare?

Mandelbrot
23-08-2008, 19:59
Ciao,
provo a risponderti io, pur non essendo espertissimo di C.
Ho provato il codice, l'errore é sull'istruzione scanf, che non sono sicuro supporti i comandi per la formattazione dei dati: così come l'hai scritta tu, nella variabile "tempo" viene memorizzato sempre 0.
Basta tu la sostituisca con una semplice scanf("%f",&tempo); , e riservi poi la formattazione solo ai dati di output.
Il resto del codice é OK.

Composition86
23-08-2008, 22:41
Ecco. :p
Ti ringrazio, adesso funziona perfettamente.

DanieleC88
24-08-2008, 19:57
Ti ringrazio, adesso funziona perfettamente.
Non dovrebbe invece, perché stai moltiplicando per 0.5 € tutte le ore trascorse se il parcheggio è durato più di 3 ore:
float calcolaAddebito(float ore)
{
float s = 0.50, max = 10.00, addebitomin = 3.00, addebito; /*Variabili della funzione*/

if (ore > 3.0) {
addebito = addebitomin + s * ore;
}
else
addebito = addebitomin;

return addebito;
}
Io farei così:
float calcolaAddebito(float ore)
{
float result = 3.0f;

if (ore > 3.0f)
{
result += ((ore - 3.0f) * 0.5f);
}
return result;
}