Ir ao conteúdo
  • Cadastre-se

uso do OR no pascal?


Posts recomendados

Boa noite pessoal!

Sou estudante da UFSJ, estou fazendo um trabalho de programacao e tenho uma duvida quanto ao programa que estou fazendo:

preciso usar o repeat/until ate minha variavel N ser igual a 1,2,3 ou 4. mas nao sei como declarar para ela ser igual a essas 4 possibilidades.

alguem poderia me ajudar por gentileza!

Grato, Victor

 

print pascal.png

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

  • Membro VIP

Olá @Victor_Pereira_ufsj, por favor, poste o texto do código em vez da imagem, pois assim fica mais fácil para testarmos...

 

obs.: para postar o código, clique antes no botão "<>", cola o texto e insere.

 

 

Mas vamos lá: (vou fazer de cabeça, estou com preguiça de digitar para fazer os testes na prática, rs)

 

1) READLN X READ

Evite usar read, prefira readln.

Um pouco sobre aqui:

 

 

 

2) OPERADOR LÓGICO OR

No seu código, você não está utilizando o operador, daí não sei o que estava fazendo errado, mas a utilização de operadores lógicos são relativamente simples... O principal ponto aqui é que para cada comparação é necessário informar qual variável vai ser comparada com qual valor (ou variável), ex.:

 

until (NUM=1) or (NUM=2) or (NUM=3) or (NUM=4);

Não poderia ser:

until (NUM=1 or 2 or 3 or 4); //não vai funcionar (eu acho)

 

 

Ou seja, para o Pascal, a "expressão lógica" no until  verifica cada "operação lógica" de forma independente. Cada operação resulta em true (verdadeiro) ou false (falso) e o operador lógico (no caso o or) irá "calcular essa conta". Ex.;
 

Se NUM = 3, teremos algo assim:

(NUM=1)=false 
(NUM=2)=false 
(NUM=3)=true
(NUM=4)=false 

Segundo o operador lógico or, se uma das opções for true, a expressão resulta em true, logo teríamos um "until true"...

 

*until = até; true = verdadeiro, logo o repeat para!!!

 

Com NUM = 8, tudo iria se false, logo resultando em false, e o "até" não estaria satisfeito, fazendo repetir novamente.

 

 

 

3) OPERADORES RELACIONAIS

Como se trata de uma sequência, ou seja, "de 1 a 4, inclusos", poderia utilizar um operador relacional. Ex.:

until (NUM>=1) and (NUM<=4);

obs.: nesse caso também precisou do operador lógico and, que resumidamente funciona como "para ser verdadeiro, tudo tem que ser verdadeiro, caso contrário é falso". Se NUM fosse 2. 2 é maior que 1 E é menor que 4, logo o repeat para.

 

 

 

4) OUTRAS FORMAS

Uma outra forma seria utilizando uma estrutura "que eu não sei como chamá-la", como visto abaixo:

until NUM in {1,2,3,4};

 

 

 

***

 

Para seu contexto, recomendo a 3).

 

No aguardo

adicionado 0 minutos depois

PS: qual o seu compilador?

adicionado 8 minutos depois

Outra coisa que esqueci de comentar:
 

5) ESTRUTURA DE SELEÇÃO (if)

Perceba que lá no segundo repeat..until, você está utilizando 2 if em sequência, mas acontece que as condições utilizadas neles são mutuamente excludentes, ou seja, se for primeira, não tem como ser a segunda. Desta forma, seria recomendado a utilização do "if...else". Se ainda não viu sobre o else, ignore!. (ou pesquise sobre o tema e adiante o seu lado)

Link para o comentário
Compartilhar em outros sites

@Victor_Pereira_ufsj     o @Simon Viegas  tem razão, para o until funcionar certo precisa colocar a instrução or separada por parenteses,  então seu código ficaria assim :

program materiais;
var
senha,engmec: string;
n,k:integer;
begin
  repeat
    write('digite a senha: ');
    readln(senha);
    if senha<>'engmac' then
    writeln('senha incorreta');
  until senha = 'engmac';
  repeat
    write('digite um numero');
    readln(n);
    if (n < 1) or (n > 4) then writeln('numero invalido');
  until (n=1)or(n=2)or(n=3)or(n=4);
end.

mas ficaria melhor se usasse  a instrução and então seria assim ;

until (n>0)and(n<5);

 

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