Problema con funzione per elevamento a potenza (int eleva)

di il
16 risposte

Problema con funzione per elevamento a potenza (int eleva)

Ciao a tutti, sto avendo difficoltà a capire come funziona l'elevamento a potenza tramite l'utilizzo di una funzione. Il professore l'ha spiegato utilizzando questo esempio
int eleva (int base, int esp) {
int i=0;
int r=1;
while ( i <= esp ) {
r = r * base;
i = i + 1;
}
return r;
}
Non capisco perché ha usato la variabile r e perché ha scritto r = r * base. Ha spiegato che sta utilizzando alla lettera la definizione di elevamento a potenza, moltiplicando ripetutamente la base per se stessa e accumulando i prodotti parziali nella variabile r, ma non mi è chiaro in che modo si può fare scrivendo r = r * base.

16 Risposte

  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Affronta il problema al contrario:

    1) NON GUARDARE il codice del professore
    2) IMPLEMENTA PER CONTO TUO l'operazione: come faresti?

    OVVIAMENTE bisogna sapere CHE COSA VUOL DIRE elevare un numbero 'base' alla potenza 'esp'!

    Per esempio, se 'base' e' 2, e 'esp' e' 4, COSA VUOL DIRE elevare 2 alla potenza 4?

    E questo per PRIMA COSA BISOGNA SAPERLO FARE letteralmente CON CARTA E MATITA!

    Ciliegina sulla torta: CHE COSA VUOL DIRE elevare 2 alla ptenza ZERO?

    Nota: sono concetti di ARTIMENTICA studiati alle scuole superiori, NON matematica avanzata!!!
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    La condizione del while è errata, manco sanno fare più le potenze i professori? Andiamo bene...

    Motivo in più per provare a fare da soli in base alle definizioni
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Giusto

    Considerando poi che la variabile i è inutile e la condizione può essere resa ancora più semplice

    Comunque dalla definizione della potenza sembrerebbe più intuitivo un ciclo for
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Non complichiamogli la vita!
    Un passo alla volta:

    1) il while va bene tanto quanto il for e comunque e' anche piu' ""ESPLICITO""
    2) la condizione e' sbagliata per UN CARATTERE

    Da nessuna parte c'e' scritto che l'errore non sia stato introdotto VOLUTAMENTE per controllare se gli studenti RAGIONANO o FANNO FINTA.

    Se il nostro autore non comprende un'espressione del tipo:
    
    r = r*base;
    
    vuol dire che non ha compreso concetti FONDAMENTALI quali:
    - variabile,
    - assegnamento,
    - ordine di esecuzione,
    - esecuzione sequenziale
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Innanzitutto, grazie a tutti per l'aiuto e la disponibilità.

    migliorabile ha scritto:


    Affronta il problema al contrario:

    1) NON GUARDARE il codice del professore
    2) IMPLEMENTA PER CONTO TUO l'operazione: come faresti?

    OVVIAMENTE bisogna sapere CHE COSA VUOL DIRE elevare un numbero 'base' alla potenza 'esp'!

    Per esempio, se 'base' e' 2, e 'esp' e' 4, COSA VUOL DIRE elevare 2 alla potenza 4?

    E questo per PRIMA COSA BISOGNA SAPERLO FARE letteralmente CON CARTA E MATITA!

    Ciliegina sulla torta: CHE COSA VUOL DIRE elevare 2 alla ptenza ZERO?

    Nota: sono concetti di ARTIMENTICA studiati alle scuole superiori, NON matematica avanzata!!!
    Sìsì, certo, so cosa significa elevare un numero base alla potenza esponente. Nell'esempio che ha fatto, elevare 2 alla potenza 4, significa moltiplicare il 2 per se stesso quattro volte (2x2x2x2=2^4) mentre 2^0, come qualsiasi numero elevato alla zero tranne zero, fa uno.

    migliorabile ha scritto:


    Non complichiamogli la vita!
    Un passo alla volta:

    1) il while va bene tanto quanto il for e comunque e' anche piu' ""ESPLICITO""
    2) la condizione e' sbagliata per UN CARATTERE

    Da nessuna parte c'e' scritto che l'errore non sia stato introdotto VOLUTAMENTE per controllare se gli studenti RAGIONANO o FANNO FINTA.

    Se il nostro autore non comprende un'espressione del tipo:
    
    r = r*base;
    
    vuol dire che non ha compreso concetti FONDAMENTALI quali:
    - variabile,
    - assegnamento,
    - ordine di esecuzione,
    - esecuzione sequenziale
    L'esempio fa parte di una dispensa, quindi non credo che l'errore (e immagino vi stiate riferendo all'uguale nella condizione) sia voluto. In ogni caso, quei concetti penso di averli capiti. So che le variabili sono dati su cui opera un programma e che ogni variabile ha un tipo ed un identificatore, che l'assegnamento non è una relazione di uguaglianza ma in quel modo stiamo assegnando un valore (che può anche essere un'espressione, come in questo caso) ad una determinata variabile e che l'ordine con cui scrivo le operazioni nel codice sorgente è fondamentale per la corretta esecuzione del programma. Tutto questo non l'ho scritto per tediarla, ma per dimostrare che ho compreso questi concetti, o almeno credo di averli compresi, poi mi dirà lei se magari ho scritto qualcosa di sbagliato. Tuttavia, continuo a non capire quel passaggio.
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    V4le ha scritto:



    Sìsì, certo, so cosa significa elevare un numero base alla potenza esponente. Nell'esempio che ha fatto, elevare 2 alla potenza 4, significa moltiplicare il 2 per se stesso quattro volte (2x2x2x2=2^4) mentre 2^0, come qualsiasi numero elevato alla zero tranne zero, fa uno.
    0^0 = 1 algebricamente, è analiticamente che è indefinito
    L'esempio fa parte di una dispensa, quindi non credo che l'errore (e immagino vi stiate riferendo all'uguale nella condizione) sia voluto.
    Che sciatteria...
    Tuttavia, continuo a non capire quel passaggio.
    In che senso non è chiaro? r è la variabile dove accumuli i risultati parziali di una produttoria, così come sicuramente avrai usato una variabile per accumulare le somme parziali di una sommatoria...
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Se non riesci a spiegare cosa non capisci, non si va molto avanti
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Weierstrass ha scritto:


    In che senso non è chiaro? r è la variabile dove accumuli i risultati parziali di una produttoria, così come sicuramente avrai usato una variabile per accumulare le somme parziali di una sommatoria...
    Non avevo realizzato che effettivamente sono la stessa cosa. Ho riguardato degli esempi in cui avevo usato la somma e adesso ho capito. Il problema forse era anche il fatto che non avevo compreso bene l'utilizzo delle funzioni all'interno di un codice. Ho provato a scriverne uno super semplice per vedere se fosse tutto chiaro e funziona. È questo qui
    #include <stdio.h>
    #include <stdlib.h>
    
    int eleva (int, int); 
    int main () {
    	int base=2; 
    	int esp=4;
    	
    	eleva (base, esp);
    	return 0;
    }
    
    int eleva (int base, int esp) { 
    	int i=0; 
    	int r=1;
    	while ( i < esp ) {
    	     r = r * base;
    	     i = i + 1;
    	     printf ("Il risultato è: %d\n", r);
    }
    return r;
    }
    Quindi nulla, grazie mille ancora a tutti. So che era un problema veramente banale, ma mi siete stati di grande aiuto.
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    @Weierstrass ricorda che COMUNQUE il tizio a cui ti stai rivolendo e' uno che ha un dottorato di ricerca e scrive articoli/libri.
    Quindi, almeno sulla carta, non e' proprio uno stupido/analfabeta.

    Come qualunque essere umano, puo' sbagliare e si sbaglia nelle cose meno importanti.

    Quindi, come si dice in questi casi, prima di scrivere/dire qualcosa, accendi il cervello e fai anche tu un bel esame di coscienza.
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    @V4le alla fine non ho capito se hai capito!
    Magari le tue perplessità non riguardano tanto l'elevamento a potenza ma l'uso particolare della variabile r. Mi spiego:

    Tu hai
    r = r * base;
    forse ti confonde il fatto che una variabile possa essere icrementata assegnandole la variabile stessa più qualcos'altro; qui infatti l'asseganzione non è solo del tipo r= 34 o r = t+1 ma appunto r = r * base;

    Mi viene in mente questo anche perché nell'esempio il concetto è ribadito con
    i = i + 1;
    prefetito al più comodo i++;

    Magari anche il prof voleva spiegarti questo.
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    migliorabile ha scritto:


    @Weierstrass ricorda che COMUNQUE il tizio a cui ti stai rivolendo e' uno che ha un dottorato di ricerca e scrive articoli/libri.
    Quindi, almeno sulla carta, non e' proprio uno stupido/analfabeta.

    Come qualunque essere umano, puo' sbagliare e si sbaglia nelle cose meno importanti.

    Quindi, come si dice in questi casi, prima di scrivere/dire qualcosa, accendi il cervello e fai anche tu un bel esame di coscienza.
    Diamogli il beneficio del dubbio, certo che tutti sbagliano anche se l'errore in questione si vede ad occhio nudo ed è dentro una funzione super semplice.

    Il tizio in questione è dipendente degli studenti che gli pagano lo stipendio tramite le rette, quindi deve provare il codice delle dispense - per quanto banale - prima di dargliele, così come sicuramente controllerà il codice delle sue pubblicazioni prima di darle in pasto alla peer review. Se non lo fa è sciatteria e mancanza di rispetto verso i suoi studenti. Spero per loro che sia un caso isolato.

    E poi... pure io ho i titoli, ma chi se ne importa dei titoli, non è una facoltà STEM? Non insegnano che contano i fatti e non l'autorità?
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Diffidate sempre da chi si nasconde dietro i titoli e difende la propria categoria!
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    Infatti, bisogna credere SOLO a quelli che i titoli NON li hanno
    D'altra parte, uno studia/sacrifica una vita per diventare esperto in una materia per cosa?
    SOLO per poter appartenere ad una categoria/casta!
    Brutta gente!
  • Re: Problema con funzione per elevamento a potenza (int eleva)

    migliorabile ha scritto:


    Se bisogna fidarsi solo in base al numero, allora, visto che la maggioranza e' mediocre, va da se che bisognerebbe fidarsi solo dei mediocri

    migliorabile ha scritto:


    Infatti, bisogna credere SOLO a quelli che i titoli NON li hanno
    D'altra parte, uno studia/sacrifica una vita per diventare esperto in una materia per cosa?
    SOLO per poter appartenere ad una categoria/casta!
    Brutta gente!
    Qui nessuno sta mettendo in dubbio l'importanza delle competenze (quelle vere, non quelle soltanto "certificate") e nessuno sta dicendo che uno vale uno sempre e comunque, quindi, se non si tratta di un maldestro tentativo di buttarla in caciara, ti sarei grato se spiegassi come questo tuo intervento si ricollega a quanto detto in precedenza.
Devi accedere o registrarti per scrivere nel forum
16 risposte