To quase terminandoo[RESOLVIDO]

7 respostas
D
program Project2;  
  
{$APPTYPE CONSOLE}  
  
  
  
  
uses  
  SysUtils;  
  
var  a,n ,result:integer;  
  
Function Calculapotencia: integer;  
  
var i, x: integer;  
  
begin  
    x:=a;  
      for i:=0 to n do  
     x:= x*a;  
      result:=x;  
end;  
  
begin  
writeln('escreva o numero');  
readln(a);  
writeln('escreva o expoente');  
readln(n);  
Calculapotencia;  
writeln('result',result);  
readln;  
end.

Elaborar a Função POT ? (potência de uma base à um expoente) em Delphi ? Utilizar um para-faça para multiplicar a ?base? por ela mesma ?expoente? vezes e retornar o valor.

nao erro ai
mas nao da certo a resposta

7 Respostas

E

Só de olhar seu programa, já vi que o seu resultado não é a elevado a n e sim a elevado a (n+2).
Isso não lhe dá nenhuma pista?

E

Além disso, não use o seguinte estilo:

x := 1;
for i := 1 to n do
    x := x * a;

Em vez disso, que já me deu muita dor de cabeça, use sempre begin / end, mesmo que seja para cercar um único comando:

x := 1;
for i := 1 to n do 
    begin
        x := x * a;
    end;

(Eu era a favor da economia de papel e usava o seguinte estilo, que muita gente acha horrível mas que economizava algumas linhas na listagem:

x := 1;
for i := 1 to n do begin
    x := x * a;
end;
TerraSkilll

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.

D

vlw eu vou tentar aqui parece que vai dar certo
c vcs tiver alguma duvida ai so me manda

E

TerraSkill, você se esqueceu do caso n = 0 - o seu código só funciona se n >= 1.

D

o entanglement falou certo
quando a gente digita um numero maior tipo um 40 por 12
ja da pau

TerraSkilll

entanglement:
TerraSkill, você se esqueceu do caso n = 0 - o seu código só funciona se n >= 1.

Verdade, falha minha, eu testei por cima :thumbup:

Deveria haver um retorno padrão (1) para o expoente 0;

davi13d:
o entanglement falou certo
quando a gente digita um numero maior tipo um 40 por 12
ja da pau

Imagino que você sabe por que, mas vou explicar: os números em pascal tem limite para serem representados. Depois de certos valores, as contas passam a dar problema por que os tipos usados não suportam números tão grandes. Outras linguagens (como o Java) tem limitações diferentes.

Abraço.

Criado 18 de setembro de 2012
Ultima resposta 19 de set. de 2012
Respostas 7
Participantes 3