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

No se como resolver esto...

Estas en el tema de No se como resolver esto... en el foro de Java en Foros del Web. Hola buenas, soy nuevo en el foro y que mejor que empezar con una pregunta jejeje. Tengo que hacer estos dos ejercicios y por más ...
  #1 (permalink)  
Antiguo 19/02/2013, 11:03
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
No se como resolver esto...

Hola buenas, soy nuevo en el foro y que mejor que empezar con una pregunta jejeje.

Tengo que hacer estos dos ejercicios y por más que le de vueltas a la cabeza no consigo sacarlos... a ver si podéis echarme un cable(Entiendo que resolverme los dos sea un poco coñazo, ya que son algo complicados... Asi que aunque resolvierais uno me ayudariais mucho!). Los enunciados son estos:

---Se dice que un número es diabólico si, en base 2, tiene un número impar de ceros. Algunos
ejemplos: el 0, el 2 (10), el 5 (101), el 6 (110), el 8 (1000), el 11 (1011), el 13 (1101).
a. Escribir un método recursivo, diabolico, tal que, dado un número entero n ≥ 0, verifique
si n es un número diabólico. La cabecera del método será la siguiente:
public static boolean diabolico (int n).

---Dado un número real x ≥ 0 se puede considerar que otro número real y ≥ 0 es la raíz cuadrada
de x con una cierta precisión, dada por otro número real e (positivo y de valor pequeño), si se
cumple que: √x – y ≤ e, o bien si se cumple que: x – y2 ≤ e.
Escribir un método recursivo, raiz, tal que, dado un número real x ≥ 0 y otro número real e ≥
0, calcule la raíz cuadrada de x con una precisión e.
Para facilitar el diseño recursivo del método, téngase en cuenta las siguientes consideraciones:
- El resultado, y, raíz cuadrada de x, se buscará dentro de un determinado intervalo de valores
[inf, sup]. Por ello, la cabecera del método será la siguiente:
public static double raiz (double x, double e, double inf,
double sup)
- En cada llamada al método, se verificará si el valor central o medio (llamémoslo med) del
intervalo [inf, sup] considerado cumple la condición x – y2 ≤ e. Si así fuera, dicho valor,
med, sería la solución.
- En caso contrario, habría que determinar si hay que buscar la raíz cuadrada en el subintervalo
[inf, med] o en el subintervalo [med, sup], dependiendo del signo que tuviera la expresión
x – y2. Con ello, se estaría estableciendo cómo sería la llamada recursiva.
- Finalmente, hay que determinar cuáles son los valores adecuados para delimitar el intervalo
inicial de búsqueda. Resulta bastante evidente que un buen valor inicial de inf sea 0. En
cuanto a sup, podría pensarse que su valor inicial fuera x, considerando que x2 ≥ x, pero
esto sólo es cierto si x ≥ 1. Por tanto, hay que elegir como valor inicial de sup el máximo
de los valores {1, x}.
- Teniendo en cuenta lo anterior, convendrá implementar un método no recursivo, que sirva
de lanzadera del método recursivo anterior, y cuya cabecera será:
public static double raiz (double x, double e).

Gracias de antemano.
  #2 (permalink)  
Antiguo 19/02/2013, 12:22
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: No se como resolver esto...

Eres muy generoso al pedir que sólo te resuelvan uno, puestos a pedir pide que sena los dos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 19/02/2013, 13:07
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: No se como resolver esto...

sí, pero si nadie responde.... mejor pedir uno
  #4 (permalink)  
Antiguo 19/02/2013, 14:22
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: No se como resolver esto...

Claro, ahora lo entiendo.

¿Y si pruebas a hacerlos tú y pregutar las dudas? A lo mejor así te ayudan con los dos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 20/02/2013, 06:25
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: No se como resolver esto...

Ya he intentado resolverlos por mi cuenta... y no me salen. Y puesto que nadie ha sabido responderme, lo queria preguntar por aqui a ver si alguien me echaba una mano pero veo que no...

P.D Tienes algun incomveniente en q lo pregunte?
  #6 (permalink)  
Antiguo 20/02/2013, 12:14
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: No se como resolver esto...

peroooo ¿No sabes escribir el código o no sabes plantear el problema a resolver?
¿Esos son los primeros ejercicios que haces? ¿De donde los has sacado? Suenan un poco enrevesados.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #7 (permalink)  
Antiguo 20/02/2013, 12:42
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: No se como resolver esto...

Yo te doy una solución al primer problema

public static boolean diabolico {
int numeroCeros = 0;
String b = Integer.toString(n, 2); // Devuelve un String con el equivalente de n en base 2
for(int i=0;i<b.length()) {
if (b[i].equals("0")) {
numeroCeros++;
}
}
if ((numeroCeros % 2) == 0) {
return false; //Numero de ceros par
} else {
return true; //Numero de ceros impar
}
}


