Syntax error: then but then

0

I do not know what's happening, each line has a different error.

Missing then or passing then , otherwise missing ;

  program Untitled;
    var
    peso:real;
    altura:real;
    idade:integer;
    begin
    writeln('digite seu peso');
      read(peso);
    writeln('digite sua altura');
       read(altura);
    writeln('digite sua idade');
        read(idade);
    if(peso / altura * altura <= 16)then

       writeln('voce esta com magreza extrema')
       else if(peso / altura * altura) >=16) and (peso / altura * altura) <=17)

        writeln('voce esta com magreza moderada')

        else if(peso / altura* altura) in (17..18.5)
             writeln('voce esta com magreza leve')
        else if(peso / altura * altura  >= 18,5) and (peso / altura * altura <= 25)
             writeln('voce esta saudavel')
        else if(peso / altura * altura >=25) and (peso / altura * altura <=30)
            writeln('voce esta com sobre peso')
        else if(peso / altura * altura >=30) and (peso / altura * altura <=35)
            writeln('voce esta com grau de obesidade I procure ajuda')
        else if(peso / altura * altura >=35) and ((peso / altura * altura <=40)
            writeln('voce esta com grau de obesidade II procure ajuda')
        else if(peso / altura * altura >=40) and (peso / altura * altura <=45)
            wirteln('voce esta com grau de obsidade III procure ajuda')


    end

Error log:

'THEN' expected but ')' found

')' expected but '..' found

';' expected but end of file found

How to fix these syntax errors?

    
asked by anonymous 11.03.2018 / 18:31

1 answer

1

Your whole problem starts in the indentation, IDE XE10.2.2 could not readjust your code. Then I did it in my hand. However, it should be remembered that tests in Delphi should be terminated with then , regardless of the number of tests.

There are still problems in the Codes in separating the tests that are in conjunction with and .

Mathematical calculations should be separated by () to avoid unexpected results.

Ex:

if a * b = c then

Is equal to:

if ((a * b) = c) then

They are the same for the same purpose, but the second example is more organized and ready for a unified second:

if ((a * b) = c) and
   ((a * b) > 0) then

Array in Delphi is treated with [ and not with ( :

Change in (17..18.5) by in [17..18.5] "Here there is still a problem, in the array you can not use Extended, just Integer, so we'll have to extend the test with and more"

In Delphi the "monetary" values are treated with . and not , :

Change% with% by% with%

Rearranging your code would look like this:

  Writeln('digite seu peso');
  Read(peso);
  writeln('digite sua altura');
  read(altura);
  Writeln('digite sua idade');
  Read(idade);
  if (((peso / altura) * altura) <= 16) then
    Writeln('voce esta com magreza extrema')
  else if (((peso / altura) * altura) >= 16) and
          (((peso / altura) * altura) <= 17) then
    Writeln('voce esta com magreza moderada')
  else if (((peso / altura) * altura) >= 17) or
          (((peso / altura) * altura) <= 18.4) then
       Writeln('voce esta com magreza leve')
  else if (((peso / altura) * altura) >= 18.5) and
          (((peso / altura) * altura) <= 25) then
    Writeln('voce esta saudavel')
  else if (((peso / altura) * altura) >= 25) and
          (((peso / altura) * altura) <=30) then
    Writeln('voce esta com sobre peso')
  else if (((peso / altura) * altura) >= 30) and
          (((peso / altura) * altura) <= 35) then
    Writeln('voce esta com grau de obesidade I procure ajuda')
  else if (((peso / altura) * altura) >= 35) and
          (((peso / altura) * altura) <= 40) then
    Writeln('voce esta com grau de obesidade II procure ajuda')
  else if (((peso / altura) * altura) >= 40) and
          (((peso / altura) * altura) <= 45) then
    Writeln('voce esta com grau de obesidade III procure ajuda');

Remember that a function that returns the result of 18,5 to a variable would be ideal!

    
12.03.2018 / 13:04