Ir ao conteúdo
  • Cadastre-se

Estrutura de Repetição


Posts recomendados

Oi pessoal,

Estou fazendo alguns exercícios que meu professor me passou, utilizando a estrutura de repetição.

Um dos exercício diz: "Entrar via teclado com o sexo de determinado usuário, aceitar somente “F” ou “M” como respostas válidas."

To quebrando a cabeça, se não já quebrei, mas não consigo fazer o código utilizando "while...do".

Alguém pode me dar uma luz?

 

Obrigado!

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

Não sei como prosseguir, acho que meu primeiro erro foi já no começo, quando coloquei os 2 "Readln" para apenas 1 "Write", ou não tem problema?

Os dois últimos "Write" deixei em branco porque não sei como continuar.

Se eu digitar M ele fica em looping, se eu digitar F não acontece nada.

Teria que criar 1 "while...do" para M e outro para o F?

Eu até tentei mas diz que a expressão é inválida.

 

Program Exercicio_23 ;
 var
 F: String;
 M: String;
 
Begin
  Write (' Digite o sexo: ');
  Readln (F);
  Readln (M);
  
  While (F <> M ) do
  begin
    Write ('É do sexo, ');
    Writeln ('');
  end; 
  
End.

 

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

  • Membro VIP

Olá @danilo001.

 

1) INTERDEPENDÊNCIA DE COMANDOS

17 horas atrás, danilo001 disse:

Não sei como prosseguir, acho que meu primeiro erro foi já no começo, quando coloquei os 2 "Readln" para apenas 1 "Write", ou não tem problema?

Não existe dependência! Os comandos são todos independentes entre si... para o Pascal, não existe nenhum correlação entre o write e o readln. Apenas são dois comandos... cada um sua finalidade. Um escreve algo na tela, o outro ler algo do teclado, simples assim. O uso deles, como a ordem que podem ficar no algoritmo está relacionado a lógica do programador, ou seja, organizar os comandos e estruturas do código é o que vai fazer ele se comportar como desejado...

 

Por exemplo, se você retirasse a write, apenas iria ocorrer que o usuário poderia não saber o que deveria digitar..., mas o resto do programa iria funcionar exatamente como antes! Colocar aquela "mensagem de ordem" para digitar o sexo, é apenas uma forma coerente de solicitar uma informação, que pelo contexto será armazenada numa variável depois..., ou seja, apenas uma estratégia... indicar o que está sendo solicitado, e após ler o que for digitado.

 

 

 

2) ESTRUTURA DE REPETIÇÃO

Então, o Pascal apenas é apenas um "executor de instruções", ou seja, você manda ele fazer, e ele faz... a ordem de execução é "da esquerda para direita, de cima para baixo" (geralmente usamos um embaixo do outro, mas no Pascal é possível colocar lado a lado por exemplo), exatamente da mesma forma que nós ocidente lemos e escrevemos um texto.

 

 

 

Vamos tentar entender os passos que você ordenou ao Pascal:

 

Abaixo peguei o trecho o código e inserir comentários em cada linha para tentar explicar como o programa irá funcionar ao ser executado.

 

17 horas atrás, danilo001 disse:

Program Exercicio_23;
var
  F: String; //declara uma variávels com nomenclatura "F", do tipo "String" (armazena de 0 a 255 caracteres)
  M: String; //idem acima, só que se chamad "M"
 
BEGIN
Write  (' Digite o sexo: '); //imprime o texto na tela (como não tem o ln após o write, o curso do teclado vai ficar ao lado da frase)
Readln (F); //ler algo e joga na variável F
Readln (M); //ler algo e joga na variável F
while (F <> M ) do //enquanto algo que foi inserido em F for diferente de algo que foi inserido no M faça
  begin
  Write ('É do sexo, '); //imprime o texto na tela...
  Writeln (''); //pula uma linha
  end; 
END.

