Pesquisar no blog:

Mostrando postagens com marcador estrutura condicional. Mostrar todas as postagens
Mostrando postagens com marcador estrutura condicional. Mostrar todas as postagens

domingo, 9 de junho de 2013

Estrutura condicional switch / case

Além da estrutura condicional if/else podemos utilizar o switch/case para avaliar condições.
Essa estrutura trabalha com uma variável, que, para cada valor vai gerar um caso (case).
Exemplo:
main()
{
    int op = 1;
    switch(op)
    {
        case 1: printf("Um"); break;
        case 2: printf("Dois"); break;
    }
    getch();
}
Na linha 4 é passada a variável que será avaliada e entre as chaves na linha 6 e 7 vemos 2 casos possíveis.
Caso "op" tenha o valor 1 será impresso "Um", caso "op" tenha o valor 2 será impresso "Dois". Devemos colocar o break ao final de cada caso.
Se "op" estiver com um valor não tratado nos casos nada será executado. Podemos tratar isso colocando o default que é executado se o valor não existe em nenhum dos casos.
main()
{
    int op = 3;
    switch(op)
    {
        case ((1) || (2)): printf("Um ou dois"); break;
        case 0: printf("Zero"); break;
        default: printf("Invalido.");
    }
    getch();
}

Observe que essa estrutura switch/case é muito parecida com o if/else, porém, mais organizado.
Porém, switch/case trata uma única variável, sendo assim, o if/else não é dispensado, devemos analisar qual das duas estruturas deve ser utilizada.d
Observe que neste segundo exemplo ainda foi utilizado na linha 6 o operador lógico OR (||). Caso seja 1 ou 2 será impresso "Um ou dois".

Calculadora de operações básicas com switch / case:


int main()
{
    float a, b, r;
    char op;
    printf("+: soma \t-: subtracao \t/: divisao \t*: multiplicacao\n");
    printf("Digite a operacao: ");
    scanf("%f %c %f", &a, &op, &b);
    switch(op)
    {
        case '+' : r = a + b; break;
        case '-' : r = a - b; break;
        case '*' : r = a * b; break;
        case '/' :
            {
                if(b != 0)
                    r = a / b;
                else
                {
                    printf("#ERRO# DIVISAO POR 0.");
                    return 1;
                }
                break;
            }
    }
    printf("Resultado: %.2f", r);
    getch();
    return 0;
}

terça-feira, 26 de março de 2013

Estrutura condicional if, else, else if (Linguagem C)

A estrutura condicional if é conhecida em todas as linguagens de programação. Sua estrutura muda pouco de uma linguagem para outra, e, desde que você tenha uma boa lógica, é fácil usa-lá.
A estrutura condicional está no seu dia-a-dia. Antes de sair de casa, por exemplo, podemos olhar pela janela verificar como está o tempo: se o tempo estiver nublado e com nuvens carregadas, levarei o guarda-chuva.
É exatamente dessa mesma forma que funciona a estrutura condicional de uma linguagem de programação. Posso através dele verificar se um determinado valor é igual (==) ao valor de outra variável, se é maior (>), se é menor, maior igual (>=) ou menor igual (<=). A verificação que farei vai depender do valor que eu desejo que seja retornado.
Antes de usar a estrutura condicional if é importante que você entenda os operadores relacionais e os operadores lógicos.


if - Estrutura simples:


