Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ssimoes

calculadora cientifica

Recommended Posts

ssimoes

Boas,

Preciso de uma calculadora cientifica em c, alguem me pode ajudar?!!!!

Tem que respeitar as prioridades das operações e também tem que ter parenteses...

Obrigado

Share this post


Link to post
Share on other sites
ssimoes

Ja tenho alguma coisita feita....

A minha primeira versão foi uma calculadora simples (as 4 operações) por menu, onde se introduzia os numeros e a operação.

A segunda versao, com as mesmas 4 operações (com prioridade) mas por linha de comando, por exemplo 1+2+3*4-5+2/4=

Estou neste momento a tentar fazer uma 3 versao onde introduzo uma string (com parenteses) e estou a tentar separar os numeros das operações. Os numeros e operações ficam em vectores diferentes e daqui, tentar resolver, por exemplo 1+2*(3+4).

Share this post


Link to post
Share on other sites
Peterv5

O programa vai ter de fazer algo como:

ler uma expressão tipo:

(3*2)+32*(8/5)

e depois dar o resultado, mas o verdadeiro problema vai ser fazer com que o programa consiga interpretar a expressão.

Sugiro que a expressão fique toda numa string e depois se tire os valores numéricos para variáveis float.

Já quase que consegui fazer isso, é um bocado de código á volta das 50 linhas ou assim.

De depois é preciso que o programa perceba onde está uma expressão do género, 2+2 ou 3+5, e saber qual é que precisa de executar primeiro, vendo tal pela ordem de * e / serem primeiro que os + e - e também executar primeiro as expressões que estão dentro de parêntesis.

Share this post


Link to post
Share on other sites
ssimoes

Já consigo ler uma string e separar num vetor float os numeros e num vetor char as operações.

Depois nao consigo associar as operações aos numeros, por exemplo,

expressao=1+2+s3+c4+t5*6/7 , numeros[]=1,2,3,4,5,6,7 e operações[]=++s+c+t*/. Como é que consigo saber que operações[2] corresponde a numero[2], operações[4] corresponde a numeros[3] e que operações[6] corresponde a numeros[4] e assim por adiante... Estou a ser muito confuso ???? e ainda faltam os ()....

Share this post


Link to post
Share on other sites
Peterv5

hum, temos de ir com calma, os () ficam para depois, por agora vamos fazer as operações.

Vou aqui estudar uns métodos para ver se consigo fazer isso.

EDIT: acho que descobri uma solução vou explora la

EDIT2: O há um problema, o método que estou a utilizar é limitado a 52 números, não é infinito. Mesmo assim vou continuar a explorar o método.

EDIT3: Ok, o método que estava a explorar não é muito eficiente, e também já estou um pouco canssado, vou continuar mais tarde boa sorte

Share this post


Link to post
Share on other sites
ssimoes

OK, ja tenho um programa completo que faz as operações básicas com prioridades.

agora tenho outro problema!!!! nao consigo fazer SQRT, isto é, se fizer sqrt(4) funciona perfeitamente mas se fizer

sqrt(numeros[ i]) diz que nao conhece a funcao sqrt, o que se passa?

Qual a funcao também para calcular os senos, cosenos e tangentes?

já agora, estou a utilizar o UBUNTU e o Anjunta para desenvolvimento com o gcc....

Como é que te posso enviar o meu código, se é que precisas dele.....

obrigado.

Share this post


Link to post
Share on other sites
TheDark

Como é que te posso enviar o meu código, se é que precisas dele.....

Podes postá-lo aqui.


Desaparecido.

Share this post


Link to post
Share on other sites
Peterv5

OK, ja tenho um programa completo que faz as operações básicas com prioridades.

agora tenho outro problema!!!! nao consigo fazer SQRT, isto é, se fizer sqrt(4) funciona perfeitamente mas se fizer

sqrt(numeros[ i]) diz que nao conhece a funcao sqrt, o que se passa?

Qual a funcao também para calcular os senos, cosenos e tangentes?

já agora, estou a utilizar o UBUNTU e o Anjunta para desenvolvimento com o gcc....

Como é que te posso enviar o meu código, se é que precisas dele.....

obrigado.

Essas funções estão num header chamado math.h, á informação bastante simples sobre ela no Cplusplus, aqui tens o link:

http://www.cplusplus.com/reference/clibrary/cmath/

Depois de incluires o math.h, basta utilizares as funções sin(), cos(, tan(), entre outras. Claro que todas elas devolvem um float.

Share this post


Link to post
Share on other sites
ssimoes

Obrigado, pela dica...

já tinha o #inlude <math.h> no codigo.

Agora, o compilador nao reconhece o sqrt, estou a usar o anjunta

Share this post


Link to post
Share on other sites
TheDark

O seguinte código compila e funciona bem aqui:

#include <math.h>

int main() {
float numeros[10] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 },
	raizes[10];
int i;

for (i = 0; i < 10; ++i)
{
	raizes[i] = sqrt(numeros[i]);
}

return 0;
}

O que tens é semelhante? Qual é o texto exacto do erro?


Desaparecido.

Share this post


Link to post
Share on other sites
djthyrax

Se o teu compilador é o GCC ou relacionado, acho que tens que usar uma flag qualquer na compilação para ele incluir o math.h (acho que é a -lm). Digo eu.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.