Ir ao conteúdo

Posts recomendados

Postado

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
  • Membro VIP
Postado

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

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...