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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11
81  Programación / Java / Minicontribución: desordenar y oredenar listas en: 12 Julio 2021, 11:17 am
Una mini-contribución muy tonta, pero bueno, igual algún dia le sirve a alguien para algo.

Son algoritmos para desordenar y ordenar números naturales, pero como esos números a su vez pueden ser subíndices de listas, arreglos, vectores, tuplas... o como quiera que se les llame, pueden servir para desordenar/ordenar otras cosas.

Por ejemplo ordenar listas de palabras, de entradas de datos, etc.

En cuanto a desordenar, normalmente para lo que sirven es para simular cosas al azar. Por ejemplo un bingo, o cualquier lotería. O, por ejemplo, si se tiene un arreglo de 52 elementos correspondientes a una baraja, si se desordenan los subíndices del arreglo se desordena el arreglo y se simula el barajamiento (vaya palabro, no sé si existe). O un arreglo de 28 elementos correspondientes a las fichas de dominó, al desordenar los subíndices se simula el "meneillo" de las fichas antes de jugar.

También se podrían simular cambios al azar para juegos de recorrido de itinerario con "incidentes" al azar. Por ejemplo, supongamos que queremos hacer un "Juego de la Oca" donde los "incidentes" (la posada, el puente, la calavera, las ocas...) no estén siempre en el mismo lugar sino que en cada nuevo juego se distribuyan en el itinerario de diferente manera, se podría usar.

Explico brevemente de palabra los algoritmos (no descubro las Américas, todo el mundo los conocerá).

DESORDENAR: en cada pasada se toma un elemento al azar de los que van quedando. Al principio se elige entre todos. El elemento elegido se extrae de la lista almacenándolo temporalmente en una variable. Se "corre" toda la lista desde el elemento seleccionado hasta el final. Si imaginamos la lista de elementos en horizontal, con el elemento inicial a la izquierda y el final a la derecha, pues desde el elemento seleccionado al azar y hacia la derecha se pasa cada elemento un lugar hacia la izquierda. Y luego se coloca el elemento extraído, almacenado temporalmente en una variable, en el último lugar (en el el último de la derecha). Ahora se ddisminuye en una unidad el nº de elementos a sortear ( ya solamente se sortea entre los elementos que van quedando a la izquierda) y se repite el proceso hasta llegar a que sólo quede un elemento a la izquierda y ya todos estarán desordenados.

ORDENAR: se va recorriendo la lista de izquierda a derecha, comparando cada elemento "i" con el siguiente "i + 1", cuando se encuentra que un elemento "i" es mayor que el siguiente "i + 1" (si es ordenar de menor a mayor; si fuera de mayor a menor la comparación sería que "i" fuese menor que "i + 1") se intercambian de lugar. Antes de iniciar el recorrido se pone una bandera (flag) que se cambia cuando se produce un intercambio de posiciones. El bucle es -en principo- infinito, sin condiciones, pero cuando la bandera no ha cambiado (no se ha producido ningún intercambio de posiciones) es que ya todos los elementos han quedado ordenados, y se sale del bucle.

Lo dejo todo den un programa en Java que, primero pide el nº de elementos que tendrá la lista, construye la lista de números naturales desde 0 hasta el ingresado - 1, e imprime la lista inicial ordenada. Luego la desordena e imprime la lista desordenada, y posteriromente la vuelve a ordenar e imprime la lista nuevamente ordenada. He señalado en el mini-programita los algoritmos de desordenación/ordenación.

Código
  1. import java.util.Scanner;
  2.  
  3. public class DesordenarOrdenarLista {
  4. public static void main(String[] args) {
  5. int numElementos;
  6. int [] lista;
  7. int numAzar;
  8. int numSup; // para elegir numAzar entre 0 y numSup - 1
  9. int var = 0;// guarda temporalmente un elemento de lista[]
  10.  
  11. Scanner teclado;
  12. teclado = new Scanner(System.in);
  13. System.out.println ("Introducir longitud de la lista");
  14. numElementos = teclado.nextInt ();
  15.  
  16. lista = new int[numElementos];
  17. for (int i = 0; i < numElementos; i++) {
  18. lista[i] = i;
  19. }
  20. System.out.println ("Lista ordenada:");
  21. for (int i = 0; i < numElementos; i++) {
  22. System.out.print (lista[i] + "    ");
  23. }
  24. System.out.println ("");
  25.  
  26. // algoritmo de desordenación
  27. numSup = numElementos;
  28. for (int i = 0; i < numElementos - 1;i++) {
  29. numAzar = (int) (Math.random() * numSup);
  30. var = lista[numAzar];
  31. for (int j = numAzar; j < numElementos - 1; j++) {
  32. lista[j] = lista[j+1];
  33. }
  34. lista[numElementos - 1] = var;
  35. numSup--;
  36. }
  37. // fin de algoritmo de desordenación
  38.  
  39. System.out.println ("Lista desordenada:");
  40. for (int i = 0; i < numElementos; i++) {
  41. System.out.print (lista[i] + "    ");
  42. }
  43. System.out.println ("");
  44.  
  45.  
  46. // algoritmo de ordenación
  47. for (;;) {
  48. char flag = 0;
  49. for (int i = 0; i < numElementos - 1; i++) {
  50. if (lista[i] > lista[i+1]) {
  51. var = lista[i];
  52. lista[i] = lista[i+1];
  53. lista[i+1] = var;
  54. flag = 1;
  55. }
  56. }
  57. if (flag == 0)
  58. break;
  59. }
  60. // fin de algoritmo de ordenación
  61.  
  62. System.out.println ("Lista nuevamente ordenada:");
  63. for (int i = 0; i < numElementos; i++) {
  64. System.out.print (lista[i] + "    ");
  65. }
  66. System.out.println ("");
  67. }
  68. }
  69.  
  70.  
