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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 ... 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 [371] 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 ... 432
3701  Programación / Java / Re: ¿Còmo cambio de valor en una matriz? en: 9 Agosto 2017, 00:47 am
Precisamente poner ceros, para indicar presencia, es un error... el '0' debe inbdicar 'ausencia, esto es 'AGUA', y cualquier otro valor 'un objeto' (incluso tierra)

Si tienes un submarino, por ejemplo desde D5 hasta D9, pués (también por ejemplo) pones D5=6, D6=6, D7=6, D8=6, D9=6, así los submarinos (internamente) los reconoces por el valor 6, las fragatas con 2, un portaviones con 7, un destructor con 5, etc....
Ejemplo de un mapa:


    0 1 2 3 4 5 6 7 8 9
   -----------------------
A | 0 0 0 0 0 0 0 0 2 0
B | 0 0 0 0 0 0 0 0 2 0
C | 7 5 5 5 5 5 0 0 0 0
D | 7 0 0 0 6 6 6 6 6 6 <--- aquí el submarino (pero hay más barcos en el mapa)
E | 7 0 0 2 2 2 2 0 0 0
F | 7 0 3 3 3 3 0 0 0 0
G | 7 0 3 0 0 4 0 0 0 0
H | 7 0 3 0 0 4 0 0 0 0
I | 7 0 0 0 0 4 0 0 0 2
J | 7 0 0 0 0 4 3 3 3 2


Por último fíjate que el valor númérico al mismo tiempo indica el 'tamaño' del barco. Si ocupa 2  casillas d elargo, el valor será 2, si ocupa 4 de largo, usará el valor 4. Esto es útil para distinguir por ejemplo, dos buques de 2 casillas con respecto a uno de 4, o dos de 3 con respecto de 1 de 6 (o 3 de dos). Incluso haciendo esquina uno de 3 con otro de 3, podría parecer (al adversdario) que se trata de uno de 2 y uno de 4)...

Si un mapa fuera tan gigante como 300 casillas, podría no ser necesariamente cuadrado (rectángular), y podrías rellenar como 'tierra' con valor 9.... Así el mapa de 'agua' de cada jugador tendría una forma irregular (incluso islotes). Basta acordar la misma cantidad de casillas 'tierra'.
3702  Foros Generales / Noticias / Re: Bitcoin Cash se posiciona rápidamente como tercera criptomoneda de más valor en: 8 Agosto 2017, 04:11 am
Este "Boom" de las monedas digitales, me recuerda aquel "Boom2 al pie dle siglo XX de las ".com" ...nade, se crea la burbuja, se infla, se infla... muchos se forran por el camino, y cuando revienta, los más torpones pagan los platos...

Es indudable que tantas monedas no podrán coexistir de modo indefinido...
3703  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda con un programa de VBNET que no funciona correctamente en: 6 Agosto 2017, 06:52 am
Bufff... el formulario tiene unas 16.400 líneas de código... Eso es casi 1Mb. Pero es que además el código es completamente espagueti... Desisto de perder tiempo revisándolo.

Si te diré al menos, que cuando tengas que eliminar varios ítems, recórrelo siempre desde el final hacia atrás... si tienes que eliminar el íitem 25 y el 144, si eliminas primero el 25, el 144 ocupará luego la posición 143... si eliminas primeor el 144 (que ocupa esa posición), podrás luego perfectamente eliminar el 25 (que también sigue estando en su posición)...
Se llega al caso de qu si hay 150 elementos y hay que eliminar 10, si empiezas desde abajo, cuando vayas a eliminar el 144, ya ni siquiera existe el ítem 144. Mientras exista un ítem, no hacerlo bien implica eliminar uno erróneo y dejar (posiblemente) que debiera habers eeliminado (depende de si están contiguos, salteados, etc...).
Así tatar de eliminar un ítem inexistente arroja errores.

No obstante como además lo tienes conectado a una base de datos, puede que el error te lo esté dando por allí, antes de actualizar la vista.

En fin elimina los ítems deseados empezando desde el último y avanzando hacia atrás... y a ver si te sigue generando el error.

Desde luego bucear en ese código, como se dice a veces "ni cobrando"... Crea clases , encapsula métodos en ellas y pásalas a otros módulos... No dejes todo el peso en un único formulario... Verlo es como entrar en una ciudad por donde pasó un sunami, solo se ve CAOS  :silbar: :silbar: :silbar:
3704  Programación / Java / Re: Codigo para crear SUDOKUS en: 5 Agosto 2017, 17:04 pm
... pero llegue a un punto que no te entiendo y es la parte final de rellenar el sudoku como lo tienes en el siguiente codigo:

...por que tu hablas de codigo previo y codigo despues ???

Código:
//código previo
           ....el código intermedio (omitido por brevedad)
.... // código después...
Puse 'código previo' y 'código después', para no volver a poner la función completa... En ese tramo, lo que te indicaba era que justo esa parte (de la función) es la que se encarga de que si la 'obtención' de valores llega a un punto donde se bloquea, esa parte CRUCIAL, es la que dando 1, ó 2 pasos atrás, permite salir del bloqueo:
1 paso atrás: elimina toda la fila actual y la rehace.
2 pasos atrás: deshace también la fila previa, si tras deshacer 10 veces la fila actual, no logra avanzar (salir del bloqueo)... un bloqueo 'persistente', se debe a que no deja muchas opciones para la línea actual.

1- cual es ese array sudoku y para que sirve ? no lo entiendo la verdad

2- yo estoy trabajando con una matriz bidimensional y en mi funcion generadoraleatorio() es donde supuestamente lo lleno(Segun mi forma de hacerlo) pero no se en que lugar estaria metiendo este codigo que te muestro arriba el tuyo,
1 - Es el nombre que yo le he dado al array que guarda los valores... tu lo llamas matriz[][] y lo usas de modo bidimensional (filas y columnas, 9x9), yo lo llamo sudoku y usa índices (0 a 80).

2 - Yo hice una función llamada RellenarSudokuAlAzar, que es función principal para generar el sudoku por completo, es desde aquí donde se llama a la segunda función principal (para un solo valor al azar) y en esa donde se llama al resto...

Repongo la función completa, esta función la puse en el 'Respùesta #2' de este hilo  (IMPORTANTE: lee los comentarios en el pseudocódigo):
Código:
Funcion RellenarSudokuAlAzar()    
    Entero Fila, columna
    Byte Valor, Intentos

    Fila=0 // la primera fila, la podrías obtener al azar completamente en ese caso marcar aquí 1, para comenzar en la fila 1, la 0 no va a requerir todas las comprobaciones que pueden requerir las siguientes.
    Hacer  '// esto es fila, puede ser un bucle que va de 0 a 8
        Intentos = 0
        Columna = 0
        Hacer    
            Valor = SeleccionarValorAzar(Columna, Fila)  //la función que obtiene un valor de cada vez.
            Si (Valor>0) luego
                Sudoku((Fila * c_Nueve) + Columna) = valor   //Sudoku() es el array que mantiene internamente los valores.            
                Columna +=1
            Si no
                // Borra los valores de la fila actual
                Bucle para k desde 0 a columna
                    Sudoku((Fila * c_Nueve) + k) = 0
                Fin bucle

                // Tras 10 intentos en la misma fila, borramos también la fila previa
                Intentos += 1
                Si (Intentos = 10) luego
                    Si (Fila > 0) luego  // no podemos retroceder a filas más atrás que la primera.
                        Fila = (Fila - 1) // Borramos también la fila anterior (y si sucede otra vez, la previa, etc...)
                        Bucle para k desde 0 To c_Ocho
                            Sudoku((Fila * c_Nueve) + k) = 0                            
                        Fin Bucle
                    Fin si
                    Intentos = 0
                Fin si
                Columna = 0
            Fin si
        Repetir Mientras (Columna <9)
        Fila +=1
    Repetir Mientra (Fila<9)
Fin Funcion
// Al término de esta función se podría dibujar los valores en el tablero para verificar visualmente el resultado.

3- por otro lado tengo muchas dudas con la funcion de tomar ausentes por que pones como parametro un out NumAusentes

Código:
Array Byte = Funcion TomarAusentes(Array Byte Presentes(), Out Entero NumAusentes)
no entiendo por que pones ese valor ahi, o bueno creo saberlo, lo haces para tener el indice de ese vector pero lo que no se es por que tenerlo de parametro si al llamarlo de otra funcion como lo haces en
Código:
Array byte = GetArrayAusentes(Entero X, Entero Y,  Out Entero NumAusentes)

ese valor no lo utilizas de ninguna manera o por lo menos no lo veo que lo hagas para mi ese valor por parametro no sirve por que el dato que se utiliza es es que devuelve la funcion como tal.
Te aclaro... esta función devuelve un array. El array tiene 9 elementos, pero necesitamos también devolver otro valor. el de cuantos valores en ese array son 'útiles' (detrás de esos valores útiles hay ceros, no nos interesan).
El parámetro es de salida, es decir es devuelve por referencia (por puntero, una dirección de memoria).

Un ejemplo: Imagina una lista de 9 alumnos para el carnet de conducir... se examinan y aprueban solo 3, se devuelve una lista, con sus nombres, pero es preciso saber cuantos son. La lista sigue teniendo 9 elementos, no viene a cuento crear una nueva lista con exactamente los conductores aprobados, la reutilizamos.
Si no sabes pasar un parámetro por referencia, todavía puedes solucionarlo en tu código, recorriendo el array hasta que se encuentre un valor vacío (cero).
Es decir había una lista de 9 alumnos inscritos, creamos otra del mismo tamaño 8por si todos aprobaban), pero luego resulta que aprueban 3, ó 5 o 6, o todos o ninguno)... entonces en la lista entregada leemos nombres, con cada uno leído sumamos 1, cuando no haya más en la lista de aprobados, sabemos ya CUANTOS alumnos aprobaron. 3,5,6,todos, ninguno, etc...

Y porqué necesitamos saber cuantos valores 'útiles' (valores ausentes) tiene la lista?. Pués porque ahora vamos a sortear entre ellos, el elegido será el que se ponga en la casilla.
Si hay 5 valores ausentes (útiles),  (similar a los alumnos aprobados) y ocupan los puestos del 0 al 4, nosotros luego vamos a elegir al azar entre 0 y 4.
SIIIIIIII... elegimos ún índice, porque las funciones aleatorias no saben elegir al azar un valor 2,5,6,9, solo saben elegir un valor dentro de un rango dado, y dentro de ese rango los valores contenidos son elegibles. Si el 3,4,7 y8 quedan fuera del sorteo, significa que no debn ser elegibles, luego toca asignarles un número a los que si optan y luego por ese número (índice en el array), sabemos que valor salió elegido.
Imagina que son esos alumnos, podríamos hacer papelitos con sus nombres, pero OH, nuestro sistemá es matemático (míralo como si tuvieras un bingo de juguete con 100 bolitas, sacas todas y dejas una por cada alumno aprobado) y a cada bola se le asigna un nombre: La bola 0, para Juan, la bola 1 para Luis, la bola 2 par aandrés,etc... entonces hhaces mover el bombo, extraes la bola y cantas la que sale: Bola 2.... a qui
én corresponde? a Andres.... luego Andres salió elegido al azar...

Justo eso esa parte final, es la que hacen las líneas tras la función Tomarausentes:

Este trozo de código es un extracto al final de la función: "SeleccionarValorAzar"
Código:
// OJO: si el array queda vacío <----------- HAY UN BLOQUEO.
    Si (n=0) luego devolver 0 //y salir de la función tras devolver

    // Finalmente se toma un valor al azar entre 0 y n-1, que representa el indice del array Azar. Este array tiene exclusivamente los números que no aparecen ni en la fila, ni en columna, ni en bloque.
    k = Aleatorio( entre 0 y n-1)

    Devolver Azar(k) //ha salido la bola K, devlver el valor contenido en ese índice (si fuera un alumno, sería su nombre).


La verdad no me queda muy claro eso voy a colocar el codigo que tengo solo para que me ayudes a depurar errores pero solo faltaria que me explicaras eso que te pido para poder hacer las funciones de valor azar y la de permitido o admisible no entiendo el por que tu tienes otras mas tampoco.
Creo que debería quedarte todo claro ya...

Verás tu función "GeneradorAleatorio" sería equivalente a la que yo llamo: "RellenarSudokuAlAzar"....
Debe tener 2 bucles, uno por filas y otro interno para columnas. Dentro de ese es que en cada cilo se invoca "SeleccionarValorAzar(fila, columna)" esperando que se le devuelva un valor.
Si es mayor que 0 se asigna al array que mantiene los valores (tu llamas 'Matriz' a tu array, yo le llamo directamente 'Sudoku' a mi array)
Pero si el valor obtenido de regreso es 0, significa que hay una situación de bloqueo. Hay que eliminar la fila actual completa (se suma un intento y si se alcanzan 10 antes de poder completar la fila, se elimina también la fila anterior).


----------------------------------------------
Te comento por encima si veo bien tus funciones, pero debes probarlas siempre. Yo solo reviso la lógica, que es la parte que el IDE (seguramente uses Eclipse), no puede decirte nada...
 
