Corso IN110 Algoritmi e Strutture Dati

Gli esercizi

Testi e soluzioni di alcuni esercizi

Funzioni per il calcolo delle potenze

Letto in input un numero floating point x e un numero intero n, calcola la potenza xn utilizzando tre algoritmi differenti: iterativa, ricorsiva e facendo uso delle funzioni esponenziale e logaritmo naturale (per questo include la libreria math.h).

Per compilare il programma potenze.c con il compilatore GCC si deve utilizzare il seguente comando: gcc potenze.c -o potenze -Wall -lm.

/*
**  potenze.c
**
**  Legge in input un numero floating point (x) ed un numero
**  intero (n); quindi calcola la potenza x^n con tre funzioni
**  differenti: iterativa, ricorsiva e facendo uso delle funzioni
**  esponenziale e logaritmo naturale (per questo include la
**  libreria math.h).
**
**  Marco Liverani (liverani@mat.uniroma3.it) - Marzo 2001
*/

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

/*
 *  potenza con algoritmo iterativo
 */

float potenza1(float x, int n) {
  int i;
  float p = 1.0;

  for (i=1; i<=n; i++) {
    p = p*x;
  }
  return(p);
}

/*
 *  potenza con algoritmo ricorsivo
 */

float potenza2(float x, int n) {
  if (n == 0) {
    return(1);
  } else {
    return(x * potenza2(x, n-1));
  }
}

/*
 *  potenza con exp e log (solo per x>0)
 */

float potenza3(float x, int n) {
  float p;

  p = exp(n * log(x));
  return(p);
}

/*
 *  funzione principale (main)
 */

int main(void) {
  int n;
  float x, p;

  printf("Inserisci la base: ");
  scanf("%d", &x);
  printf("Inserisci l'esponente: ");
  scanf("%d", &n);
  p = potenza1(x, n);
  printf("Primo algoritmo:   %f^%d = %f\n", x, n, p);
  p = potenza2(x, n);
  printf("Secondo algoritmo: %f^%d = %f\n", x, n, p);
  p = potenza3(x, n);
  printf("Terzo algoritmo:   %f^%d = %f\n", x, n, p);
  return(0);
}

Università degli Studi Roma Tre - Dipartimento di Matematica e Fisica - Corso di laurea in Matematica - Corso di Informatica 1 (IN110)

Author: Marco Liverani - Last modified: Saturday July 13, 2019 - URI: http://www.mat.uniroma3.it/users/liverani/IN110/potenze.shtml