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


 


Tema destacado: Votaciones, mejor proyecto de Abril Negro 2017!


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 35
151  Foros Generales / Foro Libre / Re: EEUU lanza en Afganistán una bomba de 10 toneladas contra ISIS en: 14 Abril 2017, 04:14
Así se explica como es la era de un presidente zoquete: Se elige cuando desean tener un muñeco al que torear y que no sepa ni luego por donde le vino la pelota ni a donde iba... Mejor si es un títere prepotente que cree mandar.
152  Foros Generales / Noticias / Re: En China, tú mismo puedes construir tu iPhone con piezas ‘de la calle’ en: 13 Abril 2017, 23:42
Yo soy partidario, de que cada país debería tener su propia industria de microchips y su marca propia (al menos una).
Y no necesariamente por negocio, creo que es una cuestión estratégica...
Ante cualquier eventualidad política, de esa forma, un país podría al menos nutrirse de su propia tecnología, más allá de que luego esa tecnología esté muy alejada de la más puntera en todo el mundo...
153  Foros Generales / Noticias / Re: Memoria en espray, una idea que nos ha dejado sorprendidos en: 12 Abril 2017, 18:09
Sin embargo presenta una limitación importante, y es que sólo es capaz de almacenar un máximo de 4 bits de datos.

Sí, es una cifra muy pequeña, tanto que para un usuario normal no tendría utilidad alguna, pero es un primer paso a una innovación realmente prometedora que como dijimos podría marcar un punto de inflexión en el sector del almacenamiento.

De momento el principal desafío que enfrentan los expertos es aumentar su capacidad de almacenamiento...
mmmm... 4 bits bastan.
Superarlo es hacer códigos de barras, intercalando zonas de spray con zonas que no. Cada zona entonces delimita ese pequeño código de 4 bits, luego una zona sin bits, y luego otra con bits... etc... y en cada zona se continúa con otro nibble.
154  Programación / .NET / Re: Codigo QR en: 12 Abril 2017, 17:24
Pués si, le doy la razón a EleKtro... aunque yo como llevo poco tiempo en el foro (en la nueva andadura), no te conozco, así que tienes otra oportunidad de 'redimirte'  :silbar: :silbar: :silbar:

A - Todo lo que tienes que hacer es meter tus 'códigos' en un array.
B - Y luego invocar una función pasando ese array.
C - En dicha función es un bucle quien recorre el array invocando a la función de ese 'código misterioso superlargo y supersecreto (que encontraste)' (la verdad que si es tan largo como dices, ni siquiera será muy bueno), pasándole como parámetro el 'código' actualmente en ciclo del bucle. Esto es, por cada índice en el array se invoca esa supersecretaFunciónQR(array(k)).
D - Finalmente supongo que devuelve algo, no sé si una imagen o si un fichero... si es un fichero, quizás debas pasarle también una ruta, si es una imagen la guardas tu mismo a fichero.

155  Programación / .NET / Re: [Duda] VB.NET - Comparar dos cadenas de texto y mostrar diferencias en: 12 Abril 2017, 17:05
Tengo en un formulario un TextBox (oculto) un texto en el cual está correctamente escrito, sin errores. Y otro TextBox el cual se ve, en el cual debo intentar escribir lo que está en el TextBox oculto lo más correctamente posible.

De no estar correctamente escrito en este último, que me cuente la cantidad de errores existentes y si es posible, también marcar cuáles fueron los errores.
Básicamente eso es lo que hace el juego del Mastermind. Lo único que cambia es que en el mastermind, se usan bolas de colores y tu usas letras y bueno, como es un juego se da un límite máximo de intentos.
Guglea si qieres buscando código.

¿Es posible hacer esto desde VB.NET?
Qué, cómo.?????????

Vi en algunas páginas proyectos hechos donde implementan RichTextBox, y en otros casos algo relacionado con XAML, pero la verdad es que no he conseguido salir de este problema.
Se puede complicar uno la vida todo lo que quiera, pero basta con tu idea original, incluso sin siquiera ese textbox oculto, basta que esté en una variable del código.

