Diferenças entre edições de "As condições if"

De GNU Octave
Ir para: navegação, pesquisa
(Exercícios)
(Exercícios)
Linha 51: Linha 51:
  
 
# Leia um número e indique se o mesmo é ou não primo.
 
# Leia um número e indique se o mesmo é ou não primo.
 +
 +
<syntaxhighlight>
 +
# le um numero e diz se e primo ou nao
 +
numero = input("Escolha um numero: ");
 +
if (isprime(numero))
 +
  printf ("%d e primo\n", numero);
 +
else
 +
  printf ("%d nao e primo\n", numero);
 +
endif
 +
</syntaxhighlight>
  
 
# Escreva uma script que calcule o índice de massa corporal e apresente uma informação qualitativa sobre o mesmo, usando a informação disponível na [http://apps.who.int/bmi/index.jsp?introPage=intro_3.html World Health Organization]. Escontra nesta página a fórmula de cálculo deste índice.
 
# Escreva uma script que calcule o índice de massa corporal e apresente uma informação qualitativa sobre o mesmo, usando a informação disponível na [http://apps.who.int/bmi/index.jsp?introPage=intro_3.html World Health Organization]. Escontra nesta página a fórmula de cálculo deste índice.

Revisão das 11h47min de 12 de novembro de 2013

As instruções condicionais if têm 3 formas recorrentes. Consoante a lógica necessária, usa-se uma destas 3 formas.

     if (condition)
       then-body
     endif
     if (condition)
       then-body
     else
       else-body
     endif
     if (condition)
       then-body
     elseif (condition)
       elseif-body
     else
       else-body
     endif

Condições

Como se pode ver, a instrução if começa sempre com uma condição. Uma condição é uma expressão que resulta num valor booleano, verdadeiro ou falso. Caso o valor da expressão seja numérico, assume-se que é falso se for zero, e verdadeiro em qualquer outro caso.

Nas condições é habitual usarem-se os operadores booleanos e parêntesis para criar expressões mais complicadas.

Operadores booleanos:

  • (conjunção) \mbox{expressão}_{1} & \mbox{expressão}_{2} retorna verdadeiro se ambas as expressões 1 e 2 forem verdadeiras
  • (disjunção) \mbox{expressão}_{1} | \mbox{expressão}_{2} retorna verdadeiro se uma das expressões 1 e 2 for verdadeiras
  • (negação) ! \mbox{expressão} (ou ~ \mbox{expressão}) retorna o contrário da expressão

Nestas expressões usam-se diversas comparações, sendo necessário lembrar que a igualdade escreve-se com == em vez de ser apenas com =.

Exercícios

  1. Leia um número e indique se o mesmo é par ou ímpar.
numero = input("Escolha um número: ");
if (rem (numero, 2) == 0)
   printf ("%d é par\n", numero);
else
   printf ("%d é ímpar\n", numero);
endif
  1. Leia um número e indique se o mesmo é ou não primo.
# le um numero e diz se e primo ou nao
numero = input("Escolha um numero: ");
if (isprime(numero))
   printf ("%d e primo\n", numero);
else
   printf ("%d nao e primo\n", numero);
endif
  1. Escreva uma script que calcule o índice de massa corporal e apresente uma informação qualitativa sobre o mesmo, usando a informação disponível na World Health Organization. Escontra nesta página a fórmula de cálculo deste índice.
# massacorporal.m
peso = input("Peso?\n");
altura = input("Altura?\n");
imc = peso/altura^2;
printf("O seu índice de massa corporal é: %.1f\n", imc);
if (imc < 17)
   disp("Muito abaixo do peso");
elseif (imc >=17 & imc < 18.5)
   disp("Abaixo do peso");
elseif (imc >=18.5 & imc < 25)
   disp("Peso normal");
elseif (imc >=25 & imc < 30)
   disp("Acima do peso");
elseif (imc >=30 & imc < 35)
   disp("Obesidade");
elseif (imc >=35 & imc < 40)
   disp("Obesidade severa");
else
   disp("Obesidade mórbida");
endif

Ao executar a script anterior, pode-lhe aparecer a mensagem:

warning: massacorporal.m: possible Matlab-style short-circuit operator at line 9, column 18
(...)

Esta mensagem não corresponde a um erro propriamente dito. É um aviso de que nem todas as condições precisam de ser calculadas. De facto, o mesmo código pode ser escrito com menos condições, da seguinte forma:

# massacorporal.m
peso = input("O seu Peso?\n");
altura = input("Altura?\n");
imc = peso/altura^2;
printf("O seu índice de massa corporal é: %.1f\n", imc);
if (imc < 17)
   disp("Muito abaixo do peso");
elseif (imc < 18.5)
   disp("Abaixo do peso");
elseif (imc < 25)
   disp("Peso normal");
elseif (imc < 30)
   disp("Acima do peso");
elseif (imc < 35)
   disp("Obesidade");
elseif (imc < 40)
   disp("Obesidade severa");
else
   disp("Obesidade mórbida");
endif