Calcolo del fattoriale con iterazione

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Calcolo del fattoriale con iterazione

    @nippolo: implementare le operazioni per i bigint, non e' “”banale"".

    La somma tra numeri POSITIVI, ancora ancora. Se si deve considerare il segno, le cose si complicano.

    La moltiplicazione darebbe diversi grattacapi.

    La divisione e' tutt'altro che facile. Richiede un bel po' di esperienza.

    Inoltre, lavorare con le strighe, magari come "123" + “45678”, richiede tutta la trafila della conversione dei caratteri ASCII nei corrispondenti decimali e viceversa. Di nuovo: per NULLA banale.

    Per l'autrice del post, che e' alle prime armi, l'idea e' al di la delle sue “gracili” forze ;-)
    Almeno per il momento.

    Magari in futuro ;-)

    Nota: il copia/incolla di codice gia' scritto NON E' implementare l'algoritmo descritto in un libro. 
    Nel primo caso NON IMPARI NULLA, nel secondo invece si ;-)

    Per ora e' meglio che si accontenti di interi a 32/64 bit.

    Invece, 

    PERCHE" per fattoriali  MAGGIORI di 66 !  il risultato sara' SEMPRE ZERO?

    ;-)

  • Re: Calcolo del fattoriale con iterazione

    @nippolo, ATTENTO a non confondere le stringhe con i vettori di “char”, 

    DOVE un "char" e' usato come un INTERO SENZA SEGNO A 8 BIT.

    Tutti e due sono rappresentati da “char*”, MA NON SONO la stessa cosa!

  • Re: Calcolo del fattoriale con iterazione

    @migliorabile, mi sono limitato a proporre delle alternative, sarà poi l'OP a scegliere quella che fa maggiormente al caso suo! =)

    Relativamente al “contenitore” del big-int, non penso abbia molto senso a questo punto distinguere tra c-string, std::string, array di char, array di int, etc… sono questioni implementative da valutare all'atto pratico.

  • Re: Calcolo del fattoriale con iterazione

    @nippolo, nel momento in cui dai dei consigli ad un membro “giovane/alle prime esperienze” del forum in ambito programmazione, ti stai mettendo nei panni dell'INSEGNANTE.

    Come tale, e' tua responsabilita' NON DARE indicazioni FUORVIANTI, che possano confondere.

    IO so distinguere perfettamente tra i vari contenitori e quali siano i pro ed i contro per ogn'uno di loro, MA questo non e' vero per l'autrice del post.

    In questo caso, le indicazioni che DEVI dare DEVONO far riferimento all'IMPLEMENTAZIONE CANONICA, quella che troveresti in OGNI libro di testo sull'argomento.

    In questo modo, leggendo le tue osservazioni E leggendo la documentazione su un libro, TROVEREBBE PERFETTA CORRISPONDENZA.

    Dare delle alternative a “”casaccio"" (c-string: NO, std::string: NO, array di char: OK, array di int: OK, etc…:DIPENDE) e' SOLO FONTE di confusione.

    Lo so, che ‘e DIFFICILE da capire, ma E’ QUESTO che fa la differenza tra il programmatore junior e quello senior ;-) 
    Uno fa, l'altra fa E insegna ;-)

    -------------------------

    PS: perche' non provi a rispondere al quesito ;-)
    E' semplice, ma NON banale :-)

  • Re: Calcolo del fattoriale con iterazione

    Non c'è nessuna interpretazione canonica del Big Integer da trovare su un libro, questo è C++ non è Java.

    Il professore, probabilmente, vuole vedere se si accorgono del problema dell'overflow e se sanno pensare a una soluzione, quindi i consigli che hanno dato vanno bene

  • Re: Calcolo del fattoriale con iterazione

    @Weierstrass: se ti limiti a Internet e Java, probabilmente hai ragione.

    MA se ti guardi un po' attorno, scoprirai the i BigInteger non li ha inventati la Sun, ma esistono almeno dal 1960 (direi anche il 1950)

    https://it.frwiki.wiki/wiki/Algorithme_de_Karatsuba

    Basta leggere i libri giusti ;-)

  • Re: Calcolo del fattoriale con iterazione

    Comunque qui più di uint64_t (o uint128_t se sei fortunato)  non c'è  e devi passare dalle strighe, prima di implementare qualsivoglia algoritmo, o no? E allora perché non iniziare direttamente dalle buone vecchie moltiplicazioni in colonna e far provare  a ragionarci lo studente come vuole lui? 

    Quanta confusione pur di far polemica con chi ha dato consigli corretti…

  • Re: Calcolo del fattoriale con iterazione

    31/01/2023 - migliorabile ha scritto:


    @nippolo, nel momento in cui dai dei consigli ad un membro “giovane/alle prime esperienze” del forum in ambito programmazione, ti stai mettendo nei panni dell'INSEGNANTE.

    Come tale, e' tua responsabilita' NON DARE indicazioni FUORVIANTI, che possano confondere.

    […]

    Dare delle alternative a “”casaccio"" (c-string: NO, std::string: NO, array di char: OK, array di int: OK, etc…:DIPENDE) e' SOLO FONTE di confusione.

    Lo so, che ‘e DIFFICILE da capire, ma E’ QUESTO che fa la differenza tra il programmatore junior e quello senior ;-) 
    Uno fa, l'altra fa E insegna ;-)

    Capisco il ruolo da "provocatore" che ti sei autoimposto, ma secondo me in questo caso stai montando una polemica davvero sul nulla…

    30/01/2023 - migliorabile ha scritto:


    PERCHE" per fattoriali  MAGGIORI di 66 !  il risultato sara' SEMPRE ZERO?

    Gli interi senza segno si basano su un'aritmetica modulare, quindi volendo calcolare il fattoriale di n (ipotizziamo di utilizzare il tipo uint64_t) il programma restituirà il valore:

    n! mod 2^64

    A questo punto per rispondere alla tua domanda basta notare che il primo fattoriale ad essere divisibile per 2^64 è 66!
    Poi ovviamente per definizione di fattoriale se 66! è divisibile per 2^64 lo saranno anche tutti i fattoriali per n>66.

Devi accedere o registrarti per scrivere nel forum
22 risposte