PDA

Ver la versión completa : Problemas de un principiante con Modula-2



YoGalactus
14-05-2010, 15:52
Hola a todos.

Para empezar decir que prácticamente no tengo idea de Informática. Simples conocimientos a nivel usuario y nada más. Mi profesión es la de peón de obras públicas y pavimentación pero estando en paro y cerca de cumplir los cuarenta me estoy replanteando muchas cosas de mi existencia.
Entre ellas hacer cosas que siempre me han ilusionado como la informática y que no pude estudiar siendo más joven. Por ello, este año, planeo matricularme en un par de asignaturas de Ingeniería Técnica de Sistemas en la UNED.

Bueno, el caso es que tras comprobar que en la UNED utilizan como lenguaje de programación Modula-2 me hice con un tutorial de la UNED con la intención de ir fogueándome en programación y comprobar mis posibilidades como estudiante tras no haber cogido un libro de texto en más de veinte años. He observado aquí también un tutorial muy bueno por lo que decidí registrarme en vuestro foro.

El caso es que conseguí por la red hacerme con el compilador xds-x86-251enduser-win32.exe que tras intentar abrilo comprobé que no hay manera. Cuando clickeo sobre él sale una ventana que, tercamente, una y otra vez pone 'no se puede ejecutar'. Busqué otro compilador en la red en este caso el Fitted Modula-2 Compiler 3.1 y exactamente lo mismo.:confused:

Desgraciadamente entre mis amistades no hay nadie que tenga conocimientos de este tipo por lo que estoy buscando en la red haber si alguien puede orientarme. Yo tengo un ordenador portatil con sistema Windows XP.

Si habeis leído esto podeís observar que no puedo considerarme ni siquiera principiante en informática sino más bien parvulario pero bueno es lo que hay.:o

Bueno, pues nada más, gracias por haberme leído y a ver si alguien puede iluminarme un poco. Gracias y un saludo.

Fruit
14-05-2010, 16:42
Fíjate, aquí (http://freepages.modula2.org/compi.html#doswin) hay una lista de compiladores. A ver si tienes suerte y uno te funciona.

Saludos.

YoGalactus
14-05-2010, 23:48
Hola Fruit, muchas gracias por tu lista.
Después de sudar conseguí entrar en el compilador FST 3.5. El caso es que eché mano al asistente de windows y simplemente tenía que abrir una carpeta para él, lo hice y el caso es que conseguí entrar aunque creo que no me va a servir para mucho ya que llevo un buen rato intentando compilar un pequeño programa y no hay manera.

En una página encontré este pequeño programa (yo no tengo ni idea de programar), bueno lo cierto es que el programa es como sigue:

MODULE primero;
FROM InOut IMPORT WriteString;
BEGIN
WriteString("Hola Mundo ");
END primero.

Bueno, el caso es que cuando tras salvarlo haciendo ALT+S y después ALT+Q cuando intento compilarlo pone:

File: primero.mod Line 1 Post 17 ----- file not found
Press return to go to editor

Bueno, vuelvo al editor y tras intentar por activa y por pasivo cambiar cosas el caso es que no hay manera...¿sabeis que es lo que puede ir mal?

Un saludo.

Fruit
14-05-2010, 23:54
La verdad es que no tengo ni idea de Modula, pero en este caso, parece que el compilador de Modula intenta buscar un archivo, 'primero.mod', y no lo encuentra. ¿No está disponible para descarga en la web del ejemplo?

Marchi
15-05-2010, 09:25
Al igual que Fruit, yo tampoco se nada de Modula, pero por lo que averigüé primero se compila y luego se debe linkear. Puede que tu error venga por ese lado. Yo acabo de probarlo con el gm2 (http://www.nongnu.org/gm2/index.html) (es el compilador para Modula-2 de GCC (GNU Compiler Collection)) y lo compile con


gm2 -c -g -I. primero.mod

lo cual generó un archivo primero.o, y luego lo enlacé con


gm2 -g -I. primero.mod

dándome el binario buscado.


Para windows, podrías bajar y compilar el gm2, pero creo que sería mucho lío, así que lo mejor sería le leyeras la documentación del compilador que conseguiste para ver con que opciones se compila y como se enlaza posteriormente.



Saludos

YoGalactus
15-05-2010, 19:32
Hola a todos.


La verdad es que no tengo ni idea de Modula, pero en este caso, parece que el compilador de Modula intenta buscar un archivo, 'primero.mod', y no lo encuentra. ¿No está disponible para descarga en la web del ejemplo?

Según dice en la página cuando se salva el programa escrito haciendo ALT+S se genera un fichero llamado PRIMERO.MOD
luego dice:
-para salir al menú principal presione ALT+Q
-para compilar el programa presione letra C
-si el compilador detecta algún error en el fichero que se ha codificado, el compilador indicará en que línea está.
-si no hay errores se generará un fichero "PRIMERO.M20" en el directorio en que nos encontramos.
-el siguiente paso para obtener un fichero ejecutable es "linkar"...

Y sigue exponiendo cómo se hace para "linkar" (que es probablemente a lo que se refiere Marchi). Pero el caso es que yo no puedo acceder a esta otra fase ya que no hay manera de que se genere ese fichero ".M20" ya que me da continuamente errores.

Incluso he intentado cambiar el programita poniéndole otro nombre haber que pasaba, así:

MODULE primer programa;
FROM InOut IMPORT WriteString;
BEGIN
WriteString ("Hola Mundo ");
END primer programa.

Tampoco me deja y vuelve a dar error pero en este caso de sintaxis. Dice:

File work.mod Line 1 Post 24 ---------Syntax error
Press return to go to editor.
:mad:


por lo que averigüé primero se compila y luego se debe linkear. Puede que tu error venga por ese lado.

Hola Marchi, el caso es que para poder linkearlo primero tengo que compilarlo y el problema es que, no sé porqué, me da errores y no me permite compilarlo.

Saludos y gracias.

Marchi
15-05-2010, 19:45
Asegurate de que el archivo mod se este guardando con el mismo nombre que el que incluís después de 'MODULE'.

En un rato voy a tener un windows en una maquina virtual, instalo el compilador que estás usando y te cuento que pasa.


Saludos

Marchi
15-05-2010, 20:05
Recién instale http://freepages.modula2.org/downloads/setup.exe y compile el programa sin ningún problema.
Lo que no pude fue ejecutarlo desde el mismo IDE, pero desde una consola funciona bien.

Incluso si el nombre del modulo y el archivo no coinciden, no hay problema.


Saludos

YoGalactus
15-05-2010, 23:04
Hola a todos.

Gracias Marchi por el trabajo que te estás tomando. Te lo agradezco. He instalado el compilador que ofreciste en tu post anterior. Lo cierto es que debo ser muy torpe o no sé lo que pasa pero el caso es que me da el mismo problema.

Verás. He instalado el programa. Lo ha instalado en C:FST. Bien al entrar en esa carpeta hay otras carpetas con nombres como BIN, DEV, LIB, EXA y otros. Bien, entro en BIN y allí hay varias ventanitas. Abro la de MC (y sale lo mismo que en las fotos de la página por la que me he estado guiando) voy haciendo lo que ya he relatado en los post anteriores y todo bien hasta intentar compilarlo. Cuando lo intento compilar me da error.
Con el nuevo compilador que me indicas y que a ti te ha ido bien a mí no sé porqué no va. Me da error de "file not found". :(

Igual es algún tipo de problema con mi ordenador. Yo utilizo Windows XP. ¿Puede ser ese el motivo?.

Gracias otra vez por vuestra atención. Un saludo.

Marchi
15-05-2010, 23:14
Yo usé el IDE gráfico, creo que se llama mid3de2.exe y está en la misma carpeta.

Saludos

YoGalactus
16-05-2010, 13:15
Hola amigos.

Hola Marchi.

Bueno, he seguido tu recomendación. Verás, he entrado en Modula-2 IDE by 3de2 bueno y allí clickeé en FILE y después en NEW. Se abrió una ventana y escribí el programa después le di a COMPILE y se me abrieron tres posibilidades COMPILE, EXECUTE y COMPILE y EXECUTE. Le dí a este último y se abre una ventana que pone "Command Line Params" y un espacio debajo (encabezado por la palabra "params") para que escriba algo. Y los botones de OK y CANCEL.
Ciertamente no sé qué es lo que tengo que escribir. Puse el nombre del programa primero pero no parece que sea eso además el compilador ya le ha dado nombre por su cuenta al fichero nombrándolo como unit2.mod. Cuando tecleo OK aparece una milésima de segundo una pantalla en negro y desaparece volviendo a la pantalla de compilación y pone:

Heap in use: 0K
Available Heap: 334K
Heap used by last compile: 66K
Lines compiled: 501
Total lines compiled: 501

Making from C:\FST\SRC\unit2.MAK

Aparece abajo el botón EXECUTE y otro de CLOSE. Le doy a EXECUTE y vuelve a aparecerme la ventanita de "Command Line Params" le doy a OK y no hace nada más, es decir, vuelve a mostrar los datos que te mencioné antes y nada más.

Yo me supongo que tendría que aparecer eso de "Hola mundo" pero nada de nada con lo que no sé si está compilado o no pero desde luego no está ejecutado. :mad:

Bueno, a ver lo que te parece. Y gracias de nuevo. :)

YoGalactus
16-05-2010, 15:53
Hola a todos.

He hecho otra prueba.
Ahora cree un nuevo archivo y copié integramente el programa que diseñó el forista Gondar_f aquí: http://foro.hackhispano.com/showthread.php?t=23268

Bueno lo copio, lo pego y al darle a compilar y luego a compilar y ejecutar sale la ventanita con "Command Line Params", escribo floyd (nombre del programa) y le doy a OK y entonces aparece una pantalla negra que pone:

C:/Windows/System32/command.com
y debajo:

Dime un n´mero:
(y traslos dos puntos el cursor intermitente)

Un saludo.

Marchi
16-05-2010, 17:24
La razón por la que no veías nada en el primer caso es por que se mostraba el "Hola mundo" y el programa terminaba, como era lo único que hacía, no se llega a ver cuando aparece o apenas se ve que aparece y desaparece una ventana. Por otro lado, el programa de gondar necesita intervención del usuario, asi que necesariamente se va a ver su ejecución.

Supongo entonces, que ya esta listo el problema.....

Saludos

YoGalactus
17-05-2010, 19:16
Hola Marchi. Muchas gracias por tus indicaciones.

Verás, diseñé yo mismo un pequeño programa de prueba. Este:

MODULE Hola;
FROM InOut IMPORT WriteString;
BEGIN
WriteString("Hola ");
END Hola.

Bueno tras compilarlo y ejecutarlo ciertamente aparece una pantalla en negro que pone en una esquina Hola. Pero a tal velocidad que parece un flash. Sólo dura medio segundo o así. :rolleyes: Luego se cierra la ventana ella sola y ahí me las den todas :(

Marchi, ¿no habría alguna forma de que el programa ejecutado durara más tiempo y que fuese yo quien cerrase la ventana?.

Por ejemplo, en el programa del forero Gondar de nombre "Floyd" cuando lo ejecuto aparece el siguiente mensaje:

Dime un número: _

Y el cursor intermitente, cuando escribo un número (por ejemplo 10) y le doy a ENTER la ventana se cierra.
Yo me supongo que lo que tiene que salir es un triángulo rectángulo formado por números pero yo no lo veo. Ciertamente no sé si lo hace a una velocidad endiablada que no da tiempo a verlo pero no puedo asegurarlo. :o

Bueno, gracias otra vez y un saludo.

Marchi
17-05-2010, 19:31
Una posibilidad de poder ver sin apuros la salida del programa sería agregar al final de éste una petición de lectura desde la consola (como cuando pide un numero el programa de gondar) mediante ReadInt.
Otra forma sería ejecutar el programa desde una consola.

Saludos

YoGalactus
18-05-2010, 15:58
Hola a todos.

Hola Marchi, gracias a tus consejos he conseguido solventar el problema.
Verás, seguí tu recomendación de agregar al final "ReadInt" y el resultado ha sido excelente.
Así el programa "Hola" ha quedado así:

MODULE Hola;
FROM InOut IMPORT WriteString, WriteLn, ReadInt;
VAR
N: INTEGER;
BEGIN
WriteString("Hola ");
ReadInt(N);
END Hola.

También haciendo un pequeño cambio (en negrita) al final se ve sin apuros el triángulo del programa de Gondar_f.

MODULE Floyd;
FROM InOut IMPORT WriteLn, WriteString, ReadInt, WriteInt;
VAR
N: INTEGER;
I: INTEGER;
L: INTEGER;
U: INTEGER;
(*N es el rango del triángulo, I es el contador, L representa la linea y U al último número de la linea*)
BEGIN
WriteString("Dime un número: ");
ReadInt(N);
WriteLn;
L:=1;
U:=1;
FOR I:=1 TO N DO
IF I>U THEN
WriteLn;
L:=L+1;
U:=U+L
END;
WriteInt(I,5)
END;
IF N>0 THEN
ReadInt(N);
WriteLn END
END Floyd.

En fin, pues muchas gracias Marchi y demás por vuestros consejos.
Un saludo.

gondar_f
19-05-2010, 21:29
Hola, últimamente me conecto menos y por ello no había visto este tema. Veo que ya lo solucionaste, si tienes más dudas yo me conecto regularmente (aunque actualmente poco). Veo que ya diste los primeros pasos. Para la UNED poco mas vas a necesitar de modula 2, ya que es el lenguaje para empezar, después se pasa a Java.

Me alegra que a alguien le haya resultado útil mi pequeño tutorial, muy incompleto, en su moment tenia otro capitulo más listo y eso, pero como no veia que nadie sintiera interes, pues lo dejara. si veo que hay interes terminare de hacer más tutos. Aunque ahora si que ya hace años que no toco nada de Modula2

Saludos

YoGalactus
20-05-2010, 20:45
Hola a todos.

Hola Gondar. Ciertamente tus explicaciones en el tutorial me están sirviendo de mucho así como el programa que diseñaste como ejemplo al principio del tutorial.
Por ejemplo, a partir de él yo he escrito este otro (y otros más) aunque más sencillo como puedes observar:

MODULE Sumasuc;
(*Suma una sucesión de números*)
FROM InOut IMPORT WriteString, WriteInt, WriteLn, ReadInt;
VAR
N,Inicio,Final: INTEGER;
BEGIN
WriteString("Dar un numero inicio sucesion: ");
ReadInt(Inicio);
WriteLn;
WriteString("Dar numero final sucesion: ");
ReadInt(Final);
WriteLn;
N:=((Final-Inicio+1)*(Inicio+Final) DIV 2);
WriteInt(N,3);
ReadInt(N);
WriteLn;
END Sumasuc.

Como ves utilizo variables y la función ReadInt que me sugirió muy acertadamente Marchi con lo que el resultado es fácilmente visible en la pantalla.
Bueno, lo que hace es sumar una sucesión de números. Por ejemplo la suma de todos los números entre 70 y 100 es...2635.

Ahora estoy metido en un berenjenal con otro programa. Verás estoy intentando hacer un programa que haga una serie de divisiones sucesivas. Por ejemplo dividir el 327 (o cualquier otro número) por un divisor y el cociente volver a dividirlo por ese mismo divisor así repetidamente hasta que el cociente sea cero. Y lo más importante...que me vaya guardando los restos de cada división.

Supongo que tendré que utilizar las formas WHILE o FOR que tú empleas en el programa del triángulo de Floyd.
Bueno cuando lo tenga acabado (si soy capaz de hacerlo claro) ya lo pondré aquí.

Gracias y un saludo.

gondar_f
22-05-2010, 17:19
Hola y muchas gracias.

Y tengo que felicitarte a ti, porque intentar hacer nuevos programas a partir de lo que sabes es la mejor forma de profundizar en la programación. De nada sirve repetir lo que ves, hay que intentar hacer otro código con lo que se va aprendiendo.

En cuanto a lo que quieres hacer, tienes razón, necesitas el WHILE, aunque no estoy seguro de cuando dices guardar los resultados intermedios te refieres a mostrarlos por pantalla o guardarlos internamerte. Si es el primer caso, con variables y el WHILE tienes suficiente.

El WHILE te sirve para repetir un proceso mientras se cumpla una contidición, que en ese caso puede ser que una de las variables sea distinto a 0.

Intenta hacerlo y en donde te pares pues publicas el code y entre Marchi y yo intentaremos guiarte.

Saludos