Fecha y hora actual: Sábado 24 Ago 2019 04:33
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Lección 51: Primer proyecto en Modula2 - Lector de comandos

Responder al Tema Ir a página 12Siguiente

Índice del Foro > Programación en general > Lección 51: Primer proyecto en Modula2 - Lector de comandos

Autor Mensaje
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Jueves 22 Mar 2012 18:57

Título del mensaje: Lección 51: Primer proyecto en Modula2 - Lector de comandos

Responder citando

Primer Proyecto: Un lector básico de comandos

Ya vimos un pequeño proyecto con el programa NominaPersonas, el cual lo diseñamos e implementamos juntos. La idea de ese primer proyecto fue acercarlos a la programación modular dándoles así una noción lo más cercana posible acerca de cómo se deben hacer de ahora en más las cosas. Como esto no es solo un manual de programación sino que se ven aspectos de diseño, algoritmos y ciertas estructuras que van un poco por fuera de los manuales habituales, tendremos que hacer, al igual que con Pascal, algunos proyectos.

En este manual (lo que resta incluyendo Java y demás) tendremos al menos tres proyectos grandes donde algunos tendrán más de una versión. Uno de los proyectos ha sido creado totalmente por mí y lo diseñaré paso a paso en este texto, lo implementaré y lo explicaré a fondo de modo que será la guía de ejemplo para ustedes. Los otros dos han sido ya diseñados por profesores de la Facultad de Ingeniería y fueron propuestos en cursos de programación como proyectos de aprobación del curso. Yo se los propondré a ustedes para que los hagan en sus casas, aplicando todo lo que vamos dando, de modo que puedan solidificar absolutamente todos los aspectos que hemos visto a lo largo de nuestra trayectoria en la materia de la programación, es decir, lo que hemos visto en Pascal y ahora en Modula 2. Claro está que les daré pautas y guías para resolver esos proyectos, además de que les responderé todas las preguntas que tengan.

No he decidido aún si estos proyectos los haremos en Modula o en Java. Seguramente nos iremos a Java para comenzar con lo competente hoy día a fin de que puedan aprender algo que les pueda dar algunos ingresos.

Ahora simplemente les propondré un primer programa, bien sencillo de implementar, a fin de que utilicen una librería preprogramada, la cual será usada luego en los demás proyectos. Esta propuesta también fue diseñada por profesores y propuesta a estudiantes de facultad.

Proyecto Intérprete:

1 Introducción
Se desea implementar un sistema que reconoce comandos en la entrada estándar.

2 Implementación
El programa principal tendrá como nombre Interprete.

3 Intérprete de Comandos
El programa Interprete muestra un prompt en la salida estándar, lee comandos desde la entrada y muestra la descripción de los mismos. La sintaxis general de los comandos es la siguiente:

Código:
nombreComando parámetros …


Un comando está formado por un nombre seguido de una lista de parámetros eventualmente vacía. El nombre del comando está separado de los parámetros por un (1) espacio. Asimismo, cada parámetro se separa del siguiente por un (1) espacio.

Téngan en cuenta que para este proyecto se puede asumir que TODOS los comandos se ingresan con una sintaxis correcta, es decir, el usuario no se equivoca al escribir los comandos.

El prompt está compuesto por el número de comando a procesar (comenzando en 1) seguido del símbolo “:”.

3.1 Operaciones sobre el sistema
El programa Interprete lee comandos y muestra su descripción hasta leer el comando salir.

Si el programa lee un comando que tiene parámetros, despliega en la salida estándar el siguiente mensaje:

Código:
comando
param1,param2,..., paramN


Nota: la salida generada por el programa entregado debe ser EXACTAMENTE IGUAL a la indicada en la letra.

Ejemplo:
Código:
1:conectar terminal servidor
conectar
terminal,servidor


Si el programa lee un comando que no tiene parámetros, despliega en la salida estándar el siguiente mensaje:

Código:
comando


Ejemplo:
Código:
2:pausa
pausa


Si el programa lee el comando salir despliega “Fin!” en la salida estándar y finaliza la ejecución del programa.
Código:
3:salir
Fin!


Se presenta un ejemplo de la ejecución del programa:

Código:
1:sumar 4 3
sumar
4,3
2:imprimir datos
imprimir
datos
3:conectar terminal servidor
conectar
terminal,servidor
4:pausa
pausa
5:sumar 1 2 3 4
sumar
1,2,3,4
6:salir
Fin!


4 Librería Comando:
Deben descargarse una librería llamada Comando desde el siguiente link:

LIBRERÍA COMANDO

Dicha librería ha sido implementada por profesores.
¿Qué encontrarán allí? Pues un archivo de definición .def como ya conocen y luego, en vez de encontrar un .mod, encontrarán un .lib. Esto es porque el módulo Comando ya está compilado, es decir, su código fuente está ofuscado y por ende no podemos verlo ni obtenerlo de ninguna manera. De este modo lo único que tenemos es el módulo de definición para trabajar con esta librería.

Lo que ustedes deben hacer es agregar el módulo de definición a la carpeta DEF, el módulo de implementación .lib a la carpeta SRC y luego agregar ambos archivos al proyecto, tal como siempre lo han hecho. Compilen el archivo .def para que aparezca el .sym así no tendrán ningún problema para usarlo en su proyecto.

No me pregunten cómo se crean los archivos .lib porque ofuscar el código no es la idea de este manual. Si a alguno realmente le interesa puedo pasarle el comando necesario para realizar esta compilación y nada más, pero no realizaremos ofuscaciones de código salvo en casos como estos donde estamos usando implementaciones de terceros y pues estos han decidido mantener oculto su trabajo.

Bien, esta librería realiza las lecturas desde la entrada estándar, es decir, dada una línea que contiene un comando y sus posibles parámetros esta librería leerá toda la línea y separará el comando de los parámetros y les permitirá obtener todo por separado. Usen la librería Comando para realizar este proyecto. El .def tiene todos los comentarios necesarios para lograr entender cómo se usa esta librería.

NOTA: Como ahora solo es un simple intérprete, un comando puede ser cualquier cosa y los parámetros también. No hay comandos predefinidos ni nada. Eso lo haremos luego.

Espero que todos hagan esto. Normalmente solo dos o tres personas realizan las tareas y de verdad estas personas han aprendido mucho.

Saludos.



Ultima edición por Kyshuo Ayame el Domingo 17 Feb 2013 12:41; editado 3 veces
Volver arriba
Ver perfil del usuario Enviar mensaje privado
ale91
Usuario Iniciado


Registrado: 13 Abr 2012
Mensajes: 18

Mensaje Publicado: Sábado 14 Abr 2012 02:37

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Esta tarea la hice.. interesante para aprender a hacer programas en Modula, hacer importaciones y usarlas en el modulo principal

Es algo así:

Código:
MODULE Interprete;
(***** IMPORTACIONES *****)
FROM STextIO IMPORT WriteChar, WriteLn, WriteString;
FROM Strings IMPORT Equal;
FROM SWholeIO IMPORT WriteCard;
FROM Comando IMPORT Comando, NombreComando, LeerComando, ObtenerNombreComando, ObtenerCantParamComando, ObtenerParamComando, DestruirComando;
FROM Parametro IMPORT Parametro, ImprimirParametro;

VARIABLES...
BEGIN
PROGRAMA...
END Interprete.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Sábado 14 Abr 2012 22:29

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Perfecto. Si te funciona como dice la letra entonces todo bien. La estructura es la correcta. Me alegra que hayas hecho el proyecto.

Gracias.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
diegogen



Registrado: 13 Sep 2012
Mensajes: 3

Mensaje Publicado: Sábado 15 Sep 2012 17:56

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Estimado Kyshuo te agradecería si se puede actualizar el link al archivo de la librería "comando" ya que parece estar caído. Saludos.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Lunes 17 Sep 2012 18:52

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Actualizado

Volver arriba
Ver perfil del usuario Enviar mensaje privado
xRoki
Usuario Inquieto


Registrado: 22 Ago 2013
Mensajes: 71

Mensaje Publicado: Martes 05 Nov 2013 00:09

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

porfin ya no estoy ocupado , profe ayuda porfavor ya hice lo que me dijo cuando compilo el DEF no me aparece el Compracion.sym xd y melo piden

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Martes 05 Nov 2013 01:52

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Eso es muy raro. Prueba a guardar el DEF y también el MOD correspondiente. Agrégalos bien al proyecto y luego compilas primero el DEF y luego el MOD.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Miércoles 06 Nov 2013 21:18

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Profesor, no estoy seguro cómo compilar el archivo Comando.def, porque cuando lo intento el XDS muestra el error:
Código:
Severe error in Comando.def (11:6):file open error:"Comparacion.sym" no such file

De todas maneras logro abrir Comando.def dando doble click sobre el mensaje de error y ver todos sus procedimientos.
Supongo que Comparacion es un modulo que se importa a Comando.def y que el compilador no logra encontrar.

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Miércoles 06 Nov 2013 23:30

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Verifica que has agregado al proyecto el archivo DEF y el archivo LIB (eso es muy importante), luego intenta construir todo. Sino funciona me avisas.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Miércoles 06 Nov 2013 23:50

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

En el module list he agregado los archivos en este orden:
Código:
Comando.lib contenido en la carpeta SRC
         Interprete.mod contenido en la carpeta SRC
         Comando.def en la capeta DEF
         


Le doy OK sin embargo en el cuadro Project Files List solo salen enlistados
comando.def y interprete.mod.... a qué se debe? será por eso?

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Jueves 07 Nov 2013 00:41

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Está bien que Comando.lib no aparezca porque como está precompilado no puedes su código fuente, lo importante es que esté agregado.

Respecto a interptrete, si este tiene su código fuente bien, es decir, que su cabezal es MODULE Interprete debería funcionar todo bien. Sino te funciona dime si el mensaje de error cambió.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Jueves 07 Nov 2013 18:33

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

hola Kyshuo, aún no puedo saber qué estoy haciendo mal, aqui mando una captura de pantalla del IDE.
https://www.dropbox.com/s/i3j5id4luq2vt0m/Sin%20t%C3%ADtulo.jpg
Abajo se puede ver el mensaje de error :/

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
Kyshuo Ayame
Moderador Global


Registrado: 07 Ene 2011
Mensajes: 1043

Mensaje Publicado: Jueves 07 Nov 2013 22:14

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

El código de Interprete termina mal, el tuyo es:

Código:
  1. MODULE Interprete;
  2.  
  3. BEGIN
  4.  
  5. END.


cuando debería ser

Código:
  1. MODULE Interprete;
  2.  
  3. BEGIN
  4.  
  5. END Interprete.


Eso debería solucionar el problema.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
sr floyd
Usuario Activo


Registrado: 05 Sep 2011
Mensajes: 196

Mensaje Publicado: Viernes 08 Nov 2013 01:54

Título del mensaje: Re: Lección 51: Primer proyecto en Modula2 - Lector de coman

Responder citando

Absoluta razón Kyshuo, esos detalles tan mínimos pero importantes; Por otra parte luego de corregir lo que anotas aún sigue apareciendo el error, por lo que decidí anular todo lo relacionado a Comparación en el .def que es lo que genera el error, habiendo hecho eso todo compiló bien; a su vez intentaré acomodar los procedimientos que realizo ya que me interesa desarrollar el ejercicio (espero que funcione con la modificación); sin embargo, amigo, sigo con la duda de qué andará mal.
Reir

Volver arriba
Ver perfil del usuario Enviar mensaje privado MSN Messenger
jlrods
Usuario Inquieto


Registrado: 03 May 2014
Mensajes: 60

Mensaje Publicado: Miércoles 03 Jun 2015 22:49

Título del mensaje: Lección 51: Primer proyecto en Modula2 - Lector de comandos

Responder citando

Hola Kyshuo,

Realice el ejercicio con ambas versiones del modulo Comando, la version original que solo incluye los archivos Comando.def y Comando.lib, y con la version que incluye el archivo Parametro.def.

Primero realice el modulo principal utilizando la version que incluye el archivo de definicion de Parametro. Parece funcionar bien hasta que se llega a la segunda iteracion si el comando ingresado es diferente a"salir".

Al parecer queda basura en el prompt y cuando se invoca al procedimiento LeerComando, aparece un mensaje que dice: Comando: Esta dejando Memoria colgadda.

He tratado de incluir algunos SkipLines para eliminar la basura antes de leer el comando pero no sirve. La primera iteracion funciona bien, ya que lee el comando, obengo el nombre del comando y lo imprimo, obtengo el numero de parametros e imprimo los parametros. Incluso si el comando es salir el programa imprime el mensaje "Fin!!!", pero nunca llego a leer el siguiente comando.

Trate de depurar el error pero no puedo acceder al modulo Comando, naturalmente, asi que no estoy seguro de que ocurre dentro de el.

