Curso de Locomotive Basic

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Mensajepor nacho » Mar 18 Dic , 2007 11:06 pm

Disponible la primera entrega del tema 4, con casi todo lo relacionado con edición de programas en Locomotive Basic (renum, auto, delete, edit...)

Falta hablar de la tecla COPY, que queda para otro rato... ;-)

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Mensajepor DaDMaN » Mié 19 Dic , 2007 12:38 am

Ejercicio número 3.4 (funciones matemáticas)

Así, a lo chapuza :D

Código: Seleccionar todo

1 ' Ejercicio 3.4 (funciones matematicas)
10 MODE 2:DEG
20 FOR y%=0 TO 760 STEP 10
30 x%=x%+1
40 LOCATE x%,INT(SIN(y%)*12)+14:PRINT"X"
50 NEXT
Salu2!

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Mensajepor DaDMaN » Mié 19 Dic , 2007 1:08 am

Ejercicio de cadenas 3.2

En este me he entretenido un poco más.
ancho% = indica los caracteres de ancho del marco
alto% = indica la altura en caracteres del marco
cadena$ = contiene la cadena de texto a imprimir

El programa se "autoajusta" según el alto / ancho que le indiquemos y según el tamaño de la palabra contenida en "cadena$".
También controla que la anchura y altura del recuadro sea la correcta para contener la cadena ni mayor que el límite de la pantalla.

Salu2!

Código: Seleccionar todo

10 'Ejercicio de cadenas 3.2
20 MODE 1
30 cadena$="Prueba":t%=LEN(cadena$):ancho%=38:alto%=18
40 IF alto%<(t%+4) THEN alto%=t%+4
50 IF alto%>23 THEN alto%=23
60 IF t%>19 THEN t%=19
70 IF ancho%<(t%*2)+6 THEN ancho%=(t%*2)+6
80 'Dibujamos recuadro
90 FOR y%=1 TO alto%
100 IF y%=1 OR y%=alto% THEN PRINT STRING$(ancho%,"-") ELSE PRINT"|";SPACE$(ancho%-2);"|"
110 NEXT
120 'Dibujamos Cadena de Texto
130 FOR c%=1 TO t%
140 LOCATE 4,c%+2:PRINT MID$(cadena$,1,c%)
150 LOCATE ancho%-2-c%,c%+2:PRINT MID$(cadena$,t%-c%+1,c%)
160 NEXT
170 LOCATE INT((ancho%-t%)/2+1),alto%-2:PRINT UPPER$(cadena$)
180 LOCATE 1,alto%+1

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re:

Mensajepor nacho » Vie 21 Dic , 2007 10:40 pm

Ejercicio número 3.4 (funciones matemáticas)

Así, a lo chapuza :D

Código: Seleccionar todo

1 ' Ejercicio 3.4 (funciones matematicas)
10 MODE 2:DEG
20 FOR y%=0 TO 760 STEP 10
30 x%=x%+1
40 LOCATE x%,INT(SIN(y%)*12)+14:PRINT"X"
50 NEXT
Salu2!
De chapuza nada, con eso basta y sobra ;-)

De hecho, siendo estrictos no hace falta ni siquiera convertir a entero en el LOCATE, lo hace él solo.

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re:

Mensajepor nacho » Vie 21 Dic , 2007 10:44 pm

Ejercicio de cadenas 3.2
En este me he entretenido un poco más.
ancho% = indica los caracteres de ancho del marco
alto% = indica la altura en caracteres del marco
cadena$ = contiene la cadena de texto a imprimir
Yo no lo he elaborado tanto, lo he hecho sólo con una cadena (y nuevamente sin usar enteros, que no hemos visto todavía en el curso). Otra diferencia entre tu versión y la mía es que yo no he usado MID$, sino LEFT$ y RIGHT$, según el caso.

En la próxima entrega (mañana o pasado) querría incluir alguna solución a los ejercicios propuestos. ¿Te parece bien que incluya las tuyas además de las mías?

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Curso de Locomotive Basic

Mensajepor nacho » Vie 21 Dic , 2007 10:49 pm

Por cierto, hoy he publicado la primera entrega del tema de gráficos (5), con dos apartados sencillitos: posicionamiento y dibujar líneas; puntos, colores y modos de tinta.

Más detalles en...

http://www.nachocabanes.com/amstrad/curso/cpc05.php

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Re: Re:

Mensajepor DaDMaN » Vie 21 Dic , 2007 11:29 pm

En la próxima entrega (mañana o pasado) querría incluir alguna solución a los ejercicios propuestos. ¿Te parece bien que incluya las tuyas además de las mías?
Pues claro que me parece bien. Además así me voy desoxidando un poco yo también con el BASIC. Lo de convertir a entero el parámetro del locate, supongo que lo hice para "asegurarme" :P Ni me preocupé en comprobar si el locate hacia la conversión automáticamente :D