Pero tiene un inconveniente, no es un método recursivo. No necesita llamarse a sí mismo.

Así que te tocaría buscar una implementación recursiva.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #8 (permalink)  
Antiguo 20/02/2013, 13:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: No se como resolver esto...

Hay que reconocer que el ejercicio es enrevesado, por lo de recursivo y con parámetro int, pero eso no es excusa para pedir que te lo hagan.

Código Javascript:
Ver original
  1. public static boolean diabolico(int n){
  2.        
  3.         boolean diabolico = false;
  4.         String bin = Integer.toBinaryString(n);
  5.        
  6.         if(n==0)
  7.             diabolico = true;
  8.         else if(n==1)
  9.             diabolico = false;
  10.         else{
  11.             bin =****;
  12.            
  13.             for(****){
  14.                 if(****)
  15.                     diabolico = !diabolico;
  16.                 else
  17.                     ****;
  18.             }
  19.            
  20.             if(****){
  21.                 if(diabolico)
  22.                     diabolico = !diabolico(****);
  23.                 else
  24.                     diabolico = diabolico(****);
  25.             }
  26.         }
  27.        
  28.         return diabolico;
  29.     }
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #9 (permalink)  
Antiguo 21/02/2013, 06:52
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: No se como resolver esto...

Para Fuzzylog:

Estoy en 1º de Ing.Informática y nos han propuesto una lista de ejercicios para practicar... y ya lo he intentado por mi cuenta, pero estos dos no hay manera de que me salgan...

Para Xerelo:
Ya se que no es excusa, pero si no me salen.. y ya he buscado ayuda en otros sitios, pero nada.. Por eso quería saber si por aquí me podían ayudar.

P.D: Gracias por vuestra aportación ;).

P.D2(para Fuzzylog): Ahí está el problema, que ha de ser recursivo... y no tengo ni la menor idea de como debe ser..
  #10 (permalink)  
Antiguo 21/02/2013, 06:54
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: No se como resolver esto...

Ah, y soy totalmente novato en programación.... con lo cual no sabía como plantear el problema (aunque tengo una ligera idea) y mucho menos escribir el código :(
  #11 (permalink)  
Antiguo 21/02/2013, 08:46
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: No se como resolver esto...

Con lo que ha puesto Fuzzylog y lo que he puesto yo tienes de sobra.

¿Te imaginas que todo el mundo que no sabe o no tiene ganas de hacer sus deberes pide aquí que se los hagan? Acabarían fastidiando a los que se lo han trabajado y tienen una duda.

Si voy a perder el tiempo ayudando a alguien, lo mínimo es que demuestre que lo ha intentado, si a él no le importa lo suficiente para intentarlo a mí me importa menos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #12 (permalink)  
Antiguo 21/02/2013, 09:54
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: No se como resolver esto...

Puedes modificar mi método con esto al principio:

if (n == 0) {
return true;
} else if (n ==1) {
return false
} else {
// usas mi conversion a string
// conviertes mi string a un array de char (Si no sabes como lo buscas en internet -> Metodo toCharArray() )
// empiezas con boolean isDiablolico == false;
para cada elemento del array transofmado a int si llamando a diablolico(charTransformado) devuelve true entonces cambias el valor de isDiabolico => (!isDiabolico)
// retornas el valor de isDiabolico
}

Nota: Para pasar el char a int puedes usar Integer.parseInt(""+char)

Ahora queremos ver aquí el código que hagas tú, y los problemas que te vas encontrando.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #13 (permalink)  
Antiguo 21/02/2013, 11:48
 
Fecha de Ingreso: febrero-2013
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: No se como resolver esto...

Te repito una vez mas xerelo, que de los tantísimos ejericicios que tenía que hacer, sólo estos dos han sido los únicos que no sabía hacer... y por eso he pedido ayuda por aquí aunque me hubiera gustado resolverlo por mi cuenta sin ayuda de nadie claro está.

P.D gracias por la ayuda una vez más.
P.D no t entiendo muy bien Fuzzylog.., (soy principiante en prg cmo he dicho..), pero intentaré apañarmelas. Gracias por la ayuda.
  #14 (permalink)  
Antiguo 21/02/2013, 12:26
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: No se como resolver esto...

Pues mijo, te estoy indicando como resolverlo paso a paso. Si has visto mi codigo y el de xerelo deberias ser capaz de hacerlo.

Lo otro que te dije es que pusieras lo que ibas haciendo aquí y te ibamos orientando (o iba porque creo que Xerelo ya ha desistido, xD). ¿Entonces que ocurre? ¿Tienes miedo a poner aquí lo que hagas?

Nota: 3/4 partes del acierto en el desarrollo de una aplicación está en saber como plantearla.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: resolver
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 16:20.