Resultados 1 al 17 de 17

Algoritmo en pascal

  1. #1 Algoritmo en pascal 
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.451
    Descargas
    11
    Uploads
    0
    bien, nos madaron hacer un ejercicio, REALMENTE facil. es elegir un intervalo y que la maquina sortee un numero entre ese intervalo.

    el programa es DEMASIADO facil, claro un randomize lo soluciona todo. pero.... ese es el problema, no enseño el comando randomize. y aunque lo puedo hacer con el; me esta carcomiendo la cabeza, en pensar cmo pudo hacer con las intruciones:
    for
    while
    repeat
    if
    y ta nada mas...

    ??????????
    Buscare algun algoritmo... pero de mi; por ahora no ha salido nada
    Gracias y saludos
    Cypress
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

  2. #2  
    Avanzado
    Fecha de ingreso
    Sep 2006
    Mensajes
    200
    Descargas
    1
    Uploads
    0
    Con bucles unicamente poco más vas a poder hacer. Los bucles son para controlar el flujo de ejecucción del programa. lo que necesitas es obtener un valor aleatorio, para eso existe la función que genera números aleatorios, no le des más vueltas.
    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Sep 2006
    Mensajes
    1
    Descargas
    0
    Uploads
    0
    Randomize crea una semilla para que cada vez que el programa arranque salga un numero diferente, y se debe usar una sola vez al entrar al programa, luego debes usar el comando random dentro del bucle que es el que genera los numeros. Y perdona si no es random y es otro, es que hace años que no manejo pascal.

    Salu2.
    Citar  
     

  4. #4  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    Usa un programa que cree un bucle infinito que ande atrás y adelante entre los números escogidos y luego otro bucle que cuente un time, algo así como un reloj y al llegar a 1 segundo, por ejemplo, que devuelva el valor del bucle. No se si me he explicado.
    Las ideas son como las pulgas, saltan de unos a otros pero no pican a todos... (George Bernard Shaw)
    Citar  
     

  5. #5  
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.451
    Descargas
    11
    Uploads
    0
    mmmm nop SxR, lo que tu dices es que cree un timer(como el de visual?) y que luego lo llame cuando sortea?


    y SetQ ya se lo que es el randomize, lo que no se es como con muy pocas herramientas hacer algo cmo el randomize.
    Última edición por Cypress; 26-09-2006 a las 22:20 Razón: me falto la 'h' en Herramientas
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

  6. #6  
    Avanzado
    Fecha de ingreso
    Sep 2006
    Mensajes
    200
    Descargas
    1
    Uploads
    0
    Pero exactamente que quieres hacer? Solo que te salga un número aleatorio, o hacer un programa que lo use?
    Citar  
     

  7. #7  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Ubicación
    Valhala
    Mensajes
    1.167
    Descargas
    4
    Uploads
    0
    Lo que quiere hacer, es su propia funcion de randomize. En vez de usar las predefinidas del lenguaje. Corrigeme si me equivoco Cypress.
    He estado mirando algoritmos de numeros aleatorios y la verdad, lo que he visto por ahora se refieren a matematicas, y bastantes avanzadas para mi nivel.
    Aunque se me acaba de ocurrir una cosa... lo miro y te comento.
    http://www.project-longinus.es
    Citar  
     

  8. #8  
    Avanzado
    Fecha de ingreso
    Sep 2006
    Mensajes
    200
    Descargas
    1
    Uploads
    0
    Sip, smaug_ tiene razón, programar un generador de números aleatorios no es NADA TRIVIAL (obviamente sabiendo lo que hace, que hacer un "copiar & pegar" es muy fácil). Además luego has de comprobar estadísticamente que el generador que has programado reparte bien los números generados, etc. Vamos, que no es algo sencillo ...
    Citar  
     

  9. #9  
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.451
    Descargas
    11
    Uploads
    0
    smaug_: jack pot (lo de las maquinitas cuando ganas)

    si es exactamente lo que quiero hacer, y sip... no dudo que tenga alta complejidad en matematicaas, esta materia esta en la licenciatura en matematicas.

    Si puedes me pasa la url. Gracias por preocuparse,
    Saludos
    Cypress
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

  10. #10  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    No, no me refería a un timer como el de visual, sino una forma de trampearlo, es decir, según arrancas el programa arranga un 'contador' en segundo plano, por ejemplo, que cuente de 0 a 10000 y vuelva a empezar. Luego simplemente defines un rango para las variables del sorteo, es decir, por ejemplo, a-b-c-d posible desde 1a5.

    Ahora lo que queda es ejecutar la función 'sortear' con lo que arrancará 4 contadores de 1 a 5 contínuos, con lo que cuando el contador en segundo plano vuelva a 0 pare el primero en donde esté, no sabemos lo que queda,por ejemplo 3, luego cuando vuelva a desbordar, el siguiente y así sucesivamente.

    No es un random real (aunque se parece, pq el random básico de los primeros lenguajes se basaba en el reloj del sistema, ya que una másquina no puede dar un número aleatorio nunca, no tiene capacidad de pensar y por tanto tampoco la del azar) pero te puede valer.
    Las ideas son como las pulgas, saltan de unos a otros pero no pican a todos... (George Bernard Shaw)
    Citar  
     

  11. #11  
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.451
    Descargas
    11
    Uploads
    0
    ni idea de como hacer una funcion en segundo plano, pero ahora si entendi tu idea.
    Es mas, todavia no enseñaron funciones, buen... yo la podria usar, pero el profesor mando esa tarea con la idea de que hagamos el programa con los comandos que mencione antes.
    encontre esta funcion pero no la entendi mucho, el jueves preguntare en el instituto de matematica. si consigo la solucion la escibo.
    Xn = (aXn-1+c) (mod M)

    Funcion ^^

    Nuevamente Muchas Gracias por el interes
    Saludos,
    Cypress
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

  12. #12  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Ubicación
    Valhala
    Mensajes
    1.167
    Descargas
    4
    Uploads
    0
    Cypress por simple curiosidad, que estas estudiando??

    Las paginas que vi son estas:
    http://fisica.urbenalia.com/apuntsmat/num_aleatorios/?selact=apu
    http://docencia.udea.edu.co/ingenieria/isi-494/contenido/Exposicion1.ppt (es una presentacion powerpoint)

    A ver si tu te enteras mejor que yo, porque no tengo ni idea lo que pone ahi ^^U
    http://www.project-longinus.es
    Citar  
     

  13. #13  
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.451
    Descargas
    11
    Uploads
    0
    ufff, acutualmente estoy estudiando la licenciatura en fisica, la materia que hago (introduccion a la computacion)es de la licenicatura en matematicas.
    Inicialmente queria estudiar ingenieria en telecomunicaciones, pero me quedo pendiente geometria descriptiva al salir del bachillerato, por eso tube que entrar a la facultad de ciencias(lic.fisica.).
    Ahora que salve esta meteria, el año que vine me cambio para ingenieria, pero decidi cambiar de telecomunicaciones a computacion(tiene menos matematica).
    http://www.fing.edu.uy/ensinv/cu2.htm <== el programa de telecomunicaciones

    Y bueno +o- es en lo que ando y andare...
    Saludos y nuevamente Muchas Gracias
    Cypress
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

  14. #14  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Un método "chapucero" de obtener valores aleatorios sin usar Randomize es obtener la hora del sistema, capturas los segundos (por ejemplo: 19:45:xy => xy es lo que te interesa...) y haces una operacion del tipo: (constante*xy) mod numElementos. El resultado de es operación oscila entre 0 y numElementos-1. Si los elementos están en un vector, pues el resultado de esa operación sería el indice de ese array.

    Si quieres mejorar la chapuza, para que no sea tan fácil descubrir el algoritmo, puedes crearte un array auxiliar de tamaño igual a numElementos-1 e iniciar cada elemento de este vector auxiliar con números de entre 0 y numElementos-1 de forma desordenada. Al hacer la operación (constante*xy) mod numElementos, obtendríamos un valor correspondiente a un índice del vector auxiliar. El elemento aleatorio será:

    arrayElementos[arrayAuxiliar[(constante*xy) mod numElementos]];

    Claro que todo esto se puede mejorar, sólo tienes que echarle un poco de imaginación.

    Saludos y suerte.
    Última edición por hystd; 27-09-2006 a las 19:52
    Citar  
     

  15. #15  
    Medio
    Fecha de ingreso
    Jan 2006
    Mensajes
    98
    Descargas
    0
    Uploads
    0
    Según lo que lei, parece que para crear la secuencia de números aleatorios lo mas facil es hacerlo por el método congruencial con la siguiente ecuación en recurrencia:

    Xn = (a* Xn-1 + b)mod m

    donde a es un multiplicador, b es el sesgo y m es el numero de terminos de la serie Xn. Se sabe también que a y b varían desde 1 a m-1 y dependiendo de éstos, del valor inicial de X(la semilla) y del numero de elementos, se genera una secuencia u otra. La dificultad está en elegir adecuadamente a, b y m para que no se repita una secuencia y para que todos los numeros pseudoaleatorios sean equiprobables. Como información, se demostró que los numeros a , b y m tienen un valor exacto, cercano al óptimo para la arquitectura de 32 bits. La función rand() de C por ejemplo está implementada de la siguiente forma:

    //se utilizan enteros sin signo de tamaño maximo ULONG_MAX
    unsigned long int next = 1;

    /* rand: regresa un entero pseudoaleatorio en 0..RAND_MAX */
    int rand(void)
    {
    next = next * 1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
    }
    //srand: fija la semilla para rand(); para que no se genere la misma secuencia
    //de numeros pseudo-aleatorios hay que variar la semilla, normalmente con
    //los pulsos del reloj, en C por ejemplo srand(time(NULL))
    void srand(unsigned int seed)
    {
    next = seed;
    }

    Como la funcion nos devuelve el valor en el intervalo 0, RAND_MAX (el cual depende del ordenador en cuestión), para hacer nuestro propio intervalo [a,b] sería necesario calcular primero la amplitud del intervalo b-a+1. Si hacemos rand()mod(b-a+1) ahora, tendremos los numeros aleatorios en el intervalo 0, b-a+1 con lo cual sumandole ahora a, desplazamos el intervalo a su sitio correcto. Sería entonces algo así

    int GenerarNumeros()
    {
    return rand()%(b-a+1) + a;
    }
    Citar  
     

  16. #16  
    Moderador HH
    Fecha de ingreso
    Feb 2002
    Ubicación
    México
    Mensajes
    1.156
    Descargas
    4
    Uploads
    0
    para la obtención de números aleatorios bien se puede usar una tabla, hay muchas por ahí,
    Puedes decir, pero una tabla no es totalmente aleatoria, pero de hecho usar esas talbas de números aleatorios da más sensación de incertidumbre que las series numéricas para crearlos.
    Puesto que en computadoras no existen los númeos aleatorios, todos son seudoaleatorios, ya que si puedes sacarlo con una fórmula, entonces es perfectamente predecible.
    Además, usar una tabla no requiere en absoluto una programación matemática muy abstracta, de hecho es muy fácil, sólo hay que tener un apuntador al último número utilizado para que cada vez que se invoque un número aleatorio se obtenga el siguiente de la tabla.
    Otra forma de hacerlo es usar la "basura" de la memoria, esto es, tomar unos bytes al azar de la RAM, digamos de la posición del cursor, y de ahí generar el número aleatorio.
    Saludos
    Mientras el mundo permanezca no acabarán la fama y la gloria de México-Tenochtitlan
    Citar  
     

  17. #17  
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.451
    Descargas
    11
    Uploads
    0
    I did it.
    Este ejercicio mas que de programacion, era para ver quien tenia las bolas mas grandes,porque estube un buen rato tirando valores... jejeje.

    Primero que nada, Pablo amigo de la facu, si ves esto, NO LO COPIES. ES MAS NI MIRES ESTO, porque seguramente nos descubriran y no quiero perder ningun periodo, (no solo yo tu tambien)


    VV que tus ojos no pasen la raya VV

    __________________________________________________ _____________________


    Código:
    program zzz;
    uses crt;
    var a,b,c,cotmin,cotsup,:integer;
    begin;
            clrscr;
            writeln('Ingrese la cota inferior');
            readln(cotmin);
            writeln('Ingrese la cota superior');
            readln(cotsup);
            (* SE COMPRUEBA SI LAS COTAS SON CORRECTAS vv *)
            while (cotmin > cotsup) or (cotmin < 0)do
                    begin
                     clrscr;
                     writeln('Ingrese la cota inferior');
                     readln(cotmin);
                     writeln('Ingrese la cota superior');
                     readln(cotsup);
                    end;
            (* HACE EL JUEGITO DE NUMEROS  vv*)
            clrscr;
    
            
            readln;
            while (b>cotsup) or (b<cotmin) do
                    begin
                     a:= a+cotsup;
                     c:=(c*a+cotsup);
                     b:=abs((cotmin*a*(b*cotsup-cotmin) + c) mod (a*cotmin));
                     writeln(b);
                    end;
    
            readln;
    end.
    bien, el programa esta bueno ^^ esto es solo el sorte no el juego, y te muestra las posiblilidades, lo extraño es que, si ingreso de cota inferior el 1 o 2, el resultado final sera igual a la cota superior, (prueben con 4 y 75 que hace unos cuantos intentos)

    Listo, nuevamente gracias por preocuparse.
    Saludos y Gracias
    Cypress
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

Temas similares

  1. Pascal
    Por MartínAriel en el foro GENERAL
    Respuestas: 1
    Último mensaje: 23-03-2006, 17:00
  2. Viejo Pascal
    Por MartínAriel en el foro PROGRAMACION DESKTOP
    Respuestas: 12
    Último mensaje: 17-03-2005, 22:37
  3. Component Pascal
    Por kaitower en el foro PROGRAMACION DESKTOP
    Respuestas: 0
    Último mensaje: 11-02-2005, 17:33
  4. ficheros y pascal
    Por Deskicio en el foro PROGRAMACION DESKTOP
    Respuestas: 10
    Último mensaje: 05-06-2004, 17:54
  5. Manuales de C y Pascal
    Por _UN[D]ER_ en el foro PROGRAMACION DESKTOP
    Respuestas: 7
    Último mensaje: 05-01-2004, 20:33

Marcadores

Marcadores