(c) Programa que calcula raiz não esta funcionando como deveria! Qual o erro?

4 respostas
Neviat

Escrevi esse código. É um programa que que pede o número que se deseja calcular e a precisão do calculo:

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

double Raiz(double numb, int zero) {
	double zr = 10, re = 10;
	for (int qnt = 1; qnt <= zero; qnt++) {
		zr = zr / 10;
		for (re = re - zr * 10; re <= numb; re += zr) {
			if ((re * re) == numb) return(re);
			if ((re * re) > numb) break;
		}
	}
	return(re - zr);
}

int main() {
	int resp = 1, zero;
	double numb;
	while (resp == 1) {
		printf("Raiz de: ");
		scanf("%lf", &numb);
		printf("Precisao de casas decimais: ");
		scanf("%i", &zero);
		printf("\nRaiz de %lf = %lf.", numb, Raiz(numb, zero));
		printf("\n\nFazer outra operacao? \n1 - Sim \n2 - Nao \n>> ");
		scanf("%i", &resp);
	}
	printf("\n\n");
	system("pause");
	return(0);
}

Quando se pede o calculo do número 300, por exemplo, ele devolve como resultado o mesmo número. Mas quando pedimos o calculo de números que sabemos que tem um resultado inteiro, como 4 ou 25, ele devolve a resposta certa. Qual o erro no código?
Tenho outra duvida: como ocultar os zeros depois da virgula num double? Tipo, ao invés de receber o valor 30.450000, receber apenas 30.45, já que o resto é desnecessário.

4 Respostas

matheuslmota

Seu cálculo além de está errado e o princípio dele não é eficiente. Nesse link aqui tem várias implementações legais do cálculo da raiz quadrada em linguagem C, dê uma estudada nos algorítmos:
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

Neviat

matheuslmota:
Seu cálculo além de está errado e o princípio dele não é eficiente. Nesse link aqui tem várias implementações legais do cálculo da raiz quadrada em linguagem C, dê uma estudada nos algorítmos:
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

Meu cálculo não está errado!
Na verdade nem o código está errado, apenas errei um pequeno detalhe na hora de copia-lo para o compilador.
Troquei o > por ==.
Mas obrigado pela tentativa!

matheuslmota

Neviat:
matheuslmota:
Seu cálculo além de está errado e o princípio dele não é eficiente. Nesse link aqui tem várias implementações legais do cálculo da raiz quadrada em linguagem C, dê uma estudada nos algorítmos:
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

Meu cálculo não está errado!
Na verdade nem o código está errado, apenas errei um pequeno detalhe na hora de copia-lo para o compilador.
Troquei o > por ==.
Mas obrigado pela tentativa!


Foi isso mesmo que achei errado.
Agora o seu código não é eficiente. Tente botar ele para calcular a raiz quadrada de 5000000 com 10 dígitos de precisão e verá do que estou falando. Você basicamente fica elevando um número ao quadrado e vai incrementando até atingir o valor do número que você quer achar a raiz. Isso é um processo muito lento.
Leia as soluções no link que eu passei, são bem mais eficientes.

Neviat

matheuslmota:
Foi isso mesmo que achei errado.
Agora o seu código não é eficiente. Tente botar ele para calcular a raiz quadrada de 5000000 com 10 dígitos de precisão e verá do que estou falando. Você basicamente fica elevando um número ao quadrado e vai incrementando até atingir o valor do número que você quer achar a raiz. Isso é um processo muito lento.
Leia as soluções no link que eu passei, são bem mais eficientes.

Realmente… Na verdade eu estou tentando escrever esse programa só pra execitar mesmo, vou dar uma olhada no link! Vlw!

Criado 3 de agosto de 2012
Ultima resposta 5 de ago. de 2012
Respostas 4
Participantes 2