Jump to content

Recommended Posts

Posted (edited)

Estava lendo sobre o comando while, fui testar esse codigo qe dizia ser sobre calcular e mostrar o quadrado de numeros inteiros de 1 ate 100, mas ao compilar mostra o quadrado de 59 em diante, ate 101.

Nao teria q comecar pelo 1? aonde ta o erro nesse codigo??

Alguem pode me ajudar? rs

program quadrados;
var
n,q:integer;

begin
       n:=0;
       while (n<=100) do
             begin
                       n:=n+1;
                       q:=n*n;
                       writeln(' O quadrado de ', n, ' e ',q);
                       end;
end.
Edited by thoga31
Tags code + GeSHi
Posted

Para ir até 100 e não 101, tens de mudar a condição de <= para <. Quando a condição é analisada, n é 100, mas a primeira instrução do ciclo é incrementar em 1 unidade, daí teres até 101.

Não precisas da variável q para nada, podes fazer o cálculo directamente do write.

O programa está a correr como era esperado. Em vez de escrever um número por linha, escreve-os a todos na mesma linha: substitui writeln(' O quadrado de ', n, ' e ',q) por apenas write(q, ','). A linha de comandos tem um limite de linhas, e assim que atinge esse limite, vai eliminar as mais velhas. Talvez seja por isso que aparente começar no 59: do 1 ao 58 foi eliminado da janela por falta de espaço.

O teu programa com as alterações que eu sugeri produzem o seguinte output:

1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,
1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116,2209,2304,2401,2500,2601,2704,2809,2916,3025,
3136,3249,3364,3481,3600,3721,3844,3969,4096,4225,4356,4489,4624,4761,4900,5041,5184,5329,5476,5625,5776,5929,6084,
6241,6400,6561,6724,6889,7056,7225,7396,7569,7744,7921,8100,8281,8464,8649,8836,9025,9216,9409,9604,9801,10000,

Último conselho: indenta bem o código e sem tantos espaços. Repara (este é o teu código sem as alterações que propus):

program quadrados;
var n, q : integer;

begin
   n:=0;
   while (n <= 100) do
   begin
       n := n+1;
       q := n*n;
       writeln(' O quadrado de ', n, ' e ',q);
   end;
end.
  • Vote 1

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.