C/Visual C - Problema con codigo para raices cuadradas

 
Vista:

Problema con codigo para raices cuadradas

Publicado por Gonzalo Segura (3 intervenciones) el 19/03/2007 20:09:46
Hola a todos, primero que nada me prensento, me llamo gonzalo, soy nuevo en lo de la programación en c, y tengo algunas dudas.

miren realize un código segun yo, para calcular raices cuadradas, ocupando el algorimo babilonico (mas info http://es.wikipedia.org/wiki/Ra%C3%ADz_cuadrada ), pero al momento de ejuctarlo no hace nada.. me regresa al compilador (ocupo Borland Turbo C++ IDE 3.0), abri el ejecutable y me arroja un error de punto flotante por una division por cero... pero en ninguna parte del código, segun yo, sucede eso, el mismo algoritmo lo aplique en mi calculadora, y me lo realiza sin problemas, a continuacion les pongo el código, espero que alguien me oriente en donde tengo el error.
de antemano muchas gracias

#include <stdio.h>
#include <conio.h>
main()
{
float x;
float b=1;
clrscr();
printf("Ingresa la raiz cuadrada a calcular \n");
scanf("%f",&x);
do{
b=x;
if(b==x/b){
printf("La raiz cuadrada de %f es %f",x,b);
}
else{
b=((1/2)*(x/b+b));
}
}while(b==x/b);
printf("La raiz cuadrada de %f es %f",x,b);
getche();
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con codigo para raices cuadradas

Publicado por JuanC (57 intervenciones) el 19/03/2007 20:38:29
Debes tener cuidado que b sea distindo de cero -el usuario puede
ingresar cero o valores negativos...-
El problema puede estar en la línea

b = ((1/2) * (x/b+b));

fijate que los paréntesis estén bien (no sé la fórmula original cómo es)
y cambiá 1/2 por 1.0/2.0 estás trabajando con floats

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con codigo para raices cuadradas

Publicado por Gonzalo (3 intervenciones) el 20/03/2007 00:27:09
Hola JuanC y gracias por tu consejo..

intente como tu comentas, pero de todas formas no da el resultado, claro que ahora al menos ya me da valores, pero no el que debe de ser (jejejeje)
de todas formas te agradesco mucho tu ayuda

salu2 desde MeX
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:como se acen raices cuadradas en c

Publicado por uno k kiere acer un programa (1 intervención) el 13/12/2008 16:23:55
por favor alguien me podria decir como se acen raices cuadradas en c
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

codigo para resolver la raiz

Publicado por victor (1 intervención) el 14/11/2008 17:02:10
hola no se si alguin me podria AYUDAR con los códigos para la raiz...de visual basic 6.0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con codigo para raices cuadradas

Publicado por Daniel (2 intervenciones) el 20/03/2007 08:33:10
bueno, yo hice tu codigo solo le modifique en el if (b == x/b) lo cambie por una variable auxiliar aux = x/b y el if queda if( b== aux)

bueno, vi la informacion del algoritmo babilonico, pero el algoritmo da una aproximacion a la raiz, asi que el programa puede calcular algunas raices por que no se necesita de muchas iteraciones para dar el valor exacto, pero algunos numeros se tarda demasiado, no se cuanto por que no lo deje corriendo hasta que acabara, y esto es por que el programa se detiene hasta que encuentra el valor exacto yo creo que necesita alguna tolorencia. en fin quedo asi.

#include <stdio.h>
#define TOL 0.0001
main(){
float x,b,aux, aux2;
int OK;
printf("numero a calcular la raiz: ");
scanf("%f", &x);
OK = 1;
b = x;
aux2 = 0;
while (OK){
aux = x/b;
aux2 = fabs(aux2 - b);
if(b == aux || aux2 <= TOL){
printf("La raiz cuadrada de %f es %f\n\n", x,b);
OK = 0;
}
else
aux2 = b;
b = (0.5) * ((x/b) + b);
}
system("pause");
return 0;
}

bueno yo uso Dev C++
espero le entiendas los cambio que hice, y algunas raices son aproximadas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con codigo para raices cuadradas

Publicado por Gonzalo (3 intervenciones) el 20/03/2007 14:27:31
Daniel, muchisimas gracias por el código, me funciono de maravilla, claro que le hice algunos ajuste ;), de todas formas te estoy agradecido por el tiempo que te tomaste.
aquí esta el código funcionando, claro que faltan algunos detalles, como un if para que el usuario no ingrese un valor negativo o cero.
aqui tambien les pongo un código que hice para determinar si un numero es primo o no, espero que a alguien le sea de utilidad (hechos en boraland turbo c++ 3.0)

código raices cuadradas

#include <stdio.h>
#include <conio.h>
main()
{
float x,b,aux;
int cond;
char opc;
do{
clrscr();
printf("Raiz Cuadrada a Calcular?\n");
scanf("%f",&x);
cond=1;
b=x;
while (cond){
aux=x/b;
if(b==aux){
printf("La raiz cuadrada de %f es %f\n\n",x,b);
cond=0;
}
else
b=(0.5)*((x/b)+b);
}
printf("\n\nDESEA CALCULAR OTRA RAIZ?? s/n ");
scanf("%s",&opc);
}while(opc!='n');
return 0;
}

CODIGO DETERMINAR SI UN NUMERO ES PRIMO O NO

#include <stdio.h>
#include <conio.h>
int main(){

int numero;
int divisor;
char opc;
clrscr();
printf("PROGRAMA PARA DETERMINAR SI UN NUMERO ES PRIMO\n\n");
printf("\n\nINTRODUCE TU NUMERO :");
scanf("%d",&numero);
for (divisor=2;numero%divisor!=0;divisor++);
if (divisor==numero){
printf ("\n\n\nEL NUMERO %d ES PRIMO",numero);
}
else{
printf ("\n\n\nEL NUMERO %d NO ES PRIMO",numero);
}
printf("\n\nDESEA DETERMINAR OTRO NUMERO s/n ");
scanf("%s",&opc);
while(opc!='n');
return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar