|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
[C] Funzioni ricorsive
mi sto grattando la testa con queste funzioni ricorsive..
![]() ![]() Dato un reddito inziale ed un reddito finale devo calcolare in quanti anni riesco a raggiungere il reddito finale con l'interesse del 3.5% ed una tassazione del 12.5%. Iterativamente non ci sono problemi,ma chi sa aiutarmi con la ricorsiva?
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Ti va bene un link esplicativo oppure non è sufficiente?:
http://www.in-f-or.it/informatica/c/cap55.html E poi potresti dire con quale metodo?(ricerca,fibonacci,dicotomica..)
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
io a scuola ho fatto la ricorsiva solo con il fattoriale,la ricerca e fibonacci,ma x questa esercitazione nn sa da che parte cominciare..
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Dovresti spiegare quali sono le regole per l'applicazione dell'interesse e della tassazione.
E poi non penso sia il "reddito finale" quanto il "capitale finale", mi sbaglio? In tal caso potresti provare con: Codice:
int quantocimetto(int reddito,int parziale, int finale, int step) { parziale = parziale * 1.035 + reddito * 0.875; printf("\n%i",parziale); step++; if (parziale<finale) step = nuovoanno(reddito,parziale,finale,step); return step; } Codice:
anniperarrivarci = quantocimetto(mio_reddito,0,capitale_finale,0);
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo Ultima modifica di lombardp : 17-10-2003 alle 08:07. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
IMHO:
capitale_iniziale += capitale_iniziale * 0.035 * 0.875; Almeno di solito la tassa statale del 12,5% è sugli interessi maturati ![]() Codice:
int quantocimetto(int iniziale, int finale) { if (iniziale < finale) //solo per controllo di errori nei parametri return 0; iniziale += iniziale * 0.035 * 0.875; printf("\n%i", iniziale); if (iniziale > finale) return 1; return 1 + quantocimetto(iniziale, finale); } Ultima modifica di cionci : 17-10-2003 alle 08:25. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
vi scrivo tutto il testo dell'esercitazione ok?
Una banca offre ai propri clienti la seguente formula per la gestione del capitale: - l'interessa annuo è costante e corrisponde al 3.5% - ogni guadagno è sottoposto ad una tassazione del 12,5% Costruire 2 funzioni ricorsive in grado di rispondere alle seguenti domande del potenziale cliente : 1.investendo un determinato capitale inziale, quanti anni occorreranno affinchè il capitale risulti raddoppiato o comunque corrispondente ad una cifra finale diversamente specificata? 2. partendo da un capitale inziale specificato,quale sarà il valore disponibile dopo un certo numero di anni? Dopo aver implementato le suddette specifiche, realizzare un codice in grado di visualizzare graficamente l'andamento dell'investimento e predisporre il programma per la possibilità di ricevere i dai d'ingresso da un file di testo specificato dall'utente e ridirezionare il risultato dell'elaborazione su un ulteriore file specificato. Modellare la realtà proposta in modo accurato e fornire una dettagliata documentazione della soluzione proposta.
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
Quote:
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
ho provato entrambi i codici,il primo funziona il secondo mi da sempre risultato zero,x quella condizione posta subito all'inizio..
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...scusa... iniziale > finale
![]() Codice:
int quantocimetto(int iniziale, int finale) { if (iniziale >= finale) return 0; iniziale += iniziale * 0.035 * 0.875; printf("\n%i", iniziale); return 1 + quantocimetto(iniziale, finale); } Ultima modifica di cionci : 17-10-2003 alle 14:23. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
peggio ancora..così ho due condizioni uguali..
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
ho provato e sembra funzionare,così scritta xò mi da errore nel cacolo degli interessi,ma nn sarebbe opportuno usare un conto parziale come nella prima funzione?
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
Quote:
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perchè usare un conteggio parziale ? Probabilmente è un problema legato agli interi ed agli arrotondamenti...
Non vedo perchè si debbano usare due variabili quando il totale degli interessi... Fammi vedere come tu lo calcoli senza ricorsione... |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
in flash funziona così
Codice:
calcolaAnni = function (capitaleIniziale, capitaleParziale) { anni++; if (capitaleParziale<(capitaleIniziale*2)) { capitaleParziale = capitaleParziale*1.035; // -----------------------------------| occhio a questo numero calcolaAnni(capitaleIniziale, capitaleParziale); } else { _root.risultato = "con un capitale Iniziale di "+capitaleIniziale+" il capitale raddoppia in anni "+anni+" circa "+capitaleParziale; anni = 0; } };
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì ma i tuoi numeri cosa sono float...double...interi ?
E' un questione di arrotondamenti... Guarda questo... Ecco cosa succede usando i double: Codice:
int quantocimetto(double iniziale, double finale) { if (iniziale >= finale) return 0; iniziale += iniziale * 0.035 * 0.875; printf("\n%f", iniziale); return 1 + quantocimetto(iniziale, finale); } |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il fatto è che se fai un calcolo preciso sugli interi...devi fare diversi arrotondamenti...
Supponendo che negli interi ci stiano i centesimi di Euro credo che un conto molto vicino a quello che avviene realmente sia: Codice:
int round(double num) { if((num-(int)num) < 0.5) return (int)num; return (int)num + 1; } int quantocimetto(int iniziale, int finale) { if (iniziale >= finale) return 0; iniziale += round((double)round((double)iniziale * 0.035) * 0.875); printf("\n%f", iniziale); return 1 + quantocimetto(iniziale, finale); } |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
la seconda nn ho capito esattamente cosa esegue,cmq la prima che mi hai scritto ha funzionato finalmente,grazie x l'aiuto..che fatica che è stata!
ora ha da venire il peggio..
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
per la seconda opzione devo fare il verso contrario,dati gli anni sapere a quanto ammonta il reddito ocn gil interessi,devo fare la stessa funzione solo che la condizione x cui deve uscire dalla ricorsione è diversa vero?x capirci..
Codice:
int cap_finale(double iniziale,int anni) { if (iniziale = 6); return 0; iniziale = iniziale + iniziale * 0.035 * 0.875; printf("\n%f", iniziale); return 1 + cap_finale(iniziale,anni); }
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:59.