[c]programma $a^b$
Salve ragazzi, per esercizio, sto cercando di scrivere un programma in C che mi consente di calcolare , preso in input in intero $a$ , ed un $n>=0$ mi restituisca $a^n$.
ecco il codice
C'è un problema, al momento della compilazione se $a,n$ sono positivi, non ci sono problemi, ma se immetto ad esempio $a=2$ e $n=-3$ mi parte la prima istruzione dell'if seguita da una cosa del genere
$2^(-3)=4206635$. Dove è il problema? Non riesco a vederlo, grazie mille.
ecco il codice
/* Funzione potenza , definizione*/ long int potenza(int a, int i) { if (i<0) printf("Indice di potenza non accettata!\n"); else { int k=1 ; long int pot=1; while (k<=i) { pot=pot*a; ++k; } return pot ; }; } /* corpo del main() */ main() { long int a,n,po; do { printf("Enter a\n"); scanf ("%d",&a); printf("Enter n\n"); scanf("%d",&n); po=potenza(a,n); printf("%d^%d = %d" , a,n,po); } while (a!=-1); }
C'è un problema, al momento della compilazione se $a,n$ sono positivi, non ci sono problemi, ma se immetto ad esempio $a=2$ e $n=-3$ mi parte la prima istruzione dell'if seguita da una cosa del genere
$2^(-3)=4206635$. Dove è il problema? Non riesco a vederlo, grazie mille.
Risposte
"Kashaman":
$2^(-3)=4206635$. Dove è il problema?
Semplicemente la funzione ritorna un long che però nessuno ha inizializzato, e quindi il risultato è impredicibile.
Sposta la dichiarazione della variabile locale pot, dal secondo ramo dell'if all'inizio della funzione, ed aggiungile una assegnazione iniziale (pe. a zero).
Ciao Rggb , dici di modificare la funzione più o meno cosi?
Il problema sembra permanere.
/* Funzione potenza , definizione*/ long int potenza(int a, int i) { long int pot=1; if (i<0) printf("Indice di potenza non accettata!\n"); else { int k=1 ; while (k<=i) { pot=pot*a; ++k; } return pot ; }; }
Il problema sembra permanere.
Eh si, perché anche l'istruzione return è dentro il secondo ramo dell'if. Mettila alla fine della funzione.
No Rggb , mi dava errore sempre, anche seguendo i tuoi consigli.
ho risolto così
anche se non sono pienamente soddisfatto visto che ho agito sul programma e non sulla funzione
ho risolto così
/* Funzione potenza , definizione*/ long int potenza(int a, int i) { int k=1 ; long int pot=1; while (k<=i) { pot=pot*a; ++k; } return pot ; } /* corpo del main() */ main() { long int a,n,po; do { printf("Enter a\n"); scanf ("%d",&a); printf("Enter n\n"); scanf("%d",&n); if (n<0) printf("indice di potenza non accettata!\n") ;else { po=potenza(a,n); printf("%d^%d = %d\n" , a,n,po); } } while (a!=-1); }
anche se non sono pienamente soddisfatto visto che ho agito sul programma e non sulla funzione
Ti ricordo che se includi la libreria hai già pronta la funzione
pow(double base,double exp)
"lordb":
Ti ricordo che se includi la libreriahai già pronta la funzione pow(double base,double exp)
ti ringrazio lordb, lo sapevo. A me comunque interessava programmarlo da zero, graize mille lo stesso
