Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Algoritmo de idade com problema no end;


Posts recomendados

Boa tarde pessoal.

Gostaria de pedir ajuda com um pequeno problema...

Estou começando agora a estudar programação e encontrei um pequeno problema que vem me atormentando...

Preciso pegar a idade de 3 pessoas e mostrar qual é a maior atribuindo o comando IF.

Montei o código desse jeito:

 

program idade;
var i1, i2, i3: integer;

begin
        writeln('digite a primeira idade: ');
         readln(i1);
          writeln('digite a segunda idade: ');
           readln(i2);
            writeln('digite a terceira idade: ');
             readln(i3);
             if (i1 > i2) and (i1 > i3) then
               begin
                 writeln('a maior idade ‚', i1);
              end;
                else if (i2 > i3) and (i2 > i1) then
                  begin
                    writeln('a maior idade ‚', i2);
                  end;
                    else
                      begin
                        writeln('a maior idade ‚', i3);
                          end;
                            readln;
                      end;
end.


 

 

Acontece que quando chega na segunda parte do programa, ele diz que esperava um . final mas encontrou um ;

 

else if (i2 > i3) and (i2 > i1) then
                  begin
                    writeln('a maior idade ‚', i2);
                  end;

 

E daí pra frente não consigo mais executar.

Gostaria de pedir a ajuda de vocês pra tentar resolver isso... Não consigo encontrar uma solução pra isso. Quando coloco o . no lugar do ; ele encerra o programa depois de pedir as idades, caso a i1 seja a maior, ele mostra na tela, mas caso a i2 e i3 sejam maiores o programa fecha porque dei um final ali com o "end.".

Agradeço desde já! :)

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

Só complementando:

 

1#
@Andrey Alexandre, sempre mantenha o código indentado. Ex.:

program idade;
var
  i1, i2, i3: integer;
begin
writeln('digite a primeira idade: ');
readln(i1);
writeln('digite a segunda idade: ');
readln(i2);
writeln('digite a terceira idade: ');
readln(i3);
if (i1 > i2) and (i1 > i3) then
  begin
  writeln('a maior idade ‚', i1);
  end;
else
  if (i2 > i3) and (i2 > i1) then
    begin
    writeln('a maior idade ‚', i2);
    end;
else
   begin
   writeln('a maior idade ‚', i3);
   end;
readln;
end;
end.

Perceba que já visualmente dá para verificar que tem um end a mais ali no final.

 

 

 

2#
Sobre:

3 horas atrás, Andrey Alexandre disse:

Poxa, muito obrigado cara! :D

Era isso mesmo o problema... Comecei recentemente, minha professora do curso disse que tinha que ter ; depois de tudo hahahahah

Isso é um modo de falar.. depois do then, por exemplo, não tem. Em fim...

 

Referente ao comentário:

3 horas atrás, devair1010 disse:

@Andrey Alexandre     você precisa remover o ponto e virgula depois dos end , e remover o penúltimo end também .

Só para ficar claro: como deve ter percebido, a orientação só é necessária para os end antes dos else. Por exemplo: ao compilar seu código original, dá o seguinte erro aqui (usando compilador Free Pascal Compiler):

_FCdH.PAS(15,17) Fatal: Syntax error, ";" expected but "ELSE" found

Ou seja, após o end o compilador esperava encontrar um else, mas em vez disso encontrou um ";". Então, basta apagar o respectivo ";".

 

Essa não necessidade de ";" depois do end só foi necessário devido ao else... mas os end em si precisam de ";", ou seja, o penúltimo end lá no final precisa!

RESUMINDO:

Seu código poderia ficar assim:

program idade;
var
  i1, i2, i3: integer;
begin
writeln('digite a primeira idade: ');
readln(i1);
writeln('digite a segunda idade: ');
readln(i2);
writeln('digite a terceira idade: ');
readln(i3);
if (i1 > i2) and (i1 > i3) then
  begin
  writeln('a maior idade ‚', i1);
  end
else
  if (i2 > i3) and (i2 > i1) then
    begin
    writeln('a maior idade ‚', i2);
    end
  else
    begin
    writeln('a maior idade ‚', i3);
    end;
  readln;
end.

 

 

 

3#

Uma questão interessante no Pascal, é que quando a estrutura só tem uma linha, o begin/end não se faz necessário. Ex.:

program idade;
var
  i1, i2, i3: integer;
begin
writeln('digite a primeira idade: ');
readln(i1);
writeln('digite a segunda idade: ');
readln(i2);
writeln('digite a terceira idade: ');
readln(i3);
if (i1 > i2) and (i1 > i3) then
  writeln('a maior idade ‚', i1)
else
  if (i2 > i3) and (i2 > i1) then
    writeln('a maior idade ‚', i2)
  else
    writeln('a maior idade ‚', i3);
  readln;
end.

Observe que da mesma forma, o comando antes do else não tem ";".

 

Perceba que a não necessidade do ";" é porque o "if/else" é como se fosse uma estrutura só... observe como nesse código acima que depois do if só tem um ";', lá após o comando do último "else".

 

Tente entender também que um begin/end nada mais é que um "bloco", ou seja, em vez de ter UM comando após o if, é possível ter apenas UM bloco (begin/end). Dessa forma, podendo colocar mais instruções dentro. Entende?

 

O if, else, for, while etc, só se relacionam com uma estrutura, ou seja, OU um comando, OU um bloco... por isso que pode ter vários comandos dentro do begin/end...

 

 

 

4#

Em relação a eficácia do algoritmo, tem um probleminha.

Por exemplo, inserir 5, 5 e 2. O resultado deu 2. :(

 

Precisaria ver isso.

 

 

***

 

Att

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!