Salu2.

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re:

Mensajepor nacho » Sab 22 Dic , 2007 9:09 pm

Para la solución del capítulo 2, me he programado esto:

Código: Seleccionar todo

(...)
270 xt%=x%:yt%=y%:p%=248:GOSUB 490
280 'BUCLE PRINCIPAL
290 IF INKEY(1)=0 THEN x%=x%+1:p%=251:GOSUB 370:GOSUB 490
300 IF INKEY(8)=0 THEN x%=x%-1:p%=250:GOSUB 370:GOSUB 490
(...)
Había una pequeña errata aquí. La línea 490 no existe. Lo he corregido para saltar siempre a la 410 y ahora sí funciona OK.

He incluido tu fuente y el mío en un primer apartado de soluciones a los ejercicios propuestos.

Y también he ampliado otro poco el tema 5, con los dos siguientes apartados.

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Curso de Locomotive Basic

Mensajepor nacho » Mié 26 Dic , 2007 2:44 am

Una tontería para felicitar el año, con un texto en grande y nieve cayendo...

Código: Seleccionar todo

10 ' Feliz 2008!
20 '
30 ' Preparo el texto grande
40 MODE 1: BORDER 0
50 INK 0,0: INK 1, 26: INK 2,11: INK 3,23
60 PRINT"Feliz"
70 PRINT"2008!"
80 PEN 2
90 DEFINT i,j: GOSUB 1000
100 ' Borro el texto auxiliar
110 LOCATE 1,1
120 PRINT" "
130 PRINT" "
140 ' Genero los copos de nieve
150 numCopos = 50: RANDOMIZE TIME
160 DIM copo(numCopos,2)
170 FOR i =1 TO numCopos
180 copo(i,1)=RND*640
190 copo(i,2)=RND*400
200 PLOT copo(i,1), copo(i,2), 1, 1
210 NEXT i
220 '
230 ' Parte repetitiva
240 WHILE INKEY$=""
250 FRAME: 'Sincronizo barrido
260 ' Borro copos, recalculo y dibujo
270 FOR i =1 TO numCopos
280 PLOT copo(i,1), copo(i,2), 1, 1
290 copo(i,1)=copo(i,1)-2+RND*4
300 copo(i,2)=copo(i,2)-RND*3
310 IF copo(i,2)<5 THEN copo(i,2)=399
320 PLOT copo(i,1), copo(i,2), 1, 1
330 NEXT i
340 WEND
980 ' Fin del cuerpo del programa
990 END
1000 'Subrutina de escribir grande
1010 FOR i =1 TO 40
1020 FOR j =1 TO 16
1030 IF TEST(i*2, 400-j*2) <> 0 THEN LOCATE i,j+4: PRINT CHR$(233);
1040 NEXT j
1050 NEXT i
1060 RETURN
Debería salir algo así...

Imagen

No es espectacular de apariencia, y menos aún de velocidad, pero son menos de 40 líneas de Basic puro a 4 MHz... ;-)

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Curso de Locomotive Basic

Mensajepor nacho » Mar 01 Ene , 2008 6:06 pm

Buenas...

Ligera actualización en el curso de Basic, en el tema de gráficos: FILL, TAG, FRAME. De paso, he creado un apartado de fuentes de ejemplo y he incluido el cartelito con la nieve cayendo.

Feliz año a todos!

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Curso de Locomotive Basic

Mensajepor nacho » Dom 06 Ene , 2008 1:28 pm

Buenas... antes del stress de la vuelta al trabajo, otra pequeña actualización, como regalo de reyes para quien le gusten los retos:

- Completados los temas 5 (gráficos) y 6 (números enteros y reales, arrays), con sus respectivos ejercicios propuestos... :wink:

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Curso de Locomotive Basic

Mensajepor nacho » Jue 10 Ene , 2008 11:51 pm

Publicado el tema 7 (subrutinas, sencillito):

http://www.nachocabanes.com/amstrad/curso/cpc07.php

Avatar de Usuario
litos.net
Loading, Please Wait...
Loading, Please Wait...
Mensajes: 5960
Registrado: Mié 05 Oct , 2005 7:57 pm
Ubicación: Madrid
Contactar:

Re: Curso de Locomotive Basic

Mensajepor litos.net » Vie 11 Ene , 2008 8:42 am

Una tontería para felicitar el año, con un texto en grande y nieve cayendo...

Código: Seleccionar todo