A estrutura simples contém apenas uma condição. Se está condição for verdadeira (1) o programa executa sua(s) instrução(ões).
Exemplos:
main()
{
 int a, b;
 printf("Informe 2 valores inteiros: ");
 scanf("%d %d", &a, &b);
 if(a>b)
  printf("A variavel a eh maior que b\n");
 system("pause");
}
Nesse código o usuário entra com os valores da variável a e da variável b e dentro da estrutura condicional é comparado se a é maior que b. Se verdadeiro o programa retorna a mensagem: "A variável a eh maior que b", ou continua em system("pause");. Se houvesse mais linhas abaixo da estrutura condicional o programa continuaria a execução. Exemplo:
main()
{
 int a, b;
 printf("Informe 2 valores inteiros: ");
 scanf("%d %d", &a, &b);
 if(a>b)
  printf("A variavel a eh maior que b\n");
 printf("Nesta estapa o programa ja esta fora da estrutura condicional.\n");
 printf("Pressione uma tecla...\n\n");
 getch();
 printf("O programa encerrara.\n");
 system("pause");
}
Nesse exemplo a estrutura condicional executa uma única instrução. Quando há mais de uma instrução a ser executada devemos fazer uso das chaves:
if(condição)
{
instrução1;
instrução2;
...;
 instruçãoN;
}
Obs.: se a estrutura condicional possuir apenas uma instrução também é permitido o uso da chave.
Exemplo:
main()
{
 int a, b, aux;
 printf("Informe 2 valores inteiros: ");
 scanf("%d %d", &a, &b);
 if(a>b)
 {
  aux = a;
  a = b;
  b = aux;
 }
 printf("Os números foram ordenados: %d, %d\n\n", a, b);
 printf("O programa encerrara.\n");
 system("pause");
}
No código acima se a primeira variável (a) for maior que a segunda (b) o programa inverte seus valores para imprimi-las na ordem.

if, else - Composta:

A estrutura composta faz uso do else (senão), indicando outra(s) condição(ões) caso a primeira não seja executada.
Exemplo:
main()
{
 char cor;
 printf("Escolha uma cor: \n0: Preto\n1: Azul\n2: Verde\n");
 scanf("%c", &cor);
 if(cor == '0')
 {
  system("color 0");
  printf("Voce escolheu a cor preta.\n");
    }
 else if(cor == '1')
 {
  system("color 1");
  printf("Voce escolheu a cor azul.\n");
    }
 else if(cor == '2')
 {
  system("color 2");
  printf("Voce escolheu a cor verde.\n");
    }
 else
  printf("Invalido.\n");
 printf("\nO programa sera encerrado.\n");
 system("pause");
}

No código acima é feita a primeira condição if(cor == '0'), se esta não for verdadeira então é passada para a segunda condição else if(cor == '1'), se esta não for verdadeira é passado para a terceira else if(cor == '2') e por fim colocamos apenas um else que indica que se não for nenhuma da alternativas anteriores será dada a mensagem "Invalido".
Apenas UMA das condições pode ser executada, e assim que uma delas for executada o programa é jogado para fora da estrutura condicional. Observe que toda a estrutura condicional do código acima faz parte de uma unica estrutura, outra seria aberta se iniciássemos outro if.

if, else - Estrutura aninhada:

A estrutura aninhada é, basicamente, um if dentro de outro. Ou seja, se a primeira condição for verdadeira (1) poderei ter uma segunda condição, terceira, quarta, etc.
Exemplo:
main()
{
 int a = 0, b = 2, c = 0, d = 10, e = -8;
 if((a == 0) && (b == 2))
 {
  if(c > 0)
   printf("Comando 1\n");
  else if(d >= 10)
  {
   if(e < 0)
    printf("Comando 2\n");
   else
    printf("Comando 3\n");
  }
        }
    printf("O programa sera encerrado.\n");
    system("pause");
}

main()
{
 int a = 0, b = 2, c = 0, d = 10, e = -8;
 if((a == 0) && (b == 2))
 {
  if(c > 0)
   printf("Comando 1\n");
  else if(d >= 10)
  {
   if(e < 0)
    printf("Comando 2\n");
   else
    printf("Comando 3\n");
  }
        }
    printf("O programa sera encerrado.\n");
    system("pause");
}
Observe que neste código a 3 estruturas condicionais uma dentro da outra. A estrutura azul está dentro da estrutura verde que está dentro da estrutura vermelha. Sendo assim a estrutura na cor verde só é executa se a estrutura vermelha for verdadeira e a estrutura azul só é executada se a primeira condição da estrutura verde (if(c > 0)) for falsa e a segunda (else if(d >= 10)) verdadeira.
Os operadores lógicos podem ser usados para simplificar seu código fonte, não havendo necessidade de criar estruturas condicionais aninhadas tão complexas.
É importante você testar todos os possíveis fluxos do seus dados, evitando erro de lógica. Para isso podemos usar a depuração (Debugging).
Há ainda a estrutura switch / case, que faz uma função parecida com a da estrutura if, mais em alguns casos pode ser mais adequada e mais legível.