Curso de Locomotive Basic
Ejercicio número 3.4 (funciones matemáticas)
Así, a lo chapuza
Salu2!
Así, a lo chapuza
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
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!
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
Re:
De chapuza nada, con eso basta y sobraEjercicio número 3.4 (funciones matemáticas)
Así, a lo chapuza
Salu2!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
De hecho, siendo estrictos no hace falta ni siquiera convertir a entero en el LOCATE, lo hace él solo.
Re:
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.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
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?
Re: Curso de Locomotive Basic
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
Más detalles en...
http://www.nachocabanes.com/amstrad/curso/cpc05.php
Re: Re:
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" Ni me preocupé en comprobar si el locate hacia la conversión automáticamenteEn 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?
Salu2.
Re:
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.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
(...)
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.
Re: Curso de Locomotive Basic
Una tontería para felicitar el año, con un texto en grande y nieve cayendo...
Debería salir algo así...
No es espectacular de apariencia, y menos aún de velocidad, pero son menos de 40 líneas de Basic puro a 4 MHz...
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
No es espectacular de apariencia, y menos aún de velocidad, pero son menos de 40 líneas de Basic puro a 4 MHz...
Re: Curso de Locomotive Basic
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!
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!
Re: Curso de Locomotive Basic
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...
- Completados los temas 5 (gráficos) y 6 (números enteros y reales, arrays), con sus respectivos ejercicios propuestos...
- litos.net
- Loading, Please Wait...
- Mensajes: 5960
- Registrado: Mié 05 Oct , 2005 7:57 pm
- Ubicación: Madrid
- Contactar:
Re: Curso de Locomotive Basic
¡¡ Cagon la leche !! no lo había visto.... ¡ que bonito, chico !Una tontería para felicitar el año, con un texto en grande y nieve cayendo...
Debería salir algo así...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
No es espectacular de apariencia, y menos aún de velocidad, pero son menos de 40 líneas de Basic puro a 4 MHz...
Si es CPC es en Color
Re: Curso de Locomotive Basic
Una pequeña corrección sobre el Capítulo 6, en el tema 6.3 sobre los Arrays.
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í:
Salu2!
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.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)"
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í:
Ahora parece una tontería, pero creo que es mejor dejarlo claro desde un principio, sobretodo tratándose de un cursoDIM 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)"
Salu2!
Re: Curso de Locomotive Basic
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.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. [...]
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 |