Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Andrey Alexandre

Pascal Algoritmo de idade com problema no end;

Recommended Posts

Postado (editado)

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á! :)

 

Editado por Andrey Alexandre
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×