Foros del Web » Programación para mayores de 30 ;) » Java »

Division Por 0

Estas en el tema de Division Por 0 en el foro de Java en Foros del Web. Buenas a todos, os mando lineas de código con las que realizo un fichero para calcular un par de variables que representar coordenadas para otro ...
  #1 (permalink)  
Antiguo 06/06/2008, 10:07
 
Fecha de Ingreso: enero-2008
Mensajes: 147
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Division Por 0

Buenas a todos, os mando lineas de código con las que realizo un fichero para calcular un par de variables que representar coordenadas para otro método posterior:

for ( int y = 1; y < 480 ; y++){
for ( int x = 1; x < 640; x++){
if (avg[y][x] > 200){
x1=x;
y1=y;}
while (avg[y][x] > 200){x++;}
xm=x-x1;
x=x1;
y=y1;
while (avg[y][x] > 200){y++;}
ym=y-y1;
ra = xm/ym;
if (4 <= ra & ra <= 5) break;
}}


El problema es la línea subrayada, me indica error de / by zero, que es división por cero que obviamente se que incorrecto, pero el tema es que no debería, según mis condiciones existir la posibilidad de que eso se produzca, ¿que ocurre?, ¿que tengo mal?, ¿como puedo solucionarlo de manera sencilla?
  #2 (permalink)  
Antiguo 06/06/2008, 14:22
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Division Por 0

Hola:

Habría que ver los datos y saber el tamaño de la matriz que estás usando, pero así por encima, después de los dos bucles, la x y la y deberían quedar con valores 480 y 640.

Inmediatamente después de los bucles usas un while con x e y sin darles ningún otro valor. No sé si están o no fuera de rango, pero desde luego no parece que eso sea muy correcto.

Para el siguiente while, haces lo mismo que con el anterior, en vez de x con y, pero al menos esta vez sí has inicializado x e y con algún valor supuestamente dentro del rango de la matriz, x1 e y1. Insisto en que habría que ver los datos, pero en principio x1 e y1 son los mayores valores que tienen valor > 200 (es lo que parece que haces con los dos bucles primeros), por lo que el while no da la impresión de que vaya a incrementar y en nada, por lo que y-y1 será cero.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 06/06/2008, 18:11
 
Fecha de Ingreso: enero-2008
Mensajes: 147
Antigüedad: 16 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Division Por 0

He probado a iniciar los while con i e j sucesivamente en vez de x e y, que no es mu correcto como tu decias. Pero nada, es lo que me has dicho, como si el segundo while no lo hiciera por alguna razon, e incluso yo dudo de que se realice el primero.
While es lo que necesito en este caso para acumular a partir de x1 y de y1 un dato en otra variable que al final serian x e y(aunque mejor llamarlas de otra manera), para obtener mx y my, que me provocan la relacion ra necesaria para finalizar o no el fichero o funcion.

Espero alguna aclaracion o detalle más si se te ocurre. Gracias por contestar.
  #4 (permalink)  
Antiguo 07/06/2008, 06:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Division Por 0

Hola:

Como te comenté, el primer par de for situtal x1 e y1 en el mayor x,y > 200. Por eso, el resto de los bucles NUNCA van a ser true, ya que si x+1 o y+1 fuera > 200, ya estarían situados ahí por los bucles anteriores.

Quizás si explicas qué quieres hacer, sea más fácil indicarte qué parte del algoritmo se puede mejorar.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 07/06/2008, 07:23
 
Fecha de Ingreso: enero-2008
Mensajes: 147
Antigüedad: 16 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Division Por 0

Lo que quiero es, que una vez que ya he almacenado las cordenadas x e y en x1 e y1 respectivamente, bajo la condición if(avg[y][x]>200), pues a partir de esas coordenadas, primero recorrer en x e ir acumulando x bajo la misma condicion avg>200 hasta que avg<200, que en ese momento seria mi ultima x y pasaria a calcular mx=x-x1; justo después quiero hacer lo mismo pero en y, a partir de las coordenadas x1 e y1 otra vez acumular y bajo la misma condicion hasta que avg<200, que seria mi ultima y y calcularia my=y-y1 y entonces ya calcularia la division mx/my para evaluar resultado.

GRACIAS.
  #6 (permalink)  
Antiguo 07/06/2008, 22:52
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Division Por 0

Hola:

Me refería a qué quieres, pero a un nivel más alto. Ahí ya estás contando el algoritmo. Por ejemplo, "quiero calcular el máximo x,y de un array en dos dimensiones de coordenadas". Sé que no es eso, porque es más complejo lo que estás haciendo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 08/06/2008, 09:26
 
Fecha de Ingreso: enero-2008
Mensajes: 147
Antigüedad: 16 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Division Por 0

Vamos a ver si me explico para que puedas ayudarme. avg es una matriz que contiene solo vales 0 y 255, y lo que quiero es localizar las coordenadas x e y del primer punto que sea > 200 (o sea blanco), y una vez localizadas almacenarlas y a partir de ellas seguir calculando mientras siga habiendo puntos 255 seguidos y acumular esa coordenada hasta el ultimo 255, asi en x y en y para obtener tambien las coordenadas finales de esa línea de 255 y asi obtener un xfinal y un yfinal con los que calcular esas dos diferencias para la comprobacion final y si se cumple salir del bucle, sino seguir haciéndolo.

Ya sé que con el if lo unico que consigo es las coordenadas finales del ultimo 255, y por eso no me ejecuta los while,lo intentare a partir de ahí con un for decrementando.

Espero haber explicado mi pregunta o problema con claridad, gracias.
  #8 (permalink)  
Antiguo 08/06/2008, 17:19
Avatar de DataLore  
Fecha de Ingreso: junio-2008
Mensajes: 58
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Division Por 0

La opcion que le veo es meter esa division en un bloque try puede que para ese compilador el manejador de errores haga eso con cualquier division y no mire en su entorno para saber si esa condicion pudiera llegar a darse.

Saludos.
  #9 (permalink)  
Antiguo 08/06/2008, 20:47
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Division Por 0

Hola:

Si lo que quieres es eso que comentas, debes revisar los dos bucles del principio, puesto que ahí estás obteniendo las ULTIMAS coordenadas > 200. Por eso siemptre te da cero las siguientes.

También tienes que revisar el concepto de "primer" y "ultimo". Ten en cuenta que es una matriz de dos dimensiones, por lo que no hay un orden claro para los elementos. Si el elemento 1,2 tiene > 200 y el 2,1 > 200, ¿cual es el primero?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #10 (permalink)  
Antiguo 27/01/2011, 10:35
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Division Por 0

Tengo una pregunta, quizas no venga aqui pero es más matemático que técnico. Además aún no manejo bien el foro como para crear un nuevo tema, así que disculpen de antemano ;)

Bueno la pregunta es esta... entiendo que no puede dividir por cero, por ejemplo:

12/0=z
200/0=z

porque si intentamos comprobar y despejando el resultado me debería dar algo como esto

0 x z=12 => ? INCORRECTO, No verificable
0 x z=200 => ? INCORRECTO, No verificable

obviamente esto no es posible porque todo número multiplicado por 0 es 0, así que no es verificable...

pero me ataca la siguiente duda... porqué no se puede hacer lo siguiente:

0 / 0 = z

algo que puedo verificar despejando sencillamente así:

0 x z = 0 => 0 x 0 = 0, CORRECTO

a mi criterio y realizando los cálculos respectivos, eso es correcto, pero los equipos de cálculo automático arrojan error... QUISIERA SABER PORQUÉ?????? ;)
  #11 (permalink)  
Antiguo 27/01/2011, 10:37
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Division Por 0

Cita:
Iniciado por oswOsito Ver Mensaje

0 / 0 = z
Aquí es:

0 / 0 = z => 0 / 0 = 0
  #12 (permalink)  
Antiguo 27/01/2011, 11:24
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: Division Por 0

Uhhh! si pudiésemos dividir por 0 esto tendría consecuencias catastróficas en las matemáticas que conocemos y utilizamos habitualmente... mejor dejemoslo así,
x/0 para todo x es imposible de realizar.
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #13 (permalink)  
Antiguo 27/01/2011, 11:49
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Division Por 0

0 x z = 0 => 0 x 0 = 0, CORRECTO

sí, pero también cualquier valor de z es válido

0 x z = 0 => 0 x 324 = 0, CORRECTO

así que 0/0 es cualquier valor, no necesariamente cero.
__________________
Apuntes Java
Wiki de Programación
  #14 (permalink)  
Antiguo 27/01/2011, 17:13
Avatar de oswOsito  
Fecha de Ingreso: agosto-2010
Ubicación: Quito
Mensajes: 32
Antigüedad: 13 años, 7 meses
Puntos: 0
Información Respuesta: Division Por 0

Cita:
Iniciado por chuidiang Ver Mensaje
0 x z = 0 => 0 x 0 = 0, CORRECTO

sí, pero también cualquier valor de z es válido

0 x z = 0 => 0 x 324 = 0, CORRECTO

así que 0/0 es cualquier valor, no necesariamente cero.
MUUYYYY BIEN.... ahora si entendi...... pues claro, z puede ser 1, 12, 98,549,..... infinito ..... ;) oki... gracias por tu respuesta chuidiang
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:03.