[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