ordep Posted November 15, 2006 at 07:24 PM Report #64579 Posted November 15, 2006 at 07:24 PM Alg aqui sabe como fazer uma maquina cientifica em c???eu ja fix uma normal mas nao tou a conseguir fazer a cientifica??alg sabe um link de um site???
Rui Carlos Posted November 15, 2006 at 07:28 PM Report #64581 Posted November 15, 2006 at 07:28 PM qual é a dificuldade em relação a uma normal? Rui Carlos Gonçalves
ordep Posted November 15, 2006 at 07:30 PM Author Report #64582 Posted November 15, 2006 at 07:30 PM Não sei por ond comexar tenho k fazer de novo sera k dava para continuar com a normal???
Rui Carlos Posted November 15, 2006 at 07:35 PM Report #64583 Posted November 15, 2006 at 07:35 PM não sei exactamente o que pretendes, mas acho que era só acrescentar funcionalidades à normal... tenta ser mais explícito nas dúvidas que tens. Rui Carlos Gonçalves
ordep Posted November 15, 2006 at 07:41 PM Author Report #64584 Posted November 15, 2006 at 07:41 PM tenho uma maquina normal ja feita em c!!! o prob gostava de fazer uma cientifica e nao sei como fazer...a minha maquina a unica coisa que faz é somar,dividir,multiplicar e subtrair...gostava que me fizesse os expoentes,as raizes quadradas mas nao sei como...
Rui Carlos Posted November 15, 2006 at 07:47 PM Report #64585 Posted November 15, 2006 at 07:47 PM já existem funções em C para a raíz quadrada, seno, co-seno, etc. para os expoentes, também não é difícil definir a função, basta fazer um ciclo (embora para que seja efiente já seja ligeiramente mais difícil). vai colocando aqui o que já tens feito, que quando tiveres dúvidos o pessoal dá uma ajuda. Rui Carlos Gonçalves
Warrior Posted November 15, 2006 at 08:36 PM Report #64599 Posted November 15, 2006 at 08:36 PM uma forma +- eficiente de se fazer uma função exponencial em C. (log expoente) int mypow(int a,int b) { /*a elevado a b*/ if (b==0) return 1; return b%2==0?pow(a,b/2)*pow(a,b/2):pow(a,b/2)*pow(a,b/2)*a; } 2^4 = 2^2*2^2 2^5 = 2^2*2^2*2 Para expoentes grandes: 2^100 = 2^50*2^50. Conseguimos reduzir o expoente para metade em cada iteração. Quando expoente = 100, fazemos 10 iterações ao contrário das 100 esperadas. Se for = 10000, fazemos somente 100, etc.
Rui Carlos Posted November 15, 2006 at 08:45 PM Report #64600 Posted November 15, 2006 at 08:45 PM uma forma +- eficiente de se fazer uma função exponencial em C. (log expoente) int mypow(int a,int b) { /*a elevado a b*/ if (b==0) return 1; return b%2==0?pow(a,b/2)*pow(a,b/2):pow(a,b/2)*pow(a,b/2)*a; } 2^4 = 2^2*2^2 2^5 = 2^2*2^2*2 Para expoentes grandes: 2^100 = 2^50*2^50. Conseguimos reduzir o expoente para metade em cada iteração. Quando expoente = 100, fazemos 10 iterações ao contrário das 100 esperadas. Se for = 10000, fazemos somente 100, etc. por acaso não sabia que já existia a função 'pow'... já agora, não era melhor colocar o valor de 'pow(a,b/2)' numa variável em vez de o calcularmos duas vezes? EDIT: não seria melhor por a função a receber double's e esquecer a divisão inteira (visto que a função 'pow' trabalha com double's)? Rui Carlos Gonçalves
Warrior Posted November 15, 2006 at 10:01 PM Report #64626 Posted November 15, 2006 at 10:01 PM Sim. Há sempre formas de aperfeiçoar.. A técnica de guardar pow(a,b/2) chama-se memoization, gravar valores anteriores num vector para os irmos buscar. Muito frequente, por exemplo, no algoritmo recursivo da sequência de Fibonacci. Neste problema em particular, nem é preciso vector auxiliar: long long mypow(long long a,long long b) { /*a elevado a b*/ long long c; if (b==0) return 1; c=pow(a,b/2); return b%2==0?c*c:c*c*a; } Edit: Não uso doubles porque não tenho a certeza que a função funcione com floats. Julgo que não. Por via das dúvidas deixo-a pelos inteiros (ainda que extra-large).
Rui Carlos Posted November 15, 2006 at 10:08 PM Report #64631 Posted November 15, 2006 at 10:08 PM Edit: Não uso doubles porque não tenho a certeza que a função funcione com floats. Julgo que não. Por via das dúvidas deixo-a pelos inteiros (ainda que extra-large). a função trabalha com double's: double pow(double x, double y); Rui Carlos Gonçalves
Warrior Posted November 15, 2006 at 10:19 PM Report #64633 Posted November 15, 2006 at 10:19 PM Sim, o da math.h trabalha. O que eu escrevi, trabalha também?
Rui Carlos Posted November 15, 2006 at 10:34 PM Report #64635 Posted November 15, 2006 at 10:34 PM Sim, o da math.h trabalha. O que eu escrevi, trabalha também? penso que sim, por que haveria de não trabalhar? Rui Carlos Gonçalves
pedrotuga Posted November 15, 2006 at 11:00 PM Report #64639 Posted November 15, 2006 at 11:00 PM ordep... como disse o rui... qual é o problema? A única coisa que tens que fazer é chamar funções.
TheDark Posted November 17, 2006 at 12:30 AM Report #64857 Posted November 17, 2006 at 12:30 AM Porque é que isto está na secção Pascal? EDIT: estava... 😕 Desaparecido.
brink@ero Posted November 17, 2006 at 12:41 AM Report #64863 Posted November 17, 2006 at 12:41 AM Porque é que isto está na secção Pascal? EDIT: estava... 😉 Erro meu corrigido... Cumpr. bk@ero 😕
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now