sábado, 2 de fevereiro de 2013

Linguagem C: Parte 4 [Laços]

     Muitas vezes enquanto estamos programando, vamos precisar repetir determinadas instruções diversas vezes, enquanto não for estabilizada a condição correta. Para isso utilizaremos os laços while, do while e for, que auxiliados de alguns operadores, se tornam fundamentais para nossos programas. 


While

     Esse laço sempre executara a instrução enquanto uma certa condição for verdadeira. Primeiro ele avalia a condição. A instrução sendo verdadeira, a instrução é repetida novamente, sendo assim, ficara repetindo até a condição se tornar falsa. Se for falso (ZERO), ele simplesmente encerra o laço e partirá para próxima instrução.
     Aqui esta um pequeno exemplo, onde eu quero mostrar na tela todos os números menores que 9, partindo de 1.

Ex1:
#include<stdio.h>

/*
* O laço executa enquanto num for menor que 9.
* Se eu quisesse que ele chegasse a 9, precisaria colocar apenas " <= " ao invés de " < ". :)
*/
main()
{
   int num = 1; // carga inicial

   while(num<9) // condição a verificar
   {
       printf("E aeee %d\n",num);
       num++; // pós instrução
   }
}

Ex2:

#include<stdio.h>

main()
{
   int num = 2;
   while(num<90)
   {
       printf("3 * %d = %d\n",num, 3*num);
       num = num + 1;
   }
}

For

     Esse laço reúne carga inicial, condição e pós-instrução, tudo em apenas uma linha. É utilizada para executar uma determinada instrução dentro de um bloco, sendo a condição feita no inicio do corpo do laço, até o limite estipulado.
     Ele executa a carga inicial, avalia a condição, e se for falsa termina e passa para próxima instrução. No caso de ser verdadeira, a instrução (ou bloco de instruções) é executada. Depois de executada é feita a pós-instrução, onde é realizado o incremento ou o decremento dos valores. Voltando depois a verificação da condição, até se tornar falsa.

Ex:

#include<stdio.h>
main()
{
   int num;

   printf("Carregando...\n");

   for(num = 1; num <= 100; num++)
   {
       printf("...%d%%\n",num);
   }
   printf("Concluído!");
}

Poderia também adicionar um numero para interagir.

Ex2:

#include<stdio.h>
main()
{
   int num;
   int z;

   scanf("%d ",&z);
   
   printf("Carregando...\n");

   for(num = 0; num <= 100;  num++)
   {
       printf("...%d\n",num);
   }
}

do While

     A instrução do.. while diferencia-se de for e while, pois a condição é testada no fim do laço. Ele executa a condição avaliando logo em seguida. Se o resultado for positivo, volta a executar e avaliar, até o resultado ser negativo. Sendo negativo, o laço é terminado e a próxima instrução é executada.

Ex:

#include<stdio.h>
/*
* Criei aqui um humilde programa, que faz o usuário escolher uma fruta.
*/
main()
{
    char op;

    do
    {
        printf("\t\nEscolha uma fruta \n");
        printf("\tL = Limão \n");
        printf("\tB = Banana \n");
        printf("\tT = Tomate\n\n");

        scanf("%c", &op);
        fflush(stdin); // Limpa o Buffer do teclado
        switch(op)
       {
             case 'l':
             case 'L': printf("Limão!");
             break;

             case 'b':
             case 'B': printf("Banana!");
             break;

             case 't':
             case 'T': printf("Tomate!");
             break;

             default: printf("Erro");
       }
    } while (op!=  's' && op != 'S'); // Enquanto não for digitado 's' ou 'S', o programa continuara.
}

     LEMBRANDO QUE PODEMOS UTILIZAR TODOS ESSES LAÇOS DE FORMA ENCADEADA. VOU EXPLICAR MAIS TARDE!

     Também é possível criar laços infinitos, bastando colocar uma condição que seja sempre verdadeira.
Ex:

#include<stdio.h>

main()
{
    int z = 2;

    while(z>1)
   {
       printf("...%d \n",z);
       z++;
   }
}

