Inserir operação matemática

1. Inserir operação matemática

Rafael
rafaclara2401

(usa Outra)

Enviado em 05/09/2015 - 01:22h

Galera, eu gostaria de saber como eu faço para inserir uma operação completa em um programa, por exemplo 2+9*7/8, queria saber o que usar para inserir a operação toda de uma vez


  


2. Re: Inserir operação matemática

Ednux
ednux

(usa Arch Linux)

Enviado em 05/09/2015 - 01:43h

Bom, isso depende da equação que vocêr inserir e a forma como você quer trabalhar com ela.
Acredito que a dúvida seja com relação a precedência de operadores, por exemplo: 2+9*7/8 pode ser:
2 + (9*7) / 8 = 2 + 63 / 8 = 2 + 7,875 = 9,875.
Observe a ordem em que as operações foram feitas, a multiplicação no parênteses, depois a divisão e só então a soma.

Se essa for a sua dúvida, veja mais em http://www.ime.usp.br/~pf/algoritmos/apend/precedence.html
Se não for, seja mais especifico sobre o que você quer fazer.


3. Re: Inserir operação matemática

Rafael
rafaclara2401

(usa Outra)

Enviado em 05/09/2015 - 01:49h

ednux escreveu:

Bom, isso depende da equação que vocêr inserir e a forma como você quer trabalhar com ela.
Acredito que a dúvida seja com relação a precedência de operadores, por exemplo: 2+9*7/8 pode ser:
2 + (9*7) / 8 = 2 + 63 / 8 = 2 + 7,875 = 9,875.
Observe a ordem em que as operações foram feitas, a multiplicação no parênteses, depois a divisão e só então a soma.

Se essa for a sua dúvida, veja mais em http://www.ime.usp.br/~pf/algoritmos/apend/precedence.html
Se não for, seja mais especifico sobre o que você quer fazer.



Não, minha dúvida não é quanto a precedência.. minha dúvida é em como inserir qualquer expressão matemática que seja em C++..
Por exemplo, eu digitar a operação 2+2 de uma vez só, e o programa resolver



4. Re: Inserir operação matemática

Ednux
ednux

(usa Arch Linux)

Enviado em 05/09/2015 - 02:19h

Conforme o número de operações e váriaveis aumentam, o código fica mais complicado.
Mas a ideia é tentar interpretar e ter váriaveis suficientes para fazer tudo o que o usuário deseja.
Para tornar esse código melhor, você pode usar alocação dinamica e perguntar quantas váriaveis ele deseja e qual o tipo de dado.


#include <stdio.h>

int main(void) {
int a, b, resultado = 0;
char operacao;

printf("Digite uma operacao: "); //Exemplo 2+2
scanf("%d %c %d", &a,&operacao, &b);

switch(operacao) {
case '+':
resultado = a + b;
break;
case '-':
resultado = a - b;
break;
case '/':
resultado = a / b;
break;
case 'x':
case 'X':
case '*':
resultado = a * b;
break;
default:
printf("Operador %c invalido\n", operacao);
}

printf("Resultado: %d\n", resultado);

return 0;
}








5. Re: Inserir operação matemática

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 05/09/2015 - 07:54h

Não sei se entendi certo, mas o amigo quer colocar 2+2 em um código.

Seria algo assim:


#include <stdio.h>

int main(){
int i = 2+20/40*10*(5+7);
printf("O Resultado eh %d\n",i);
return 0;
}


Seria isso?

Espero ter ajudado

[]'s

T+

--

body@human: $ sudo su
brain@human: # apt-get purge -y windows* && echo "Windows removed successfully"




6. Re: Inserir operação matemática

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 05/09/2015 - 13:19h


Eu entendi que gostaria de passar um entrada pelo usuario e retorne a resposta.

Ex:
$ meu_programa "3 + 2 / 1"
1
$

O que queres fazer é um parser. Não é algo simples em C, queria armazenar cada carácter, traduzir a equação e resolver.
Do mais fácil, eu passei para o shell calcular, via call system, e repassaria a saída dele. O que é trabalhoso também



7. Re: Inserir operação matemática

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 05/09/2015 - 13:25h

Amigo uilianries, imagino que seja isso que ele queira.

A algum tempo ele já fez esse tipo de pergunta: http://www.vivaolinux.com.br/comunidades/userview.php?login=rafaclara2401

Então é provável que ele queira um 'Parser', mas é uma coisa muito complicada de fazer, se for iniciante mais ainda...

Espero ter ajudado

[]'s

T+

--

body@human: $ sudo su
brain@human: # apt-get purge -y windows* && echo "Windows removed successfully"




8. Re: Inserir operação matemática

Rafael
rafaclara2401

(usa Outra)

Enviado em 08/09/2015 - 00:40h

uilianries escreveu:


Eu entendi que gostaria de passar um entrada pelo usuario e retorne a resposta.

Ex:
$ meu_programa "3 + 2 / 1"
1
$

O que queres fazer é um parser. Não é algo simples em C, queria armazenar cada carácter, traduzir a equação e resolver.
Do mais fácil, eu passei para o shell calcular, via call system, e repassaria a saída dele. O que é trabalhoso também


Sim, o que quero fazer é um Parser, mas não sei por onde começar. Pode me indicar algum lugar na internet, ou algum livro que me dê uma luz sobre isso ?




9. Re: Inserir operação matemática

Rafael
rafaclara2401

(usa Outra)

Enviado em 08/09/2015 - 00:42h

Thihup escreveu:

Amigo uilianries, imagino que seja isso que ele queira.

A algum tempo ele já fez esse tipo de pergunta: http://www.vivaolinux.com.br/comunidades/userview.php?login=rafaclara2401

Então é provável que ele queira um 'Parser', mas é uma coisa muito complicada de fazer, se for iniciante mais ainda...

Espero ter ajudado

[]'s

T+

--

body@human: $ sudo su
brain@human: # apt-get purge -y windows* && echo "Windows removed successfully"



Sim, eu já fiz essa pergunta há um tempo atrás, porém eu tinha deixado isso de lado por um tempo até entrar na faculdade, mas como entrei agora, voltei a programar, e me voltou essa velha dúvida que ainda não consegui solucionar, não faço ideia de por onde começar




10. Re: Inserir operação matemática

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 08/09/2015 - 08:26h

Amigo, eu e o gokernel estamos criando uma mini linguagem de programação.

Nela possui parser. Se quiser estudar por ela, segue link [1]

Obs: Nessa linguagem, fazemos uso de Assembly 32 bits. Recomendo saber um pouco de Assembly para entender o código.

Espero ter ajudado

[]'s

T+

--

body@human: $ sudo su
brain@human: # apt-get purge -y windows* && echo "Windows removed successfully"

[1]: http://www.vivaolinux.com.br/topico/C-C++/Mini-Linguagem/


11. Re: Inserir operação matemática

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 08/09/2015 - 14:12h


Eu fiz isso na corrida, mas acho que é o que tu queres:



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

#define BUFFER_SIZE 256

int main(int argc, char * argv [])
{
char buffer [BUFFER_SIZE] = {0};
FILE * fd = NULL;

if (argc != 2) {
printf("Passe somente a equacao como parametro\n");
exit(EXIT_FAILURE);
}

fd = popen("/usr/bin/bc -q -l", "w");
if (fd == (FILE *) NULL) {
printf("Nao pode executar o comando\n");
exit(EXIT_FAILURE);
}

if(fprintf(fd, "%s\n", argv[1]) == 0) {
printf("Nao pode passar equacao\n");
exit(EXIT_FAILURE);
}

while(fgets(buffer, BUFFER_SIZE - 1, fd) != (char *) NULL) {
printf("Resultado: %s\n", buffer);
}

fprintf(fd, "quit\n");

pclose(fd);

return EXIT_SUCCESS;
}



12. Re: Inserir operação matemática

Fernando
phoemur

(usa Debian)

Enviado em 08/09/2015 - 21:35h

Existe uma biblioteca chamada GNU libmatheval que serve para fazer o que você precisa. Atua como parser de funções matemáticas inseridas como texto. É um negócio muito mais sério do que 2+9*7/8, pois faz até derivadas de equações.

http://www.gnu.org/software/libmatheval/


Também tem este:
https://github.com/jamesgregson/expression_parser

E este:
http://muparser.beltoforion.de/

Em resumo. Se for apenas pra uso, é mais fácil utilizar software e bibliotecas já existentes do que reinventar a roda.
Já se for pra estudo daí é outra história, porém é altamente produtivo verificar como programadores experientes resolveram o problema nessas bibliotecas do que acabar com uma solução meia boca para um problema cuja solução já é fartamente documentada.

Um abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts