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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 [320] 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 ... 431
3191  Foros Generales / Noticias / Re: Jazztel se apunta a las subidas de precio a partir del 15 de abril en: 15 Febrero 2018, 06:14 am
Vaya negocio el de los Gb... en datos móviles...

Tarifa plana para navegar por internet con el PC, y tarifa mercenaria en teléfonos móviles.

No tiene ninguna lógica de ser, excepto la avaricia.
3192  Foros Generales / Noticias / Re: Las cajas de botín podrían limitar ciertos juegos a los 21 años de edad en: 15 Febrero 2018, 06:11 am
Es que es razonable limitarlo... y en efecto como mínimo a los menores de edad (edad que es distinta según países).

No es admisible que un menor de edad, que no tiene trabajo, que no tiene cuenta bancaría, que no tiene una fuente propia de ingresos, que esté protegido contra posibles adicciones...

Un adulto, se supone que tiene la cabeza amueblada, y sabrá donde debe plantar su límite. Aunque aún así, siempre habrá descerebrados que se gasten su salario en juegos chorras... aunque bueno, igualmente hay quien se lo gasta en bares, en PU745, en tabaco, en etc...
3193  Foros Generales / Noticias / Re: El mercado de la DRAM seguirá revuelto en 2018, subirán precios en: 15 Febrero 2018, 06:05 am
Habría que reclamar a todos aquellos que el año pasado cacareaban que en éste finalmente bajarían, porque bla, bla bla... que se desdigan por bocazas...

Viendo el panorama, lo lógico es que si los fabricantes quieren sacar más beneficios (qué pregunta más boba), haciendo lo mismo, les basta, no aumentar la producción.

...en fin, el mercado mundial, ya se ha convertido también en otra gran estafa, aunque pueda abastecerse completamente a todo el planeta, mejor fabricar con escasez, para aumentar precios. La especulación, lo invade todo hoy día, es como la regla máxima de las empresas multinacionales.
3194  Foros Generales / Noticias / Re: Adiós, Cortana: cómo desactivar Cortana en Windows 10 en: 15 Febrero 2018, 05:55 am
Suena gracios lo de Asistente personal, me recuerda al "agente" (también de Microsoft), que también era un asistente, su antecesor (el icono más pinta de espía de los 40-60 que otra cosa), pasó a mejor vida sin pena ni gloria, aunque realmente el concepto era bueno, era demasiado limitado.

De éste, es lógico pensar que puede comportarse como el vecino cotilla que se pasa todo el día en tu casa... y luego va a contarle al resto lo que quiere. Así que sí, a los que no nos gustan los cotillas, por muy buenas intenciones que parezcan tener... les damos puerta...
3195  Foros Generales / Noticias / Re: Los mineros de criptodivisas no dejan a los científicos buscar alienígenas en: 15 Febrero 2018, 05:49 am
Ciertamente una locura.... ahora como reviente la burbuja (de las monedas virtuales)... van a caer unos pocos como pájaros fulminados por un rayo.
3196  Foros Generales / Noticias / Re: Pagar por usar Wallapop o Milanuncios: el impuesto planteado en un documento ... en: 15 Febrero 2018, 01:14 am
Qué pernicioso es el poder...
Antes había un chorro de impuestos... luego llegó el IVA, con él, la idea era eliminar todos los impuestos resumidos en uno solo... después de su implantación, al vuelto a proliferar nuevos impuestos... el IVA ya no es el 'impuesto resumen' de todos, ahora es sólo uno más...

En el asunto de explotar a los más desfavorecidos, es un suma y sigue y que no pare...

Pagar un impuesto por el mero hecho de visitar, por ejemplo ebay, es simplemente ridículo. Hay gente que tiene un negocio de verdad en ello, hay quienes simplemente compramos cosas de poco valor, unas pocas veces al año... muy injusto sería que un usuario que busca información aunque luego no compre nada, porque le parece caro (a veces simplemente quiere uno comparar), otro usuario que se deja 100-200 euros al año a otro que gana 50.000 euros anuales vendiendo... si todos ellos paan impuestos, una vez más resulta desproporcionado, el que entra a visitar y no compra ni vende nada y el que compra alguna tontería, están alimentando al que gana 50.000 al año. Luego la recaudación en impuestos a la hora de repartir, cada hay más presión para que no vaya a parar al más desfavorecido... se congelan pensiones, sueldos, se complica el paro, pero en cambio a la banca se le otorgan millonadas y a las grandes empresas se les concede exención de impuestos por tener departamente de I+D, aunque luego no patenten nada, basta que tengan una oficina con una puerta que en el crital ponga eso: Departamento de I+D, y un tipo dentro... y ya decáe los impuestos para esa empresa del 42% al 8%, mientras un autónomo debe pagar religiosamente se 28-33%, o un asalariado su IRPF y SS... total más del 20%...

Creo que la gente es demasiado bondadosa, pero también me temo que algún día va a explotar, y cómo pasó en la revolución francesa, rodarán cabezas... es cuestión de cuanto aire aguanta más el globo sin reventar.
3197  Foros Generales / Noticias / Re: CIA, FBI y NSA desaconsejan usar teléfonos Huawei o ZTE en: 15 Febrero 2018, 00:49 am
Sin llegar al paroxismo de la manía persecutoria, sigo pensando que las telecomunicaciones son sistemas estratégicos, que cada país debiera proteger de puertas adentro. Como mínimo a nivel del funcionariado del gobierno, desarrollando hardware y software propio...
3198  Programación / ASM / Re: ¿Es difícil el lenguaje Ensamblador? en: 13 Febrero 2018, 15:57 pm
Ensamblador, jamás debiera ser el primer lenguaje de programación que aprender.
Sólo es fácil cuando ya se tienen ciertos conocimientos sólidos, si no, es un galimatías para un principiante.

...por algo hay lenguajes de alto y bajo nivel. Los lenguajes de alto nivel 'reconducen' al programador y en todo momento tiene claro dónde está o qué hace... en ensamblador el código es todo una sopa, la coherencia del código es la que uno mismo le dé, el lenguaje no proporciona prácticamente niveles de abstracción.

Por ejemplo, si uno jamás ha programado un algoritmo de ordenación en un lenguaje de alto nivel, intentar hacerlo en ensamblador, le va a resultar enormemente más complejo, porque donde en un lenguaje de alto nivel te baste 12 líneas de código, en ensamblador puedes llegar a necesitar 50 ó...
3199  Programación / Programación C/C++ / Re: Cartón de Bingo en C. en: 12 Febrero 2018, 04:13 am
No es preciso enviar un mensaje personal para estas cosas... pués para eso está precisamente el foro, y así cualquier respuesta sirve para todos.
Los mensajes privados son para cosas que no concierne a nadie más...

Hola NEBIRE, sigo teniendo dudas con la función de generar huecos; podrías ayudarme a incluirla en este código:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int filas, columnas; // iteradores
  6.  
  7. void generar(int matriz[3][9]);
  8. void imprimir(int matriz[3][9]);
  9. void huecos(int matriz[3][9]);
  10.  
  11. int main()
  12. {
  13.    SetConsoleOutputCP(1252);
  14.    srand(time(NULL));
  15.  
  16.    int matriz[3][9];
  17.  
  18.    printf("Este es su Cartón de Bingo: \n");
  19.    printf("\n");
  20.    generar(matriz);
  21.    huecos(matriz);
  22.    imprimir(matriz);
  23.  {
  24.    int opcion;
  25.    do
  26.    {
  27.        printf( "\n   Si desea cambiar su cartón pulse 1: \n");
  28.        printf( "\n   Si le ha gustado su cartón y no desea cambiarlo pulse 2: ");
  29.        scanf( "%d", &opcion );
  30.        switch ( opcion )
  31.        {
  32.            case 1: generar(matriz);
  33.                    imprimir(matriz);
  34.                    printf("\n Suerte con su juego\n");
  35.                    break;
  36.            case 2: printf("\nSuerte con su juego\n");
  37.                    break;
  38.         }
  39.    } while ( opcion !=2 );
  40. }
  41. }
  42.  
  43. void generar(int matriz[3][9])
  44. {
  45.    for(columnas=0;columnas<9;columnas++)
  46.    {
  47.    do{
  48.        for(filas=0;filas<3;filas++)
  49.        {
  50.            switch (columnas)
  51.            {
  52.                case 0:
  53.                    matriz[filas][columnas] = 1 + rand() % (10 + 1 - 1);
  54.                    break;
  55.                case 1:
  56.                    matriz[filas][columnas] = 11 + rand() % (20 + 1 - 11);
  57.                    break;
  58.                case 2:
  59.                    matriz[filas][columnas] = 21 + rand() % (30 + 1 - 21);
  60.                    break;
  61.                case 3:
  62.                    matriz[filas][columnas] = 31 + rand() % (40 + 1 - 31);
  63.                    break;
  64.                case 4:
  65.                    matriz[filas][columnas] = 41 + rand() % (50 + 1 - 41);
  66.                    break;
  67.                case 5:
  68.                    matriz[filas][columnas] = 51 + rand() % (60 + 1 - 51);
  69.                    break;
  70.                case 6:
  71.                    matriz[filas][columnas] = 61 + rand() % (70 + 1 - 61);
  72.                    break;
  73.                case 7:
  74.                    matriz[filas][columnas] = 71 + rand() % (80 + 1 - 71);
  75.                    break;
  76.                case 8:
  77.                    matriz[filas][columnas] = 81 + rand() % (90 + 1 - 81);
  78.                    break;
  79.                }//final del switch
  80.            }
  81.        }while((matriz[0][columnas]== matriz[1][columnas]) ||
  82.               (matriz[0][columnas]==matriz[2][columnas]) ||
  83.               (matriz[1][columnas]== matriz[2][columnas])||
  84.               (matriz[0][columnas]>matriz[1][columnas])||
  85.               (matriz[1][columnas]>matriz[2][columnas]));
  86.    }
  87. }
  88.  
  89. void imprimir(int matriz[3][9])
  90. {
  91.    for(filas=0;filas<3;filas++)
  92.    {
  93.        for(columnas=0;columnas<9;columnas++)
  94.        {
  95.            if (columnas == 0 && matriz[filas][0]!=10)
  96.                printf("[  %i ]", matriz[filas][columnas]);
  97.            else
  98.                printf("[ %i ]", matriz[filas][columnas]);
  99.        }
  100.        printf("\n");}
  101. }
  102. void huecos(int matriz[3][9])
  103. {
  104.         do{
  105.            generar(matriz);
  106.         }while();
  107.    }
  108.  
  109.  

En el siguiente hilo di una amplia respuesta a otro usuario que preguntaba por un bingo:
https://foro.elhacker.net/buscador2-t472516.0.html;msg2134435#msg2134435

Si bien algunos detalles no quedaron concretados (como tampoco haces tú). Antes de responderte con más precisión sobre el tema es preciso concretar detalles...  de otro modo uno refiere cosas genéricas, que luego resulta más difícil adaptar al caso específico que uno precisa.

Por ejemplo, yo recuerdo en mis tiempos de discotecas (allá a mediados de los 80s), se puso de moda que con la entrada a la discoteca, de regalo, te daban un cartón de bingo (válido para un sorteo, esa noche en el propio local), y a veces, por superar cierto valor en las consumiciones, te daban otro, luego de medianoche en adelante paraban la música un rato y se sorteaba el bingo... recuerdo que aquellos cartones eran de 80 bolas, eran 4 líneas con 5 valores, luego cantar bingo exigía acertar 20 bolas. Sin embargo duraba mucho tiempo y al parecer las consumiciones se 'congelaban' mientras todo el mundo estaba atento al trascurrir del bingo... así que pronto cambiaron a cartones de 90 bolas, con solo 3 líneas asi solo se requerían 15 bolas para alcanzar el bingo. Aunque hay más tamaños de cartones, éste de 90 bolas es el más habitual, así que conviene aclarar los detalles de como es...

Bolas: 90
Lineas: 3
Valores por linea: 9, de los cuales 4 son 'huecos'.
Cantar linea: 5 bolas en línea
Cantar bingo: 15 bolas (3lineas x 5bolas).

Más detalles:
El cartón se reparte en columnas, cada columna acoge a los valores de una decena, así es fácil hallar el valor recién extraído del bombo.
Además, el cartón está 'equilibrado', es decir tiene bolas en todas las decenas. Para que se cumpla esto, ninguna columna debe tener 3 bolas...
Mirándolo bien entonces hay 3 columnas con solo 1 valor y 6 columnas con 2 valores.

Los cartones tienes valores comenzando en 1 y acaban en 90, esto implica que los valores acabados en 0, están en la columna anterior de la decena de la que forma parte... en las explicaciones subsiguientes, en cambio he optado por valores en el rango 0-89 y así, los valores 0,10,20,30...80 están en la misma columna que el resto de valores de la decena.

Otro detalle, es que para que el juego sea equitativo con todos, no puede haber más bolas de un valor que otro en los cartones, esto implica que todas las bolas de un bingo, deben ser alojadas en sendos cartones... así el bingo de 80 bolas se ajusta en 4 cartones (20bolas por cartón x 4cartones = las 80 bolas del bingo).
... y de igual modo para éste: 90bolas de bingo / 15bolas por cartón = 6 cartones...
Es decir las 90 bolas deben repartirse en 6 cartones, y para generar más cartones siempre deben ser de 6 en 6... luego eso que tienes en tu código de 'te gusta este cartón?'... no vale... los jugadores/apostantes/bingueros, no pueden elegir cartón, al menos no debe elegirse un cartón creado al efecto, si no en todo caso, entre los generados (igual que un jugador real, no podría elegir ningún cartón que físicamente no existe, y los que existen, han sido generados siempre en secuencias de 6 en 6...)

Y por último, los cartones deben estar bien proporcionados, con un reparto de valores equilibrado. Al caso, de cada decena debe existir valores. Los jugadores se  quejarían de situaciones similares a éstas:
 -- 31 32 -- 33 -- 34 35 --  (números consecutivos)
ó una como esta, (en este caso perfectamente válida)
 -- 27 -- 47 67 -- -- 87 17  (números con la misma terminación)
Incluso una línea que sin ser consecutivos tuvieran varios de la misma decena alguien se quejaría:
 -- -- 43 -- 48 -- 40 42 45  (todos en la misma decena)
Tampoco se libran situaciones como esta:
 03 -- 06 -- -- 09 -- 85 -- 87  (unos muy bajos y otros muy altos).
Esto aunque fuera mejor, quedaría feo:
 -- -- -- -- 15 31 55 62 84 (todos los huecos juntos por un lado y los valores por otro).

Se puede considerar dos formas de abordarlo, simple o complejo, según ignoremos ciertas condiciones expresadas más arriba.
Ignoro si todo esto es una tarea escolar, para la Universidad o si es algo más 'profesional', si es un trabajo para la 'Uni', quizás sea mejor obviar muchas cosas, y simplemente repartir las bolas entre los cartones sin molestarse en las otras consideraciones (obviamos mantener no más de 2 valores por decena y para 3 decenas solo 1 valor, además de constatar ordenadas las bolas en el cartón, etc...).

Si es un tarea de la 'Uni', posiblemente sea suficiente la forma simple: repartir los números entre los cartones y alojar los huecos, sin entrar a valorar más consideraciones. Por tanto voy a considerar este útimo caso, como el tuyo, y el pseudocódigo que sigue se ajusta a esto, si luego resulta que es para un trabajo más profesional, pués avisa... es un poco más complejo, pero tampoco excesivamente, aunque si lleva más texto explicativo, para terminar de comprenderlo todo bien...



----------------------------------------
Tu primer trabajo, por tanto es barajar las 90 bolas y repartirlas entre los 6 cartones. Al caso, tras barajar el array él mismo basta inicialmente para contener los 6 cartones en crudo, considerando que cada cartón empieza en los índices múltiplos de 15 ... (cartón 1ª índices del 0 al 14, 2ª índices del 15 al 29, etc... cada 15 se alojan en un nuevo cartón).
El pseudocódigo para esto, ya te lo puse más arriba, copio y pego:

Código:
Array de bytes = funcion CrearYRellenarArray(byte cantidad)
    byte k
    array de bytes Bolas(0 a cantidad-1)

    bucle para k desde 0 a cantidad-1
        Bolas(k) = k  
    fin bucle
  
    devolver Bolas
fin funcion


//Y luego se barajan, así el reparto es aleatorio:

funcion Barajar(Array de bytes Bolas, byte Cantidad)
    byte i, j
    entero k

    Bucle para k desde cantidad-1 hasta 1 retrocediendo
        i = random(ente 0 y k)

        j = Bolas(i)
        Bolas(i) = Bolas(k)
        Bolas(k) = j
    fin bucle
fin funcion


He obviado ordenar los valores de cada cartón, porque aquí la forma (simple del bingo) seguida aquí, los desordena de nuevo... al final si lo deseas puedes ordenar los valores de cada línea... a medida que se crea la línea

La 2ª tarea es generar los cartones. Una función invoca en bucle a otra que mete los huecos en cada línea de 1 cartón
Código:
// esta función manda meter los números de cada 'cartón' del array bolas en el array de cartón definitivo, con sus respectivos huecos.

// o un array de arrays...
coleccion de arrays = funcion Crear6Cartones(array de bytes Bolas, byte cantidad)
    byte k
    array de bytes carton
    //coleccion  col = nueva coleccion


    bucle para k desde 0 a 5 // 6 cartones
        carton =  MeterHuecos(bolas, k, )
        //col.Add(carton)
        llamada a ImprimirEnPantalla (carton)  ' si solo se ha de probar, que funciona bien, no es preciso devolver una colección, podría bastar con pasarlo por pantalla...
    fin bucle
    
    //devolver col
fin funcion

La 3ª tarea  finalmente es generar un array individual para cada cartón. con sus 27 casillas (3 líneas de 9) generando los huecos...

Para ello primero se crea un array con los 27 elementos que ha de tener.
Se considera subdividido en 3 series de 9, en cada serie de ellas introduce al comienzo, 5 valores procedentes del array bolas, luego se añaden detrás los 4 'huecos' (con valor 255) ... y se baraja esa línea, así quedan repartidos los valores y los huecos...
Código:
Array de bytes = Funcion MeterHuecos(array de bytes Bolas, entero NumeroCarton)
    array de bytes Carton(0 a 26)
    byte i, j, n, indice, ix, v
    entero k

    indice = (NumeroCarton * 15)    // indice en el array donde comienza este cartón...
    i = 0

    bucle para j desde 1 a 3  // 3 líneas
        // en este bucle metemos 5 valores en una línea.
        bucle para k desde indice a (indice + 4)
            carton(n) = Bolas(k)
            n +=1
        fin bucle
        indice = k

        // metemos los 4 huecos (valor 255)
        bucle para n desde n a n+3
            carton(n) = 255  
        fin bucle
      
        // Resta barajar esta línea del cartón, que es lo que hace el siguiente bucle:
        bucle para k desde n-1 hasta i+1 retrocediendo  
            ix= random(entre i y k)  // OJO: entre i y k, no entre 0 y k

            v = carton(k)
            carton(k) = carton(ix)
            carton(ix) = v
        fin bucle

        i = n      
    fin bucle  
  
    devolver carton
fin funcion

Solo resta las llamadas a cada función...
Código:
funcion Main()
    array de bytes Bolas
    // coleccion col

    Bolas = CrearYRellenarArray(90)
    llamada a Barajar(Bolas, 90)
    
    llamada a Crear6Cartones(Bolas, 90) ' y los imprime, para ver le resultado de cada uno.
    // coleccion = Crear6Cartones(Bolas, 90)
fin funcion

...y listo, es plenamente funcional... cuando lo pases a código... como está escrito de un plumazo, quizás precise alguna pequeña corrección...

La función ImprimirEnPantalla(array de bytes Carton) queda a tu esfuerzo, no creo que tengas problemas (solo recuerda que los huecos contiene valor 255, imprime 2 espacios, o 2 guiones y para valores menores de 10, añade un 0 delante, para cuadrar bien las líneas).

Este método, puede ser suficienbtemente válido para una tarea de estudiante , ya que lo que se persigue es cumplir una funcionalidad, y que el alumno se esfuerce en entender y ser capaz de darle solución, pero no es válido para usar de forma real, los cartones resultantes podrían tener situaciones por las que un jugador tendría 'quejas', tal como te señalaba más arriba...
Si necesitas algo más 'profesional' avisa y me extiendo en los detalles de la 'forma compleja'... no lo es tanto, pero ciertamente tiene más trabajo que esto...

Aquí un resultado al ejectuarlo... Nota como siendo la forma simple, aparecen los fallos descritos al comienzo: columnas con 3 valores, o con 3 huecos, más de 3 valores seguidos, valores desordenados, más de 2 valores de la misma decena, valores de algunas decenas ausentes, etc...
Sin embargo cada línea contiene 5 valores y 4 huecos y los 6 cartones contienen todas las bolas de la 0 a la 89.

--  --  29  15  --  10  77  --  02  
----------------------------------------
75  70  84  --  --  --  07  46  --  
----------------------------------------
--  21  --  76  45  --  24  22  --  
----------------------------------------


06  42  --  87  18  --  --  23  --  
----------------------------------------
--  43  62  31  --  --  --  13  33  
----------------------------------------
53  --  --  --  --  73  71  08  61  
----------------------------------------


09  --  --  88  --  59  --  20  38  
----------------------------------------
82  14  --  --  --  --  35  41  69  
----------------------------------------
--  --  44  --  83  11  74  80  --  
----------------------------------------


--  --  05  26  --  --  58  00  78  
----------------------------------------
37  --  27  55  54  --  --  12  --  
----------------------------------------
49  34  --  56  --  --  51  --  48  
----------------------------------------


--  19  81  40  --  --  17  --  16  
----------------------------------------
79  30  39  --  --  36  --  --  52  
----------------------------------------
72  85  --  --  --  04  68  --  64  
----------------------------------------


--  28  --  --  32  67  --  60  03  
----------------------------------------
--  57  65  --  --  --  01  66  89  
----------------------------------------
--  63  50  86  --  47  --  --  25  
----------------------------------------

La banca para sacar las bolas usa las dos primeras funciones, esto es, crea el array y lo rellena y luego lo baraja...
Una tercera función sería un bucle que va 'cantando' las bolas que señala el bucle... el bucle va recorriendo dicho array barajado...
3200  Foros Generales / Noticias / Re: Cuidado con los cargadores públicos: son un coladero de virus tan grande como... en: 10 Febrero 2018, 01:45 am
El problema existe desde que ambos cables se unificaron en uno solo.

Si el cable de alimentación fuera a una toma solo para alimentación e independiente del de datos, no pasaría (aunque fuera el mismo cable)...

Pero al pretender ahorrar espacio y servir la misma conexión física para ambas funciones, pués ahí ya queda posiblidad para el espionaje y la infección.
Páginas: 1 ... 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 [320] 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 ... 431
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines