cade a verificação de não pode existir divisão por 0?
Olá galera IMP,
Hoje tava olhando um código antigo que fiz no inicio da materia em C da faculdade e resolvi postar para vocês entenderem um pouco sobre o Switch e Case...
Teoria Basica:
Switch é uma forma de estrutura seletiva, dentro dos switch há o case (que significa caso). Ou seja, é quase que um if com várias possibilidades, mas com algumas diferenças importantes.
1ª Diferença: Os cases não aceitam operadores lógicos. Portanto, não é possível fazer uma comparação. Isso limita o case à apenas valores definidos.
2ª Diferença: O switch executa seu bloco em cascata. Ou seja, se a variável indicar para o primeiro case e dentro do switch tiver 5 cases, o switch executará todos os outros 4 cases a não ser que utilizemos o comando para sair do switch. (No caso referimos ao Break, que é para dar um stop naquele bloco).
Agora vamos ver como proceder com o switch / case.
Primeiro o comando SWITCH e entre parênteses a váriavel na qual está guardado o valor que será avaliado pelo case. Então, abre-se o bloco de dados. Dentro do bloco de dados colocamos o comando CASE e logo após um valor terminando a linha com dois pontos (.
Então, é estruturado os comando que serão executados pelo case.
Estruturadamente, seria mais ou menos isso:
SWITCH (variável){
CASE valor1:
Dados a serem executados
BREAK;
CASE valor2:
Dados a serem executados
BREAK;
}
Exemplo:
Neste programa vamos fazer uma simples calculadora que aceita até 2 valores para o calculo de números inteiros.
Exercício em linguagem C realizado por [Somente usuários registrados podem vem os links. ](Dorcílio).Código:#include <stdio.h> #include <stdlib.h> int main(){ /*Inicializando*/ int op; /*Declarando variaveis*/ int t=0,x=0,y=0; /*Declarando variaveis*/ printf("Digite uma opcao:\n 1(Adicao) \n 2(Subtracao) \n 3(Multiplicacao) \n 4(Divisao) \n"); /*Lendo Opção*/ scanf("%d" ,&op); /*Dando acesso dos valores lidos para a variável*/ switch (op){ /*Iniciando comando switch*/ case 1: /*Primeira Case do programa (Adição)*/ printf("Digite primeiro valor para a adicao: \n"); scanf("%d" ,&x); printf("Digite o outro valor para a adicao: \n"); scanf("%d" ,&y); t=x+y; printf("Resultado da adicao e: %d \n\n" ,t); system ("Pause"); break; /*parada do caso*/ case 2: /*Segunda Case do programa (Subtração)*/ printf("Digite primeiro valor para subtracao: \n"); scanf("%d" ,&x); printf("Digite o outro valor para a subtracao: \n"); scanf("%d" ,&y); t=x-y; printf("Resultado da subtracao e: %d \n\n" ,t); system ("Pause"); break; /*parada do caso*/ case 3: /*Terceira Case do programa (Multiplicação)*/ printf("Digite primeiro valor para multiplicacao: \n"); scanf("%d" ,&x); printf("Digite o outro valor para a multiplicacao: \n"); scanf("%d" ,&y); t=x*y; printf("Resultado da multiplicacao e: %d \n\n" ,t); system ("Pause"); break; /*parada do caso*/ case 4: /*Quarta Case do programa (Divisão)*/ while(x==0) { printf("Digite primeiro valor para divisao: \n"); scanf("%d" ,&x); } while(y==0) { printf("Digite o outro valor para a divisao: \n"); scanf("%d" ,&y); } if(y>x) { t=y/x; } else { t=x/y; } printf("Resultado da divisao e: %d \n\n" ,t); system ("Pause"); break; /*parada do caso*/ default: /*Case de erro se digitar uma opção fora das oferecidas*/ printf("Opcao Invalida! \n"); system ("Pause"); return 0; /*Fim*/ } /*fecha switch*/ } /*fecha todas as chaves*/
Espero que gostem...
Atenciosamente,
João Neto.
Última edição por João Neto; 27-08-2012 às 11:18 PM.
Hidden Content
Um verdadeiro guerreiro sabe que ao perder uma batalha
está melhorando sua arte de manejar a espada.
Saberá lutar com mais habilidade
na próxima vez.
cade a verificação de não pode existir divisão por 0?
Subtitua o CASE 4 por este
Código:case 4: /*Quarta Case do programa (Divisão)*/ printf("Digite primeiro valor para divisao: \n"); scanf("%d" ,&x); if(x==0){ printf("Valor invalido\n"); system("pause"); break;} printf("Digite o outro valor para a divisao: \n"); scanf("%d" ,&y); if(y==0){ printf("Valor invalido"); break; system("pause");} t=x/y; printf("Resultado da divisao e: %d \n\n" ,t); system ("Pause"); break; /*parada do caso*/
@Sunligth,
O objetivo não é como fazer uma calculadora e sim dar uma breve explicação de como usar o Switch e Case... Era um código antigo meu...
@michetti,
Não é querer criticar mais o código postado ainda não era o que se encaixava melhor....
Código do tópico editado para melhor compreenção do Case 4 (Divisão).
Atenciosamente,
João Neto.
Hidden Content
Um verdadeiro guerreiro sabe que ao perder uma batalha
está melhorando sua arte de manejar a espada.
Saberá lutar com mais habilidade
na próxima vez.
Sim, mais é uma solução simples, e tem outra coisa também.
Esta calculadora so resolve resultados quando x é maior que b rs
Tem que mudar uma coisinhas basicas e tals mais como disse no primeiro post é bom para aprendizado.
@edit
Olhando oque você substituiu la, se encaixa perfeitamente ^^
Última edição por michetti; 27-08-2012 às 07:41 PM.
Boa João, porém acho mais prático utilizar o C#.
@michetti,
Pronto, acrescentado mais uma condição no case 4 (Divisão) para melhoramento do código....
Agora tanto faz se X ou Y é maior, a divisão de números inteiros funcionando perfeitamente.
Atenciosamente,
João Neto.
Hidden Content
Um verdadeiro guerreiro sabe que ao perder uma batalha
está melhorando sua arte de manejar a espada.
Saberá lutar com mais habilidade
na próxima vez.
dessa maneira nao tem como eu dividir um numero menor por um maior, seria melhor colocar a variavel "t" como float para aceitar numeros reais.
Nada a declarar.
@Pronoob,
Justamente, não coloquei pois à questão era de números inteiros... Porém para funcionar da forma que você citou, realmente teria que usar variável declarada como float.
Atenciosamente,
João Neto.
Hidden Content
Um verdadeiro guerreiro sabe que ao perder uma batalha
está melhorando sua arte de manejar a espada.
Saberá lutar com mais habilidade
na próxima vez.
@Todos,
Isso vária muto da questão abordada, no caso abordado pelo tópico postado já está de bom tamanho à exemplificação... O que era para ser passado foi feito...
Mas claro que em certos casos é bom abordar o que o Sup_Anjo disse, como o contrário tambem.
Atenciosamente,
João Neto.
Hidden Content
Um verdadeiro guerreiro sabe que ao perder uma batalha
está melhorando sua arte de manejar a espada.
Saberá lutar com mais habilidade
na próxima vez.
Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)
Marcadores