Calculadora em C [RESOLVIDO]

1. Calculadora em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/04/2011 - 17:27h

A minha calculadora está com a lógica certa,porém ela dá resultados grandes,ou seja os números do resultado são enormes.O que pode ser?

veja o código-fonte:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
// Variaveis
int n1, n2;
int opcao;
int soma,divisao,multiplicacao,subtracao;

// Entrada de Dados
printf("Informe o primeiro numero: ");
scanf("%d", &n1);
printf("Escolha uma opcao: "
"\n 1.Somar"
"\n 2.Subtrair"
"\n 3.Multiplicar"
"\n 4.Divisao");
printf("\n Opcao numero: ");
scanf("%d", &opcao);
printf("Informe o segundo numero: ");
scanf("%d", &n2);

// Processamento
getchar();
switch(opcao){
case 1:
soma:n1+n2;
printf("A soma eh %d",soma);
break;
}

switch(opcao){
case 2:
subtracao:n1-n2;
printf("A subtracao eh %d",subtracao);
break;
}
{
switch(opcao){
case 3:
multiplicacao:n1*n2;
printf("A multiplicacao eh %d",multiplicacao);
break;
}
{
switch(opcao){
case 4:
divisao:n1/n2;
printf("A divisao eh %d",divisao);
}

}
// Final do Codigo
getchar();
}
}



  


2. MELHOR RESPOSTA

Fernando Krein Pinheiro
fernandopinheiro

(usa Debian)

Enviado em 02/04/2011 - 18:10h

Amigo a sua logica esta correta.....o que eu percebo é que voce tem algum problema com a linguagem!!!

Repare na sua construção do switch(), voce esta fazendo um switch para cada case:
Isso não esta correto !!!

Outra coisa nas operações as variaves que deveriam receber o resultado como no caso de soma, subbtração, multiplicação e divisão nao estão recebendo resultado algum pois voce nao passa valor pra elas devido a construção.
voce fez assim:

soma:n1+n2;

quando o correto é assim:

soma = n1+n2;

Por isso que gera os numeros grandes que voce falou pois voce esta imprimindo a "sujeira" que esta na memoria e não o resultado das operações.

O codigo esta corrigido agora:

#include <stdio.h>
//#include <stdlib.h> Nesse ex não precisa
//#include <math.h> Nesse ex não precisa

int main ()
{

int n1, n2;
int opcao;
int soma,divisao,multiplicacao,subtracao;

// Entrada de Dados
printf("Informe o primeiro numero: ");
scanf("%d", &n1);
printf("Escolha uma opcao: ""\n 1.Somar""\n 2.Subtrair""\n 3.Multiplicar""\n 4.Divisao");
printf("\n Opcao numero: ");
scanf("%d", &opcao);
printf("Informe o segundo numero: ");
scanf("%d", &n2);

switch(opcao)
{

case 1:
soma = n1+n2;
printf("A soma eh %d",soma);
break;


case 2:
subtracao = n1-n2;
printf("A subtracao eh %d",subtracao);
break;



case 3:
multiplicacao = n1*n2;
printf("A multiplicacao eh %d",multiplicacao);
break;



case 4:
divisao = n1/n2;
printf("A divisao eh %d",divisao);
}

}

3. Re: Calculadora em C [RESOLVIDO]

Jhonatan Siqueira
jhonatanp

(usa Ubuntu)

Enviado em 02/04/2011 - 17:47h

cole uma saida para vermos
Pode se formatar ainda mais a saída do printf:

printf("A divisao eh %2.0d",divisao); /* por exemplo imprime o conteúdo da variável divisão a lendo como se fosse um inteiro e com duas casas antes da virgula e nenhuma depois. */
se esse for o problema ta ai a solução senão for cole uma entrada e saída pra vermos melhor


4. correções

Jhonatan Siqueira
jhonatanp

(usa Ubuntu)

Enviado em 02/04/2011 - 18:40h

#include <stdio.h>
/*#include <stdlib.h> não precisa desta lib as operações basicas são nativas da liguagem assim como desvios e repetições e a lib stdio tem as operações de entradada e saida que vc precisa */
//#include <math.h>tambem tambem não precisa disso

int main ()
{
// Variaveis
int n1, n2;
int opcao;
int soma,divisao,multiplicacao,subtracao;

// Entrada de Dados
printf("Informe o primeiro numero: ");
scanf("%d", &n1);
printf("Escolha uma opcao: "
"\n 1.Somar"
"\n 2.Subtrair"
"\n 3.Multiplicar"
"\n 4.Divisao");
printf("\n Opcao numero: ");
scanf("%d", &opcao);
printf("Informe o segundo numero: ");
scanf("%d", &n2);

// Processamento
//getchar(); desnecessário
switch(opcao){
case 1:
/* soma:n1+n2; isso eh uma sintaxe avançada pra desvio(if) o ":" entra como senão(else) e coloca um resultado errado na sua variavel soma ou deve existir alguma outra aplicação para o ":" que eu desconheço o correto fico como na linha abaixo usando o simbolo de atribuição "=" */
soma=n1+n2;
printf("A soma eh %d",soma);
break;
}

switch(opcao){
case 2:
subtracao=n1-n2;
printf("A subtracao eh %d",subtracao);
break;
}
{
switch(opcao){
case 3:
multiplicacao=n1*n2;
printf("A multiplicacao eh %d",multiplicacao);
break;
}
{
switch(opcao){
case 4:
divisao=n1/n2;
printf("A divisao eh %d",divisao);
}

}
// Final do Codigo
//getchar(); desnecessário
}
}


5. Re: Calculadora em C [RESOLVIDO]

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 04/04/2011 - 00:29h

Bom, o tópico já foi marcado como respondido, porém vou deixar meus 2 cents :)

1) Como um amigo já havia comentado acima, não precisa fazer um switch para cada clausula.

Pode fazer o seguinte:
switch( opcao ){
case 1:
soma = n1 + n2;
break;

case 2:
subtracao = n1 - n2;
break;

case 3:
multiplicacao = n1 * n2;
break;

case 4:
divisao = n1 / n2;
break;
}

Outra coisa: voce esta declarando o resultado da multiplicacao e divisao como inteiro.
Logo, sendo n1 e n2 inteiros, se por exemplo eles forem 1 e 2 respectivamente, o resultado da divisão será:
divisao = n1 / n2; // divisao = 0 e não 0.5;

Isso acontece porque você está dividindo dois inteiros. Logo, no C a divisao de dois inteiros retorna um inteiro, ignorando a parte decimal do resultado.

Para resolver esse problema, declare divisao e multiplicacao como float e faça:
divisao = (float)n1 / (float)n2;
multiplicacao = (float)n1 * (float)n2;

Espero ter ajudado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts