Algorithm execution error in pascal

Asked

Viewed 115 times

1

I’m studying the use of CASE in the Pascal language, but when I run it appears syntactic error ";" não esperado, in this algorithm:

Program Crianca_Esperanca ;
    var
    D: integer;
    valor: real;
Begin
    writeln('--------------------------------');
    writeln('        CRIANÇA ESPERANÇA       ');
    writeln('--------------------------------');
    writeln('    Muito obrigado por ajudar'  );
    writeln(' [1] para doar R$10 ');
    writeln(' [2] para doar R$25 ');
    writeln(' [3] para doar R$50 ');
  writeln(' [4] para doar outros valores ');
  writeln(' [5] para cancelar');
  read(D);
    case D of 
  1:valor:=10;
  2:valor:= 25;
  3:valor:=50;
  4: writeln('Qual valor da doação? R$');
  readln(valor);
  5:valor:=0;
  writeln('------------------------------');
  writeln('SUA DOAÇÃO FOI DE R$', valor);
  writeln('MUITO OBRIGADO!');
  writeln('------------------------------');
  end;
     readln;



and.

4 answers

2

Lacked a end at the end of the block case.

The correct code will look like this:

Program Crianca_Esperanca ;
    var
    D: integer;
    valor: real;
Begin
    writeln('--------------------------------');
    writeln('        CRIANÇA ESPERANÇA       ');
    writeln('--------------------------------');
    writeln('    Muito obrigado por ajudar'  );
    writeln(' [1] para doar R$10 ');
    writeln(' [2] para doar R$25 ');
    writeln(' [3] para doar R$50 ');
  writeln(' [4] para doar outros valores ');
  writeln(' [5] para cancelar');
  read(D);
    case D of 
  1:valor:=10;
  2:valor:= 25;
  3:valor:=50;
  4: writeln('Qual valor da doação? R$');
  5:valor:=0;
  end;
  readln(valor);
  writeln('------------------------------');
  writeln('SUA DOAÇÃO FOI DE R$', valor);
  writeln('MUITO OBRIGADO!');
  writeln('------------------------------');

     readln;

end.
  • It has actually compiled, but still does not perform the desired activity, it is as if it ignores the other values(1,2,3,5) and only works on option 4.

1

For didactic purposes I made some changes to the above code, which may be useful to those who are learning Pascal.

Program crianca_esperanca;
    var
    D: integer;
    valor: Double;
Begin
    writeln('--------------------------------');
    writeln('        CRIANÇA ESPERANÇA       ');
    writeln('--------------------------------');
    writeln('    Muito obrigado por ajudar'  );
    writeln(' [1] para doar R$10 ');
    writeln(' [2] para doar R$25 ');
    writeln(' [3] para doar R$50 ');
    writeln(' [4] para doar outros valores ');
    writeln(' [5] para cancelar');
    read(D);
    case D of 
        1:valor:=10;
        2:valor:=25;
        3:valor:=50;
        4:
        begin
           writeln('Qual valor da doação? R$');
           readln(valor);
        end;
        5:valor:=0;
    end;
    writeln('------------------------------');
    writeln('SUA DOAÇÃO FOI DE R$', valor:6:2 );
    writeln('MUITO OBRIGADO!');
    writeln('------------------------------');
    readln;
end.

To compile (e.g. Linux) Paste into a child file_esperanca.pas and then execute: fpc child_esperanca.pas

0

I think that’s what you need:

Program Crianca_Esperanca ;
var
    D: integer;
    valor: real;
begin
    writeln('--------------------------------');
    writeln('        CRIANÇA ESPERANÇA       ');
    writeln('--------------------------------');
    writeln('    Muito obrigado por ajudar'  );
    writeln(' [1] para doar R$10 ');
    writeln(' [2] para doar R$25 ');
    writeln(' [3] para doar R$50 ');
  writeln(' [4] para doar outros valores ');
  writeln(' [5] para cancelar');
  read(D);
    case D of 
  1:valor:=10;
  2:valor:= 25;
  3:valor:=50;
  4:begin
        writeln('Qual valor da doação? R$');
        readln(valor);
    end;
  else
    valor := 0;
  end;

  if (valor > 0) then
    begin
      writeln('------------------------------');
      writeln('SUA DOAÇÃO FOI DE R$', valor);
      writeln('MUITO OBRIGADO!');
      writeln('------------------------------');
    end
else
    writeln('DOAÇÃO CANCELADA!');

    readln;
end.

When you finish your case you were trying to read the donation amount always, when in fact it should only be read if you press option 4. Another good practice is to use the Else command for your case 5, because anything other than 1, 2, 3 and 4 will be ignored. if of greater than 0, serves for case the user entered some invalid value.

0

Replace the and. which appears at the end by end.:

Program Crianca_Esperanca ;
    var
    D: integer;
    valor: real;
Begin
    writeln('--------------------------------');
    writeln('        CRIANÇA ESPERANÇA       ');
    writeln('--------------------------------');
    writeln('    Muito obrigado por ajudar'  );
    writeln(' [1] para doar R$10 ');
    writeln(' [2] para doar R$25 ');
    writeln(' [3] para doar R$50 ');
  writeln(' [4] para doar outros valores ');
  writeln(' [5] para cancelar');
  read(D);
    case D of 
  1:valor:=10;
  2:valor:= 25;
  3:valor:=50;
  4: writeln('Qual valor da doação? R$');
  readln(valor);
  5:valor:=0;
  writeln('------------------------------');
  writeln('SUA DOAÇÃO FOI DE R$', valor);
  writeln('MUITO OBRIGADO!');
  writeln('------------------------------');
  end;
     readln;



end.

The blocks in Pascal, although they are more didactic than a pair of keys ({}), is still a textual command. That’s why the programmer is more subject to syntax errors, especially at the beginning.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.