Ir ao conteúdo

Posts recomendados

Postado

Olá, preciso de ajuda com um exercício em pascal! 

Ex:Faça um programa em Pascal que gere um vetor com os três primeiros números
perfeitos. Sabe-se que um número é perfeito quando é igual à soma de seus
divisores (exceto ele mesmo).

 

Program num_perfeitos;
var v:array[1..3] of integer;
        i,j,num,soma:integer;
Begin
soma:=0;
    for j:=1 to 3 do 
    begin
            for num:=1 to 500 do
            begin
                for i:=1 to num-1 do
                begin
                    if (num mod i =0) then
                    soma:=soma+i;
                end;
            end;
                if (soma=num) then
                v[j]:=num;
    end;
            for j:=1 to 3 do
            write(v[j],' ');
            readln;
  End.

 

Desenvolvi esse porém não da certo, o cálculo dá zero. Alguém pode me ajudar?

EDIT!!!

Consegui resolver!!! 

 

 

  • Membro VIP
Postado

Olá @gcbL,

 

Por favor, poste o seu código para podermos, caso necessário, dá uma revisada e também poder servi de base para futuros visitantes.

 

 

 

PS: à título de curiosidade/informação, as estruturas if e for só precisam de begin/end quando possuem mais de umas instrução vinculada a eles. Como demonstrado abaixo, apenas o primeiro for precisaria do begin/end.

PS2: de certo modo não tem problema deixar os begin/end, apenas estou tentando demonstrar que são facultativos

Program num_perfeitos;
var v:array[1..3] of integer;
        i,j,num,soma:integer;
Begin
soma:=0;
for j:=1 to 3 do //esse for precisa de begin/end, pois tem um for e um if dentro (duas estruturas)
  begin 
  for num:=1 to 500 do //esse for não precisa, pois só tem um comanando (o for) dentro dele
    for i:=1 to num-1 do //esse for não precisa, pois só tem um comando (o if) dentro dele
      if (num mod i =0) then //esse if não precisa, pois só tem um comanado (a soma/atribuição) dentro dele
        soma:=soma+i;
  if (soma=num) then //esse if não precisa, pois só tem um comanado (a atribuição) dentro dele
    v[j]:=num;
  end;
for j:=1 to 3 do
  write(v[j],' ');
readln;
End.

 

No aguardo.
 

Visitante
Este tópico está impedido de receber novas respostas.

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...