Algoritmo in C per calcolare la potenza
Salve a tutti, vorrei realizzare il seguente programma:
Si scriva un programma in C che legga da tastiera 2 numeri interi corrispondenti a base ed esponente, ed esegua il calcolo della potenza $text{base}^text{esponente}$. Il programma deve invocare una funzione chiamata power dal programma main, con il seguente prototipo:
int power(int base, int exponent);
Suggerimento: all'interno della funzione, calcolare la potenza moltiplicando iterativamente la base per se stessa un numero di volte pari all'esponente.
Questo è il programma che ho pensato di utilizzare
Vi sembra che vada bene?
Si scriva un programma in C che legga da tastiera 2 numeri interi corrispondenti a base ed esponente, ed esegua il calcolo della potenza $text{base}^text{esponente}$. Il programma deve invocare una funzione chiamata power dal programma main, con il seguente prototipo:
int power(int base, int exponent);
Suggerimento: all'interno della funzione, calcolare la potenza moltiplicando iterativamente la base per se stessa un numero di volte pari all'esponente.
Questo è il programma che ho pensato di utilizzare
#include <stdio.h> #include <stdlib.h> int N; int esponente; int power(int base, int exponent); /*"dichiararo la funzione" e scriverla in fondo al codice" per favorire la lettura */ int main() { printf("Inserisci la base e l'esponente\n"); scanf("%d",&N); scanf("%d",&esponente); if (esponente<0) printf("L'esponente deve essere un numero maggiore o uguale a 0\n"); else printf("Il risultato e': %d", power(N, esponente)); return EXIT_SUCCESS; } int power(int base, int exponent) { int i, s; for (i = 0, s = 1; i < exponent; ++i) s *= base; return s; }
Vi sembra che vada bene?

Risposte
A occhio mi sembra vada bene.
Ti metto sotto il tuo codice con alcuni piccoli miglioramenti:
P.S: La funzione power può essere calcolata in complessità logaritimica. Hai idea di come si potrebbe fare?
Ti metto sotto il tuo codice con alcuni piccoli miglioramenti:
#include <stdio.h> #include <stdlib.h> int power(int base, int exponent); /*"dichiararo la funzione" e scriverla in fondo al codice" per favorire la lettura */ int main() { int N; int esponente; printf("Inserisci la base e l'esponente\n"); scanf("%d",&N); scanf("%d",&esponente); if (esponente<0) printf("L'esponente deve essere un numero maggiore o uguale a 0\n"); else printf("Il risultato e': %d", power(N, esponente)); return EXIT_SUCCESS; } int power(int base, int exponent) { int i, s=1; for (i = 0; i < exponent; ++i) s *= base; return s; }
P.S: La funzione power può essere calcolata in complessità logaritimica. Hai idea di come si potrebbe fare?
Grazie Vict 
Dunque, non ho ben capito in che modo potrei calcolare la funzione power.. in che senso complessità logaritmica?

Dunque, non ho ben capito in che modo potrei calcolare la funzione power.. in che senso complessità logaritmica?
Nel senso che puoi calcolare \(\displaystyle m^n \) con circa \(\displaystyle \log_2n \) moltiplicazioni.
"vict85":
Nel senso che puoi calcolare \(\displaystyle m^n \) con circa \(\displaystyle \log_2n \) moltiplicazioni.
Non ho idea di come fare.. ma per il logaritmo devo includere math.h?
"Obidream":
[quote="vict85"]Nel senso che puoi calcolare \(\displaystyle m^n \) con circa \(\displaystyle \log_2n \) moltiplicazioni.
Non ho idea di come fare.. ma per il logaritmo devo includere math.h?[/quote]
Si per il log devi includere math.h e linkare la libreria passando al compilatore -lm
Comunque, non c'entra nulla il logaritmo nel senso di funzione con quello che ti ha detto vict85, ti dice solo che esiste un procedimento algoritmico che è ottimizzato nel calcolare la potenza. E anziché fare N moltiplicazioni, te ne fa fare \(\displaystyle \log_2n \)
Conoscevo il procedimento, ma l'ho dimenticato :<
"nessuno.nobody":
[quote="Obidream"][quote="vict85"]Nel senso che puoi calcolare \(\displaystyle m^n \) con circa \(\displaystyle \log_2n \) moltiplicazioni.
Non ho idea di come fare.. ma per il logaritmo devo includere math.h?[/quote]
Si per il log devi includere math.h e linkare la libreria passando al compilatore -lm
Comunque, non c'entra nulla il logaritmo nel senso di funzione con quello che ti ha detto vict85, ti dice solo che esiste un procedimento algoritmico che è ottimizzato nel calcolare la potenza. E anziché fare N moltiplicazioni, te ne fa fare \(\displaystyle \log_2n \)
Conoscevo il procedimento, ma l'ho dimenticato :<[/quote]
Forse ho capito, ma non so davvero come fare...
Un piccolo suggerimento: \( 2^n = 2^{2\,(n/2)} \)