Os Operadores unários ++ e --

     São operadores utilizados para incrementar ou decrementar as variáveis. Foram utilizados nos exemplos anteriores.

► Operador " ++ " ► Incremento de 1. Ex: a++, ++z

► Operador " -- " ► Decremento de 1. Ex: b--, --f

Diferença de ++z e z++

     Quando o operador vier antes da variável (++z), a variável é incrementada primeiro, para depois ser utilizada. No caso de ser incrementa depois (z++), ela é utilizada primeiro, para depois ser incrementada. Isto vale o mesmo para decremento. E depende é claro, se ela estiver isolada.

Até a próxima! ^^


► Menu da Linguagem C

sábado, 19 de janeiro de 2013

Linguagem C: Parte 3 [Condições]

     Enquanto desenvolvemos nossos programas, precisamos que certas coisas aconteçam em momentos específicos. Levamos em conta o seguinte exemplo:
     Temos um personagem. Nosso personagem assim como qualquer ser humano, sente frio, calor, sede, fome e etc. Quando estiver frio, queremos que ele coloque um casaco, ou quando calor, ele deve vestir uma bermuda. Também podemos detalhar um pouco mais. Se a temperatura marcar até 30°C ele vai para a piscina, mas se estiver marcando mais que 30°C ele vai para praia.
     Esses são exemplos extremamente simples de tomadas de decisões que podemos colocar em um programa. E para fazermos isso, recorreremos aos operadores e instruções de C.


► Verdadeiro e Falso

     Como em C não existe um tipo que permita armazenar valores lógicos, utilizamos o 0 (ZERO) para representar um valor FALSO, enquanto tudo que for diferente de 0 (ZERO), sera VERDADEIRO.

Ex:
Valor Falso: 0
Valores Verdadeiros: -5 , 10 , 160.7, 0.00090

► Operadores Relacionais

     Para avaliarmos se a temperatura é menor que tal marca, ou se determinado valor é maior que o outro, utilizamos os Operadores Relacionais

Operador de Igualdade:
Representado por " == ".
Ex: 
f == z // Verifica se f é igual a z.

Operador Maior que:
Representado por " > ".
Ex:
f > z // Verifica se f é maior que z.

Operador Menor que:
Representado por " < ".
Ex:
f < z // Verifica se f é menor que z.

Operador Maior ou Igual que:
Representado por " >= ".
Ex:
f >= z // Verifica se f é maior igual a z.

Operador Menor ou Igual que:
Representado por " <= ".
Ex:
f <= z // Verifica se f é menor igual a z.

Operador Diferente de:
Representado por " != ".
Ex:
f != z // Verifica se f é diferente de z.

OBS: SO NÃO CONFUNDA " = " COM " == ". O PRIMEIRO ATRIBUI UM VALOR, O SEGUNDO COMPARA. ;)

► Instrução if-else

     Para determinar quais instruções devem executar em uma certa ocasião, utilizamos um dos controles de fluxos de C chamado if-else.

Ex:

#include <stdio.h>

main()
{
    int a;
    printf("Ins um número\n");
    scanf("%d",&a); // Insere um int
   
    if (a > 0) // verifica se o número inserido foi maior que 0
        printf("Verdadeiro"); // se for, imprime Verdadeiro
    else // 
        printf("Falso"); // caso não for imprime Falso
// utilizar getchar() aqui caso o programa fechar rapidamente.
}

     A instrução do if é obrigada a estar entre parênteses. Foi verificada a primeira instrução. Caso ela não fosse verdadeira, o else seria executado. Lembrando que o else não é obrigatório.
     Também existe casos em que temos que encadear mais de uma instrução:

#include <stdio.h>

