ELC1065 - Laboratório de Programação I
Primeiro Semestre de 2013
Professora: Juliana Kaizer Vizzotto
Switch
- 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; }
`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`
.- Se o
`break`
for omitido a execução do caso continua com os comandos do caso seguinte. - 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
- 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>`
. - Considere a seguinte instrução:
i = rand();
- A função
`rand`
gera um inteiro entre 0 e`RAND_MAX`
(uma constante simbólica definida no cabeçalho`<stdlib.h>`
). - Em geral, o valor de
`RAND_MAX`
deve ser pelo menos 32767, que é o valor máximo para um inteiro de dois bytes. - 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. - 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. - 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
- 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?
- 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`
. - 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;
- Outra alternativa é usar:
srand(time(NULL));
- 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>`
. - Faça um programa usando o comando
`switch`
que lança um dado 6000 vezes e conta quantas vezes cada face apareceu. - 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.