Oppure

Loading
29/10/15 15:27
Trusted
Ciao a tutti Boys! :k:

Sto studiando il C e sono arrivato alla parte delle funzioni.
Sto svolgendo un esercizio che richiede di calcolare la potenza di un numero senza usare librerie matematiche.
Ecco il codice:
#include <stdio.h>

long integerPower( long base, long exponent); /*PROTOTIPO FUNZIONE*/

int main (void)
{
	long base;  /*Base*/
	long exponent; /*Esponente*/
	long result; /*Risultato della potenza*/

	printf("Enter the base and exponent: \n");
	scanf("%ld%ld", &base, &exponent);

	result = integerPower(base, exponent);

	printf("The power of %ld ^ %ld is %ld\n",base, exponent, result );

	return 0;

}

long integerPower( long base, long exponent)
{
	long value; /*Risultato della potenza*/
	while ( exponent != 0 ){
		value *= base;
		--exponent;
	}
	return value;
}



L'unico problema è che immessi come valori 2 e 3 invece di restituire 8, ritorna

Enter the base and the exponent:
2 3
The power of 2 ^ 3 is 21494048

Possibile che il "^" possa causare problemi? :-|

Come al solito critiche, consigli, miglioramenti son ben accetti!

Hola :rofl:
aaa
29/10/15 15:43
nessuno
value non è inizializzato
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
29/10/15 16:15
Ultimo
long integerPower( long base, long exponent)
{
        long value=base; /*Risultato della potenza*/
        while ( exponent != 0 ){
                value *= base;
                --exponent;
        }
        return value;
}
If ok Then GOTO Avanza else GOTO Inizia

29/10/15 16:20
nessuno
Postato originariamente da Ultimo:

        long value=base; 


No ... semmai

        long value=1;

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
29/10/15 16:22
Ultimo
Postato originariamente da nessuno:

Postato originariamente da Ultimo:

        long value=base; 


No ... semmai

        long value=1;



si si giusto, :k:
If ok Then GOTO Avanza else GOTO Inizia

29/10/15 19:22
AldoBaldo
Se uno passasse un valore negativo in exponent si finirebbe in un ciclo non infinito ma quasi, con valori in uscita fuori controllo, o no? Non sarebbe meglio così?

long integerPower( long base, unsigned long exponent ) {
    long value = 1; // Risultato della potenza
    while( exponent-- ) value *= base;
    return value;
}
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
29/10/15 20:09
nessuno
No, così non risolvi, anzi ...

Devi fare semplici considerazioni matematiche ... ovviamente avrai un risultato double ...

double Power( long base, long exponent ) 
{
	int sign=(exponent<0);
	double value = 1.0; // Risultato della potenza
	exponent=sign?-exponent:exponent;
	while( exponent-- ) value *= base;
	if(sign) value=1.0/value;
    return value;
}
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
30/10/15 12:07
AldoBaldo
Be', sì, così "tratti" anche gli esponenti negativi. Nel post propostoci, dal procedimento impiegato, sembrava che l'interesse fosse solo verso gli esponenti positivi.

Edit: allora potrebbe anche essere...

double Power( long base, long exponent ) {
    double value = 1.0; // Risultato della potenza
    int inc = exponent > 0 ? -1 : 1;
    for( ; exponent; exponent+=inc ) value *= base;
    return inc<0 ? value : 1.0/value;
}


Non so se cambi qualcosa in termini di efficienza (non credo proprio), però siccome il mio PC ha uno schermo 1024x600 quelle due righe di codice in meno sono molto comode. :asd:
Ultima modifica effettuata da AldoBaldo 30/10/15 12:46
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.