Ajuda no erro de sintaxe ¬¬

Iniciado por mazoni, 23 de Janeiro de 2008, 12:05

tópico anterior - próximo tópico

mazoni

Olá pessoal to começando a ter aula de pascal e to tentando fazer esse script, só que ta dando um erro de sintaxe que eu não estou conseguindo axar, podem me ajudar a encontrá-lo?
program peso;

var

        N1,N2,N3: string[50];
        P1,P2,P3: real;

begin
        write('Digite o nome da 1º pessoa');
        readln(N1);
        write('Digite o peso da pessoa acima');
        readln(P1);
        write('Digite o nome da 2º pessoa');
        readln(N2);
        write('Digite o peso da pessoa acima');
        readln(P2);
        write('Digite o nome da 3º pessoa');
        readln(N3);
        write('Digite o peso da pessoa acima');
        readln(P3);

        begin

        if (P1 > P2) and (P1 > P3) then
                write(N1 + 'pesa' + P1);
                if(P2 > P3) then
                      write(N2 + 'pesa' + P2);
                      write(N3 + 'pesa' + P3);
                   
                else
                      write(N3 + 'pesa' + P3);
                      write(N2 + 'pesa' + P2);
               
                end;

        else

        if (P2 > P1) and (P2 > P3) then
                write(N2 + 'pesa' + P2);
                if(P1 > P3) then
                      write(N1 + 'pesa' + P1);
                      write(N3 + 'pesa' + P3);
                else
                      write(N3 + 'pesa' + P3);
                      write(N1 + 'pesa' + P1);
                end;
       
        else

        if (P3 > P1) and (P3 > P2) then
                write(N3 + 'pesa' P3);
                if(P1 > P2) then
                       write(N1 + 'pesa' + P1);
                       write(N2 + 'pesa' + P2);
                else
                       write(N2 + 'pesa' P2);
                       write(N1 + 'pesa' P1);
                end;
        end;

end.


eu estou com dúvida se estou usando o tipo certo de variáveis, pra variável literal estou usando "string[50]" e para numérico to usando "real".Está correto?Ou posso colocar outros tipos que cairiam melhor para esse exercício?

O programa é simples, ele armazena o nome e peso de 3 pessoas que mostra o resultado de forma decrescente.
O erro que aparece no meu terminal é esse:
Free Pascal Compiler version 2.0.4 [2007/02/02] for i386
Copyright (c) 1993-2006 by Florian Klaempfl
Target OS: Linux for i386
Compiling peso.pas
[b]peso.pas(30,17) Fatal: Syntax error, ";" expected but "ELSE" found
peso.pas(30,17) Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)[/b]


Agradeço desde já  ;)

brunei

#1
Olá mazoni,

Em pascal, quando você tem um IF com mais de uma linha de comandos, usa-se begin e end. Por exemplo, no teu programa, onde aparece:

if(P2 > P3) then
    write(N2 + 'pesa' + P2);
    write(N3 + 'pesa' + P3);
else
    write(N3 + 'pesa' + P3);
    write(N2 + 'pesa' + P2);
end;


ficaria:

if(P2 > P3) then
    begin
    write(N2 + 'pesa' + P2);
    write(N3 + 'pesa' + P3);
    end
else
    begin
    write(N3 + 'pesa' + P3);
    write(N2 + 'pesa' + P2);
    end;


Lembrando que o último end usa ponto-e-vírgula. Corrija isso em todos os seus IF's onde existam mais de um comando sendo executado para a mesma condição.

E mais, tem um begin em excesso, pelo que vejo:

readln(P3);

begin

if (P1 > P2) and (P1 > P3) then


Para ter certeza, verifique se todo end tem seu begin e que não sobram nem begin's e nem end's.
Bruno Ribeiro

mazoni

vlw!!esse era o erro, muito obrigado!!

brunei

Olá mazzoni,

Só estou lembrando você de alterar o assunto do seu post para incluir a palavra "[resolvido]" para que os demais membros saibam que o problema foi resolvido.

Até mais! :)
Bruno Ribeiro