Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 03-04-2004, 23.57.34   #1
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Fattoriale

Per scuola devo scrivere un programmino che mi calcola in fattoriale di 10 numeri, apparte un pezzo di codice che riguarda il controllo di 2 numeri mancante il programma mi sembra scritto correttamente, ma tira fuori dei numeri strampalati.

Quota:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

void main()
{
int a[10];
int tot=1,i,n=10;

for (i=0;i<n;i++)
{
cout<<"Inserisci un valore: ";
cin>>a[i];

do {
tot=tot*n;
n--;
} while (n>0);
a[i]=tot;
cout<<"Il risultato è: "<<a[i]<<endl;
}


getch();
}
Tnx!

Ultima modifica di Downloader : 04-04-2004 alle ore 00.20.32
Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 00.09.56   #2
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Guarda cosa fai alla povera variabile n nel bel mezzo del ciclo for...


p.s: indenta il codice, è tutta un'altra vita
Dav82 non è collegato   Rispondi citando
Vecchio 04-04-2004, 00.13.19   #3
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Azz non mi sono accorto che tutta l'indentatura fatta con l'editor è andata a farsi benedire qua.
Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 00.14.54   #4
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene


che gle faccio di male?
Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 00.21.59   #5
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Entri nel ciclo for con:
i=0
n=10

ed entra poichè i<n.
Poi, nel do-while della prima iterazione del for, porti n fino a 1 (while n>0). Adesso non esegue più un'altra iterazione del for poichè i=1, n=1 e !(i<n).

Quindi ti dà risultati ovviamente sbagliati...
Il metodo per calcolare il fattoriale è corretto, solo che è mancante di qualche piccolo accorgimento (a parte la storia dello 0 e dell'1, ma su quello siamo d'accordo )

Ciao
Dav82 non è collegato   Rispondi citando
Vecchio 04-04-2004, 00.46.18   #6
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Ho provato a fare in sto modo ma nn funziona uguale.

Quota:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

void main()
{
int a[10];
int tot=1,i,n=10,m;
m=n;
for (i=0;i<m;i++)
{n=10;
cout<<"Inserisci un valore: ";
cin>>a[i];

do {
tot=tot*n;
n--;
} while (n>1);
a[i]=tot;
cout<<"Il risultato è: "<<a[i]<<endl;

}


getch();
}


Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 01.00.00   #7
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Certo che non funziona
Prova a guardare bene come calcoli il valore del fattoriale nel ciclo do-while... controlla bene i valori che hanno TUTTE le variabili ad ogni iterazione e scoprirari l'errore

hint: guarda i valori assunti da tot
Dav82 non è collegato   Rispondi citando
Vecchio 04-04-2004, 01.09.24   #8
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Azz, si vede che ho sonno, alla prima occhiata ho gia trovato un errore del cacchio.

meglio che lo faccio domani a mente fresca.

Grazie per l'aiuto prezioso poi ti faro sapere come va.
Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 01.16.02   #9
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Originariamente inviato da Downloader
Azz, si vede che ho sonno, alla prima occhiata ho gia trovato un errore del cacchio.

meglio che lo faccio domani a mente fresca.

Grazie per l'aiuto prezioso poi ti faro sapere come va.
Figurati
Sono bastardo che non ti dico l'errore, ma se te lo svelo poi magari ti capita di farlo un'altra volta
Dav82 non è collegato   Rispondi citando
Vecchio 04-04-2004, 01.51.44   #10
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Mannaggia a me quanto so duro!

C'avevo il problema (stupidissimo) sotto il naso e non lo vedevo.

Ho risolto tutto, grazie mille Dav!! (Y)

Ora basta che metto un paio di condizioni e finisco tutto.
Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 02.13.58   #11
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
INCREDIBILE!!!

Se inserisco i numeri in ordine numerico, funziona tutto, se li metto a cavolo succede il finimondo.
E dall'inserimento del numero 8 non so perchè da un numero sballato.

Quota:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

void main()
{
int a[10];
int tot=1,i,n;

for (i=0;i<10;i++)
{
cout<<"Inserisci un valore: ";
cin>>a[i];
n=a[i];
do {
tot=tot*n;
n--;
} while (n==1);
a[i]=tot;
cout<<"Il risultato è: "<<a[i]<<endl;

}


getch();
}
Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 02.31.12   #12
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Certo.
Dai va, questa te la spiego che in effetti è un po' più complicata!

Ogni ciclo for entri UNA sola volta nel do-while, poichè n non sarà mai uguale a 1 se il tuo input è una cosa tipo 6, 8, 9... (e se è uguale a 2 il do-while viene eseguito due volte ma tanto non cambia molto, visto che moltiplica tot per 1).
Ma allora perchè ti dà risultati corretti?
Semplice: tu non azzeri mai il valore di tot, che all'inizio del calcolo del nuovo fattoriale è pari al valore del fattoriale dell'input precedente, e visto che il do-while lo fai una sola volta, e proprio moltiplicando per il numero inserito, ottieni il risultato corretto.

Per il problema dell'8 prova a vedere se questo ti dice qualcosa:

8! = 40320 > 2^15 = 32768

Ciao
Dav82 non è collegato   Rispondi citando
Vecchio 04-04-2004, 14.24.37   #13
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Allora ho finito il programma (mamma mia ieri sera ero cotto) ma ancora non mi spiego l'8!
Downloader non è collegato   Rispondi citando
Vecchio 04-04-2004, 17.51.41   #14
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
In sostanza per gli "int" il compilatore riserva 2 byte, quindi 16 bit, e quindi gli int possono assumere i valori da -2^15 a 2^15-1. Fuori da questo intervallo sballano (il range è proprio 2* 2^15 = 2^16, 16 bit)
Dovresti usare un long, se non un double (boh, guarda nell'help del compilatore) per i numeri più grandi. Tieni presente che la funzione fattoriale aumenta più che esponenzialmente quindi...

Ciao

Ultima modifica di Dav82 : 04-04-2004 alle ore 18.09.55
Dav82 non è collegato   Rispondi citando
Vecchio 04-04-2004, 19.51.45   #15
Downloader
Gold Member
Top Poster
 
Registrato: 04-09-2002
Loc.: Roma
Messaggi: 4.022
Downloader promette bene
Non ricordavo il limite degli int, ora funziona tutto alla grande.

Mo sto 7 a scuola non me lo toglie nessuno!!!

Grazie 1000 per il preziosissimo aiuto. (Y)
Downloader non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Lo Spammangolo [Nait, ce pensi tu?] Sbavi Chiacchiere in libertà 2007 18-01-2008 16.55.09
[C] Ricorsività Downloader Programmazione 9 09-11-2007 17.17.46
Combinazioni di un array paoloGrezzo Programmazione 2 23-06-2007 14.08.20
Numeri cumulati Downloader Programmazione 16 19-05-2004 01.17.56
Funzioni ricorsive GiulioCesare Programmazione 2 08-09-2003 23.40.11

Orario GMT +2. Ora sono le: 14.37.23.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.