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

ssimoes

calculadora cientifica

15 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E dares mais detalhes?

E mostrares o que já fizeste (ou tentaste fazer)?

E expôres dúvidas mais concretas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ()....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Podes postá-lo aqui.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, pela dica...

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora