elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 ... 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [40] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 ... 102
391  Programación / Java / Re: ArrayList y variable estatica (ayuda) en: 24 Abril 2020, 23:54 pm
No es lo mismo hablar del índice que del código. Como ves tu programa no mantiene una correspondencia entre una cosa y otra por lo que no puedes borrar un artículo por su código pensando que va a estar en el índice del array igual a su código. Tendrías que pensar cómo quieres borrar el artículo:
  • Por índice -> Compruebas que el índice sea menor a la longitud del ArrayList y en caso de no serlo muestras un mensaje de error.
  • Por código -> Recorres el ArrayList para buscar el artículo con ese código y si lo encuentras, lo eliminas; sino, puedes mostrar un mensaje de error también.

Ahora prueba a codificar la opción que quieras y si tienes algún problema pon tu código entre etiquetas de Código GeSHi eligiendo el lenguaje apropiado (Java).
Suerte. :-X
392  Programación / Java / Re: Obtener sub-secuencias continuas de un numero en: 23 Abril 2020, 23:43 pm
No te daré el código pero te daré una idea...
Supón que tienes un número de 5 cifras como el de tu supuesto (49142). Puedes hacer las siguientes subsecuencias:
Código:
Longitud 1: 4 - 9 - 1 - 4 - 2
Longitud 2: 49 - 91 - 14 - 42
Longitud 3: 491 - 914 - 142
Longitud 4: 4914 - 9142
Longitud 5: 49142 (Esta última puede obviarse como subsecuencia... Dependerá de tu lógica del problema, es decir, que tú sabrás si considerarla o no)

Lo que hay que conseguir es un patrón y de aquí podemos obtener el siguiente:
Se empiezan generando n subsecuencias de longitud 1 siendo n el número de cifras del número en cuestión. A partir de ahí si se incrementa la longitud de la subsecuencia en x, se decrementará el número de subsecuencias en x también. Dicho de otra forma:
Código:
Longitud: 1 -> Subsecuencias: n
Longitud: 2 -> Subsecuencias: n-1
...

Tienes que hacer una estructura repetitiva, un bucle. Sabes cuántas veces se repetirá dicho bucle? Sí, n veces si se considerá la subsecuencia de longitud n o n-1 si se considerán las subsecuencias hasta longitud = n-1. Entonces el bucle más adecuado es un for(). Voy a suponer que el número completo también forma una subsecuencia para no tener que explicar ambas posibilidades. Tú puedes modificarlo para que no sea así.
El bucle puedes hacer que empiece con i = 1 y vaya hasta i = n y en cada iteración mostrarás las subsecuencias de longitud i. Para cada iteración de i, cuántas subsecuencias hay? Suponiendo que i empieza en 1, n - i + 1:
Código:
PARA EL SUPUESTO n = 5
Iteracion i = 1 -> Longitud: 1 -> Subsecuencias: 5-1+1 = 5
Iteracion i = 2 -> Longitud: 2 -> Subsecuencias: 5-2+1 = 4
...
Entonces tendrás que hacer un bucle for() dentro del primer bucle for(). Este haremos que empiece en j = 0 hasta s (subsecuencias) = n-i+1. Y en cada iteración de este bucle interno tienes que mostrar el número empezando en la cifra j y con una longitud de i. (Suponiendo que 0 es la primera cifra del número y n-1 la última).

Lo que te queda es ver cómo muestras la parte del número que te interesa. La mejor opción es guardar el número en un array (vector) dejando cada cifra del número en una posición del array.
Otra opción es usar las matemáticas:
Código:
SI n ES UN NUMERO ENTERO:
n % 10 -> Devuelve la última cifra
n % 100 -> Devuelve las dos últimas cifras
...
n / 10 -> Devuelve el número sin la última cifra
n / 100 -> Devuelve el número sin las dos últimas cifras
...