Ou seja, o usuário vai ver os caracteres " Digite o sexo : ". Após o programa vai ficar aguardando um ENTER, ou seja, se ele digitar algo no teclado e após ENTER, o Pascal vai "coletar" o que ele digitou e vai jogar na variável que está entre "()". Supondo que ele digitou "masculino", a variável "F" terá masculino nela!. Após, o programa vai ficar aguardando outro enter... Veja que já ficaria confuso para o usuário, mas supondo que ele der outro ENTER para fazer o programa continuar... daí, a variável "M" irá conter "" (nenhum caractere... nada escrito...). Ai no while, o Pascal vai analisar a expressão lógica: "F" é diferente de "M"?, traduzindo seria algo: "o que tem dentro da variável F é igual ao que tem dentro da variável M"? ou seja,  "masculino" é diferente de ""? A resposta é SIM, ou seja, resulta em VERDADEIRO (true). Logo o laço de repetição irá iniciar... a próxima linha é  um begin,  logo o Pascal entenderá que é um "bloco de instruções" e executará, em sequência, o que está dentro... ai vem o write, que escreverá  "É do sexo, ".... (os caracteres apareceram na tela). Após vem um writeln, que irá escreve "" (ou seja, nada), e pulará para linha de baixo (devido a ter o ln). Ao chegar no end;,  o Pascal sabe que é do while e volta para a expressão lógica e faz a verificação... como F e M não foram alterados, a expressão continuará a resultar em VERDADEIRO (true), e fará novamente as escritas......

 

Como o valores nunca se alterarão, ficará em um loop infinito (repetindo indefinidamente). Seria necessário que dentro do while, as variáveis envolvidas na expressão fossem modificadas de algumas forma...

 

 

Então, o caractere "F" ou "M" seria A RESPOSTA DO USUÁRIO e não o nome da variável, ou seja, esses caracteres deveriam, teoricamente, se referir a "F" de "Feminino" e "M" de "Masculino"... resumindo:

 

A variável e trecho do código poderia ficar assim:

Program Exercicio_23;
var
  sexo :string;
BEGIN
write  ('Digite o sexo: ');
readln(sexo);

A variável que dei a nomenclatura sexo, na lógica do problema proposto, servirá para "armazenar o sexo" que será informado pelo usuário. Usar o nome "sexo" é apenas uma forma de ajudar o programador a identificar a função dessa variável no algoritmo, mas poderia ser qualquer outro nome válido, como A, B, BoraBahea, apartamento, adsadg3244252dfae, xxxx... para o Pascal não importa!!! Se você chamar de IDADE, o programa funcionará EXATAMENTE da mesma forma que se você chamar de sexo, só ficaria "estranho" na nossa cabeça (pois "idade é um número"... só que não!)... entende? (obs.: existe uma regra para nomenclatura, como não podendo começar com números, ter um limite máximo de letras etc).

 

Já o While funciona como uma "estrutura de repetição", onde enquanto a expressão lógica que foi informada resultar em VERDADEIRO, ela continuará repetindo. Essas expressões lógicas podem utilizar de operadores, como visto aqui. Resumindo: a condição no while sempre deverá resultar em VERDADEIRO (true) ou FALSO (false), e assim como usamos o nome "sexo" para o código fazer sentido, devemos uma usa condição que faça sentido para o seu problema!!! Ou seja, o conteúdo da variável sexo deverá ser diferente do caractere "F" e o conteúdo da variável sexo deverá ser diferente de "M".

 

Como são vários detalhes, vai um exemplo de código:
 

Program Exercicio_23 ;
var
  sexo :string;
 
BEGIN
write (' Digite o sexo: ');
readln(sexo);
while (sexo <> 'M' ) and (sexo <> 'F' ) do
  begin
  writeln('Favor inserir "M", para Maculino ou "F" para Feminino');
  readln(sexo);
  end;
if (sexo='M') then
  writeln('Sexo informado foi MASCULINO');
if (sexo='F') then
  writeln('Sexo informado foi FEMININO');
readln; //aguarda um ENTER antes de fechar  
END.

Observe como dentro do laço de repetição a variável de controle (sexo) está sendo relida, para então assim poder ser alterada e possibilitar a verificação da condição mudar...

 

Tente entender o fluxo do programa... tentar interpretar cada linha do código e assimilar alguns conceitos.. daí vá tentando reformular e ajustar... faça testes... insira valores diferentes e veja se a resposta está batendo com o esperado...

 

Qualquer dúvida é só perguntar.

 

No aguardo.

 

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

Visitante
Este tópico está impedido de receber novas respostas.

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