Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10

    2x1 non fa 2!

    Sono alle prese con le mie prime funzioni in Javascript e mi trovo già arenato in questo codice...

    function potenza(a, p) {
    var r = 1;
    for ( var i=0; i<p; i++) {
    r *=a;
    }
    return r;
    }

    document.write(potenza(2,0));
    document.write(potenza(2,1));
    document.write(potenza(2,2));
    document.write(potenza(2,3));
    document.write(potenza(2,4));

    Il risultato della prima chiamata della funzione...è 1!!!! Perchè?

    Tralasciando il ciclo "for" e il parametro "p" che servono solo a far ripetere il ciclo stesso, ritengo di dovermi concentrare su "r" e "a".
    Da quel che ho capito "r" viene moltiplicato per "a" e "r" ne prende il risultato (che poi viene stampato).
    Ora la variabile "r" è stata dichiarata con valore "1"; "a" prende valore "2" come da parametro; quindi la moltiplicazione è 2*1... ma non fa 2!

    Perchèèèèèèèèèèèèèèèèèèèè??????????????????

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    forse perchè non entra nel ciclo. Prova così:

    for ( var i=0; i<= p; i++)
    Pietro

  3. #3
    Mum&egrave;nt!

    Matematica elementare:

    Qualsiasi numero intero positivo elevato alla zero fa uno!

    Quindi la funzione 'funziona' perfettamente!


    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10
    Grazie a chi mi ha risposto!

    Ho chiesto ad un programmatore e avete ragione tutti e due.
    Non entra mai nel ciclo e "r" elevato a 0 rimane zero.

    La prima chiamata della funzione ritorna un valore "true" quindi il codice seguente non viene utilizzato riportando solo il valore di "return r" dichiarato come "1".

    Le successive chiamate della funzione entrano nel ciclo riportando il valore "r" *2 tante volte quanti sono i cicli utili per far diventare l'espressione di controllo "i" uguale a "true".

    Quindi la prima funzione stamperà 1, le seguenti stamperanno 2, 4, 8, 16.

    Grazie a tutti.

  5. #5
    vero che chiunque alla zero è uno, quindi non capisco la prima domanda, ma che ci sono le funzioni dell'oggetto Math lo sapevi?

    document.write(Math.pow(2,0));
    document.write(Math.pow(2,1));
    document.write(Math.pow(2,2));
    document.write(Math.pow(2,3));
    document.write(Math.pow(2,4));

    ... no perchè questo è un reinventare la ruota ad hoc ... ma se proprio devi farlo, evita inutili variabili e aumenta le performances
    codice:
    function potenza(a,p){
        var r = 1;
        while(p--)
            r *= a;
        return r;
    };
    o stupisciti così ...
    codice:
    var potenza = Math.pow;
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.