Calculadora RPN Simplificada Ajuda [RESOLVIDO]

1. Calculadora RPN Simplificada Ajuda [RESOLVIDO]

Rodolfo Costa
rods220

(usa Linux Mint)

Enviado em 01/04/2013 - 17:38h

Fala galera blz ? preciso entregar um algoritmo que resolva estes problemas
obs:o Entre parenteses e o resultado

2 2+ (4)Certo
4! (24)Certo
c (Limpar a tela e zerar a variavel) Certo
2 3 +!(120) NAO FAZ ---------
r(Err) NAO FAZ --------






Meu codigo fonte é:


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
/** APS 1 de algoritimo, fazer uma calculadora
Autores:Rodolfo Faustino Da Costa , Ruan DCristo Aguiar
Licença = (by)Esta licença permite que outros distribuam, remixem, adaptem
ou criem obras derivadas, mesmo que para uso com fins comerciais,
contanto que seja dado crédito pela criação original.
http://creativecommons.org/licenses/by/3.0/br/
*/
/**Essa Funçao Retorna O Valor do Valor a+b
@param a,b
@return a+b*/
int soma (int a, int b) {
int sm;
sm = a + b;
return sm;
}
/**Essa Funçao Retorna O Valor do Valor a-b
@param a,b
@return a-b */
int subst (int a, int b) {
int sub;
sub = a - b;
return sub;
}
/**Essa Funçao Retorna A Divisao a/b
@param a,b
@return a/b */
float divisao (int a, int b) {
float div;
div = a / b;
return div;
}
/**Essa Funçao Retorna O Produto(Multiplicaçao) de a,b
@param a,b
@return a*b */
int multip (int a, int b) {
int mult;
mult = a * b;
return mult;
}
/**Essa Funçao Retorna O Valor de a^e
@param a,b
@return a^b*/
float elevado (int a, int b) {
float elev;
elev = pow( a, b);
return elev;
}
/**Essa Funçao Retorna O Valor do Resto de a/b
@param a,b
@return a%b */
int resto (int a, int b) {
int rest;
rest =(a % b);
return rest;
}
/**Essa Funçao Retorna O Valor da Raiz Quadrada de a
@param a,b
@return a+b */
float raiz (int a) {
float raiz1;
raiz1 = sqrt (a);
return raiz1;
}
/**Essa Funçao Retorna O Valor do fatorial de a
@param a
@return a! */
int fatorial (int a) {
int i, fat = 1;
for (i = a; i > 0; i--) {
fat = fat * i;
}
return fat;
}
/**Essa Funçao Retorna O Valor do logaritmo natural de a
@param a
@return log a */
float lg (int a) {
return log (a);
}
/**Essa Funçao Retorna O Valor na sequencia fibonnaci do numero a
@param a
@return fibonacci a */
int fibonacci(int n)
{
int cont, x = 0, z = 1;

if(n % 2 == 0)
{
for(cont = 2; cont != n; cont = cont + 2)
{
x = x + z;
z = x + z;
}
return z;
}
else
{
for(cont = 1; cont != n; cont = cont + 2)
{
x = x + z;
z = x + z;
}}

return x;
}

int main () {
float resultado = 0;
int a, b;
char ch;
while (ch!='t') {
printf ("%f\n\n\n",resultado);
a = 0;b = 0;
scanf (" %d", &a);
scanf (" %d", &b);
scanf (" %c", &ch);
switch (ch) {
case '+':
resultado = resultado + soma(a,b);
printf ("O Resultado e %f\n\n\n", resultado);
system ("clear");
break;
case '-':
resultado = resultado + subst (a, b);
printf ("O Resultado e %f\n\n\n", resultado);
system ("clear");
break;
case '/':
resultado = resultado + divisao(a, b);
printf ("O Resultado e %f\n\n\n", resultado);
system ("clear");
break;
case '*':
resultado = resultado + multip (a, b);
printf ("O Resultado e %f\n", resultado);
system ("clear");
break;
case '^':
resultado = resultado + elevado(a ,b);
printf ("O Resultado e %f\n\n\n",resultado);
system ("clear");
break;
case '%':
resultado = resultado + resto (a, b);
printf ("O Resultado e %f\n\n\n", resultado);
system ("clear");
break;
case 'r':
if (a>=0) {
resultado =raiz (a);
printf ("O Resultado e %f\n\n\n", resultado);
}else{
printf ("Err\n");
}
system ("clear");
break;
case 'l':
resultado = resultado + lg (a);
printf ("O Resultado e %f\n\n\n", resultado);
system ("clear");
break;
case '!':
resultado = fatorial(a);
printf (" O Resultado e %f\n\n\n", resultado);
system ("clear");
break;
case 'f':
resultado = fibonacci(a);
printf ("O Resultado e %f\n\n\n",resultado);
system ("clear");
break;
case 'c':
resultado = 0;
printf ("Calculadora Resetada!\n\n\n");
system ("clear");
break;
case 't':
ch='t';
printf ("Calculadora Desligada");
break;

default:
printf ("Err\n");
break;
}
}
// }
return 0;
}



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/04/2013 - 23:59h

A forma tradicional de resolver esse problema é dividir a linha em tokens,, identificando operandos, que devem ser colocados numa pilha, e operadores, que tomarão um ou mais valores da pilha e farão as respectivas operações com o(s) operando(s) tomado(s) da pilha.

Seu código não tem pilha, e você parece assumir que haverá sempre exatamente dois operandos inteiros seguidos de exatamente um operador. Se faltarem um ou mais desses elementos, suas chamadas a scanf() vão falhar, e seu buffer de entrada vai ficar num estado possivelmente inconsistente, comprometendo as próximas operações de leitura.

Além disso há vários outros problemas espalhados pelo código, que vão desde comentários errados ao uso de variáveis não inicializadas no controle de loops. Alguns desses erros (claro que não os dos comentários) poderiam ser mostrados pelo compilador, se você usasse as devidas opções de diagnóstico. Para o GCC, eu recomendo "-Wall -Werror -O2 -pedantic".

3. Re: Calculadora RPN Simplificada Ajuda [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 08/04/2013 - 10:24h

Talvez isso ajude:
http://www.ubasics.com/simple_c_equation_parser






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts