View Full Version : [C] Aiutino, sul double
Markycap
11-12-2007, 22:06
Ciao ragazzi. Sto iniziando ora a programmare, sto impazzendo sul double in un piccolo programma, voglio stampare con le cifre decimali, mi dite cosa sbaglio? Perchè così com'è, quando stampo MEDIA mi esce = 0! :muro: :muro: :muro:
Chi mi da una mano please? :rolleyes: :rolleyes: :rolleyes:
#include <stdio.h>
#include <stdlib.h>
main ()
{
int i=0;
double num=0;
double somma=0;
double media;
while(num>=0)
{
i=i+1;
printf("Inserisci il numero %d\n", i);
scanf("%d",&num);
if (num<0)
{
somma=somma-num;
i=i-1;
}
somma=somma+num;
media=somma/i;
printf("La media fino a questo momento tra i numeri inseriti e' %f\n", media);
}
system ("PAUSE");
return 0;
}
marko.fatto
11-12-2007, 22:24
la media non dovrebbe essere un float? :confused:
comunque ti dispiacerebbe usare i tag code? sarebbe molto più chiaro grazie :D
marko.fatto
11-12-2007, 22:27
if (num<0)
{
somma=somma-num;
i=i-1;
}
somma=somma+num;
media=somma/i;
perchè se sono negativi li sottrai a somma e decrementi i?:mc:
e comunque se sono negativi primi li sottrai e poi li torni sommare !!
Markycap
11-12-2007, 23:03
Nella traccia dice di terminare il programma al primo numero negativo che si trova e di non considerarlo... Il dubbio è su come dichiarare le variabili... Tu dici float, ma come le richiamo dopo nel printf? Grazie! ;)
banryu79
12-12-2007, 09:02
Che usi un float o usi un double non mi pare c'entri nulla rispetto al codice che hai scritto. I tipi di dato (int e double) che hai usato nel codice mi sembra vadano bene.
Nella traccia dice di terminare il programma al primo numero negativo che si trova e di non considerarlo...
Visto che la tua logica gira dentro un ciclo while è sufficiente che al verificarsi della condizione num < 0 tu esci dal ciclo, potresti semplicemente usare una break.
Comunque controlla bene come hai scritto gli if() {} e quello che succede alle variabili... mi pare ci sia un errore di logica.
Ciao :)
Ziosilvio
12-12-2007, 10:35
double num=0;
double somma=0;
double media;
while(num>=0)
{
i=i+1;
printf("Inserisci il numero %d\n", i);
scanf("%d",&num);
Se num è un double, scanf deve avere lo specificatore %lf, e non %d.
variabilepippo
12-12-2007, 10:46
Se dovessi presentare una versione didattica scriverei:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
double num = 0;
double somma = 0;
do
{
printf("\nInserisci il numero %d: ", i+1);
scanf("%lf",&num);
somma += num;
if (num > 0){
i++;
printf("La media tra i %d numeri inseriti vale %f\n", i, somma / i);
}
} while (num > 0); // Il programma termina quando si inserisce un numero negativo
system ("PAUSE");
return 0;
}
!@ndre@!
12-12-2007, 10:51
Che usi un float o usi un double non mi pare c'entri nulla rispetto al codice che hai scritto. I tipi di dato (int e double) che hai usato nel codice mi sembra vadano bene.
Visto che la tua logica gira dentro un ciclo while è sufficiente che al verificarsi della condizione num < 0 tu esci dal ciclo, potresti semplicemente usare una break.
Comunque controlla bene come hai scritto gli if() {} e quello che succede alle variabili... mi pare ci sia un errore di logica.
Ciao :)
...invece di un break utilizza un booleano per uscire dal ciclo!!...è molto più pulito!!
variabilepippo
12-12-2007, 10:57
Perché usare un break o una variabile booleana quando la condizione di uscita è sul valore "num" inserito dall'utente:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 1;
double num = 0;
double somma = 0;
do
{
printf("\nInserisci il numero %d: ", i);
scanf("%lf",&num);
somma += num;
if (num > 0){
printf("La media tra i %d numeri inseriti vale %f\n", i, somma / i);
i++;
}
} while (num > 0); // Il programma termina quando si inserisce un numero negativo
system ("PAUSE");
return 0;
}
!@ndre@!
12-12-2007, 11:08
Perché usare un break o una variabile booleana quando la condizione di uscita è sul valore "num" inserito dall'utente:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 1;
double num = 0;
double somma = 0;
do
{
printf("\nInserisci il numero %d: ", i);
scanf("%lf",&num);
somma += num;
if (num > 0){
printf("La media tra i %d numeri inseriti vale %f\n", i, somma / i);
i++;
}
} while (num > 0); // Il programma termina quando si inserisce un numero negativo
system ("PAUSE");
return 0;
}
...io parlavo in generale....in questo caso non serve!!
variabilepippo
12-12-2007, 11:30
...io parlavo in generale..
Avresti potuto esplicitarlo in qualche modo, avendo quotato la risposta "Visto che la tua logica gira dentro un ciclo while è sufficiente che al verificarsi della condizione num < 0 tu esci dal ciclo, potresti semplicemente usare una break" era ovvio pensare che ti riferissi al caso specifico. ;)
Markycap
12-12-2007, 11:45
Ops! Ho visto che avete iniziato ad uscir fuori tanti "tecnicismi" che per me che sono al mio secondo giorno di programmazione sono un po' difficili! :D
Cmq mistero risolto, era la scanf, in cui chiedevo i decimali (%d) e non (%f)...
Lo so, magari per voi è un errore da newbbo, ma non è altro che quel che sono io ora in questo campo! :D
Grazie a tutti! ;)
banryu79
12-12-2007, 12:12
@variabilepippo: Hai ragione, il tuo codice con il do-while è più "pulito".
Meglio testare la condizione nel while, ed evitare il break. :)
Ziosilvio
12-12-2007, 12:50
era la scanf, in cui chiedevo i decimali (%d) e non (%f)
%lf.
%f è lo specificatore dei float; %lf quello dei double.
Puoi passare un double a printf quando si aspetta un float, perché nel passaggio di valori alle funzioni i float vengono convertiti in double; ma non puoi passare a scanf un puntatore a double quando si aspetta un puntatore a float, perché i puntatori a float non vengono convertiti in puntatori a double.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.