Ir para conteúdo

POWERED BY:

Arquivado

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

Rodrigo R. Moraes

Cálculadora em C

Recommended Posts

Galera,

 

Preciso fazer um "Programa Calculadora em C" que que realize as quatro operações básicas ( + - * / ). O programa deverá ler um número real informado pelo usuário, um sinal de operação (+, -, *, /), outro algarismo real, outro sinal de operação, outro algarismo real, repetindo até que o usuário digite o sinal de igualdade (=). Neste momento o programa deverá informar o resultado da operação com duas casas decimais, encerrando sua execução.

 

Exemplo da tela da saída:

 

Calculadora:

7 + 8 – 5 / 2 * 3 – 1 =

Resultado: 14

 

É importante que se houver erros na utilização, o programa deverá exibir uma mensagem informando o erro e continuar sua execução a partir deste ponto.

 

Exemplo:

 

Calculadora:

7

+

8

$

Operação inválida

5

/

2

*

3

1

=

Resultado: 14

 

 

Algúem já fez algo do tipo?

 

No aguardo, e desde já agradeço.

 

________________

Atenciosamente,

 

Rodrigo R. Moraes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só...

Vou falar algumas coisas que, se você aprender bem, te facilitarão a vida.

Árvores Binárias,

Notações (infix, prefix e postfix) //Se não encontrar nada de jeito busque por notação polonesa reversa

Análise Sintática de uma linguagem.

Separar uma linguagen em tokens de forma eficiente.

Pilhas.

 

Acho que é suficiente, claro que conforme você for adicionando mais elementos à sua calculadora, vai ficando mais complexo!

 

boa sorte!

E, no que precisar, poste ai!

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é esse, não faço a mínima idéia de como desenvolver isso.

Em objetos é fácil, claro.

Tenho uma idéia básica para usar o "Case" ou o "While" mas não sei se vai funcionar. Vou ter que chamar essa calculadora em um sistema Delphi. A mesma tem que ser baseada em C.

 

Tem alguma idéia básica de como fazer ?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que esta tendo um problema de interpretação, pois é para armazenar os valores digitados ou simplesmente imprimilos na tela no decorrer da digitação?? se não é para armazenar os numeros digitados um simples while serve!

 

Vou dar um exemplo:

 

int main()
{
   int total=0;
   char i,aux;
   while(i!='=')
 {
   if((aux=="+")||(aux=="-")||(aux=="/")||(aux=="*"))
   {
       scanf("%c",&i); 
       swhich(aux)
          case + : total +=i;break;
          case - : total -=i;break;
          case * : total *=i;break;
          case / : total /=i;break;
   }
   else
   { 
     scanf("%c",&i);
     if((i=="+")||(i=="-")||(i=="/")||(i=="*"))
     aux=i;
   }
 }
printf("%d",total);
}

utilizei o i como char para efetuar soma com um char você terá que efetuar uma operação de casting para efetuar a alteração, não sei se no modo que apresentei acima (implicito) irá funcionar (não testei), utilizei um auxiliar, tambem é necessário ver o tamanho do char a ser utilizado, ou se será melhor utilizar string (?)... tambem não testei a lógica fica pra você fazer um teste de mesa...

 

Espero ter lhe ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, sua idéia foi ótima, bolei algo quase do tipo.

Mas a minha dúvida é o seguinte...

 

As somas não precisam aparecer na tela, apenas o usuário vai digitando...

 

Ex: 1+2*9-5+8/4 e tals ate que ele pressione a tecla =

 

Ai imprime na tela o valor total, sacou ?

 

Estou com dúvida para fazer esse "enquanto" do =

 

 

Grato.

 

__________________

Atenciosamente,

 

Rodrigo R. Moraes

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo isso:

#include <stdio.h>

int main(){
    char cTecla;
    for(;;){
        cTecla=getch();
        if (cTecla=='=') {
            printf("=");
            break;
        }
        else printf("%c", cTecla);
    }
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

EDIT: O quitZAUMMMM acabou de responder... respondemos juntos.

-----------------------------------------------------------

enquanto tecla_pressionada != '=':
    /*... seu codigo ...*/

mostra_resultado

Seja mais específico em onde está a sua dúvida.

E uma coisa, sua calculadora só vai suportar números de 0 à 9?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, ainda nao consegui fazer a tal calculadora.

 

Preciso que ela realize as quatro operações básicas ( + - * / ).

O programa deverá ler um número real informado pelo usuário, um sinal de operação (+, -, *, /), outro numero real, outro sinal de operação, outro algarismo real, repetindo até que o usuário digite o sinal de igualdade (=). Neste momento o programa deverá informar o resultado da operação com duas casas decimais, encerrando sua execução.

 

 

Ou seja:

 

1+2*3-4/5*6+7-8*9... ai o programa vai calculando isso tudo ai... e qndo ele pressionar o = o programa mostrar o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de tudo q tentamos ajudar, poste como está seu código, para analizarmos!

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo, fiz o código básico de uma calculadora.

Mas não to tendo ideia pra colocar em loop, ou seja,

o usuário vai inserindo valor, operador, valor, operador, etc, etc, etc...

Até que ele pressione a tecla =

Ai mostra apenas o resultado total.

 

*****************************************************************

int main()
{
    int n1 ,n2, result;
    char oper;
   
    printf("\nInsira o primeiro numero: ");
    scanf("%d", &n1);
    printf("\nInsira o seguno numero: ");
    scanf("%d", &n2);
    do
    {
      printf("\nInsira a operação a efectuar (+,-,*,/): ");
      scanf(" %c",&oper);
    }
    while(oper != '+' && oper != '-' && oper != '*' && oper != '/');
    
    switch(oper)
    {
      case '+' : result = n1 + n2; break;
      case '-' : result = n1 - n2; break;
      case '*' : result = n1 * n2; break;
      case '/' : result = n1 / n2; break;
    }
      printf("\nOs valores %d e %d em conjunto com a operacao \"%c\" originam o resultado %d.\n", n1, n2, oper, result);
      system("PAUSE");
      return 0;
}
***********************************************************

 

Idéias ?

 

________________

Atenciosamente,

 

Rodrigo R. Moraes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Note que, você recebe um número, um operador, um número, um operador, ..., um número, um igual.

Você só precisa de uma variável, faça algo do tipo:

isNumero = true
while input != "=":
    if (isNumero):
        aux = int(input)
        isNumero = false
    else
        case input of:
            "+": DoPlus()
            "-": DoMinus()
            "*": DoTimes()
            "/": DoDiv()
        
        isNumero = true

show(aux)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, ainda estou no começo da linguegem C, então desculpa ai as perguntas...

 

Mas, eu jogo isso depois das variáveis que criei ?

Se pude me dar uma "luz" em cima do meu código... agradeço.

 

**********************************

int main()
{
    int n1 ,n2, result;
    char oper;
   
    printf("\nInsira o primeiro numero: ");
    scanf("%d", &n1);
    printf("\nInsira o seguno numero: ");
    scanf("%d", &n2);
    do
    {
      printf("\nInsira a operação a efectuar (+,-,*,/): ");
      scanf(" %c",&oper);
    }
    while(oper != '+' && oper != '-' && oper != '*' && oper != '/');
    
    switch(oper)
    {
      case '+' : result = n1 + n2; break;
      case '-' : result = n1 - n2; break;
      case '*' : result = n1 * n2; break;
      case '/' : result = n1 / n2; break;
    }
      printf("\nOs valores %d e %d em conjunto com a operacao \"%c\" originam o resultado %d.\n", n1, n2, oper, result);
      system("PAUSE");
      return 0;
}
******************************************

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz alguma coisa pra você.

Note que você precisa de um loop na hora de "pegar" operações do usuário.

 

Note também que a expressão:

12+4*3= será avaliada: (12+4)*3

pois a calculadora não sabe sobre a precedencia dos operadores.

 

#include <stdio.h>

#define mIsOperation(c) (c == '+' || c == '-' || c == '*' || c == '/')

int main(int argc, char *argv[])
{
long long int num, aux;
char op;

	printf(">>: ");
	scanf("%d", &num);
	
	while ((scanf("%c", &op) == 1) && mIsOperation(op))
	{
		scanf("%d", &aux);
		switch (op)
		{
			case '+': num += aux; break;
			case '-': num -= aux; break;
			case '*': num *= aux; break;
			case '/': num /= aux; break;		
		}
	}

	if (op == '=')
		printf("\nResult: %ld\n", num);
	else
		printf("\nUnknow Operation '%c', exiting.\n", op);

	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que entendi a sua ideia.

mas qndo mando rodar o codigo, ele me pede para entrar com um numero correto?

entro com o numero e ele sai do programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é logico... você digita um número e aperta enter...

Olha o código, só é suposto você apertar "enter" após escrever o sinal de igual ('=')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, sim, entendi + - o código.

 

Acontece que ele me da a seguinte mensagem:

 

´1+1´ não é reconhecido como um comando intertno ou externo, um programa operável ou um arquivo em lotes.

 

ou

 

´1+1=´ não é reconhecido como um comando intertno ou externo, um programa operável ou um arquivo em lotes.

 

 

Isso ai tanto faz, eu apertar um nº depois enter ou nº operador nº denovo e depois =.

 

Lembrando que estou usando o Devc++ para testar.

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.