PDA

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.