Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Algoritmo de pirâmide em Pascal/Delphi


Posts recomendados

Bom dia,  estou com uma dúvida, pois a função de multiplicar o numero pela posição dele não está funcionando.
Posição 2 é o resultado 2x2 = 4, 3 3x3=9  até o 10. A mensagem de erro já está correta
Devo escrever uma função que receba um valor inteiro como parâmetro de entrada e imprima na tela n linhas conforme estrutura apresentada abaixo. Por exemplo, as seguintes linhas devem ser apresentadas ser o parâmetro de entrada for 10.
 

image.png.86c75033cd6f6a7b35973750e112cdb0.png

 

NOTA: Caso seja inserido um valor menor ou igual a zero, uma crítica deverá ser exibida e o processo deverá ser abortado.
Obs.: Sou novato em delphi

Até o momento estou utilizando 2 for, da seguinte maneira:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

 var
    i,n,j:integer;


 begin

write(output,'Entre com um número inteiro maior que 0: ');
  readln(input, n);
if ( n<=0 ) then
  writeln('Erro:O número digitado não pode ser menor ou igual a 0...')
else

 begin

     repeat
    for i:=1 to n do
       write(sqr(n),' ');
       writeln;
       n:=n-1;
    until(n=0);
    end;

    begin
    for i:=1  to n do
    write (sqr(n*j), '  ');
        writeln;
        n:=n;
        j:=j*j;

  end;
readln(n);
readln(n);

end.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Um grande segredo é sempre deixar o código indentado... segue um exemplo (com "meu" padrão"):

Obs.: deixei o código mais enxuto para funcionar no Pascal (já que está analisando apenas lógica... e não as questões dos "componentes" do Delphi. Em Pascal fica mais acessível, rs).

program Project1;
var
  i, n, j:integer;
begin
write  (output, 'Entre com um número inteiro maior que 0: ');
readln(input, n);
if (n <= 0) then
  writeln('Erro: O número digitado não pode ser menor ou igual a 0...')
else
  repeat
    for i:=1 to n do
       write(sqr(i), ' ');
    writeln();
    n := n-1;
  until (n = 0);
for i:=1 to n do
  write  (sqr(n*j), '  ');
writeln;
n := n;
j := j*j;
readln();
readln();
end.


Visualmente já vemos que tem alguns possíveis problemas. Segue abaixo o mesmo código simplificado em relação a sintaxe (exatamente a mesma lógica):

program Project1;
var
  i, n, j:integer;
begin
write  (output, 'Entre com um número inteiro maior que 0: ');
readln(input, n);
if (n <= 0) then
  writeln('Erro: O número digitado não pode ser menor ou igual a 0...')
else
  repeat
    for i:=1 to n do
       write(sqr(n), ' ');
    writeln;
    n := n-1;
  until(n = 0);
for i:=1 to n do
  write  (sqr(n*j), '  ');
writeln;
n := n;
j := j*j;
readln();
readln();
end.

 

Agora simplificando:

program Project1;
var
  i, n, j:integer;
begin
write  (output, 'Entre com um número inteiro maior que 0: ');
readln(input, n);
if (n <= 0) then
  writeln('Erro: O número digitado não pode ser menor ou igual a 0...')
else
  repeat
    for i:=1 to n do
       write(sqr(n), ' ');
    writeln();
    n := n-1;
  until (n = 0);
readln();
end.

Compare esse código acima com o teu. Tudo que foi removido foi que não tinha função (não fazia algo).

 

Pronto: essa código é "o mesmo" que o teu, apenas simplificado. Pegue ele e tente entender o que cada linha está fazendo, e veja o que está errado.

 

Qualquer dúvida é só perguntar.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Para facilitar os testes, foque no cerne do algoritmo... que é a parte do repeat.

 

Uma maneira prática para exemplificar, seria fazer algo como:

program Project1;
var
  i, n, j:integer;
begin
n := 10;
repeat
  for i:=1 to n do
     write(sqr(n), ' ');
  writeln;
  n := n-1;
until(n = 0);
readln();
end.

 

Tente imaginar você executando linha a linha... e colocar no bloco de notas o que está sendo impresso... tente vê o que deveria está saindo e o que precisaria fazer para corrigir (passar a sair o que você quer).
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...