sábado, 26 de julho de 2014

Algoritmo e Programação - Switch Case

   Olá a todos. Já que retornamos, vamos dar continuidade a série sobre algoritmo e programação. Hoje vamos falar de um novo comando, que é o switch case (também conhecido como switch).

   Imagine que temos uma variável inteira que em nosso programa vai assumir valores de 0 até 9. Para cada valor, devemos escrever uma mensagem diferente na tela com o comando printf. Uma das maneiras de fazer isso é criar 10 comandos ifs, um para cada situação, da seguinte forma:

unsigned char variavel = 2;

int main()
{
if(variavel == 0)
{
printf("Valor zero.\n");
}
if(variavel == 1)
{
printf("Valor um.\n");
}
if(variavel == 2)
{
printf("Valor dois.\n");
}
if(variavel == 3)
{
printf("Valor três.\n");
}
if(variavel == 4)
{
printf("Valor quatro.\n");
}
if(variavel == 5)
{
printf("Valor cinco.\n");
}
if(variavel == 6)
{
printf("Valor seis.\n");
}
if(variavel == 7)
{
printf("Valor sete.\n");
}
if(variavel == 8)
{
printf("Valor oito.\n");
}
if(variavel == 9)
{
printf("Valor nove.\n");
}
system("pause");
}

   Este é um jeito de fazer. Um jeito meio longo (ocupou 49 linhas, embora alguém pudesse dizer que isso se deve pela forma que eu costumo escrever o código) mas funciona.

   O comando switch serve para quando queremos comparar o valor inteiro de uma variável com diversos outros valores. Vamos aplicá-lo ao exemplo dado anteriormente para observarmos sua sintaxe.

unsigned char variavel = 7;

int main()
{
switch (variavel)
{
case 0:
printf("Valor zero.\n");
break;
case 1:
printf("Valor um.\n");
break;
case 2:
printf("Valor dois.\n");
break;
case 3:
printf("Valor três.\n");
break;
case 4:
printf("Valor quatro.\n");
break;
case 5:
printf("Valor cinco.\n");
break;
case 6:
printf("Valor seis.\n");
break;
case 7:
printf("Valor sete.\n");
break;
case 8:
printf("Valor oito.\n");
break;
case 9:
printf("Valor nove.\n");
break;
default:
printf("Valor estranho encontrado!\n");
break;
}
system("pause");
}

   Então vamos prestar atenção na sintaxe do comando switch. Após o comando switch escreve-se, dentro de parênteses, a variável que será testada. Nesse caso eu nomeei a variável como "variavel" (que criativo que eu sou). Após isso abre-se um bloco de chaves.

   Dentro do bloco colocamos case, o valor a ser testado e dois pontos. Depois disso escrevemos todos os comandos que devem ser executados se a variável for igual ao valor testado. Depois dos comandos que queremos que sejam executados finalizamos com comando break.

   Para que serve o comando break? Quando nosso programa encontra o comando break, ele sai fora do laço que está sendo executado. Neste caso, ele sai fora do comando switch. Vamos supor que nos esqueçamos de colocar break no comando switch, e a variável tenha valor zero. Nesse caso ela é comparada com o case 0, será igual e mostrará na tela a mensagem "Valor zero.". Mas, como o programa não encontrou um break, ele vai mostrar na tela a mensagem "Valor um." que está dentro do case 1, mesmo que o valor da variável seja diferente de 1, e continuará mostrando todas as mensagens seguintes. Se esquecermos de todos os breaks, o programa vai mostrar todas as mensagens e executar todos os comandos após o case que corresponder ao valor da variável. Por isso, sempre que seu case executar os comandos de mais de um caso, verifique se você não esqueceu de colocar o comando break em algum dos cases.

   Por fim temos o default. O programa vai executar os comandos dentro de default sempre que a variável testada não se encaixar em nenhum dos cases. Por isso que o nome desse caso é default (um pouco auto explicativo). Após os comandos do default devemos lembrar de fechar o bloco de chaves do switch.

   Perceba que, nesse caso, não ganhamos muita economia de linhas (gastei 45 linhas para fazer esse código). O maior ganho foi em organização. Ao ver um comando switch o programador já sabe que terá múltiplas comparações de valores inteiros e isso facilita a compreensão do código.

   Note que o comando switch compara apenas igualdade. Não é possível comparar se um valor é maior que ou menor que outro utilizando esse comando. Também só é possível comparar valores do tipo inteiro, e nunca valores do tipo float (decimais, números com vírgula). Em todos os casos onde o switch não se aplica, é aconselhado o uso do comando if. O comando switch suporta números negativos desde de que a variável testada comporte esses números (seja do tipo signed).

   Caso você queira testar esses exemplos no seu compilador, lembre-se de inclui os arquivos stdio.h e stdlib.h. Caso se esqueça, o compilador gerará erro dizendo que o comando system("pause") não está definido dentro do escopo do programa.

   Por hoje era isso. Qualquer dúvida me avisem pelos comentários. Sugestões? Comentários! Críticas? Comentários! Para entrar em contato, utilize os comentários. Espero que tenham gostado e entendido. Vamos continuar estudando! Um abraço e até a próxima.

sexta-feira, 25 de julho de 2014

Retorno Triunfal!

Nossa, quanto tempo faz que não escrevo aqui. Deixe-me ver, faz desde março desse ano!

Primeiro, permitam-me explicar o motivo de minha ausência aqui. Este último ano estive envolvido com pesquisa tecnológica na Universidade de Caxias do Sul. Estava trabalhando em um projeto sobre identificação de parâmetros de baterias chumbo ácidas reguladas por válvula (VRLA ou também conhecida como bateria de carro!).

Devido a pesquisa estive mais dedicado a funções dentro da universidade, como monitorias e até mesmo minhas próprias aulas. Mas este ano estou deixando o projeto, então creio que vou ter mais tempo e disposição para escrever aqui.

Então vamos lá. O que temos pendente para fazer? Temos a série sobre programação C, que nunca foi terminada =/.

Depois disso vamos começar uma série sobre microcontroladores (por que não?). Estou trabalhando em um programa para Arduíno (sim, eu comprei um ^^) para comunicar com um controle de PS2. Estou terminando isso e, após finalizar, quero expandir para outros microcontroladores que conheço (PIC e ARM).

Também quero incluir algumas coisas sobre física (amor de minha vida) e química (apenas uma paixão momentânea). Por que não? O blog é meu mesmo!!!

Como sempre estou aceitando comentários, sugestões e críticas para continuar melhorando o blog. Conto com a ajuda de todos os leitores.

Então vamos lá, que 2014 não terminou e temos muito trabalho a recuperar.

Abraço a todos e de volta aos estudos!!!