|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 112
|
[C] Aiutino, sul double
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!
Chi mi da una mano please? #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; } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
la media non dovrebbe essere un float?
comunque ti dispiacerebbe usare i tag code? sarebbe molto più chiaro grazie
__________________
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Codice:
if (num<0)
{
somma=somma-num;
i=i-1;
}
somma=somma+num;
media=somma/i;
e comunque se sono negativi primi li sottrai e poi li torni sommare !!
__________________
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 112
|
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!
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
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.
Quote:
Comunque controlla bene come hai scritto gli if() {} e quello che succede alle variabili... mi pare ci sia un errore di logica. Ciao |
|
|
|
|
|
|
#6 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Se num è un double, scanf deve avere lo specificatore %lf, e non %d.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Se dovessi presentare una versione didattica scriverei:
Codice:
#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;
}
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2006
Città: Padova
Messaggi: 5658
|
Quote:
__________________
DESKTOP: Corsair Obsidian 550D || Corsair HX520W || Intel i5 3570k || Noctua NH-U9B SE2 || Gigabyte Z77-D3H || 2x4GB DDR3 Corsair 1600MHz || Sapphire R9 270X Dual-X || Crucial M4 128GB, WD Blue 1TB || Liteon 16x || LG IPS236V FullHD || Logitech X540 NAS: QNap TS219P || APC BE550G-IT DIABLO 3: Zhoth#2214 |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Perché usare un break o una variabile booleana quando la condizione di uscita è sul valore "num" inserito dall'utente:
Codice PHP:
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Aug 2006
Città: Padova
Messaggi: 5658
|
Quote:
...io parlavo in generale....in questo caso non serve!!
__________________
DESKTOP: Corsair Obsidian 550D || Corsair HX520W || Intel i5 3570k || Noctua NH-U9B SE2 || Gigabyte Z77-D3H || 2x4GB DDR3 Corsair 1600MHz || Sapphire R9 270X Dual-X || Crucial M4 128GB, WD Blue 1TB || Liteon 16x || LG IPS236V FullHD || Logitech X540 NAS: QNap TS219P || APC BE550G-IT DIABLO 3: Zhoth#2214 |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 112
|
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!
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! Grazie a tutti! |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
@variabilepippo: Hai ragione, il tuo codice con il do-while è più "pulito".
Meglio testare la condizione nel while, ed evitare il break. |
|
|
|
|
|
#14 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
%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.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:58.




















