UFSM > Ciência da Computação

Primeiro Semestre de 2013
Professora: Juliana Kaizer Vizzotto

Switch

  1. Além da construção `else-if` a linguagem de programação C provê um comando de seleção `switch` para selecionar um dentre um conjunto de possíveis casos. Sua forma geral é:

    switch (expr)
     {
       case op1 :
         ...        /* comandos executados se  expr == op1 */
         break;
       case op2:
         ...       /* comandos executados se expr == op2 */
         break;
       case op3:
         ...
         break;   /* comandos executados se expr == op3 */
       default:
         ...      /* comandos executados se expr for diferente de todos */
         break;
     }
    

  2. `op1` deve ser um número inteiro ou uma constante caractere. Se `expr` resultar no valor `op1`, os comandos que se seguem ao caso `op1` são executados até que se encontre um `break`.

  3. Se o `break` for omitido a execução do caso continua com os comandos do caso seguinte.

  4. O caso `default` (nenhum dos outros) pode aparecer em qualquer posição, mas normalmente é colocado por último.

Switch: Exemplo de Calculadora com as operações Básicas

#include<stdio.h>
int main(){
   float num1,num2;
   char op;
   printf("Digite: numero op numero \n");
   scanf("%f %c %f",&num1,&op,&num2);
   
   switch(op){
      case '+' :
          printf(" = %f\n",num1+num2);
          break;
      case '-' :
          printf(" = %f\n",num1-num2);
          break;
      case '*' :
          printf(" = %f\n",num1*num2);
          break;
      case '/' :
          printf(" = %f\n",num1/num2);
          break;
      default:
          printf("Operador Invalido!\n");
          break;
     }#include<stdio.h>
int main(){
   float num1,num2;
   char op;
   printf("Digite: numero op numero \n");
   scanf("%f %c %f",&num1,&op,&num2);
   
   switch(op){
      case '+' :
          printf(" = %f\n",num1+num2);
          break;
      case '-' :
          printf(" = %f\n",num1-num2);
          break;
      case '*' :
          printf(" = %f\n",num1*num2);
          break;
      case '/' :
          printf(" = %f\n",num1/num2);
          break;
      default:
          printf("Operador Invalido!\n");
          break;
     }
   return 0;
}
   return 0;
}

Geração de Números Aleatórios

  1. Um elemento de sorte pode ser introduzido nas aplicações com o uso da função `rand` da biblioteca padrão de C a partir do cabeçalho `<stdlib.h>`.

  2. Considere a seguinte instrução:

    i = rand();
    

  3. A função `rand` gera um inteiro entre 0 e `RAND_MAX` (uma constante simbólica definida no cabeçalho `<stdlib.h>`).

  4. Em geral, o valor de `RAND_MAX` deve ser pelo menos 32767, que é o valor máximo para um inteiro de dois bytes.

  5. Se `rand` realmente produz inteiros aleatórios, cada número entre 0 e `RAND_MAX` tem a mesma chance (ou probabilidade) de ser escolhido toda vez que `rand` é chamada.

  6. O intervalo de valores produzido por `rand`, normalmente é diferente daquele que é necessário em uma aplicação específica. Por exemplo, um programa que simula o lançamento de uma moeda poderia exigir apenas 0 para cara e 1 para coroa. Um programa de jogo de dados, que simula o rolar de um dado de seis lados, exigiria inteiros aleatórios de 1 a 6.

  7. Para isso, usaremos o operador de módulo `%` em conjunto com `rand` da seguinte forma:
    rand() % 6
    

    para produzir os inteiros no intervalo de 0 a 5. Isso é chamado de escala. O número 6 é chamado de fator de escala. Depois deslocamos o intervalo de números produzidos somando 1 ao nosso resultado anterior:

    1+ rand() % 6 
    

Exercícios

  1. Faça um programa que simula o lançamento de um dado 20 vezes e imprime a saída em 4 linhas. Cada linha contém 5 lançamentos. Simule esse programa várias vezes. As saídas são sempre iguais?

  2. A função `rand` na verdade gera número pseudoaleátorios. Chamar `rand` repetidamente produz uma sequência de números que parece aleatória. Porém a sequência se repete toda vez que o programa é executado. Entretanto, podemos randomizar o `rand` usando o `srand`.

  3. A função `srand ` usa um argumento inteiro e semeia a função `rand` para que ela produza uma sequência diferente de números aleatórios a cada execução:
 unsigned seed;
 printf("Digite a semente: ");
 scanf("%u",&seed);  //%u de unsigned
 srand(seed);
 i = 1 + rand() % 6;
  1. Outra alternativa é usar:

    srand(time(NULL));
    

  2. Isso faz com que o computador leia o seu clock para obter um valor de semente automaticamente. A função `time` retorna o número de segundos que se passaram desde a meia-noite de primeiro de janeiro de 1970 Para usar o `time` você deve incluir o cabeçalho `time.h>`.

  3. Faça um programa usando o comando `switch` que lança um dado 6000 vezes e conta quantas vezes cada face apareceu.

  4. Um dos jogos de azar mais populares é o jogo de dados conhecido como craps. Um jogador lança dois dados. Cada dado tem 6 faces. Essas faces contém 1,2,3,4,5 e 6. Depois que os dados param, a soma dos pontos nas duas faces voltadas para cima é calculada. Se a soma for 7 ou 11 na primeira jogada, o jogador vence. Se a soma for 2,3 ou 12 na primeira jogada (chamado craps), o jogador perde (ou seja, a casa vence). Se a soma for 4,5,6,8, 9 ou 10 então a soma se torna o ponto do jogador. Para vencer o jogador precisa continuar lançando os dados até que faça seu ponto. O jogador perde lançando um 7 antes de fazer o ponto. Faça um programa que simule um jogo de craps.

Página criada em: Seg Mai 06 09:00:00 BRT 2013. Última atualização em: Mon May 6 10:57:17 2013. Autoria: Juliana Kaizer Vizzotto.