Posterirormente, trate de utilizar la libreria de Comando que no utiliza Parametro.def ya que pense que podia ser algo malo con la otra libreria y resulta que me aparece el mismo error que otros companeros comentan mas arriba. Al parecer no reconoce el modulo o procedimiento "Comparacion".

Aca te dejo el modulo principal para la primera version que realice (la que incluye los dos archivos de definicion y una libreria compilada) a ver si puedes identificar el error.
Muchas gracias como siempre y saludos.

Código:


MODULE Interprete;

FROM Comando IMPORT  Comando, NombreComando, LeerComando, ObtenerNombreComando, ObtenerCantParamComando, ObtenerParamComando, DestruirComando;
FROM Parametro IMPORT ImprimirParametro;
FROM STextIO IMPORT WriteString, WriteLn, SkipLine;
FROM SWholeIO IMPORT WriteCard;
FROM Strings IMPORT Equal;


VAR
i: CARDINAL;
COMANDO: Comando;
Nombre: NombreComando;
ComandoSalida: BOOLEAN;

PROCEDURE ImprimirParametros(comando: Comando);
VAR
i, final: CARDINAL;
BEGIN
  (*Se da a final el valor del numero de parametros que tiene el comando pasado como argumento de la funcion*)
  final:= ObtenerCantParamComando(comando);
  (*Se chequea que la cantidad de parametros no sea cero*)
  IF (final> 0) THEN
    (*Se repite la impresión de los parametros desde el primero hasta el ultimo*)
    FOR i:=1 TO final DO
      (*Se obtiene el nombre del parametro indicando su posicion según i y seimprime directamente con la funcion
      disponible para ello en la librería Parametro*)
      ImprimirParametro(ObtenerParamComando(i,comando));
      (*Se imprime el espacio entre parametros*)
      WriteString(" ");
      (*Despues de imprimir los parametros  se salta a la proxima linea*)
    END; (*Find el For*)
    WriteLn;
  END(*Fin del IF final<> 0*)
END ImprimirParametros;



BEGIN(*************************** Inicio del programa principal de Interprete************************)
  (*Se inicializa el contador en cero*)
  i:=0;
  (*Se inicia el repeat loop que indicara el prompt  para leer el comando y luego llamara a los procedimientos  que
   imprimen tanto comandos como parametros*)
  REPEAT
    (*Se amenta el contador en 1*)
    i:= i+1;
    (*Se imprime el contador y el prompt*)
    WriteCard(i,1); WriteString(":");
    (*Se lee el comando a traves de la funcion de la librería comando*)
    COMANDO:= LeerComando();
    (*Se guarda el nombre del comando para compararlo con el criterio de salida al final del loop*)
    Nombre:= ObtenerNombreComando(COMANDO);
    (*Se revisa que el comando sea el comando de salida*)
    IF (Equal(Nombre,"salir")) THEN
      ComandoSalida:= TRUE;
    ELSE
      ComandoSalida:= FALSE;
      (*Se imprime el nombre del comando*)
      WriteString(Nombre); WriteLn;
      (*Se imprimen los parametros del comando*)
      ImprimirParametros(COMANDO);
    END;
    (*Se repite hasta que el comando ingresado sea igual a salir *)
  UNTIL
    (ComandoSalida);
  (*Si se sale del loop es porque se introdujo el comando salir, asi que se imprime la salida correspondiente*)
  WriteString("Fin!!!");
  (*Se destruye el comando con el cual se ha estado trabajando*)
  DestruirComando(COMANDO);
END Interprete.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema Ir a página 12Siguiente
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El tema está bloqueado: no pueden editarse ni agregar mensajes.

Solicito programadores para mi proyecto

alexpin Bolsa de trabajo 0 Miércoles 23 May 2018 22:53 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Se requiere programador para Proyecto de Juego,...

Otilio Programación de juegos o videojuegos 5 Martes 03 Oct 2017 00:04 Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes.

Busco personas para un proyecto de Facebook

Andres Gonzales Bolsa de trabajo 0 Domingo 19 Mar 2017 22:35 Ver último mensaje
El foro no contiene ningún mensaje nuevo

mi proyecto de aprende programación

jaime hernandez ramirez Programación en general 0 Sábado 25 Feb 2017 03:29 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Necesito ayuda para un proyecto final.

Goth90 Programación en general 0 Jueves 23 Feb 2017 22:22 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,