- GeneradorAleatorio: Llámala como prefieras, pero esta función, impleméntala tomando como referencia la que yo llamo "RellenarSudokuAlAzar". Justo te acabo de dar unas palabras al respecto... y el pseudocódigo de la misma te lo he vuelto a poner completo, también más arriba en este mensaje.
 
Citar
 public static void GeneradorAleatorio() {
   
- GetFila: OK
 
Citar
  public static int [] GetFila(int matriz[][], int fila) {
   
- GetColumna: OK
 
Citar
  public static int [] GetColumna(int matriz [][], int columna) {
   
- GetCaja: OK, pero puede optimizarse saber a qué bloque (caja), nos estamos refiriendo (ya te comenté)
  
Citar
 public static int [] GetCaja(int matriz[][], int filas, int columnas) {


- unificarArray: OK, ahora sí...
 
Citar
  public static int[] unificarArray (int filas[], int columnas[], int caja[]) {
   
- TomarAusentes: CASI, te falta devolver el valor de k (yo lo hago por referencia como un parámetro). Si no lo devuelves de ninguna manera, deberás volver a calcular dicho valor en un bucle tras esta función (más arriba ya te comenté esto)  
  
Citar
 public static int [] TomarAusentes (int unificado[]){
       
La parte comentada es donde iria las funciones que me faltan por entender.
OK, en otro mensaje (un poco más tarde, ahora tengo cosas que hacer), te desgrano ambas funciones (son dos, no?): SeleccionarValorAzar y RellenarSudokuAlAzar
3705  Media / Multimedia / Re: Ordenar pistas audio en un USB en: 4 Agosto 2017, 18:42 pm
Léete el manual si lo conservas, es posible que sin darte cuenta hayas pulsado alguna teclita, cuyo uso desconoces y resulta ser 'cambiar el orden a un orden "aleatorio"'.

Por otro lado, a veces el orden que siguen es alfabético, pero no siguiendo el nombre que le das si no el que consta en los tags del ID3 (sea nombre, número de pista, autor, etc...).
3706  Foros Generales / Foro Libre / Re: Que ha pasado exactamente en Venezuela esta vez??? en: 4 Agosto 2017, 05:20 am
Y... ...ahora qué?...

¿Cuáles son las perspectivas de un venezolano descontento del gobierno? (me refiero obviamente a personas con dificultades para los recursos, diarios). Me temo que incluso gente con recursos, todavía tendrá problemas por culpa del desabastecimiento de productos en general...
3707  Foros Generales / Foro Libre / Re: La NASA está buscando un "protector planetario" contra los extraterrestres en: 4 Agosto 2017, 05:01 am
La ciencia nunca ha negado que puedan existir extraterrestres.
Técnicamente no. Evidentemente la ciencia no es una persona, ni una organización, ni siquiera un ente... es más una consideración abstracta. Sin embargo a título personal, las personas más relevantes de la ciencia (cada unas en su momento), si lo han negado.

Lo que se niega es que hayan visitado la Tierra o estén actualmente en ella.
Bien, a esto no creo que pasen 20 años sin que salgamos de 'dudas' (para los que estamos en ese barro (y desdecirse para los que están en el barrizal más lejos).


De hecho llevan varias décadas en busca de vida extraterrestre (fuera de nuestro planeta)... desde que empezó el boom del espacio mas o menos...
Oh, sí claro...

------
El radiotelescopio de Arecibo lo que hace es recolecta datos radioastronómicos, aeronomía terrestre y radar planetarios para los científicos mundiales y actualmente se usa para la observación de objetos estelares.
Bla,bla,bla... si tienes criterio exponlo.
Para copiar y pegar contenido es mejor que no te molestes. Para abrir un tema, me parece valido, pero para participar resulta estúpido. Ofendes cuando haces eso, tratas a los demás como si fueran imbéciles...

¿No te cabe pensar que esos "copy->paste" que haces, solo tienen sentido para alguien analfabeto, o para chicos de 12-18 años que no tienen bagaje cultural y resulta necesario ilustrarles???.



3708  Programación / .NET (C#, VB.NET, ASP) / Re: Usar un NumericUpDown como valor de const en: 4 Agosto 2017, 00:33 am
añade un messabox.message(mu.Tostring) a ambas funciones y ve cambiando valores al numeric a ver si cambia o no...

He de suponer que la declaración de MU y MD están en la misma clase que el control, no?????. Si no estás creando variables d eigual nombre en otra parte del proyecto...

Si tu código es así, con dos clases:

Código
  1. public class MisCosas
  2.  Public Md as decimal
  3.  
  4. '....
  5. End class
  6.  
  7. private class form1
  8.  
  9.    private sub NumericUpDown5_valuechanged(...
  10.          Md = NumericUpDown5.Value
  11.    En sub
  12. End class

Esto no va a funcionar...

Pero esto sí...
Código
  1. public class MisCosas
  2.  Public Md as decimal
  3.  
  4. '....
  5. End class
  6.  
  7. private class form1
  8.    private mc as new MisCosas
  9.  
  10.    private sub NumericUpDown5_valuechanged(...
  11.          mc.Md = NumericUpDown5.Value
  12.    En sub
  13. End class

Si tienes dudas muévete paso a paso pulsando F12... y así ves por donde pasa y por donde no...
3709  Programación / .NET (C#, VB.NET, ASP) / Re: Usar un NumericUpDown como valor de const en: 3 Agosto 2017, 20:34 pm
Ten en cuenta que antes de poder asignar un valor a una variable procedente de un control, antes debe haberse creado la instancia del control...
...Esto es, desde qué procedimiento estás asignando el valor del NumericupDown.

No sé si el código que has puesto es consecuente o si son dos intentos distintos. si es consecuente (uno le sigue al otro, es decir ambos están en activos), si ya has declarado mouted1 como constante, no puedes utilizarlo al mismo nivel como otro tipo. Si lo usas en otro nivel, será sombreando al que esté en un nivel más arriba... es decir no será copia ni tendrá nada que ver con la otra declaración.

Por otro lado, poque no aprovechas el evento Change del control NumericUpDown, para actualizar el valor de esa variable?
Código
  1. private sub NumericUpDown5_Change(.....
  2.    Mouted = e.value ' ...o Mouted= NumericUpDown5.value si solo hay ese objeto enganchado al evento...
  3. end sub
3710  Programación / .NET (C#, VB.NET, ASP) / Re: Usar un NumericUpDown como valor de const en: 3 Agosto 2017, 19:06 pm
Una constante, como su nombre indica es constante. Luego no puede adjudicarse ningún valor por procedimiento.

Cuando se compila el valor queda fijado... es decir todas las constantes con remplazadas por el valor contante. por eso siempre dará error cuando intentes asignarlo desde una ubicación que en sí misma no sea también una constante.

Es decir esto es válido:
Código
  1. Public Const c_Doce = 12
  2. Public Const c_Trece = (c_Doce +1)

Y es válido porque c_doce tiene un valor que es constante y c_doce +1 , al ser tanto c_doce y 1 valores constantes es válido.
Esto no es válido:
Código
  1. Public MiVar As integer = 12
  2. Public Const c_Doce = MiVar

En fin, tu debes saber si realmente necesitas una constante o una variable. Si has de asignar un valor desde un control numericUpDown, desde luego no es una constante lo que necesitas. O bien, no entiendes lo que significa constante.
Si todavía necesitas que el valor del control numericUpdown, quede en la constante, lo que debes hacer es revisar que valor tiene durante diseño y ese mismo valor consignarlo en la constante... que tiene numericUpDown5.Value = 52, pués vas a tu contante y le pones ese valor
Private Const mouted = 52

Pero no puedes asignarlo por código, porque entonces sería una variable.

Hay una solución pero no merece la pena en la mayoría de casos, aún así te la comento, por si soluciona tu caso (ya que siendo una variable, actúa realmente como una constante):

   
Código
  1. Private MiVar As Integer = 12
  2.  
  3.    Public Property Mouted As Integer
  4.        Get
  5.            Return MiVar
  6.        End Get
  7.        Set(ByVal value As Integer)
  8.            Static FirstTime As Boolean = False
  9.            If (FirstTime = False) Then
  10.                MiVar = value
  11.                FirstTime = True
  12.            'Else
  13.                 'Disparar error si se cree conveniente...
  14.            End If
  15.        End Set
  16.    End Property
  17.  
  18.  

Y que se utilizaría así:
Código
  1. Dim MD As Integer  = NumericUpDown5.Value
  2. Mouted = MD

Este código te permite asignar un valor procedente desde donde quieras, pero una sola vez, luego opera como si fuera una constante, se puede leer pero no escribir. y fíjate que por defecto, también le podemos dar inicialmente un valor...
Páginas: 1 ... 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 [371] 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 ... 432
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines