Johan 0 Denunciar post Postado Abril 1, 2015 2) Faça um programa que implemente uma máquina de calcular simples com operações +, -, *, / e %, através da leitura de dois operandos numéricos e do operador (tipo caracter), no formato: n1,n2 e operacao. A operação de resto somente pode ser efetuada com números inteiros. Utilize as letras X ou x para encerrar a calculadora. Então, estou com dificuldade para "entender", sacar a lógica. Comecei meu curso recentemente, se possível alguém poderia apontar o meu erro e tentar explicar? Meu código-fonte: #include <stdio.h>#include <locale.h>void main(){ //Variáveis e tipos char operacao; float n1, n2, total; int int_n1, int_n2, resto; int_n1 = n1; int_n2 = n2; //Internacionalização setlocale(LC_ALL, "Portuguese"); //Começo do laço.do{ printf("Informe o tipo de operação: \n"); scanf(" %c", &operacao); //Interruptor e casos switch(operacao){ case ('+'): printf("Informe o primeiro número: \n"); scanf(" %f", &n1); printf("Informe o segundo número: \n"); scanf(" %f", &n2); total = n1 + n2; printf("O total da adição é: %2.f \n", total); break; case ('-'): printf("Informe o primeiro número: \n"); scanf("%f", &n1); printf("Informe o segundo número: \n"); scanf("%f", &n2); total = n1 - n2; printf("O total da subtração é: %2.f \n", total); break; case ('*'): printf("Informe o primeiro número: \n"); scanf("%f", &n1); printf("Informe o segundo número: \n"); scanf("%f", &n2); total = n1 * n2; printf("O total da multiplicação é: %2.f \n", total); break; case ('/'): printf("Informe o primeiro número: \n"); scanf("%f", &n1); printf("Informe o segundo número: \n"); scanf("%f", &n2); total = n1/n2; printf("O total da divisão é: %2.f \n", total); break; //Acredito que meu primeiro erro foi aqui. Quero que ele se transforme em números inteiros para achar o resto... case ('%'): printf("Informe o primeiro número: \n"); scanf("%d", &int_n1); printf("Informe o segundo número: \n"); scanf("%d", &int_n2); printf("O total do resto é: %2.d \n", total = int_n1 % int_n2); break; case ('x'): printf("Fora do sistema"); default: printf("saída do sistema \n"); break; }}while(n1 != 'x'); //Fim do laço// - Não sei a onde encaixar isso, se é dentro do laço, ou dentro do switch, ou fora dos dois. //if(n1 == int_n1) && (n2 == int_n2);{//printf("os n são inteiros")//}//else{//printf("Os n tem casas decimais");//} } Grato desde já! Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Abril 1, 2015 No enunciado já diz: "A operação de resto somente pode ser efetuada com números inteiros".E é int main. Void main é coisa de gente com vício.Ainda, se todas as operações possuem dois operandos, por que você repete a leitura em todos os casos? #include <stdio.h> #include <ctype.h> int main(void){ char operacao; float n1, n2, total; while (1) { printf("Informe o tipo de operação: "); scanf("%c%*c", &operacao); if ('x'==tolower(operacao)) break; printf("Informe o primeiro operando: "); scanf("%f%*c", &n1); printf("Informe o segundo operando: "); scanf("%f%*c", &n2); switch(operacao){ case ('+'): total = n1 + n2; break; case ('-'): total = n1 - n2; break; case ('*'): total = n1 * n2; break; case ('/'): if (n2 == 0.0) { // Na prática não se compara ponto flutuante dessa forma por causa de limitação de representação. puts("Não é possível realizar divisão por zero."); } else { total = n1/n2; } break; case ('%'): total= (int)n1 % (int)n2; break; default: puts("Operação inválida"); } if (operacao=='-' || operacao=='+' || operacao=='/' || operacao=='%' || operacao=='*') printf("Total: %.2f\n", total); } return 0; } Compartilhar este post Link para o post Compartilhar em outros sites