Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Johan

Calculadora em C!

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.