3.3 - Como computar uma potência de inteiros usando laço de repetição

Problema 3:Dado X real e N natural, faça um programa que calcule XN
Novamente, se N fosse fixo, por exemplo n=3, bastaria fazer

C Python
  1  int x;
  2  scanf("%d", &x);
  3  printf("%d", x*x*x);
           
  1  x = input()
  2  print(x*x*x)
           

Código no iVProg
Portanto a dificuldade deste problema se encontra na repetição arbitrária: repetir a operação de multiplicação um número variável de vezes, dependente da vontade do usuário.
Novamente, vamos iniciar o processo de resolução examinando um exemplo, x=2 e n=7.
1. Multiplique X por X, guardando o resultado desta conta(4);
2. Multiplique por x o resultado guardado, guardando o novo resultado (8);
3. Repita o passo(2) outras 4 vezes (pois n=7 e x já entrou 3 vezes como fator de multiplicação) obtendo o resultado final, 128.

Quais são as variáveis necessárias?

Claramente precisamos de variáveis para armazenar X e N. Além destas, será necessária outra variável (result) para armazenar o resultado das operações de potenciação de X, sem a qual não será possível guardar o resultado das multiplicações executadas(reflita sobre isto!).
Neste problema, notamos uma novidade em relação ao anterior, precisamos contar quantas vezes já usamos o fator X (original). assim, vamos denotar esta variável pelo sugestivo nome de cont: a cada multiplicação somaremos 1 nessa variável. Assim, deveremos declarar as seguintes variáveis:
int x, n, result, cont;

Quais os comandos devem aparecer dentro do bloco de repetição?

Podemos observar no esquema inicial, elaborado acima, que o passo (2) é a parte repetitiva do processo: multiplicar o resultado atual de result por X, guardando este produto novamente em result. Feito isto, devemos então somar 1 ao contador cont, para indicar que mais uma multiplicação foi efetuada.
C Python
  while (condição){
    result = result*x;
    cont = cont+1;
  }
       
  while condição:
    result = result*x
    cont = cont+1
       

Qual a condição para que continue a repetição?

Já foi observado que a variável cont serve para contar quantas vezes o fator X já entrou no produto, assim devemos interromper o laço quando cont==n, ou de outro modo, devemos continuar enquanto cont< n.
C Python
  while (cont < n){
    result = result*x;
    cont = cont+1;
  }
       
  while cont < n:
    result = result*x
    cont = cont+1
       

O que deve vir antes da repetição?

Em primeiro lugar, devemos ler os valores x e n. Precisamos também atribuir valores iniciais adequados às variáveis cont e result. Como cont totaliza quantos fatores x já entraram no produto, o valor inicial de cont é zero. Assim, após a primeira execução do comando result = result*x, gostariamos de obter o valor de x em result e por isto devemos impor que result comece com o valor 1.
Interrompido o laço, a resposta estará armazenada em result:
C Python
  1  int x, n, result, cont;
  2  scanf("%d %d", &x, &n);
  3  cont = 0;
  4  result = 1;
  5  while (cont < n){
  6    result = result*x;
  7    cont = cont+1;
  8  }
  9  printf("%d", result);
       
  1  x = input()
  2  n = input()
  3  cont = 0
  4  result = 1
  5  while cont < n:
  6    result = result*x
  7    cont = cont+1
  8  print(result)
       

Código no iVProg
Exercício 4 Repare que o programa dá a resposta correta quando n==0, porém quando x==0 e n==0 teríamos um resultado, mesmo que na matemática 00 é indeterminado.
Exercício 5 Sugerimos como exercício a simulação deste programa, para alguns dados de entrada à escolha do leitor.
Exercício 6 O programa abaixo foi proposto para calcular xn. Analise o algoritmo, ele está correto? Se não estiver o que há de errado?
C Python
  1  int x, n, cont;
  2  scanf("%d %d", &x, &n);
  3  cont = 0;
  4  while (cont < n){
  5    x = x*x;
  6    cont = cont+1;
  7  }
  8  printf("%d", x);
       
  1  x = input()
  2  n = input()
  3  cont = 0
  4  while cont < n:
  5    x = x*x
  6    cont = cont+1
  7  print(x)
       

Código no iVProg
Exercício 7 É possível alterar o programa-solução do problema 3, dispensando a variável contadora cont? Isto é, tente deduzir uma outra versão para o referido problema, utilizando apenas três variáveis x, n e result.