El resto tiene que salir de ti. Si tienes alguna duda concreta siempre puedes preguntar pero tienes que esforzarte para entender todo lo expuesto anteriormente así que antes de preguntar puedes coger un papel y boli y ver cómo se repiten los patrones que te he dicho. No esperes que te demos la solución sin esfuerzo porque eso no va a pasar. Suerte.
393  Programación / Bases de Datos / Re: Ejer Alg relacional en: 18 Abril 2020, 22:32 pm
Dadas las siguientes tablas.
BOMBERO(#Cod_Bom, Nombre, Apellidos, Fecha_Nac, DNI, Dirección, Teléfono, Cod_Parque, Cod_Eq, Puesto)
PARQUE BOMBEROS(#Cod_Parque, Nombre, Dirección, Teléfono, Categoría)
EQUIPO(#Cod_Eq, Nombre)
PETICION_SERVICIO(#Cod_Pet_Serv, Tipo_Serv, Grado_Urgencia, Cod_Eq)
RECIBE(#Cod_Parque, #Cod_Pet_Serv, Fecha, Hora)
Se pide:

a) Código de todas las peticiones de servicio de gravedad 7.
b) Código de todas las peticiones de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de Campo”.
c) Códigos de todos los equipos que respondieron a cualquier petición de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de   Campo”.
d)Nombre de los bomberos que pertenecen a cualquier equipo que respondiera a cualquier petición de servicio de gravedad 7 recibida por el parque de      bomberos “Casa de Campo”.

Si necesitas CodEq, tendrás que mirar en todas las tablas para ver dónde tienes ese dato y luego ver de todas las tablas que lo tengan, cuál es el que necesitas usar.
Para ahorrarme un mensaje: En este caso tienes un CodEq en la tabla Peticion y esa tabla ya la usabas en la consulta del apartado b, por lo que solo tienes que cambiar el campo seleccionado con PI() de CodPeticion a CodEq...



Para qué quieres usar PI(CodPetServ)?? Estás buscando el código de la petición?? Yo creo que no.
394  Foros Generales / Dudas Generales / Re: Nuevo en el foro, ¿este foro es para mi? en: 18 Abril 2020, 22:13 pm
Supongo que cada uno tendrá una visión de este foro según el tiempo que lleva en él y comparándolo con otras plataformas; así que de primeras te diría que pruebes. El foro no es un curso en el que tengas que leerte cada tema e ir haciendo exámenes. Es un espacio con mucha información suelta y tú tendrás que ver si lo que ves te sirve o no.

Yo llevo unos cuantos años leyendo cosas de este foro aunque empecé a participar en él de forma más activa años después. Y desde mi punto de vista creo que es de los mejores foros, sino el mejor, que puedes encontrar además de que no se centra en un solo tema; hay muchos subforos y cada quien estará más cómodo en su territorio pero siempre puedes moverte a otro subforo y empezar a aprender cosas nuevas.
Algo que puedo decir de este foro comparado con otros es que muchas de las explicaciones que se dan están basadas en documentación oficial o en buenas prácticas y no en "es que yo lo hago así" (cosa que sí he visto en otros foros y que al final te acaban inculcando malas prácticas y unas bases mal formadas).
Como dice @warcry: hay personas que saben lo que hacen y con las que aprendes a tener unas buenas bases y yo creo que no es complicado que te ayuden en algún problema que tengas (no están escondidos esperando un tema que realmente les apasione para contestar, aunque algunos igual sí, no lo sé :silbar: :xD).

También es cierto que tienes que hacer un uso correcto del foro. Si esperas que te hagan las tareas, que te solucionen la vida, etc; entonces no es para ti pero ni este foro ni ningún otro. Tengo la sensación de que harías un buen uso de éste (igual me equivoco) pero como ya te he dicho y te repito: Quédate y pruébalo. No pierdes nada. Suerte. ;D
395  Programación / Bases de Datos / Re: Ejer Alg relacional en: 18 Abril 2020, 20:37 pm
En la fórmula:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))
(PI(CodPeticion) de la parte de la izquierda de la intersección, sería de la tabla recibe?
Obviamente. La tabla Parque no tiene ninguna columna CodPeticion.
396  Programación / Bases de Datos / Re: Ejer Alg relacional en: 18 Abril 2020, 18:48 pm
En el apartado b, la parte de: recibidas por el parque de bomberos Casa de campo tengo claro que se usa un sigma, pero me has puesto antes que hacer in pi cod_parque no tiene sentido,  como se juntaria con la parte del apartado a? Sería con un joint pero entonces la tabla recibe no le vería sentido.

Citar
Código de todas las peticiones de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de Campo”.
(Pi(CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (π (CodPeticion) Sigma (Grado = 7) (Peticiones)) ∗ Recibe)

Explicado con un ejemplo. Vamos a suponer que los CodParque se forman con "Cpa" + 4 dígitos y los CodPeticion se forman con "CPe" + 4 dígitos.
Imagina que haces la primera parte de la intersección. Así obtienes el CodParque de los parques que se llamen C.campo y que hayan recibido alguna petición. Y los CodParque obtenidos son (por ejemplo):
Código:
CPa0001
CPa0002
CPa0015

Y ahora vamos a hacer la segunda parte de tu intersección. Con ello obtienes los CodPeticion de las peticiones de gravedad 7 y que han sido recibidas por algún parque. Y esto nos da como resultado los siguientes CodPeticion (por ejemplo):
Código:
CPe0005
CPe0008
CPe0010
CPe0015

Y tu solución es la intersección de ambos (cosa que te adelanto que no se puede hacer porque estás trabajando con campos diferentes CodParque por un lado y CodPeticion por otro... Pero supongamos que se puede hacer la intersección) que es: NADA. 0. Mejor dicho {Vacio}. No hay ninguna coincidencia entre una tabla y otra.



Hay dos formas de hacer esto:
  • USANDO UNA INTERSECCIÓN:
Código:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion)) 
Empecemos por la premisa de que CodPeticion es un atributo/campo/columna identificativa/discriminante/clave (porque lleva #). Esto significa que cualquier petición se puede identificar con saber su CodPeticion o que no existen dos peticiones con el mismo CodPeticion.
La primera parte de la intersección obtiene los CodPeticion de todas las peticiones que haya recibido el parque C.campo. Por ejemplo, siguiendo con el ejemplo de antes:
Código:
CPe0005
CPe0006
CPe0015
Esos son los CodPeticion de todas las peticiones que han recibido los parques con nombre C.campo. Ahora de todos esos tenemos que ver los que tienen gravedad 7. Entonces con la segunda parte de la intersección obtenemos los CodPeticion de todas las peticiones con gravedad 7. Que son, por ejemplo:
Código:
CPe0004
CPe0005
CPe0015
Ahora si hacemos la intersección entre ambos resultados, obtenemos los CodPeticion de todas las peticiones de gravedad 7 que han recibido los parques C.campo.
Código:
CPe0005
CPe0015

Recalco que la JOIN entre Parque y Recibe se hace por medio de CodParque (campo que tienen ambas en común).

  • USANDO UNA JOIN:
En este método no me voy a explayar tanto. La primera parte es igual (JOIN entre Parque y Recibe) pero lo que hacemos es otra JOIN de esas dos con Peticion (por medio de CodPeticion).
Código:
PI(Peticion.CodPeticion)(SIGMA(gravedad = 7)(Parque JOIN Recibe JOIN Peticion) 
En el campo del PI hay que especificar una tabla, bien Recibe o bien Peticion porque ambas tienen el campo CodPeticion pero el resultado es el mismo ya que el CodPeticion tiene que coincidir en ambas.
Así tal cual esta consulta es peor porque trabaja con mayor cantidad de datos ya que hemos dejado los SIGMAs y PIs para el final pero eso hace que la consulta quede más simple.


Ahora ya papel y boli (o lo que prefieras) y a leer todos los mensajes de este tema con todos los ejemplos que he ido poniendo hasta entenderlo. Creo que ya tienes ejemplos y explicaciones de sobra. :rolleyes: :rolleyes:
397  Programación / Bases de Datos / Re: Ejer Alg relacional en: 18 Abril 2020, 17:25 pm
Pues una recomendación es que busques en Internet cosas de álgebra relacional o consultas SQL directamente si quieres (es muy parecido y así te preparas para lo que viene después). Habrá un montón de sitios donde explican Joins y con ejemplos visuales que es como mejor se ve.
Y cuando tengas una duda concreta de uno de esos sitios en los que hayas buscado es cuando deberías abrir un tema para resolver ese tema en concreto. Al final el aprendizaje va a cuenta de cada uno y aunque te parezca que estás leyendo muchas páginas y que ninguna te sirve, llegará un momento en que todo te encaje y empieces a relacionar lo que acabas de entender con aquello que viste en tal sitio y que en su momento no entendiste.

PD: Al margen de lo que está pasando, seguro que tus profesores tienen un correo al que molestarles para que te corrijan los ejercicios. Porque encima los profesores que menos se esfuerzan son luego los más tiquismiquis y te dirán que tal método no sirve o que los hagas de tal forma.
398  Programación / Bases de Datos / Re: Ejer Alg relacional en: 18 Abril 2020, 16:57 pm
Dadas las siguientes tablas.
BOMBERO(#Cod_Bom, Nombre, Apellidos, Fecha_Nac, DNI, Dirección, Teléfono, Cod_Parque, Cod_Eq, Puesto)
PARQUE BOMBEROS(#Cod_Parque, Nombre, Dirección, Teléfono, Categoría)
EQUIPO(#Cod_Eq, Nombre)
PETICION_SERVICIO(#Cod_Pet_Serv, Tipo_Serv, Grado_Urgencia, Cod_Eq)
RECIBE(#Cod_Parque, #Cod_Pet_Serv, Fecha, Hora)
Se pide:

a) Código de todas las peticiones de servicio de gravedad 7.
b) Código de todas las peticiones de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de Campo”.
c) Códigos de todos los equipos que respondieron a cualquier petición de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de   Campo”.
d)Nombre de los bomberos que pertenecen a cualquier equipo que respondiera a cualquier petición de servicio de gravedad 7 recibida por el parque de      bomberos “Casa de Campo”.

Mis soluciones son:
a)Pi(CodPeticion) (Sigma(grado = 7) (peticiones))

b)(Pi(CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (π (CodPeticion) Sigma (Grado = 7) (Peticiones)) ∗ Recibe)

c)Pi(CodEquipo) (BOMBEROS * ((CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (Pi(CodPeticion) Sigma(Grado = 7) (Peticiones)) ∗ Recibe))

d)Pi(Nombre) (Bombero * ((CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (Pi(CodPeticion)Sigma(Grado = 7) (Peticiones)) ∗ Recibe))
  • El primer apartado está bien.
  • El segundo no permite esa intersección. Tanto la unión como la intersección son dos operaciones que tienen que hacerse sobre tablas con la misma estructura y tú estás mezclando CodParque (que no tiene sentido) con CodPeticion.
  • El tercero ya tiene menos sentido todavía porque en ningún momento necesitas meter la tabla Bomberos. Y además metes el resultado del apartado anterior que también es incorrecto.
  • Y el cuarto apartado como vuelves a reutilizar la solución del segundo apartado tampoco es correcto.

PD: El foro es para preguntar dudas concretas. No para tener aquí a un grupo de personas para corregirte todos los ejercicios. Para eso están tus profesores que para algo están cobrando... También debería ser suya la obligación de enseñar pero como todos sabemos ya, muchas veces no saben ni lo que dicen... Bueno que me caliento y esto da para un tema entero y tampoco es plan... :silbar:

PD 2: Deberías acostumbrarte a usar más Joins y no tantas intersecciones. Con esto ya te doy la pista de que estos ejercicios pueden hacerse sin usar intersecciones.
399  Programación / Programación General / Re: Lenguaje de programación en: 18 Abril 2020, 14:19 pm
No sé de dónde eres o dónde estarás haciendo el grado superior pero lo más probable es que veas Java. De toda la gente que conozco que haya estudiado o esté estudiando DAM (me incluyo entre ellos), siempre se ha visto Java.

Lo que me parece raro es que no os hayan mencionado ningún lenguaje de programación y no tengáis nada de programación. Pero bueno, al final cada centro es un mundo.

Aparte si te interesa algo similar a Java pero un poco más cercano a la memoria física del ordenador, tienes C++. Yo aprendí con este lenguaje y luego hace que Java te resulte mucho más fácil ya que cuenta con recolector de basura y no tratas con punteros directamente. Y si lo que quieres es un lenguaje muy potente y simple de escribir, creo que Python es una muy buena opción.
400  Programación / Bases de Datos / Re: Ejer Alg relacional en: 16 Abril 2020, 20:10 pm
La unión es como el "o" de toda la vida. Si usases una unión obtendrías: los proveedores que suministran artículos rojos o verdes.
La intersección es como la "y" de toda la vida. Si usas la intersección obtienes: los proveedores que suministran artículos rojos y verdes.

Código:
Tabla 1:
- Pepe
- Juan

Tabla 2:
- Pepe
- Luis

(Tabla 1 UNION Tabla 2) -> Las filas que están en una u otra tabla:
- Pepe
- Juan
- Luis

(Tabla 1 INTERSECCION Tabla 2) -> Las filas que están en una y en otra tabla (en ambas):
- Pepe
Páginas: 1 ... 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 [40] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines