Hoygan halluda nesesito jente que sepa de PASCAL (programación!!)

Tema en 'Off topic' comenzado por theshadowmaker, 18 de Julio de 2009.

  1. Vale, fuera coñas del título xDD

    A lo que iba, tengo un problema con un trozo de código Pascal:

    begin { LoadObject }
    writeln('Culo01');
    readln(puraMierda);
    assign(object_file, 'a.dat');
    writeln('Culo02');
    readln(puraMierda);
    for aux:=1 to 100 do
    begin
    writeln('Culo021');
    end;
    {$I-}
    reset(object_file); {AQUI FALLA}
    {$I+}
    if IOResult = 0 then
    writeln('Va bien')
    else
    writeln('ya sabia yo que no iba bien...'); {ESTO SE MUESTRA}

    writeln('Culo03');
    readln(puraMierda);
    new(current_object);
    writeln('Culo04');

    Como veis, he puesto marcas de traza para acotarlo. Falla la llamada a reset. Por supuesto, el archivo a.dat existe y está en el mismo directorio que el ejecutable.

    Si pudierais agregarme al messenger ( joakiniko2002@hotmail.com ) sospecho que será más fácil echarme un cable :)

    Jrasias a todos de antebraso!!
     
  2. Armfher

    Armfher Moderador Miembro del Equipo

    Vaya... si fuera cualquier otro lenguaje te podría echar un cable... Pero justamente Pascal nunca lo he tocado, aunque me puedo imaginar qué hace este algoritmo.

    Por otro lado 2 apreciaciones(vuelvo a repetir que no piloto de Pascal, pero me han llamado la atención 2 cosas).

    Si la función reset() es para formatear el fichero, no deberías ponerla al principio del algoritmo y hacerle un check(en C le llamábamos FLAG) para ver si ha salido bien? a lo mejor por cualquier parida está corrupto, no se abrió bien y por eso en el if se te va.

    Por otro lado creo que la formula del IF la tienes mal si esque la función RESET() hace lo que te estoy diciendo. Si te ha de devolver un booleano, la tienes al reves recuerda que 0==FALSE que y 1==TRUE, con lo cual si te sale por donde dices, la funcion funciona, solo que la condición del if la tienes mal. O cambias el 0 por un 1, o si eres un perraco(como todos los programadores) lo niegas(con !) y terminas antes. Tambien creo que para hacer una igualación te hacen faltan dos == (a lo mejor en pascal no es así, igual que lo de la negación, ahí ya no me meto, pero si es lo que te digo, por ahí tambien te hace aguas el programa).

    En lo que no te puedo ayudar es en esto: {$I-} Nose muy bien que puede ser, si un decrementador de variable, un incrementador, una acotación de código, la marca de traza que comentas...

    En fin... si hay alguien que pilote por aquí de Pascal mucho mejor.. jej Si te puedo ayudar en cualquier otro lenguaje web o de escritorio ya sabes donde ando!

    PD: Un consejo rápido, echale un ojo a la excepción que dices que te lanza Reset() o pégala aquí a ver que podemos hacer, aunque parezcan excepciones tela de genéricas o que te marque otras líneas, eso es tu salvación y NUNCA se equivocan.. jej Cuando aprendí a hacerles caso y no tomarlas al pié de la letra, me ahorraron horas y horas de revisar código de gratix xD
     
  3. otia...que bien hablais el chino los dos...:eek::eek:
     
  4. Armfher

    Armfher Moderador Miembro del Equipo

    Pues yo estaba casi saliendo de casa pa ir a estudiar al local y me ha venido un flash...

    Si dices que te falla la funcion reset, pero el flujo del programa continúa, juraría que lo que tienes mal es la condición del IF, sin entender de Pascal mi mente dice que eso es el fallo al 100%. Ahora, si te falla la función, termina la ejecución y te lanza una excepción, ahí ya será otra cosa... Pégala aquí como te dije y lo miro mejor.

    Pero ya te digo que si no se rompe la ejecución, lo que tienes mal es la condición del IF, niegala y verás como el prompt te sale bien ahora.

    Me piroooo!

    PD: Dito, lo nuestro es deformación profesional... jajajaj
     
  5. Gracias señor!! Te cuento, a mí me pasa igual. Jamás he trabajado en pascal (he usado Ada y C a saco, y cosicas sueltas de otros lenguajes como Lisp, Matlab, C++, ensambladores, etc...). Digamos que esto es un código que me han "dado" y necesito entenderlo y hacerlo funcionar :p

    http://sistemas.itlp.edu.mx/tutoriales/pascal/pascal.html

    Después de haber asignado, un archivo debe ser abierto. Esta operación se realiza por uno de los dos procedimientos predefinidos: rewrite y reset.

    Reset

    Este procedimiento abre un archivo existente para una operación de lectura. Si se intenta llamar a Reset y el archivo especificado no existe, se producirá un error de E/S (entrada/salida).

    Como ves, en el link ese dice que IOResult = 0. Sí, =, no == (== es un defecto-característica de C, pero en Ada, Pascal y otros tantos es = para igualdad, := para asignar).

    El {$I-} son curiosamente, como si fueran comentarios, pero activan o desactivan el manejo de excepciones (es decir, al ponerlo, consigo que no me de un runtime error y poder seguir la ejecución).

    El problema es que por alguna razón, no se empieza la lectura del fichero, y más adelante como es lógico falla en la primera lectura efectiva.

    Para no dar la chapa, si eso agrégame al messenger ( joakiniko2002@hotmail.com ) y hablamos o qué?? Creo que te tengo agregado, pero si eso agrégame tú y echame una hablada y te acepto :)

    Mil gracias tío!!

     
  6. si si....el pan en Copenhague está carísimo....
     
  7. Yo he entrao aki porque el título era gracioso... y me encuentro esto...

    Yo te voy a desí lo que hago yo cuando tengo un problema con el ordenador: Ctrl+Alt+Supr
     
  8. joaquin, esto no sera de alguna asignatura llamada "fundamentos de programacion" o tendra que ver con ella no? XD, esq la tengo este curso, y no me asusta mucho, pero si ese percal va a ser lo que encuentre entonces voy a tener que mascar bastante el pan para comermelo XD
     
  9. No. Esa asignatura será como la que tuve yo de introducción a la programación, en aquel lejano primer curso de carrera. Yo la di en Ada, un lenguaje "similar en lo básico, pero bastante mejor en todo" :D Esto es un trozo de código de un motor gráfico, para una optativa de segundo ciclo.

    Mi duda no es tanto de cómo hacer X cosa, sino de que haciendo las X cosas que sé que deberían ir, y mirando los manuales de Pascal, sigue sin funcionar.

    Pero vamos tranquilo, que con buen profesor, los rudimentos de programación son muy sencillos.

    Y por supuesto, cualquier duda, ya sabes mi messenger ;)

    Salud!!
     
  10. Lo que no entiendo es para qué declaras un fichero externo si sólo estás haciendo lecturas y escrituras en la entrada/salida estándar...:confused:
     
  11. Porque eso es solo un fragmento de un código de más de dos mil líneas, por supuesto object_file está declarado como "text" y es un archivo con líneas que definen modelos geométricos de objetos 2D y 3D :)
     
  12. Solucionado, sencillamente, necesito incluir rutas absolutas, no relativas, a los archivos. Increíble, este es el primer lenguaje que veo así y claro, no conseguía caer en el asunto. Mil gracias :)

    Si pudiera ser no cerrar este topic, por si me entra alguna otra duda... máximo hasta mediados de agosto.

    Salud!!
     
  13. esto con el Spectrum no pasaba...load"" enter y va que te matas.
     
  14. Armfher

    Armfher Moderador Miembro del Equipo

    ostras no me ha dado tiempo a poder revisar el topic hasta ahora.. xD

    Me alegro que hayas dado con el error! Si necesitas algún cable en este tema(si es pascal ya te digo que voy flojo) pero de cualquier otro lenguaje mas "usual" ya sabes donde ando!

    PD: Si es para algo en concreto vale, pero no mola anular el tratamiento de excepciones xD Puede ser un caos tu algoritmo si no dejas tratarlas.
     
  15. Pues yo estoy convencido de que el error provenía de la matriz reminiscente de los ejes subyacentes, cuya fisura trigonómica ambigua hace que las funciones magnetostáticas no se carguen adecuadamente... hum [-(




    ... y tal xD
     

Comparte esta página