Ir para o conteúdo
Hugo1337

Iniciante em Pascal

Mensagens Recomendadas

Hugo1337

Olá, estou iniciando em pascal e estou encontrando dificuldades, preciso de ajuda nesse exercício:

Receba três números onde o primeiro deve ser maior do que zero e menor que 20. O segundo deve ser negativo e o terceiro representa um número qualquer. Calcule a soma de cada número elevado ao quadrado. Se a soma resultar um valor inferior a 1000 solicite novos dados.

O que eu fiz:

Program EX2 ;
var A,B,C,D:real; 
Begin
Repeat
Writeln('Digite o 1º numero');
readln(A);
If A>0 then begin
end;
If a<20 then begin
end
else
repeat
Writeln('Digite o 2º numero');
readln(B);
If B<0 then begin
end
else
repeat
Writeln('Digite o 3º numero');
readln(C);
D:=A*A+B*B+C*C; 
If D<1000 then
repeat
Writeln('Digite os dados novamente');
End.

O programa não roda, e aparece um aviso de erro sintático "END não esperado" , não sei mais o que fazer.

Editado por thoga31
Tacs code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Algumas notas:

1) O teu código é bastante difícil de ler uma vez que não está indentado.

2) Nenhum dos blocos repeat foi fechado - o compilador está à espera que os feches, mas de repente encontra o fim do código com o último end, o que não é esperado.

3) Não entendi qual o propósito da existência destes dois blocos de código:

If A>0 then begin    // then... then what?
end;

If a<20 then begin   // idem
end

else // ...

Editado por thoga31

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hugo1337

Olá thoga31, primeiramente muito obrigado por me responder

1) Acho que está indentado não tenho certeza

Aqui tentei fazer ajustes:

Program EX2 ;
var A,B,C,D:real; 
Begin
Repeat
  Writeln('Digite o 1º numero');
   readln(A);
    If A<0 then
      repeat
until a>0; 
        If a>20 then
           repeat
           until A<20;
 Writeln('Digite o 2º numero');
    readln(B);
      If B>0 then 
         repeat;
         until B<0;
Writeln('Digite o 3º numero');
  readln(C);
    D:=A*A+B*B+C*C; 
      If D<1000 then
        repeat;
        until D>1000;
Writeln('Digite os dados novamente');
End.

2) O erro do End ainda está aqui, coloquei o until para fechar mas não deu certo, provavelmente deve se fazer algo que não sei

3) O bloco seria para autorizar o processamento se a condição de existência fosse respeitada, mas não deu certo

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Repara bem nisto:

repeat         // repeat what?
until a>0;

repeat         // repeat what?
until A<20;

repeat;        // repeat what?
until B<0;

repeat;        // repeat what?
until D>1000;

  • Alguns dos repeats são seguidos de ;
  • Nenhum destes blocos faz o que quer que seja se as condições forem verdadeiras, e todos eles são loops infinitos caso as condições sejam falsas.

Responde-me a isto: quais são as estruturas de repetição que conheces e como se utilizam?


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hugo1337

Eu conheço a estrutura de repetição:

If {Condição imposta} then
Writeln('frase ou condição declarativa');
else
Writeln('Outra frase ou condição declarativa');

E

repeat
readln(A);
until (A>0); {exemplo}

Eu utilizaria para fazer o programa respeitar a condições de existência proposta pelo exercício, mas sempre acontece um erro, como por exemplo o travamento do programa se eu digitar um numero não programado pela condição de existência, e tambem erros de end.

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

A estrutura if não é uma estrutura de repetição, mas sim uma estrutura de decisão. ;)

E se essa é a estrutura do repeat, por que motivo não a estás a usar convenientemente no teu código?


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hugo1337

Eu não estou compreendendo como se usa repeat convenientemente, pois a forma a qual usei foi semelhante a que observei em outros exercícios.

Fiz algumas alterações (readln embaixo do repeat) mas o erro de end continua

Program EX2 ;
var A,B,C,D:real;
Begin
Repeat
  Writeln('Digite o 1º numero');
   readln(A);
    If A<0 then
      repeat
      readln(A);
until a>0;
        If a>20 then
           repeat
           readln(A);
           until A<20;
 Writeln('Digite o 2º numero');
    readln(B);
      If B>0 then
         repeat;
         readln(B);
         until B<0;
Writeln('Digite o 3º numero');
  readln(C);
    D:=A*A+B*B+C*C;
      If D<1000 then
        repeat;
        readln(D);
        until D>1000;
Writeln('Digite os dados novamente');
End.
 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Fiz algumas alterações (readln embaixo do repeat) mas o erro de end continua

Alguns dos repeats são seguidos de ;


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hugo1337

Removi os ";" mas o erro end ainda continua

Program EX2 ;
var A,B,C,D:real;
Begin
Repeat
  Writeln('Digite o 1º numero');
   readln(A);
    If A<0 then
      repeat
      readln(A);
until a>0;
        If a>20 then
           repeat
           readln(A)
           until A<20;
 Writeln('Digite o 2º numero');
    readln(B);
      If B>0 then
         repeat
         readln(B);
         until B<0;
Writeln('Digite o 3º numero');
  readln(C);
    D:=A*A+B*B+C*C;
      If D<1000 then
        repeat
        readln(D);
        until D>1000;
Writeln('Digite os dados novamente');
End.
 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Duas notas adicionais ao que o @pedro.lopix disse, e muito bem:

1) Isto é o teu código devidamente indentado (e espaçado entre linhas para ainda melhor leitura):

Se tomares atenção, a indentação faz saltar de imediato à vista qual a origem do teu erro (que o @pedro.lopix já referiu).

Program EX2 ;
var A,B,C,D:real;

Begin
  Repeat
     Writeln('Digite o 1º numero');
     readln(A);

     If A<0 then
        repeat
           readln(A);
        until a>0;

     If a>20 then
        repeat
           readln(A)
        until A<20;

     Writeln('Digite o 2º numero');
     readln(B);

     If B>0 then
        repeat
           readln(B);
        until B<0;

     Writeln('Digite o 3º numero');
     readln(C);
     D:=A*A+B*B+C*C;

     If D<1000 then
        repeat
           readln(D);
        until D>1000;

     Writeln('Digite os dados novamente');
End.
2) Utiliza as tags CODE para colocar o código, indicando a linguagem para que seja colorido.

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.