main()
{
    float sal;
    printf("Ins o salário:\n");
    scanf("%f", &sal);
    
    if (sal<= 0)
        printf("Sem grana!");
    else if (sal > 500)
        printf("Imposto = %.2f\n", sal*0.20);
    else
        printf("imposto = %.2f\n", sal*0.90);
}

     Uma das coisas que é importante utilizar na programação, é a indentação. Mesmo não surtindo nenhum efeito na compilação ou mesmo na execução (no caso de C), ela ajuda a apresentar os limites de cada instrução para o programador ou qualquer um que ler o código. Cada um escolhe o melhor jeito de fazer a sua.

Ex:
     Esses dois exemplos são iguais. A única diferença é que o primeiro não foi utilizado indentação.

1)
if (v!=1)
printf("Certo.\n");
else
printf("Erro");

2)

if (v!=1)
    printf("Certo.\n");
else
    printf("Erro");

► Operadores Lógicos

     Existem outros tipos de operadores chamados de Operadores Lógicos, que são utilizados para ligar duas ou mais condições. Sendo que ao final da operação, devolvem um apenas um valor (VERDADEIRO OU FALSO). A utilização desses operadores é muito simples. Partimos do exemplo de que toda a bola é redonda e, os peixes nadam.

Ex:

if (bola_redonda && peixes_nadam)
    printf("Verdadeiro"); // True

Caso algum destes elementos fosse alterado:

if (bola_redonda && vacas_voam)
    printf("Falso"); // False


Operador: " && "
Significado: AND (E lógico). Obriga as duas operações serem verdadeiras. Caso contrário, sera falso.
Ex: f >= 9 && f <= 19

Operador: " || "
Significado: OR (OU lógico). Obriga pelo menos uma das operações serem verdadeiras. Caso contrário, sera falso.
Ex: f == 10 | | f == 6

Operador: " ! "
Significado: NOT (Negação lógica). Verdadeiro se a condição for falsa. Falso se for verdadeira.
Ex: ! z

     Como as instruções nem sempre são avaliadas da esquerda para direita, existe uma tabela de precedência que indica a precedência de cada um.

► Operador Condicional - ?

     É um operador ternário (e também o único) de C, que recebe três argumentos. Ele avalia a condição retornando um resultado Verdadeiro pelo elemento1, ou Falso pelo elemento2.

Ex:

condição ? elemento1: elemento2

#include<stdio.h>

main()
{
     int idade;
     printf("Insira sua idade:\n");
     scanf("%d", &idade);
     
     idade = idade >= 18 ? 20 : 10;
     printf("Ganhou %d pontos!",idade);
}

►Instrução Switch

     Utilizado para tomada de decisões quando a quantidade de opções é muito grande. Imagina se quiséssemos escolher entre 30 opções? Fazer isso com if-else não é legal. O Switch executa os valores numéricos do tipo char, long ou int. Comparando em seguida o valor recebido, com as constantes dos cases.
     O case que for igual ao valor inserido, sera executado e o programa passara para próxima instrução com o auxilio do break. Caso contrário, mesmo achando o case certo, o programa continuara percorrendo o switch até finaliza-lo. Se o valor não bater com nenhum dos cases, a instrução que estiver em default será executada.


► Instrução Break

     É utilizada quando queremos parar a execução dentro de um switch. O programa pula para próxima instrução .


Ex:

#include <stdio.h>

main()
{
   char estCivil;
   printf("Qual seu estado Civil:\n");
   printf(" S - Solteiro \n C - Casado\n D - Divorciado \n V - Viúvo \n");
   estCivil = getchar();

   switch(estCivil)
  {
      case 'S': printf("Solteiro(a)");
      break;

      case 'C': printf("Casado(a)");
      break;

      case 'D': printf("Divorciado(a)");
      break;

      case 'V': printf("Viúvo(a)");
      break;



      default: printf("Estado Civil incorreto");
  }
}

    O programa poderia ter sido feito utilizando números nas escolhas, ou também, colocando 's' , 'c', 'd' e 'v' junto de cada um de seus correspondentes.

Ex:
case 'c':
case 'C': printf ("Casado");
break;

     Significa que tanto 'c' minúsculo quanto 'C' maiúsculo, seria entendido como casado.

Até logo! ^^

Menu da Linguagem C