4. - Processamento Condicional e Processamento Iterativo
Com
o aumento da complexidade dos programas consequentemente surgem
situações onde o programa deve tomar rumos diferentes
de acordo com o resultado da avaliação de uma determinada
condição. A isto se dá o nome de processamento
condicional. Do mesmo modo, poderão surgir situações
onde a execução de determinada função,
ou conjunto de funções, seja necessária repetidas
vezes até que uma determinada condição seja
atendida. A isto se dá o nome de processamento iterativo.
4.1.
Expressões Condicionais
A
base das estruturas de decisão em C são as expressões
condicionais que serão avaliadas. Basicamente são
constituídas por comparações entre valores
e operações lógicas com os seguintes operadores:
-
Operador
de comparação ou igualdade -
Utiliza o símbolo "==" (dois sinais
de igualdade). Retorna TRUE (verdadeiro) caso o valor dos
2 itens seja o mesmo. Retorna FALSE (falso) caso contrário.
DICA: Não confundir o operador de comparação
"==" (dois sinais de igualdade) com o operador
de atribuição "="
(um sinal de igualdade). O compilador não retornará
nenhum erro caso a confusão seja feita pois uma operação
de atribuição do tipo (A=B) sempre retorna
TRUE como valor de expressão.
-
Operadores
relacionais -
Utilizam os símbolos ">" , "<"
, ">=" e "<=" para indicar comparações
relacionais entre valores maiores, menores, maiores e iguais,
menores e iguais respectivamente. Retornam como valor de expressão
TRUE caso a expressão de comparação do
tipo (A>=B) seja verdadeira e FALSE caso contrário.
-
Operadores
lógicos
- Avaliam uma ou mais expressões simultâneamente
e são basicamente 3 operadores:
-
E
(AND)
- Utiliza os símbolos "&&"
(dois e´s comerciais) e retorna TRUE caso
todas as expressões sejam verdadeiras
e FALSE caso pelo menos uma delas seja falsa.
-
OU
(OR)
- Utiliza os símbolos "||" (duas
barras verticais) e retorna TRUE caso pelo menos
uma das expressões seja verdadeira e FALSE
caso nenhuma delas o seja.
-
NÃO
(NOT) -
Utiliza o símbolo "!" (ponto de
exclamação) e inverte o resultado de uma
expressão lógica, ou conjunto de expressões.
void main (void)
{
int resultado;
int idade;
... ...
/* aqui são atribuidos valores para as variaveis
*/
if ( !(resultado
== 10) && (idade >= 21) )
{
printf("A
idade");
printf("
e' maior ou igual a 21 anos ");
printf("
e o resultado nao e' 10\n ");
}
}
|
DICA:
C
interpreta qualquer expressão que seja verdadeira como
sendo um valor diferente de zero. Assim sendo, uma expressão
to tipo "(variavel <= 21)" retorna para o programa
(ou para uma estrutura de decisão) o valor zero caso seja
falsa. Este mesmo valor de retorno pode ser atribuído para
uma variável como mostrado no exemplo a seguir:
void main (void)
{
int resultado;
int idade;
... ...
resultado = (idade >=
21);
if (resultado)
{
printf("A
idade");
printf("
e' maior ou igual a 21 anos ");
}
}
|
4.2.
A Estrutura Condicional IF
A
estrutura IF é das estruturas condicionais oferecidas
pela linguagem C. Ela primeiramente avalia se uma condição
é verdadeira e, em caso positivo, executa um comando (comando
simples) ou um conjunto de comandos (comandos compostos) como
mostrado a seguir, onde a variável idade é
avaliada e, caso contenha um valor maior ou igual a 21, o conjunto
de instruções delimitadas pelas chaves (escopo)
é executado.
DICA:
Se variáveis forem declaradas dentro de algum escopo
de estruturas de decisão ou iterativas, a sua utilização
fica restrita somente à este escopo de modo que estas variáveis
não são visíveis pelo restante do programa,
o que de certa forma melhora o controle sobre as variáveis
limitando sua área de ação.
void main (void)
{
int idade;
... ...
if (idade >= 21)
{
printf("A
idade");
printf("
e' maior ou igual a 21 anos ");
}
}
|
DICA:
Valores de ponto flutuante, como visto anteriormente, não
são completamente representados internamente pelo computador.
Desta forma, se por exemplo uma variável recebe o valor
0.065 a representação interna do computador pode
se tornar 0.06499999. Assim, se variáveis de ponto flutuante
forem usadas em estruturas de comparação,
cuidados adicionais devem ser tomados para que o computador avalie
corretamente a expressão. Uma solução seria
trabalhar com operadores < ou > trabalhando
sempre com faixas de valores, como mostrado a seguir:
void main (void)
{
float salario = 0.065 ;
/* aqui o valor 0.065 e' atribuido, mas entretanto
a representação interna do valor pode
ser 0.0649999 */
if (salario == 0.065)
{
printf("Essa
mensagem pode nao ser exibida");
}
if ( (salario - 0.065)
<= 0.0001 )
{
printf("Esta
e' a forma correta");
}
}
|