PD: Mi idea es intentar hacer algo parecido a lo que es el programa de mecanografía Typing Master en una de sus funciones cuando compara y muestra los errores, como para que tengan una idea de lo que intento realizar.
Ahora mismo, no caigo en cual es es eprograma (hay tantos...). Pero ya te digo, que lo que quieres hacer es el típico mastermind, pero más simplificado aún.

Una idea aproximada de lo que tienes que hacer:

- Crear una propiedad que indique el tamaño (númeor de caracteres de la palabra). (esto puede ser una opción en un menú o bien con un control "slider", "scrollhorizontal", etc... siempre entre un rango mínimo y máximo (min=6, Máx=16, por ejemplo).
- Crear una función Nuevo: que genere una palabra al azar del tamaño indicado, y guardarla en un campo oculto, convertida en un array de caracteres.
- Crear una función Intento (llamada desde un botón y con un texto, que yace sobre un control de texto (textbox, es más que sufieciente, si quieres colorealo, para que sea más 'atractivo'...

--- Tu escribes en el texto, en el evento 'change' del textbox, miras si la palaba escrita tiene el largo (ni más ni menos) que se requiere y si es que sí, activas el botón para "Escrutar", si no, sigue desactivado.
--- También puedes dejar siempre activo el botón y no hacer nada en eventos del texto, y cuando se pulse el botón, miras si el texto contiene el númeor de caracteres concreto, si no es así, un mensaje al usuario de 'faltan/sobran letras'... el código del botón.

--- El botón, invoca la función Intento, pasándole el texto que contiene el control si devuelve false, pegar de nuevo el texto 'Palabra' en el textbox.
Y el código de la función lo que hará es:
Código:
Funcion Intento(byref Palabra as string) as boolean
--- Recibir un texto del mismo largo que la palabra oculta.
--- Convertirlo a un array de caracteres.
--- Iniciar un bucle, que recorra desde 0 hasta el final del array.
--- Dentro del bucle:
---------- Si Oculto(k) <> TxtUser(k) luego
---------------   TxtUser(k)= "*"
---------------    n +=1
---------- Fin si
--- fin bucle
--- Si n> 0 entonces 'implica que no todos los caracteres fueron encontrados
-------- Convertir el array txtUser que ha sido modificado, indicando con *, cada carácter donde falló, a una cadena de texto, reescribiendo el parámetro: 'Palabra' (se devuelve por referencia).
------------ El botón que recibe de vuelta False, pega entonces el parámetro en el textbox.
--- Si no
-------  Devolver: True
-------  El botón que recibe el true saca un Mensaje: enhorabuena acertaste la palabra oculta...
fin función.

p.d.: Eso sí, antes de todo tú decides si se truncan mayúsculas a inúsculas o viceversa o no... Así :  ¿MARTE=MarTE???, y por tanto obra en consecuencia.
 texto= texto.toupper ó texto= texto.ToLower, o nada si se distingue capitalización de caracteres.
156  Programación / Java / Re: Ayuda!! agregar elementos no repetidos de un arreglo a otro en: 12 Abril 2017, 01:25
No has llegado a interpretarme correctamente. Te desgrano cada bucle, porque cometes errores en todos ellos...

Antes de nada te comento el punto final...
no he entendido lo de redimensionar cuenta desde 0 hasta max-min ... java me envia los array Cuenta y ValoresUnicos como null
Redimensionar = dimensionar = inicializar a un tamaño específico.
En java un array se inicializa a un amaño específico así:
NombreArray = new TipoDato[tamaño];
Sólo una vez que inicialices el array al tamaño deseado, estos podrán contener algo, si desde el comienzo están vacíos y siguen vaciós, al final también estarán vacíos. Inícialos, y luego ya en los bucles se irán rellenando con los valores adecuados. al iniciarlizarlos, se le da un tamaño al array (que luego puede consukltarse con: array.length) y cada valor del mismo se pone al valor 0.

y no se como devolver el array Valores unicos,
Bueno, esto ya es falta de conocimiento del lenguaje, es algo que pudes consultar perfectamente guglenado, si no tienes un libro a mano, o una web de referencia del lenguaje Java... No tiene caso preguntar cosas que están escritas en 1.000 partes desde hace 20 años o más... De entrada si no sabes devolverlos, al menos entrégalos por referencia como parámetro en la llamada de la función... de hecho mirando tu función:
- La declaras como void (sin devolución), yo devolvería el valor de 'Unicos'.
- Tienes dos arrays declarados en la entrada de la función: int x[], int y[] ...si el array x contiene los valores entre los que deseamos buscar, qué contiene el array y?... ese array podría ser el array Valoresunicos (da igual el nombre que le pongas, pero siempre mejor si es significativo).
- Supongo que 'n' es el tamaño del array x... puedes usar para el caso x.Length y así no es preciso en la función el parámetro n.

------------------------
------------------------

Empiezo comentando tu código, para señalarte las correccioes que necesita, bucle por bucle:
Cuando recorres el bucle para encontrar el valor menor (del PASO 1) en  tú codigo, pones:
Código
  1. for(j=0;j<n;j++)
  2.    {
  3.     if(y[j]<min)
  4.     {
  5.     min=y[j];
  6.     }
  7.     j++;
  8.    }

...al mismo tiempo puedes ir hallando el mayor... imagina que tienes esta corta serie de valores: 7,17,3,15,21,2,9 ...al empezar el bucle tomamos como menor y mayor el primero de la serie, el valor 7...
Luego que entramos preguntamos si el siguiente ítem y(1)< min, esto es si 17 es menor que 7, no es menor, luego si no es menor, queda que : o es igual que siete o es mayor, luego, en la alternativa (al si) se pregunta si es mayor que 7 y si es así, asignamos el valor a mayor (si resulta serlo).
En definitiva nos basta un solo bucle para encontrar el menor y también el mayor de la serie.
Es más, es que no veo que busques el mayor de la serie, creí que lo hacías en otro bucle aparte más adelante..., pero mirando resulta que no, que te has olvidado de ello.

Código:
   Si array(k) es menor que Min luego
          Min= array(k)
   [b] en otro caso[/b]  (lo desmonto en otra línea para que te quede más claro...)
         [b]si array(k) es mayor que Max luego
             Max = array(k)
         fin si[/b]
    fin si
Si no buscas el mayor, entonces el valor que usar más adelante para mayor, es que usamos al comienzo, el contenido del indice 0.

De igual modo, aunque de menor importancia, puesto que el primer elemento de la serie ya lo hemos asignado de entrada como el menor y el mayor, el bucle puede ser iniciado desde el siguiente elemtno, es decir el 1 y no volver al cero como haces en: "for(j=0", si hemos asignado ese valor ya, al preguntar 7 no será menor que 7, y 7 tampoco será mayor que 7.... pero bueno, es solo un ítem por el que s epregunta, no tiene más importancia. Tu deberías poner: "for(j=1"


Ahora vamos a repasar el bucle del PASO-2:
Código
  1. for(j=0;j<n;j++)
  2.    {
  3.     cuenta[y[j-min]]=cuenta[y[j-min]+1];
  4.     j++;
  5.    }
De entrada el array cuenta, aunque está declarado, no está inicializado, no se le ha asignado un tamaño. En Java, no se permite empezar en otro índice que no sea 0, así que el array debería desde 0 hasta Max-Min. Una vez redimensionado el array (inicializado, quizás te suene
En el código que pones para el segundo paso, no lo has interpretado correctamente ...
Yo puse:
Código:
redimensionar cuenta desde 0 hasta max - min
Iniciar bucle para k y recorrer desde 0 hasta fin del array
    cuenta(Array(k)-min) = cuenta(Array(k)-min) +1
    incrementar k
fin bucle
Fíjate en lo que tu pones: cuenta[y[j-min]]
Y lo que yo te puse: cuenta(Array(k)-min)
Y no me refiero a las llaves y paréntesis (obviamente), si no a donde está el signo '-' y por tanto de qué se hace la resta... es decir no hacemos resta del índice, sino del valor que contiene ese índice.,... si te fijas, tu tienes 2 cierres de llave al final, yo solo 1, por que el otro cierre, el del índice está tras el índice mismo.

Ahora repaso el código del bucle del PASO-3, hay dos fallos, donde tu tienes:
Código
  1. for(j=min;j<max;j++)
  2.    {
  3.     if(cuenta[j]>0)
  4.     {
  5.     unicos=unicos+1;
  6.     j++;
  7.     }
  8.    }
El código es casi correcto, pero contiene 2 fallos:
El primero está en la declaración del bucle, tu has puesto en tu código: for(j=min;j<max;j++)
Y yo puse: Iniciar bucle para K recorriendo desde 0 hasta Max - Min
Luego lo correcto sería poner: for(j=0;j<(max-min);j++)

El otro error lo cometes bucle tras bucle...
Verás cuando yo estructuro un bucle en pseudocódigo:
Código:
Iniciar bucle para x desde y hasta z
    ...
   [b] Incrementar X[/b]
fin bucle
El punto de incrementar, es dependiente de qué tipo de bucle se use, si se usa un bucle for... ya lleva en el propio código, como se incrementa. ...en Java igual que en C, (señalado en negrita) es en la forma: for(x=y;x<z;x++)
Luego no hace falta que al finalizar el bucle vuelvas a incrementar el valor de la variable de control del bucle, porque entonces estás saltando en cada ciclo 2 unidades cada vez.
El 'incrementar x', debe interpretarse que es así, pero si el formato del bucle ya lo ofrece por sí mismo, ya está, no hay que añadirlo. ...pero en bucles de tipo While... no se 'autoincrementa' en el diseño del bucle de forma automática, luego ahí si sería preciso explicitarlo. En TODOS los bucles for que has puesto, por tanto están sobrando...

Por fin te comento el cuarto bucle de tu código, correspondiente al paso 4:
Código
  1. for(j=min;j<max;j++)
  2.    {
  3.     ValoresUnicos[n]=(j+min);
  4.     n++;
  5.     if(n==unicos)
  6.     {
  7.     }
  8.     j++;
  9.    }

De entrada no has inicializado el array ValoresUnicos (arriba del todo te comentaba si ese array podría ser el mismo que el array 'y', que entra en la función.

Luego la declaración del bucle, tampoco es correcta. Supongo que el error es porque no has trasladado mi declaración al caso de Java. En Java los arrays siempre empiezan en el índice 0, entonces debes hacer el cambio preciso.
Si yo puse esto: Iniciar bucle para K recorriendo desde Min hasta Max
Usando Java deberías poner: for(j=0;j<cuenta.length-1;j++)

el resto del bucle, también está muy desorientado:
Si o puse, en el cuerpo del bucle:
Código:
  Si cuenta(k) es mayor que 0 luego
        ValoresUnicos(n) = (k+min)
        Incrementar n
        Si n es igual que unicos salir del bucle, ya no hay más...
    fin si
tu deberías poner:
Código
  1. if(cuenta[j]>0){
  2.    ValoresUnicos[n]=(j+min);
  3.    n++;
  4. }
Solo dos cosas más... dado que la variable 'n', tu ya la traes con un valor en la entrada de la función, tienes que hacer una de dos cosas, o bien la pones a 0 antes del bucle, o bien creas una nueva variable que sirva de contador... en cualquier caso, no puedes usar una variable ya existente con un valor que tenga, tal cual... puedes reutilizar una variable muchas veces, pero poniendo a 0 su valor cuando antes de usarlo para otra cosa (a 0 o al valor inicial que debeiera tener, por supuesto).

Finalmente, puedes ignorar la línea: "Si n es igual que unicos salir del bucle", es sólo un ahorro para no recorrer todo el bucle si ya se asignaron todos los valores únicos. No es imprescindible, y probablemente no suponga una mejora en velocidad salvo que a priori se sepa por ejemplo, que hay 1 millón de elementos, pero sólo haya 5 únicos y que estén todos al principio... Este detalle si quieres lo pones en el código, pero lo dejas comentado, cuando tengas más conocimiento del lenguaje y sobreprogamar, lo entenderás claro.

p.d.: Tu último mensaje no lo comento. En este aún con tantos errores tiene mejor enfoque que aquél, que tienes bucles anidados...
157  Seguridad Informática / Criptografía / Re: Es posible Reversear una Secuencia Alfanumerica? en: 10 Abril 2017, 20:48
Te comento lo que busco es el el algoritmo generador de los codigos, pero que este dentro del parámetro de los 50 millones de combinaciones que son funcionales.
Bien, es posible hacerlo, pero necesitamos más datos para circunscribir el algoritmo a la exactitud de donde se pretende imitarlo...
Por ejemplo, no sé de donde sacas ese dato de 50 millones, ¿me lo puedes decir?.

Segui parte del codigo que dejaste y termine creando un generador que entregaba las 270 millones de combinaciones pero realmente no tuve un gran avance.
Vale, seguir cierta parte es razonable, ya que uno debe adaptarlo a lo que exactamente necesite... sin embargo, tampoco aclaras que límites impusiste (ni código ni explicaciones) para llegar a los 270 millones de combinaciones, cuando ya te expresé que todas las combinaciones posibles para secuancias de 10 caracteres con un alfabeto de 28 caracteres, se obtienen: 28 elevado a la 10 (28*28*28*28*28*28*28*28*28*28)= 296.196.766.695.424 = casi 300billones, no millones, de secuencias.


Analizando las muestras encontre este codigo que en especial me llamo mucho la atencion, ya que pinta para ser consecutivo y tiene una cadena muy similar al final.  
Nuevamente hay que basarse en hipótesis... ¿porqué sumas el valor de los caracteres de la secuencia?. ¿Hay algún sitio donde se use un algoritmo, que haya alguna simple explicación peregrina que diga algo al respecto, sobre como crearon esas secuencias y en ello verse tu empeño en sumarlas?.


3KL9MDV NFH  - 2+15+16+7+17+10+24+18+11+13 // 133  
72GDNZ7 NSH -  6+1+12+10+18+28+6+18+22+13 // 134  
Podría suceder que la secuencia de 10 caracteres, esté formada por la concatenación de dos generadores diferentes de secuencias... pongamos una de 7 caracteres y otra de 3. Pero es una teoría, y habría quye demostrar que fuere cierto, para ello, insisto en que, es preciso obtener más secuencias de las que poder hacer un análisis (incluso sencillo, no requiere que sea profundo) y deducir las reglas inferidas.
Quizás se pudiere sacar en concreto, que por ejemplo los 3 caracteres finales, tengan un alfabeto más reducido, o incluso que sean tan solo una suma de verificación (un hash de comprobación de la validez de las secuencias) de los otros 7 previos caracteres... que (ésto) tendría, incluso, más sentido.

Hay algún problema en que reveles de donde obtienes esas secuencias o datos de algún lugar donde se dé algún detalle de como se generan, por nimios que sean esos detalles???.

En fín se requieren más datos (si puedes conseguirlos) o como mínimo más muestras (del orden de centenares), para poder fijar el camino, la ruta a seguir en vez de ir a la deriva, movido por la imaginación...

Si no hay más datos con los que limitar el algoritmo, ni secuencias de las que se puedan deducir reglas tras unos análisis, no es posible avanzar de forma seria, sería una pérdida de tiempo.


158  Seguridad Informática / Criptografía / Re: Es posible Reversear una Secuencia Alfanumerica? en: 10 Abril 2017, 05:24
Buenas tardes, gracias por el apoyo con respecto al post, te queria preguntar respecto a encontrar el algoritmo generador de codigos es posible con los datos que recopile o es muy dificil casi imposible?
No hay razón para preguntar ni responder sobre el asunto por privado...


El problema es que aún no sé exactamente qué es lo que quieres hacer... no te explicas con claridad. Yo 'disparo' a todo lo que señalas, pero luego parece ser una falsa alarma, y lo que quieres está por ahí, pero no es eso. No se puede andar jugando al gato y al ratón...
...Por ejemplo cuando dices que "sumas los valores de las letras de una secuencia"... no entiendo cuál es el objetivo, me pierdo. Explícate bien.

Si lo que quieres es simplemente, generar secuencias similares, es decir de tamaño 10 y usando ese alfabeto, es incluso más simple...
Ya que todo lo que tendrías que hacer es poner un bucle de 10 ciclos, donde obtienes al azar una letra del alfabeto en cada ciclo y vas concatenado las letras obtenidas (poco importa si la concatenas detrás o delante) y listo... pero ¿ves?... sigo disparando a ciegas. No es acertado decir cosas por ver si acierto con lo que tu quieres conseguir. debes primero encontrar las palabras que expliquen que necesitas, así yo te explico claramente cómo hacerlo... pero una sola cosa, no doscientas explicaciones y luego ninguna resulta ser aunque parecía que andabara cerca.


-----------
p.d.:
- Y si lo que querías era un algoritmo generador de secuencias usando ese alfabeto, es lo que te describo en el último párrafo.
- Pero si lo que quieres es generar todas las secuencias posibles de ese alfabeto, ya está explicado en algún mensaje previo...
- o si solo x secuencias seguidas, partiendo de otra dada, también está casi explicado del todo (aunque repartido en partes, solo falta entender bien lo que he escrito).
- Por último, si lo que quieres es encontrar un algoritmo que genere secuencias de "forma idéntica"* a como lo genera otro algoritmo, ningún número de secuencias obtenidas por ese algoritmo será suficiente... sería preciso para ello tener el algoritmo (el programa) y desemsamblarlo... básicamente porque se supone que las secunacias las generará de alguna forma aleatoria o pseudoaleatoria. Esa parte la desconocemos hasta el momento actual.
*(por "forma idéntica" quiero decir: que genere las secuencias de forma aleatoria, las mismas y en el mismo orden en que las genere el programa de donde las obtienes).


159  Programación / Java / Re: Ayuda!! agregar elementos no repetidos de un arreglo a otro en: 10 Abril 2017, 04:24
Hay varias maneras, dados los números de tu array, el primer método que te describo es el más rápido, pero no vale siempre... lee bien todos los comentarios, aunque salga una respuesta larga.... e intenta entenderla entera...

Una variación del algoritmo de ordenación Counting, lo resuelve (la variación es añadir un paso de filtrado de repetidos).
Si los límites de los números son muy grandes (distantes entre sí), no interesa esta forma de resolverlo, porque exige crear un array del tamaño entre esos límites. Tampoco sirve si se usan valores fraccionarios y hay diferente número de decimales o son demasiados (si sólo son 1 o 2 podría truncarse a entero multiplicando todos por 100, y a la salida dividirlos de nuevo entre 100).

Vamos con el desarrollo en pseudocódigo, así tienes que hacer algo por tu cuenta y no lo tienes mascado y sea sólo copiar y pegar...

Declaramos las siguientes variables:
Varias de tipo numérico (k, Min, Max, n, x, ....) que actuarán como contador, índices de array, límites, etc...
dos arrays (cuenta y ValoresUnicos), el tamaño del primero se fija en el segundo paso y el otro en el 4º paso. (en este primer método que explico)

Paso1: Hallar los límites del array (valor menor y mayor)
Al término de este bucle, ya sabemos el valor mínimo y máximo del array.
Código:
min= array(0)
max = min
Iniciar bucle para k y recorrer desde 1 hasta fin del array (el elemento 0, ya se ha tratado previo al bucle)
    Si array(k) es menor que Min luego
          Min= array(k)
    en otro caso si array(k) es mayor que Max luego
         Max = array(k)
    fin si
    incrementar k
fin bucle

Paso 2: Contar la presencia de cada valor sobre un array temporal
Código:
redimensionar Array Cuenta desde min hasta max
Iniciar bucle para k y recorrer desde 0 hasta fin del array
    cuenta(Array(k)) = cuenta(Array(k)) +1
    incrementar k
fin bucle

NOTA: Muchos lenguajes no permiten declarar un array a un índice que no sea siempre 0, en este caso, hay que hacer los cambos siguientes (recordar hacer los cambios correspondientes en los siguientes pasos, si yo los olvido)

redimensionar cuenta desde 0 hasta max - min

Iniciar bucle para k y recorrer desde 0 hasta fin del array
    cuenta(Array(k)-min) = cuenta(Array(k)-min) +1
    incrementar k
fin bucle

Paso 3: recorremos cada 'jaulita', para ver cuántos 'conejos' han caído en la 'trampa':
Código:
Iniciar bucle para K recorriendo desde Min hasta Max
    Si cuenta(k) es mayor que 0 luego unicos = unicos +1
    Incrementar k
fin bucle

Recordar que si no podemos delcarar el array comenzando en el índice Min, hay que restar siempre Min a todas las referencias, así este bucle para aquellos caso quedaría como:
Iniciar bucle para K recorriendo desde 0 hasta Max - Min
    Si cuenta(k) es mayor que 0 luego
         incrementar unicos
    fin si
    Incrementar k
fin bucle

Paso 4: finalmente dado que ya conocemos cuantos conejos hemos cazado, pedimos el camión que ha de trasladarlos, del tamaño que quepan todos en su jaulita.
Esto es, ya conocemos cuantos son los valores únicos que aparecen en el array, podemos declarar un nuevo array con ese tamaño y por tanto en el siguiente bucle solo resta pasarlos al nuevo:

declarar array ValoresUnicos desde 0 hasta unicos -1
Código:
Iniciar bucle para K recorriendo desde Min hasta Max
    Si cuenta(k) es mayor que 0 luego
        ValoresUnicos(n) = (k+min)
        Incrementar n
        Si n es igual que unicos salir del bucle, ya no hay más...
    fin si
    Incrementar k
fin bucle

Devolver el array ValoresUnicos (que además estará ordenado de menor a mayor).

-----------------------------------------------------
Comentarios:

- Básicamente para lograr solucionar el problema, la primera acción es siempre ordenar el array sea por el método que sea.
- El método expuesto de ordenar más arriba es por "Counting" es el más rápido de todos los métodos de ordenar, pero tiene severas restricciones que limitan su uso asituaciones reducidas (éste es un caso claro, donde es preferible usarlo a cualquier otro método, OJO: ciendo los valores del array que muestras)...
Esas limitaciones son: solo vale para números, deben ser enteros (preferiblemente), y los límites (valor Min y Max) deben ser un tamaño manejable, por ejemplo: si hay 25 números en el array el menor es -12345678 y el mayor es +98765432, no interesa porque hay que recorrer una cantidad enorme para solo 25 valores contenidos en el array... que ha de contener, además exige una memoria extra para almacenar el tamaño de dicho array. Cuando con estos datos se decida/impida usar este algoritmo debe recurrirse a otro algoritmo que ordene el array...


- Si no interesa ordenar el array por counting, debemos ordenarlo por otro método, considerándolo entonces el paso 1 (ordenarlo en Counting es el paso 2).
Aquí expongo entonces la forma para otras opciones:


Paso 1: Tendremos entonces que ordenado el array por otro método, sabemos que Min y Max estarán en la posición 0 y última del array ordenado respectivamente, pero aquí esos valores no se precisan. Si el array es tan pequeño como el ejemplo que pones incluso el de burbuja es preferible a otros, si el cuanto mayor sea el array, tanto más relevancia tendrá que sea más rápido... el método de ordenación a usar... Se da por hecho este paso...

Paso 2: Contar los valores únicos... tendría un bucle tampoco demasiado complejo 8es el paso equivalente al 3 del método expuesto más arriba)
Código:
unicos=0
x= array(0)
Iniciar bucle para K recorriendo desde 1 hasta fin del array
     Si array(k) es distinto que X entonces
         incrementar unicos
         x = array(k)
     fin si
     Incrementar k
Fin bucle

Paso 3: Sabiendo ya la cantidad de valores únicos que tenemos en el array, podemos hacer (casi) lo mismo que hicimos en paso 4 del método anterior (algoritmo counting), pasarlos al array ValoresUnicos, pero el modo de revisión cambia ligeramente).
Código:
Declarar array ValoresUnicvos desde 0 hasta Unicos -1
x= array(0)
ValoresUnicos(0) = x

n=0
Iniciar bucle para K recorriendo desde 1 hasta fin del array
     Si array(k) es distinto que X entonces        
        x = array(k)
        incrementar n
        ValoresUnicos(n) = x
        si n es igual a unicos salir del bucle (ya se encontraron todos)
    fin si
     Incrementar k
Fin bucle

Devolver array ValoresUnicos

...y eso es todo.

Más comentarios:
- Si se conoce de antemano los valores Min y Max, el paso 1 del primer método no sería necesario.
- Si se conoce de antemano la cantidad de valor únicos, también puede omitirse el paso de contar los valores únicos en cada método... y el array a devolver puede declararse del tamaño adecuado desde un principio.
- Piensa que la solución, cualquier solución rápida pasa por ordenar o un equivalente (un método que dado un elemento repetido tenga capacidad de omitirlo). Así otra buena opción sería crear una colección de elementos únicos que no admitan repetición (una tabla hash exclusiva, por ejemplo), e ir introduciendo uno a uno en la colección y cuando falle porque el elemento ya existe, seguir con el siguiente, etc... al final los elementos que contenga la colección serán los elementos únicos no repetidos, faltaría pues volcarlos a un array si se exige la devolución sobre un array, sino devolver directamente la propia colección.
- Si se usó un método de ordenación, para luego proceder con el filtrado, el array a devolver además estará ordenado.
 
Quizás se me haya escapado algún pequeño gazapo al escribir.. ya lo corregirás cuando pruebes el código que realices...  
160  Foros Generales / Foro Libre / Re: Como se respondería esta pregunta con trampa en: 10 Abril 2017, 02:53
Cuando te hacen una pregunta trampa, tu respuesta no debe limitarse a un sí o un no, si no que debe incluir en la respuesta todo lo que afirmes o niegues:

"Yo no rompí la ventana"

...esa es la respuesta que se debe dar... nunca algo abreviado, como sí o no (si se sospecha que es una pregunta trampa). Y si te dicen que te limites a contestar sí o no, pregúntales si pueden ellos responder por tí o si debes responder tú, en cuyo caso, añades que tú respuesta será la que tenga que ser, conforme a tu verdad y ninguna otra cosa.

También para ser justos, si eso se utiliza en un caso judicial, los propios jueces deberían inutilizar las respuestas que se resumen en sí o no, si no se afirma toda la frase, precisamente porque puede conducir a equívoco, porque puede estar trucada (si es grabada) o incluso porque puede ser malintencionada como el caso de esos abogados que 'de repente, de improviso', te cuelan una pregunta rápida, con la esperanza de que te traiciones tu subconsciente y diga la verdad, pero que en realidad lo que suele salir es lo que tu como forma propia de ser tienes... si eres optimista contestarás sí, de forma inmediata y si eres pesismista contestarás no, de forma inmediata y solo cuando repienses la pregunta y la respuesta si no coincide es cuando niegas, a lo que ellos quieren ver como que has dicho la verdad y ahora quieres negarlo. Básicamente esa es una sucia argucia de abogados peliculeros, que no oculta ninguna verdad, sino simplemente se aprovecha de la generosidad o 'roñosidad' de la forma de ser de la gente... Si te preguntarán de repente, y rápido "Entonces, tu inventaste el avión?", te puede saluir un sí, repentino, cuando claramente es un no, y es algo que todo el mundo puede confirmar que es así (que es falso, que nunca inventaste el avión), aunque tu respuesta automática sea sí.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 35
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines