Esercizio: elevamento a potenza

Si vuole scrivere un programma che accetti in input due numeri interi \(x\) e \(y\) e stampi il risultato dell’operazione \(x^y\).


Quando il programma viene eseguito deve chiedere all’utente di inserire due numeri interi \(x\) e \(y\) e stampare il risultato dell’operazione \(x^y\) in un loop infinito. L’esecuzione termina quando l’utente inserisce due zeri.

Ad esempio:

Inserisci due numeri interi: 2 3
2^3 = 8
Inserisci due numeri interi: 3 2
3^2 = 9
Inserisci due numeri interi: 4 5
4^5 = 1024
...
Inserisci due numeri interi: 0 0
Bye!

Per semplicità si può assumere che \(x, y \in \mathbb{N}\) (siano sempre maggiori o uguali a zero).

Opzionale:

In C non esiste un operatore per l’elevamento a potenza. Tuttavia, possiamo calcolare \(x^y\) come \(x \cdot x \cdot \ldots \cdot x\) (con \(y\) fattori) utilizzando un ciclo for.

se \(x, y \in \mathbb{N}\)

#include <stdio.h>

int main(void)
{
    int base, exp, result;

    do
    {
        // inizializza result a 1
        result = 1;

        // ricevi l'input dall'utente
        printf("Inserisci due numeri interi: ");
        scanf("%d %d", &base, &exp);

        // se l'input non è 0 0
        if (base != 0 || exp != 0)
        {
            // calcola base^exp = base * base * ...
            for (int i = 0; i < exp; i++)
            {
                result *= base;
            }
            printf("%d^%d = %d\n", base, exp, result);
        }
    } while (base != 0 || exp != 0);
}

se \(x, y \in \mathbb{Z}\)

#include <stdio.h>

int main(void)
{
    int base, exp;
    float result;

    do
    {
        result = 1.0;

        printf("Inserisci due numeri interi: ");
        scanf("%d %d", &base, &exp);

        if (base != 0 || exp != 0)
        {
            if (exp < 0)
            {
                for (int i = 0; i > exp; i--)
                {
                    result /= base;
                }
            }
            else
            {
                for (int i = 0; i < exp; i++)
                {
                    result *= base;
                }
            }
            printf("%d^%d = %.3f\n", base, exp, result);
        }
    } while (base != 0 || exp != 0);
}