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

segunda-feira, 14 de janeiro de 2013

Palavras Reservadas de C

     Aqui vai algumas palavras reservadas para uso gramatical, da linguagem C:

asm ► Indica uma instrução Assembly.
auto ► É o tipo de criação de variáveis padrão.
break ► Termina um laço ou switch.
case ► Faz parte do switch
char ► Tipo que armazena um único caractere.
const ► Sinaliza um valor fixo para uma variável.
continue ► O controle é passado para a próxima iteração.
default ► Utilizado no switch, é executado quando nenhum dos cases é validos.
do ► Parte do laço do while.
double ► Números reais de dupla precisão.
else ► É executado quando a condição de " if " é falsa.
enum ► Define tipos enumerados.
extern ► Chama algo de outro arquivo de código.
far ► Declara ponteiros com 32 bits.
float ► Números reais de precisão simples.
for ► É um laço.
goto ► Realiza saltos para labels.
if ► Testa uma condição.
int ► Tipo que armazena inteiros.
long ► Tipo que armazena inteiro de 4 bytes.
near ► Declara ponteiros de 16 bits.
register ► Comando que solicita armazenar uma variável diretamente no registro do processador.
return ► Retorna algo de uma função.
short ► Tipo que armazena inteiro de 2 bytes.
signed ► Sinaliza que a variável contém valor positivo e negativo.
sizeof ► Retorna o número de bytes de uma variável.
static ► Indica que uma variável mantem seu valor entre as chamadas de função.
struct ► Cria estruturas.
switch ► Seria um if-else mais simples. :)
typedef ► Define tipos.
union ► Permite o compartilhamento de um espaço na memória por diversas variáveis.
unsigned ► Indica que a variável terá apenas números positivos ou zero.
void ► Indica que a função não retorna nada.
volatile ► Indica que uma variável pode ser alterada.
while ► É um laço de repetição. Pode ser utilizado junto com o " do ".

► Menu da Linguagem C