Pascal? :D :D :D :D :D
Para corrigir a função, mude seu for:
for i :=2 to n do // note o dois no lugar do zero
Você pode, opcionalmente, alterar o n:
for i :=1 to n-1 do // note o um no lugar do zero
Os códigos acima são equivalentes.
Seu código, porém, tem alguns problemas conceituais:
- o objetivo de uma função (function) é retornar um valor. O que você tentou fazer (calcular a potência e passar o resultado para uma variável global) caracteriza uma procedure, não uma função;
- em pascal, toda função tem uma variável implícita chamada Result. Quando você atribui a result o valor de x (result :=x), a variável que você alterou é a variável interna da função, não a variável global. Na prática, você nunca pode alterar uma variável global que tenha o nome de result dentro de uma função;
- se é pra usar uma função, retorne o valor que ela gera para uma variável, ao invés de tentar mudar uma variável global dentro da função.
Abaixo, mostro o código com estas alterações:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.SysUtils;
var a, n , resultado : integer; // note que mudei o nome da variável para resultado
function Calculapotencia: integer;
var i, x: integer;
begin
x := a;
for i := 2 to n do // note o dois no lugar do zero
x := x * a;
result := x; // essa variável result pertence implicitamente à função "Calculapotencia"
// note que ela não é declarada em momento algum, e o código
// compila normalmente
end;
begin
writeln('escreva o numero');
readln(a);
writeln('escreva o expoente');
readln(n);
resultado := Calculapotencia; // a variável global resultado recebe o resultado do calculo da função
writeln('result', resultado); // exibe-se o resultado
readln;
end.
Uma possível melhoria seria passar os valores como parâmetros para a função, ao invés de usar as variáveis globais a e n.
Abraço.