82  Programación / Programación C/C++ / Re: La derivada de la función int main(argc, char* argv[]) es igual a cero. en: 12 Julio 2021, 09:09 am
Hombre, es que eso es de perogrullo. Para ese viaje no hacían falta tantas alforjas. Además éso es solamente si tu construyes tu funcion main de manera que siempre regrese lo mismo. Pero no es el caso general. Como bien dices podría regresar cualquier otro valor.

Yo pensaba que te referías a una función en que a pares distimtos corresponderían valores distintos:
argc1, *argv[ ]1 ----> main1
argc2, *argv[ ]2 ----> main2
argc3, *argv[ ]3 ----> main3
...

Que además es el caso general. Y si pretendes dar una definición de algo (en este caso una derivada) en matematicas debes hacer una definición general.

La derivada de funciones reales de variable real están definidas para todo el espacio de funciones y = f(x) ---> dy/dx.

Si haces una definición de derivadas sólo para las funciones y = k; k = constante... ¿eso de qué te vale?  :o

Tú en general tendrás funciones:
main = f[argc, *argv]
Y para esa función general es para la que tendrías que definir lo que quiera que fuese una derivada.
83  Foros Generales / Foro Libre / Re: hablemos sobre lentes rayban en: 11 Julio 2021, 17:53 pm
me gusta esa marca y su calidad lo compre 100% original y unos lentes gucci valen la pena? no tengo hijos ni nada me sobra dinero.

Yo me lo gastaría en whisky, putas y yerba... Pero para gustos están los colores... ::)
84  Programación / Programación C/C++ / Re: La derivada de la función int main(argc, char* argv[]) es igual a cero. en: 11 Julio 2021, 17:35 pm
Como si quieres hacerlo double main (), o ya puestos void main ().

Hay muchas cuestiones. Por citar sólo algunas:

- Habías hecho un silogismo (encadenamiento de razonamientos). Te fijas sólo en el último eslabón de la cadena. Según tu ¿razonamiento? otro eslabón era:
char* argv[] ∈ R
y otro más era:
argc = (argc(char* argv[]) ∈ R)
...
A ver como justificas que punteros a char... en realidad punteros a-lo-que-sea (que eso me da igual) puedan ser números reales... :silbar:
Porque un puntero es y siempre será un entero, y un cociente entre punteros (por aquello de que una derivada es un límite de cocientes)... ¡cualquiera sabe qué cosa podrá ser!.

Y se supone que esos planteamientos formaban parte de tu cadena de razonamiento. Si falta un eslabón la cadena se rompe... y no has justificado esos eslabones (y me da que no vas a poder). Sólo te has fijado en el último de main, pero en tu razonamiento todos los eslabones tienen que ser ciertos si quieres que la conclusión lo sea.

Pero ya puestos...

Que una función de un lenguaje (C) pueda devolver un número real... no significa que esa función SEA un nº real. De hecho no es más que una aproximación numérica a un nº real.

Ya puestos. En realidad no has definido qué cosa pueda ser una derivada de una función de un lenguaje de computación. Que éso y no otra cosa sería una "derivada" de la función main (). Lo has tratado de identificar con lo que es una derivada en R o, si empezamos a meternos con R2, R3, etc. con sus derivadas parciales, etc, con lo que serían funciones de Rn en Rm, pero mientras que esas cosas están perfectamente definidas en matemáticas lo que son, como son y como se calculan, tu derivada de "una función de lenguaje de programación C"... ¡no está definida en ninguna parte! Así que tendrias que empezar por definir qué entiendes por tal cosa.

Primero tendrías que definir un espacio (bueno primero un conjunto ya veríamos si tendría caracteristicas de espacio) de "funciones del lenguaje C". Después definir las operaciones dentro de ese espacio y/o con otros espacios; como definir qué cosa pueda ser un cociente entre funciones de C o cociente entre una función C y un nº (ya sea éste real, entero, natural, complejo...), después qué pueda ser un límite en esos términos, por ejemplo un límite entre dividir una función de C y otra función de C... todo ello con sus correspondientes teoremas de existencia de los resultados de esas operaciones... y finalmente definir qué cosa sería una derivada en ese espacio de funciones de C. Definir el concepto de "cero" en ese espacio -que no sería igual al cero de los números reales, al cero complejo, al cero en Rn, etc...- y demostrar que el cero de ese espacio es isomorfo con cualquier otro cero de otro conjunto conocido.

Y unas pocas de cosas más.
...
La verdad, no te envido la tarea...  ::)

Y si lo consigues te lo  juro por mis niños que yo mismo te propongo para Premio Abel y te llevo a hombros y de rodillas hasta la sala de entrega de premios.
85  Programación / Programación C/C++ / Re: La derivada de la función int main(argc, char* argv[]) es igual a cero. en: 11 Julio 2021, 12:15 pm
Creo que la cuestión está mal planteada y ni siquiera existe una derivada de la función main.

2. (char* argv[] ∈ R) ∧ (argc = (argc(char* argv[]) ∈ R))

char* argv[] ∈ R ==> FALSO: ni siquiera es char* argv[] ∈ Z, sino:
char* argv[] ∈ subconjunto de Z

argc = (argc(char* argv[]) ∈ R) ==> idem eadem idem

3. ∴ int main(Ac, B* Av[]) ∈ R

int main... int, int, int...
Está claro que main  ∈ R es FALSO. Como en los casos anteriores ni siquiera pertenece a los números enteros sino a un subconjunto de ellos (los que la máquina y el compilador en cuestión sean capaces de gestionar).

Ahora bien, una derivada no es más que un límite de un cociente. Pero la división en en el conjunto Z -y por ende en un subconjunto de él- no está definida. En general el cociente entre dos números enteros no tiene porqué existir y ser otro número entero. Por tanto, si no puede definirse -en general- la operación cociente o división como una función interna en Z, no puede definirse la función derivada en Z; ni en un subgrupo de Z.

De tal forma carece de sentido hablar de derivada de la función main.
86  Programación / Programación C/C++ / Re: variables tipo char help!!!! en: 8 Julio 2021, 19:54 pm
...me estan pidiendo leer espacios en blanco, saltos de linea o tabuladores...

¿De dónde? No queda muy clara tu pregunta, al menos para mí. La función scanf es para introducir datos formateados por teclado.

¿De dónde tienes que leer los caracteres?
87  Comunicaciones / Redes / Red abierta oculta en: 3 Julio 2021, 10:15 am
¿Por qué motivo podría tener alguien una red oculta sin contraseña? Si la ha ocultado por seguridad ¿por que la deja abierta y no le pone también contraseña?
88  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Si edito un mensaje ¿el tema aparecerá como no leído? en: 28 Junio 2021, 08:10 am
A mi parecer la solución es bastante más fácil. Se escribe un nuevo mensaje y listo. Ya sé que la norma dice que es preferible editar antes que colocar un nuevo mensaje a la cola, pero entiendo que también hay una interpretación de la norma.

Es decir si en un mensaje dabas una solución parcial o pobre a un problema planteado por alguien o no encontrabas ninguna y posteriormente encuentras una buena solución, no veo ningún problema en poner un nuevo mensaje exponiendo dicha solución. Todo dependerá de que el subir un nuevo mensaje esté justificado o no.

Los propios moderadores han abogado y dado muestras de interpretar las normas en casos concretos, no sólo aplicar rígidamente la letra de la norma sino el espíritu de la misma. Más en un foro como éste; ni que fuera un foro de abogados.  :D

Creo que cabría esperar cierta flexibilidad por parte del staf y no debiera haber mucho problema con éso.
89  Programación / Programación General / Re: PYTHON LISTAS ARRGELOS TUPLAS en: 28 Junio 2021, 07:41 am
El arreglo tendría que estar preparado previamente para que fuese factible la descomposición ¿no?

Porque si es un arreglo cualquiera formado sin ningún criterio específico podría suceder que no hubiese ninguna combinación de (subarreglos/operación) que cumpliese la condición.
90  Sistemas Operativos / GNU/Linux / Re: secure boot efi en linux en: 27 Junio 2021, 12:34 pm
Yo no sé decirte si es mejor o peor. Simplemente no pude instalarlo en UEFI. Tengo Windows 10 y Lubuntu en el mismo disco duro pero no pude instalarlo en UEFI, tuve que quitar UEFI y dejarla en Legacy y ahí sí, entonces me dejó instalar Lubuntu, que instaló GRUB de arranque dual. Pero UEFI no me dejaba arrancar DVD/CD ni USB por lo que no podía instalar el Linux.

Ahora, si tu puedes conseguir instalar Linux en un sistema que ya tiene Windows y está en  arranque UEFI, no digo nada; no sé si será mejor o peor. Yo simplemente no pude y me tuve que ir a Legacy.
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines