Página 2 de 2 PrimerPrimer 12
Resultados 9 al 13 de 13

duda procedimientos en pascal

Esta es una discusión para el tema duda procedimientos en pascal en el foro Programación, bajo la categoría Webmasters y Programadores; Bien, ya estoy por aquí. Vamos a ver, vayamos por orden en los mensajes del compilador, es largo pero valdrá la pena, léelo entero: (10,46) Error: Type identifier expected ¿Qué ...
Página: 2


  1. #9
    Colaborador

    Fecha de ingreso
    30 ago, 06
    Ubicación
    Aragón
    Mensajes
    1,046
    Bien, ya estoy por aquí. Vamos a ver, vayamos por orden en los mensajes del compilador, es largo pero valdrá la pena, léelo entero:

    (10,46) Error: Type identifier expected
    ¿Qué dice? Identificador de tipo esperado en la línea 10, carácter 46
    ¿Por qué? Si te advierte de que lo espera, será que no lo está recibiendo
    Solución: Si vas a la posición que te advierte el compilador, verás que le dices que el tipo de dato de solicitar es vector, pero vector no es un tipo de dato, es vector1. Por cierto, y aprovechando que pensaba comentártelo, y destacando así que da problemas y estoy en lo correcto, el nombre de un tipo rara vez lleva un número de orden, son los nombres de las variables de ese tipo cuando si hay varias y no tienen una función especifica (en cuyo caso las llamas haciendo referencia a para qué sirven) los que irán numerados (o diferenciados de alguna otra forma).

    (16,15) Error: Illegal qualifier y (16,29) Error: Illegal qualifier
    ¿Qué dice? Calificador (quizá mejor "cuantificador") ilegal (incorrecto) en esas posiciones.
    ¿Por qué? Aah, sorpresa, pueden ser mil cosas, en principio o que la variable que has usado para indicar la componente del vector no sea del tipo adecuado (uno numérico) o que la variable de la que intentas indicar una componente no tiene esas componentes.
    Solución: Si vas en ambos casos a lo que te indica el compilador, ves que habla de la variable c, y vemos que está bien declarada y es entera, pero... ¿qué es solicitar? Ah, no se sabe porque como bien indicaba el error anterior a estos, está mal declarado, por lo tanto no sabe qué es y no sabe qué componentes tiene (o si las tiene o no). Estos errores desaparecerán al arreglar el anterior declarando bien la variable solicitar. De ahí la importancia de ir resolviendo los errores por orden, muchos dejan de ser errores al solucionar los previos.

    (19,25) Error: Identifier not found "solicitar"
    ¿Qué dice? Identificador solicitar no encontrado
    ¿Por qué? Si no lo encuentra es que no está (no declarado o escrito distinto en la declaración y el uso) o... ¡que ha habido un error al declararlo! Como es el caso, el primer error hace que no se llegue a declarar solicitar porque se espera (y no se recibe) un nombre de tipo válido para asignarle un tipo.
    Solución: Por lo tanto, ¿qué? Pues nada, solucionando el primer error este desaparecerá igualmente.

    (21) Fatal: There were 4 errors compiling module, stopping
    ¿Qué dice? Error fatal, hay 4 errores en el módulo de compilación, parando
    ¿Por qué? Hay errores que hacen inconsistente el código (fatales): el compilador no puede crear variables sin tener correctamente indicado el tipo que asignarles, ni puede luego manipular (extraer componentes, asignar,...) variables inexistentes (no se han creado) por lo tanto el resultado no es ejecutable (no puede ser ejecutado correctamente), y por tanto no se crea un ejecutable (fichero). Por eso te indica que ha parado, porque no puede continuar con esos errores.

    Conclusión: Vera, no te has leído mis primeras respuestas . En fin, es broma no estoy cabreado... aunque debería . En ellas ya te indicaba que en un primer vistazo el fallo (obvio por otra parte) que veía en ese código es que
    Cita Iniciado por Aitor_sp Ver mensaje
    Uy, igual no hace falta compilador. Estaba arreglando un poco el código y... ¿qué se supone que es la supuesta variable "solicitar" que le pasas al procedimiento en la llamada? Esa variable no existe, imagino que lo que quieres pasarle es vector1, ¿no es así?
    Anda que... lo que llego a currar para que la gente aprenda a programar bien y ni caso, ni caso . Bueno, esta vez me lo he currado eh, no ha sido sólo leyendo el código de refilón como la otra vez, así que espero que te lo leas y te sirva de mucho, porque he puesto las explicaciones generales aunque luego las haya centrado en tu caso precisamente para que te sirva para más veces, así que: léetelo jajajaja.

    Ah, y acostúmbrate a ir formateando bien, o mejor que bien, el código, y a dejar espacios entre bloques diferenciados y demás. Te lo recomiendo ahora con más incapié por dos sencillas razones: Uno, normalmente con cualquier profesor decente, influirá en tu nota de programación (sobre todo para mal si es malo el formato). Y dos, un código en C ahora que empiezas con él mal formateado es un insulto para quien intenta leerlo, y más importante, una putada para su vista .

    Así que eso, léeme aunque esta vez sea muy largo, y formatea bien el texto por tu bien.

    Un saludo.

     
     
  2. #10
    Expertos HijackThis Avatar de Vera

    Fecha de ingreso
    10 jul, 06
    Ubicación
    Madrid (España)
    Mensajes
    2,752
    Hola de nuevo, Aitor!! Y agradezco mucho tu laaaaaarga respuesta.

    Te voy a ir comentando cosillas, jeje. Lo del vector1, lo he mirado y si, tienes razon, pero mi duda es: Yo cuando pongo:
    Código:
    var
       vector:vector1;
    Eso no quiere decir que la variable "vector1", pasa a ser nombrada "vector", y por lo tanto, en adelante, "vector1" se llamara "vector"??

    Luego, lo de "solicitar", tambien tienes toda la razon, pero de nuevo mi duda: yo al poner lo siguente:
    Código:
    procedure solicitardatos(var solicitar:vector1);
    ahora mismo declaro que "solicitar" sea un dato de entrada y salida (por el "var"), y a la vez luego le digo que sea de tipo "vector1". O quizas me este equivocando y eso no se pone ahi??

    De todas formas, te paso los codigos y te comento:

    Código:
    program ejercicio2;
    
            const
            N=10;
    
            type
            vector1=array[1..N] of integer;
            var
            vector:vector1;
    
    
    procedure solicitardatos(var solicitar:vector1);
    
              var
              c:integer;
    
       begin
       writeln('Dame un numero y te dire cuantas veces se repiten los numeros');
                     for c:=1 to N do
                     solicitar[c]:=solicitar[c]+1;
       end;
    
       var
       solicitar: vector1;
    begin
    solicitardatos(solicitar);
    end.
    project1.lpr(26,25) Hint: Variable "solicitar" does not seem to be initialized
    project1.lpr(9,9) Note: Local variable "vector" not used
    El proyecto "project1" se ha construido correctamente
    Si lo pongo asi no me da ningun error, sin embargo, no se me abre el .exe (se me abre y se cierra en nada). Tambien entiendo que ahi pone que la variable "solicitar" parece que no funcione. Pero sigo teniendo la duda sobre la variable "solicitar" que te comente antes.

    Por otro lado, tambien lo he pensado asi, declarar "solicitar", dentro del procedure, pero me sigue dando error:

    Código:
    program ejercicio2;
    
            const
            N=10;
    
            type
            vector1=array[1..N] of integer;
            var
            vector:vector1;
    
    
    procedure solicitardatos(var solicitar:vector1);
    
              var
              solicitar: vector1;
              c:integer;
    
       begin
       writeln('Dame un numero y te dire cuantas veces se repiten los numeros');
                     for c:=1 to N do
                     solicitar[c]:=solicitar[c]+1;
       end;
    
    begin
    solicitardatos(solicitar);
    end.
    project1.lpr(15,11) Error: Duplicate identifier "solicitar"
    project1.lpr(15,11) Hint: Identifier already defined in unit EJERCICIO2 at line 12
    project1.lpr(21,32) Warning: Local variable "solicitar" does not seem to be initialized
    project1.lpr(25,25) Error: Identifier not found "solicitar"
    project1.lpr(27) Fatal: There were 2 errors compiling module, stopping
    Igualmente, sigo teniendo la duda del "solicitar" como te comente antes.

    Y finalmente, si lo modifico de esta otra forma:

    Código:
    program ejercicio2;
    
            const
            N=10;
    
            type
            vector1=array[1..N] of integer;
            var
            vector:vector1;
    
    
    procedure solicitardatos(var solicitar:vector1);
    
              var
              c:integer;
    
       begin
       writeln('Dame un numero y te dire cuantas veces se repiten los numeros');
                     for c:=1 to N do
                     solicitar[c]:=solicitar[c]+1;
       end;
    
    begin
    solicitardatos(solicitar);
    end.
    project1.lpr(24,25) Error: Identifier not found "solicitar"
    project1.lpr(26) Fatal: There were 1 errors compiling module, stopping
    Y aqui no entiendo porque no encuentra "solicitar" cuando es una variable que esta dentro del procedure "solicitardatos" y que yo me acuerde, me han enseñado a poner el nombre del modulo y dentro del parentesis los variables que participan dentro del modulo.

    Asi que a ver si me puedes acalar un poco mas estas dudas que tengo, ejeje.

    Muchisimas gracias,

    Un saludo,
    Vera.

     
     
  3. #11
    Colaborador

    Fecha de ingreso
    30 ago, 06
    Ubicación
    Aragón
    Mensajes
    1,046
    Hoola de nuevo Vera.

    A ver, voy citándote un poco, aunque te voy a contestar sólo una parte porque la mayoría de las cosas que preguntas son siempre lo mismo y creo que con eso ya lo verás, y porque además ahora no tengo tiempo para más jaja.

    Cita Iniciado por Vera Ver mensaje
    Te voy a ir comentando cosillas, jeje. Lo del vector1, lo he mirado y si, tienes razon, pero mi duda es: Yo cuando pongo:
    Código:
    var
       vector:vector1;
    Eso no quiere decir que la variable "vector1", pasa a ser nombrada "vector", y por lo tanto, en adelante, "vector1" se llamara "vector"??
    NO, no tiene absolutamente nada que ver. Tu tras la palabra reservada var estás declarando variables. Es decir, declaras la variable con su nombre (la variable existe a partir de ese momento) y dices de qué tipo es. Es decir, tú cuando usas esa estructura le dices al compilador lo que te pongo comentado entre llaves:
    Código:
    var {Aquí le dices, voy a declarar variables}
      nombreVariable1: tipo1; {declaro la variable "nombreVariable1" del tipo "tipo1" para que exista y poder usarla a partir de ahora}
    En el caso del siguiente trozo de código que me pones preguntando es lo mismo, var y lista de declaraciones de la misma forma: nombre de la variable, dos puntos, tipo de la variable.

    Por otro lado tienes dos problemas: el programa se abre y se cierra muy rápido y "no funciona" y, por otro lado, según qué cambios haces te dice que no encuentra la variable.

    Para los dos hay una causa muy lógica, te la explico. Si tú haces esto:
    Código:
    program ejercicio2;
    
            const
            N=10;
    
            type
            vector1=array[1..N] of integer;
            var
            vector:vector1;
    
    
    procedure solicitardatos(var solicitar:vector1);
    
              var
              c:integer;
    
       begin
       writeln('Dame un numero y te dire cuantas veces se repiten los numeros');
                     for c:=1 to N do
                     solicitar[c]:=solicitar[c]+1;
       end;
    
       var
       solicitar: vector1;
    begin
    solicitardatos(solicitar);
    end.
    Te voy a explicar lo que haces ahí:
    Primero declaras vector en la línea 9 como variable global (digamos que sirve "en todos los sitios"), y no la usas nunca, por lo que no hace que no funcione pero el compilador te dirá que no se usa. Luego en el procedure declaras solicitar para el procedimiento sólo; es decir, esa variable solicitar es la que usas dentro del procedimiento. Y luego declaras otra variable solicitar (mismo nombre, pero son distintas y existen en distintos sitios y tiempos) como variable local para el código del programa (en la cuarta línea desde abajo). Pero en realidad no la usas; quiero decir, sí que la usas y el compilador no te dirá lo contrario, pero para una cosa. El programa compilado con ese código hace lo siguiente al llegar ahí: Crea esa variable solicitar, le reserva un espacio en memoria con los bytes que ocupa, y le asigna ese espacio. Ya pero... ¿Qué hay en ese espacio? Ah... ¡Sorpresa! Hay lo que hubiera antes, el programa dice que ese hueco ahora es para él, pero no pone nada, se queda el contenido que había antes. Entonces tú llegas, reservas ese hueco y dices que ahí está tu variable, no la asignas (le das valor) para que cambie el contenido en ningún momento, y se la pasas al procedimiento directamente. ¿Qué hace ese programa? Pues ese programa declara sus variables, declara ese procedimiento, y cuando tiene todo declarado, coge lo que hay en el espacio que se ha reservado para la variable solicitar (la de abajo), se la pasa al procedimiento (por lo que para el procedimiento será su nueva variable solicitar (la del procedimiento) hace los cálculos, y acaba. Por eso, el programa se cierra. El programa dura mayormente lo que le cuesta reservar memoria, y hacer los cálculos con la variable de contenido inventado. Deberías, en el código principal, poner un mensaje, pedir que se inserte un valor para esa variable, asignarla, y luego trabajar. Y para que no se cierre y puedas ver el resultado, poner que espere a pulsar una tecla o cualquier cosa por el estilo.

    Bueno esa es la solución para este caso en particular, ¿la solución para evitar tener estas dudas? Me iba a poner a explicarte pero sería mucho tiempo y además ya lo tendrás por ahí. Coge el manual de clase, o un buen libro de programación (no es necesario que sea de Pascal, con uno de programación general, como concepto, es suficiente y sería incluso mejor) y léete con atención hasta que te asegures de que lo entiendes bien el tema (seguro que tiene una sección para el tema, o incluso un tema a parte si es de programación general) de ámbito de variables. Tu problema está en que no tienes en cuenta el ámbito, quizá porque no pienses en él o porque no entiendas el concepto, así que deberías mirarte bien el tema. Apóyate en lo que te he contado yo, aunque he intentado usar un lenguaje simple aún a costa de falta de precisión, y si no entiendes algo de ese tema o de lo que he puesto yo lo comentas por aquí.

    Bueno, espero que tanta liada intentando explicar estas cosas por aquí sirva de algo. A veces estas cosas son un poco difíciles y rollo de explicar así, es más fácil estar en persona y con el código delante, pero bueno he intentado comentarte lo mejor posible, espero no haber liado nada porque me perdía un poco intentando comentar tu código al seguirlo, tenía la idea pero al ir escribiendo... buf.

    En fin, ya me dirás si te sirve de algo y te miras ese tema en algún manual cuando puedas.

    Un saludo.

     
     
  4. #12
    Expertos HijackThis Avatar de Vera

    Fecha de ingreso
    10 jul, 06
    Ubicación
    Madrid (España)
    Mensajes
    2,752
    Hola Aitor, y de nuevo agradezco mucho tu respuesta.
    Ya me he apuntado a una academia, a ver si por fin me entero de las cosas, y si tengo mas dudas, pues ya se a donde acudir jaja.

    Gracias de nuevo por el esfuerzo que has puesto en explicarme todo el lio que tengo. De momento como ya te dije he dejado Pascal de lado, ya que ahora mismo estamos con C y con Java.

    Si tengo alguna duda te vuelvo a preguntar.

    Un saludo.

     
     
  5. #13
    Colaborador

    Fecha de ingreso
    30 ago, 06
    Ubicación
    Aragón
    Mensajes
    1,046
    Hola de nuevo Vera.

    Bueno una academia siempre es una opción, aunque nunca he pensado que sea muy buena opción para aprender a programar pero a cada uno le van bien un tipo de métodos. Ten en cuenta en cualquier caso que en la academia te podrán resolver dudas, pero no podrán estudiarse la teoría de programación por ti, ni las funciones y sintaxis de cada lenguaje; a programar se aprende programando y absolutamente siempre con la documentación del lenguaje a mano, sea en forma de libro o manual, en forma de documentación online (la cual tiene Java muy muy buena por cierto) o de webs que se dedican a recopilar y especificar cosas. Espero en cualquier caso que te sirva de ayuda, jajaja una pena que no estés aquí, si no me ofrecería a darte clases yo (me dedico a ello).

    En cualquier caso, lo que te digo, por mucho que te vaya bien la academia, estúdiate tú los conceptos, sola mejor, e interiorízalos; ahorrarás horas de academia, y lo aprenderás mejor . Y eso, siempre la documentación a mano, para cualquier cosa que surja, nadie se sabe todas las características de un lenguaje de memoria.

    Cita Iniciado por Vera Ver mensaje
    Gracias de nuevo por el esfuerzo que has puesto en explicarme todo el lio que tengo. De momento como ya te dije he dejado Pascal de lado, ya que ahora mismo estamos con C y con Java.
    De nada , gracias a tí por tenérmelo en cuenta. Bueno mejor C y Java que Pascal, aunque para aprender igual es más sencillo (aunque sigo pensando que no es buena opción). Presta mucha atención con C a la sintaxis y los tipos, que por las áreas que te veo flojas será lo que se prestará a darte problemas. En cuanto a Java... por lo que tengo visto depende mucho de la persona tardar más o menos en entender y utilizar con fluidez el paradigma de orientación a objetos, normalmente resulta más sencillo el paradigma imperativo (el de C o Pascal), así que ándate con ojo y échale ganas :) .

    Cita Iniciado por Vera Ver mensaje
    Si tengo alguna duda te vuelvo a preguntar.
    Por supuesto, no lo dudes un momento, siempre que sepa y tenga tiempo te ayudaré en lo que pueda. Eso por mi parte, siempre habrá más gente por aquí que pueda ayudarte :).

    Un saludo.

     
     
Página 2 de 2 PrimerPrimer 12

Temas similares

  1. Procedimientos en Logs de HijackThis
    Por Kbite en el foro Logs HijackThis
    Respuestas: 6
    Último mensaje: 11/03/2012, 17:38
  2. Duda Lazarus (pascal)
    Por Vera en el foro Programación
    Respuestas: 3
    Último mensaje: 14/10/2011, 01:03
  3. Procedimientos en Logs de HijackThis
    Por PIPI 40 en el foro Logs HijackThis
    Respuestas: 21
    Último mensaje: 03/07/2011, 10:31
  4. Procedimientos en Logs de HijackThis
    Por politravieso en el foro Logs HijackThis
    Respuestas: 1
    Último mensaje: 11/06/2011, 11:18
  5. Pascal!!
    Por Ruselan en el foro Programación
    Respuestas: 7
    Último mensaje: 05/10/2006, 01:38

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •