Newsgroup: it.comp.lang.c
Titolo: Richiesta help da neofita

Ciao a tutti,
ho appena iniziato ad apprendere i rudimenti del C e mi sono subito
incagliato al primo esercizietto...spero che possiate darmi una mano.
Il listato del programmino e' il seguente:
#include <stdio.h>
main()
{
   float capitale, anni, interesse, t, anni_tot;
   printf("\n\n\nCapitale iniziale [Euro]: ");
   scanf("%f", &capitale);
   printf("\nDurate investimento [anni]: ");
   scanf("%f", &anni);
   printf("\nTasso di interesse annuo [punti percentuali]: ");
   scanf("%f", &interesse);
   anni_tot = anni;
   while (anni != 0)
   {
      capitale = capitale + capitale/100*interesse;
      anni = anni-1;
   }
   printf("\n\n---------------------------------------------------------------");
   printf("\nIl capitale finale dopo %f ", anni_tot);
   printf("anni sara' di Euro %f\n\n", capitale);
   printf("---------------------------------------------------------------");
   printf("\n\n\nPremere un tasto qualsiasi seguito da Enter per
concludere.\n\n");
   scanf("%f",t);
return 0;
}
IL problema e' il seguente:
Se inserisco come dati:
capitale = 1000, anni = 2 e interesse = 2 ottengo come risultato
capitale = 1020.00000
se pero' inserisco sempre capitale = 1000 ed interesse = 2 MA anni =
2, ottengo capitale = 1040.400024, quando il risultato dovrebbe essere
1040.400000...da dove "spunta" quello 0.000024 di troppo ?
Attendo vs. help (se possibile anche al mio indirizzo di e-mail
privato 
vi...@freemail.it
) Grazie !
Saluti,
Vixon

incagliato al primo esercizietto...spero che possiate darmi una mano.
Il tuo messaggio purtroppo contiene due errori:
1. hai fatto cross-post, attivita' bandita dalla netiquette;
2. sul gruppo di C++ cosa c'entra il C?
-- 
ciao, hal

>Se inserisco come dati:
capitale = 1000, anni = 2 e interesse = 2 ottengo
se pero' inserisco sempre
capitale = 1000 ed interesse = 2 MA anni = 2
Ma nn stai inserendo sempre gli stessi dati?

> ...da dove "spunta" quello 0.000024 di troppo ?
Probabilmente dalla rappresentazione macchina dei numeri con decimali.
Come ben saprai, nell'intervallo numerico tra 0 e 1 ci sono infiniti numeri
decimali.
Pensa te a quanti ce ne sono nell'intervallo di rappresentazione dei float o
dei double!!!
Si', sono sempre infiniti (ma molti di +) :-)
Non essendo quindi possibile rappresentarli tutti, i computer ne
rappresentano
un sottoinsieme.
Evidentemente il n. 1040.400000 non appartiene a quel sottoinsieme, mentre
1040.400024 si'.
E quest'ultimo e' il numero (rappresentabile dalla tua macchina) piu' vicino
al
risultato che avresti dovuto ottenere.
Ciao,
Ema

 wrote:
[cut]
Scusate, potreste evitare di fare cross-post quando rispondete?
Ci stiamo leggendo il thread sia qua che su iclc++, dove, comunque, e'
OT.
-- 
ciao, hal

...

Scusate...sono alle "prime esperienze" anche con i newsgroup e credevo
che visto che C e C++ sono "parenti" anche tra gli amici "C++isti"
qualcuno mi potesse aiutare...comunque, hai ragione, chiedo venia e
prometto che non lo faro' mai piu !
Ciao e grazie,
Vixon

...

Volevo scrivere:
Se inserisco come dati:
capitale = 1000, anni = 1 e interesse = 2 ottengo 1020.000000
se pero' inserisco capitale = 1000 ed interesse = 2 MA anni = 2
(invece di 1) ottengo erroneamente 1040.000024 invece di 1040.000000
Ciao e grazie,
Vixon
vi...@freemail.it

Si', sono sempre infiniti (ma molti di +) :-)
   Questo e` profondamente sbagliato, pero` anche la mia risposta e`
OT, non essendo un problema della programmazione, ma piu` che altro
matematico. :)
-- 
S.L.

 ha scritto nel messaggio
news:f20b8f5a.04010...@posting.google.com...

Concordo con Ema e azzardo un suggerimento: Quando fai i calcoli, se ti
serve (ad esempio) una precisione fino alla seconda cifra decimale,
moltiplica il risultato per cento, fai il floor (o flour, ora non ricordo,
comunque quella funzioncina che ti arrotonda all'intero immediatamente
precedente) e poi dividi per cento e vedrai che il tutto andrà bene!
Ciao
ZaZy