Los foros del Guille

Si no encuentras respuesta, puedes buscar en el sitio del Guille

Google
 

MKN Reservas (Maro - Kayak Nerja)


Kayak Maro - Rutas y alquiler de kayak y tabla
Selecciona el foro y pulsa en mostrar:     Mostrar 
De tu inter�s (algunos de los avisos publicados)

01/feb./2019

Los moderadores, MVP y administradores podrán seguir editando, respondiendo o creando nuevos mensajes

Con idea de que puedan ayudar a responder e ir cerrando mensajes ;-)

  Foro: General Cantidad:  Desde:   Hasta:    Aplicar   Responder 
Respuestas a: 58205 - El antiguo GWBASIC
IDAsuntoFechaNick 
58205 El antiguo GWBASIC19/03/18 01:06nicolas2018alcub   
¡Hola amigos!
Soy reciente en este foro. Tengo 37 años de edad y soy fanático de lo retro.
Mediante DOSBOX puedo correr el GW-BASIC 2x y 3x tanto en ordenadores convencionales como en mis tablets e incluso smartphones con Android O.S Jajaja
Estoy haciendo pruebas con la instrucción GOTO de esas épocas.
Tengo in programa así:

1 CLS
2 A = 1
3 PRINT A
4 A = A + 1
5 IF A <= 10 THEN
6 GOTO 3
7 ELSE
8 END
9 END IF
RUN

El tema que entra como en un bucle hasta el infinito, imprimiendome por pantalla números desde el 1 hasta "el infinuto" y la idea de este programs es que "corte" cuando A sea igual que 10. ¿Por qué no corta o no para el programa?. Yo le puse que si A es menor o igual que 10 que realice el salto a la línea 3 para que vuelva a imprimir el valor de la variable A e incremente a de uno en uno, en caso contrario que termine el programa. O sea que si A "sobrepasa" el 10 deberia acabar el programa y no seguir y seguir. ¿Por qué no corta?. Espero respuestas, amigos, por favor. Saludos.
Nicolás Matías Funtalas
IDAsuntoFechaNick 
58207 Re: El antiguo GWBASIC (Resp: 58205)22/03/18 17:46nicolas2018alcub   
Pero respondan. Respondan , por favor...


Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias.
IDAsuntoFechaNick 
58208 Re: El antiguo GWBASIC (Resp: 58205)23/03/18 19:36Ramón Sola   
Hola, me parece una cuestión interesante. Yo soy un poquito más joven pero también he desarrollado cierta curiosidad por los programas y los sistemas antiguos. BASIC no es un lenguaje demasiado extraño para mí.

El dialecto BASIC que implementa GWBASIC es relativamente primitivo. No contempla el IF estructurado que se cierra con ENDIF o END IF, sino más bien un IF-THEN-ELSE "clásico". La cláusula ELSE es opcional y no todos los BASIC de la época la admiten. THEN y ELSE deben aparecer en la misma línea del IF para que tengan efecto. Extrañamente, el analizador de GWBASIC acepta ELSE como sentencia independiente sin rechistar, aunque en apariencia no hace nada. Supuestamente es una limitación o un "bug" del intérprete.

El programa no hace lo que se pretende. Aparentemente, una cláusula THEN vacía es correcta o por lo menos "no ilegal", así que la línea 6 no implica una "continuación" del THEN sino una sentencia aparte. Dicho de otro modo, el IF de la línea 5 no produce efecto alguno y la ejecución pasa a la 6 directamente, con lo cual se regresa a la 3 y se repite el ciclo.

Dado que los IF-THEN-ELSE no son estructurados, las decisiones se deben resolver con una o más sentencias en la misma línea (dentro del THEN o del ELSE, si procede) o con saltos (GOTO) según la complejidad de las acciones. Por tanto, el GOTO 3 pasaría al THEN:
5 IF A <= 10 THEN GOTO 3

Esta construcción es correcta pero redundante. Se puede simplificar de dos formas:
5 IF A <= 10 THEN 3
5 IF A <= 10 GOTO 3

Las líneas siguientes sobrarían porque el programa terminaría ahí, después de contar hasta 10. Si hubiera más acciones se colocarían en un ELSE detrás del THEN (por ejemplo, THEN 3 ELSE PRINT "FIN") o en las líneas siguientes.

De todas formas este es un ejemplo de prueba. Cuando se conoce el número exacto de iteraciones y el incremento o decremento de la variable es fijo, la construcción FOR-NEXT resulta más clara.

Otra cosa sería obtener, por ejemplo, la suma parcial de los primeros números naturales hasta cierto límite.

1 CLS
2 A = 1
3 B = 1
4 PRINT A, B
5 A = A + 1
6 B = B + A
7 IF B <= 100 GOTO 4
8 PRINT "FIN"

Este tipo de bucle también se puede construir con WHILE-WEND.

4 WHILE B <= 100
5 PRINT A, B
6 A = A + 1
7 B = B + A
8 WEND

El WHILE comprueba la condición al principio, mientras que el IF permite más flexibilidad. Otros dialectos de BASIC contemplan un bucle REPEAT-UNTIL que comprueba la condición al final. Esta sería una condición de terminación del bucle, contraria a la de WHILE.

Realmente, el segmento de programa equivalente a un bucle WHILE requeriría colocar un IF con la condición contraria que dirija a la línea siguiente al WEND (o END si el programa tiene que acabar) y un GOTO hacia el IF como sustituto del WEND.

4 IF B > 100 GOTO 9
5 PRINT A, B
6 A = A + 1
7 B = B + A
8 GOTO 4
9 PRINT "FIN"

Acerca de la línea 9 del programa original, "END IF" no es una sentencia válida en este BASIC. GWBASIC detecta estos errores en tiempo de ejecución, no mientras se introducen las líneas numeradas.
(Continúa...)
[Editado: Ramón Sola, 23/03/2018 19:36:22, Mensaje cortado]


Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias.
IDAsuntoFechaNick 
58209 Re: El antiguo GWBASIC (Resp: 58208)23/03/18 19:37Ramón Sola   
He encontrado un manual de GWBASIC para un antiguo ordenador de AT&T compatible con PC. Contiene un suplemento sobre la programación de una pieza de hardware específica de ese equipo que ya no es relevante y se puede ignorar.
http://bitsavers.trailing-edge.com/pdf/att/6300/999-802-000IS_Programmers_Guide_PC6300_GWBASIC_by_Microsoft_1985.pdf

Espero haber resuelto las dudas principales. Si hay alguna más, no tengas reparo en preguntar. rie

--
Para ayudar en lo que buenamente se pueda


Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias.

 
(c) Guillermo 'guille' Som, 2005-2025  - foros.elGuille v1.0.6.3 (01/Jun/2021 12:45 GMT +2)  - (ASP.NET v4.0.30319.42000)
 
La hora GMT del servidor es: 28/01/2025 22:50:42 GMT