10 ' Feliz 2008!
20 '
30 ' Preparo el texto grande
40 MODE 1: BORDER 0
50 INK 0,0: INK 1, 26: INK 2,11: INK 3,23
60 PRINT"Feliz"
70 PRINT"2008!"
80 PEN 2
90 DEFINT i,j: GOSUB 1000
100 ' Borro el texto auxiliar
110 LOCATE 1,1
120 PRINT" "
130 PRINT" "
140 ' Genero los copos de nieve
150 numCopos = 50: RANDOMIZE TIME
160 DIM copo(numCopos,2)
170 FOR i =1 TO numCopos
180 copo(i,1)=RND*640
190 copo(i,2)=RND*400
200 PLOT copo(i,1), copo(i,2), 1, 1
210 NEXT i
220 '
230 ' Parte repetitiva
240 WHILE INKEY$=""
250 FRAME: 'Sincronizo barrido
260 ' Borro copos, recalculo y dibujo
270 FOR i =1 TO numCopos
280 PLOT copo(i,1), copo(i,2), 1, 1
290 copo(i,1)=copo(i,1)-2+RND*4
300 copo(i,2)=copo(i,2)-RND*3
310 IF copo(i,2)<5 THEN copo(i,2)=399
320 PLOT copo(i,1), copo(i,2), 1, 1
330 NEXT i
340 WEND
980 ' Fin del cuerpo del programa
990 END
1000 'Subrutina de escribir grande
1010 FOR i =1 TO 40
1020 FOR j =1 TO 16
1030 IF TEST(i*2, 400-j*2) <> 0 THEN LOCATE i,j+4: PRINT CHR$(233);
1040 NEXT j
1050 NEXT i
1060 RETURN
Debería salir algo así...

Imagen

No es espectacular de apariencia, y menos aún de velocidad, pero son menos de 40 líneas de Basic puro a 4 MHz... ;-)
¡¡ Cagon la leche !! no lo había visto.... ¡ que bonito, chico ! :D
Si es CPC es en Color

Avatar de Usuario
DaDMaN
Keeper of The Forum
Keeper of The Forum
Mensajes: 796
Registrado: Jue 16 Mar , 2006 10:51 pm

Re: Curso de Locomotive Basic

Mensajepor DaDMaN » Vie 11 Ene , 2008 2:02 pm

Una pequeña corrección sobre el Capítulo 6, en el tema 6.3 sobre los Arrays.
DIM edad%(20)

En este caso, tenemos un vector llamado "edad", que puede guardar 20 datos enteros. El primer dato será "edad(1)" y el último será "edad(20)"
Eso no es del todo correcto. Realmente, declarando DIM edad%(20) tenemos la posibilidad de guardar 21 datos enteros y no 20, siendo "edad%(0)" el primer dato.

En el locomotive BASIC el primer valor del índice en un Array empieza con el valor 0 y no con el 1 (si bien, empezar con el valor 1 puede ser más entendible para los novatos).

La afirmación anterior debería ser así:
DIM edad%(19)

En este caso, tenemos un vector llamado "edad", que puede guardar 20 datos enteros. El primer dato será "edad%(0)" y el último será "edad%(19)"
Ahora parece una tontería, pero creo que es mejor dejarlo claro desde un principio, sobretodo tratándose de un curso :P

Salu2!

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Curso de Locomotive Basic

Mensajepor nacho » Sab 12 Ene , 2008 3:03 am

Una pequeña corrección sobre el Capítulo 6, en el tema 6.3 sobre los Arrays [...]
Eso no es del todo correcto. Realmente, declarando DIM edad%(20) tenemos la posibilidad de guardar 21 datos enteros y no 20, siendo "edad%(0)" el primer dato. [...]
Tienes razón, pero... yendo a lo práctico: en el manual oficial del CPC664 (página 2/3) viene un ejemplo en el que se declara con DIM NOMBRE$(100) y se leen valores con un FOR indexado de 1 a 100. Lo mismo ocurre en el ejemplo de DIM que forma parte de la referencia de palabras reservadas (página 3/18), donde el ejemplo es DIM amigo$(5) y se lee con FOR n = 1 TO 5.

Y me parece que esa forma de trabajar es la más legible. No sabes lo que le cuesta a bastantes de mis alumnos (presenciales) acostumbrarse a contar desde 0... ¡¡¡ trabajando en C !!! A final de curso, todavía alguno hace cosas como dato[20]=5; en un int dato[20];

Tienes razón, en Locomotive Basic con DIM variable(n) se reserva espacio para n+1 elementos, numerados desde 0. Pero insisto en que no creo que sea lo más legible para un principiante (aun así, veo razonable añadir una nota al final del apartado, para que le suene a quien quiera llegar más allá). De hecho, también existe otra característica "poco documentada": si no declaras con DIM, aun así puedes acceder como array... siempre que no tenga más de 10 elementos. Pero he preferido no incluirlo, no sea que a alguien le dé por usarlo... ;-)

Gracias por el comentario. Me lo anoto para incluirlo en la próxima revisión (a principios/mediados de semana querría tener algo).


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic