Está en la página 1de 21

Tema 5: Programacin en BASIC

1. Lenguajes de programacin.
Los lenguajes de programacin son los "lenguajes" que se utilizan para dar rdenes o
instrucciones al ordenador. Estas instrucciones han de ser traducidas (COMPL!"# a ceros
$ unos (C%&'O ()!"O# para que el ordenador las entienda $ pueda ejecutarlas.
*n P"O'"!M! es el conjunto de rdenes que resuel+en o realizan una determinada tarea.
,ipos de lenguaje-
Ensam.lador / (ajo ni+el0 conocer todos los componentes del ordenador / m12imo
rendimiento.
(asic0 Pascal0 C0 3ortran / !lto ni+el / 4encillos $ 5uncionan en cualquier ordenador.
6isual (asic0 C770 8a+a0 !ctionscript / Orientados a o.jetos / hacen uso de o.jetos
como +entanas0 .arras de desplazamiento0 .otones0 etc.
9. !lgoritmos $ toma de decisiones.
Cuando realizamos un programa0 hemos de hacer pre+iamente el dise:o del mismo antes de
comenzar a escri.ir las instrucciones.
;a$ que crear una especie de receta o conjunto de pasos para resol+er el pro.lema que se
denomina ALGORITMO.
El algoritmo se representa gr15icamente por un DIAGRAMA DE FLUJO en el que cada
tipo de operacin se representa por un s<m.olo di5erente. Las operaciones que podemos
encontrar son-
Procesos.
&atos.
nicio $ 3in.
4alida por pantalla.
,oma de decisiones.
Ejem!o "- diagrama de 5lujo de un algoritmo para calcular el 1rea de un tri1ngulo.
Ejem!o #- diagrama de 5lujo de un algoritmo para compro.ar si un n=mero es par o impar.
>. El lenguaje (!4C. Primer programa en (!4C.
El lenguaje (!4C se llama as< porque es un lenguaje sencillo0 .1sico0 ideal para aprender a
programar.
E2isten muchas +ersiones de (asic- ?(asic0 ,ur.o(asic0 Li.ert$ (asic o el moderno 6isual
(asic orientado al desarrollo de juegos.
6amos a escri.ir el siguiente programa-
CLS
PRINT
PRINT "Hola a tod@s"
PRINT "Este es mi primer programa en Basic"
END
4i ahora pulsas F50 el ordenador compilar1 el programa $ lo ejecutar10 apareciendo en
pantalla el resultado de lo que aca.amos de realizar.
Las instrucciones de este programa signi5ican-
CLS- a.re+iatura de c!ear $creen0 que quiere decir que .orra la pantalla. 4e utiliza
para que no aparezca nada escrito con anterioridad.
PRI%T &Men$aje&- se emplea para presentar una 5rase o mensaje por pantalla. El
te2to del mensaje aparece entre comillas. La primera instruccin P"), aparece
sola0 lo cual produce una l<nea de m+il.
E%D- indica el 5inal del programa.
@. nstrucciones gr15icas.
Para poder crear un programa que realice un gr15ico sencillo0 hemos de decir al ordenador
la resolucin con la que +a a tra.ajar0 es decir0 el n=mero de p<2eles horizontales $
+erticales de la pantalla. Por esta razn0 en los programas en los que creemos gr15icos0 la
primera instruccin ser1 SCREE% "#. Esta instruccin indica que la resolucin ser1 de
A@B2@CB p<2eles $ 1A colores.
Cualquier punto de la pantalla estar1 indicado por dos coordenadas- '0 o desplazamiento
horizontal0 e (0 o desplazamiento +ertical.
La instruccin que di.uja un punto es PSET)'*(+* co!or0 donde ' es un n=mero
entre B $ A>D0 e (0 un n=mero entre B $ @EDF en co!or se sustitu$e por un n=mero
entre B $ 1G.
Para di.ujar una l<nea0 hemos de indicar el punto de inicio $ el punto 5inal. 4e utiliza
la instruccin LI%E)'
"
*(
"
+, )'
#
*(
#
+* co!or.
Ejem!o -: programa que crea una l<nea amarilla.
CLS
SCREEN 12
LINE!"!#$%&'"()'#"1(
! la instruccin anterior se le puede a:adir le puede a:adir la opcin *B que di.uja un
cuadril1tero a partir de la diagonal especi5icada.
,am.iHn admite la opcin *BF que rellena el cuadril1tero de color.
Otras instrucciones =tiles para di.ujar son-
CIRCLE)'*(+* r* co!or- di.uja un c<rculo de radio r $ color especi5icado en el punto
)'*(+.
SLEEP .- detiene el ordenador durante . segundos.
PAI%T)'*(+* in./ra* !0mi.e- pinta una 5igura usando el color se:alado en in./ra.
&e.emos especi5icar un punto )'*(+ del interior de la 5igura $ el color de su
per<metro en !0mi.e.
Ejem!o 1: programa que crea un sem15oro intermitente.
SCREEN 12
CIRCLE1!!"1!!#"(!"1*
SLEEP &
P+INT1!!"1!!#"1("1*
SLEEP 2,*
P+INT1!!"1!!#"!"1*
En este programa no se inclu$e la instruccin E)&0 $a que en (asic es opcional. ?(asic no
distingue entre ma$=sculas $ min=sculas.
G. 6aria.les.
;asta ahora0 hemos creado unos programas que dan un mensaje o realizan una 5igura. Pero
un programa resulta m1s =til cuando podemos modi5icar los +alores de algunas cantidades o
pala.ras que denominaremos de 5orma com=n 2ARIABLES.
*na +aria.le puede almacenar una cadena de caracteres0 un n=mero entero o un n=mero
real (con decimales#. ! una +aria.le se le puede dar el nom.re que queramos pero-
Las +aria.les ca3ena 3e carac.ere$ siempre terminan en 4.
Las +aria.les n5mero en.ero siempre terminan en 6.
Las +aria.les n5mero rea! terminan en cualquier car1cter e2cepto en los
anteriores.
Ejem!o 5: programa que pide el nom.re $ la edad.
CLS
INP-T ".C/mo te llamas"0n1
INP-T ".C23ntos a4os tienes"0a5
ap5 6 a5 7 1
PRINT n10"el a4o 82e 9iene tendr3s"0ap50"a4os,"
END
En este programa se inclu$e la instruccin I%PUT que permite sacar un mensaje por
pantalla a la +ez que pide el +alor de una +aria.le. El programa se detiene hasta que0
mediante el teclado0 introduzcamos el +alor de la +aria.le (pulsando ),"O#. Es importante
se:alar que los mensajes de.en ir entre comillas $ separados del nom.re de las +aria.les
por un &7&.
Como podemos +er en la @I l<nea0 los +alores des +aria.les que introducimos en el programa0
pueden ser modi5icados dentro del programa o utilizados para calcular otras +aria.les (en
este caso a6#.
Con la instruccin PRI%T que $a +imos0 podemos mostrar el +alor de las +aria.les que han
sido introducidos o calculados en el programa. Como en la instruccin I%PUT los mensajes
de.en ir entre comillas $ separados del nom.re de la +aria.le por un &7&.
Ejem!o 8: programa que suma dos n=meros enteros.
CLS
INP-T "Introd2ce el primer n:mero"0n15
INP-T "Introd2ce el seg2ndo n:mero"0n25
s2ma5 6 n15 7 n25
PRINT "El res2ltado es"0s2ma5
END
Oeracione$ con 9aria:!e$ n/m;rica$
Las operaciones que pueden realizarse so.re +aria.les numHricas (enteras o reales# son-
Oera3or Oeracin Ejem!o )a < ""* : < #+ Re$/!.a3o
J Potenciacin aJ. 191
K Cam.io de signo Ka K11
L
/
Multiplicacin $
di+isin
aL.
a/.
99
G0G
M &i+isin entera aM. G
MO& "esto de di+isin
entera
a MO& . 1
7
K
4uma $ resta a7.
aK.
1>
D
%o.a: en algunas +ariantes de (asic $ en otros lenguajes de programacin0 la di+isin de un
entero entre otro se realiza siempre como una di+isin entera0 desechando los decimales.
,am.iHn e2isten 5unciones que pueden aplicarse a las +aria.les numHricas como-
ABS)a+: da el +alor a.soluto de NaO.
I%T)a+: da la parte entera de NaO.
S=R)a+: calcula la ra<z cuadrada de NaO.
8> La in$.r/ccin IF
La instruccin IF es la que nos permite lle+ar a ca.o la toma de decisiones en un programa.
,iene dos +ariantes-
IF $im!e: 5unciona de la siguiente 5orma-
IF con3icin T?E%
nstruccin 1
nstruccin 9
...
E%D IF
Las instrucciones 10 90 etc.0 se realizan cuando la con3icin se cumple (es cierta#. En
caso contrario no se realizan.
IF com/e$.o: 5unciona de la siguiente 5orma-
IF con3icin T?E%
nstruccin 1a
nstruccin 9a
...
ELSE
nstruccin 1.
nstruccin 9.
...
E%D IF
En el caso de que la con3icin se cumple0 se realizan las instrucciones 1a0 9a0 etc.0 $
en caso contrario se realizan las instrucciones 1.0 9.0 etc.
3ormas de indicar la condicin-
Con3icin ) < @7 A < -7 a4 < BSIC+ Re$/!.a3o
p P q 6erdadero
p Q B 3also
(p 7 q# R 1B 6erdadero
q PR > 6erdadero
q QR > 6erdadero
aS QP N)OO 6erdadero
)O,(p Q B# 6erdadero
aS R N4O O" aS R NsiO 6erdadero
(p P q# !)& (q Q ># 3also
En la ta.la han aparecido los operadores lgicos !)&0 O" $ )O,. 3uncionan de la siguiente
5orma-
con3icin " A%D con3icin #: es 6E"&!&E"O si am.as condiciones son
6E"&!&E"!4 $ en caso contrario es 3!L4O.
con3icin " OR con3icin #D: es 6E"&!&E"O cuando al menos una de las
condiciones es 6E"&!&E"!. Es 3!L4O cuando am.as condiciones son 3!L4!4.
%OT)con3icin+: es 6E"&!&E"O si la condicin es 3!L4!.
Ejem!o- Programa que pide un n=mero $ le suma 1 si Hste es menor que 1B.
CLS
INP-T ;Introd2ce 2n n:mero< 0 n5
I= n5 > 1! THEN
n5 6 n5 7 1
PRINT ;El n:mero ?a sido modi@icado A" a?ora 9aleB< 0n5
END I=
END
Ejem!o- Programa que comprue.a si un n=mero es par o impar.
REC Par o Impar
INP-T ;Introd2ce 2n n:mero< 0 n5
resto5 6 n5 CDD 2
I= resto5 6 ! THEN
PRINT ;El n:mero<0n50<es par<
ELSE
PRINT ;El n:mero<0n50<es impar<
END I=
END
La instruccin REM no produce ning=n e5ecto en el programa0 la utilizamos simplemente
para poner alg=n comentario que nos indique cmo 5unciona o para que sir+e el programa.
Ejercicio: "ealiza un programa que te haga una pregunta $ que si la aciertas te 5elicite0
pero si la 5allas te mande a estudiar.
Ejercicio: "ealiza un programa que calcule la ra<z cuadrada de un n=mero si es positi+o. En
caso contrario de.e a+isar de que no se puede realizar.
A. (ucles.
En programacin un .ucle es una repeticin sucesi+a de una o +arias instrucciones que se
realizan hasta que se cumple una condicin de terminacin. E2isten dos tipos de .ucles-
B/c!e$ 3e con.a3or: realiza unas instrucciones desde que una +aria.le que
denominamos &con.a3or& cumple una condicin de inicio0 hasta que cumple llega a
una condicin de 5inalizacin. &entro del .ucle el contador +a cam.iando de +alor
hasta que se llega a la condicin de 5inalizacin.
,ienen la estructura siguiente-
FOR con.a3or < inicio TO Ein
nstrucciones
%EFT con.a3or
El .ucle comienza en la instruccin FOR en la que la +aria.le contador toma el +alor inicial
&inicio&0 realiza las nstrucciones $ cam.ia (instruccin %EFT#. 4e repite este proceso
hasta que el contador alcanza el +alor que indiquemos en Ein.
)ormalmente0 al contador se le suele asignar una +aria.le entera a la que le damos el
nom.re iT0 jT UT0 pero admite cualquier nom.re de +aria.le siempre que sea de tipo
n5mero en.ero.
Ejem!o: Programa que suma los 1BB primeros n=meros.
CLS
s2ma5 6 !
=DR i561 TD 1!!
REC i5 es el contador
s2ma5 6 s2ma5 7 i5
NEET i5
PRINT "El res2ltado esB"0s2ma5
END
Ejem!o: Programa di.ujar 1GB circun5erencias concHntricas.
SCREEN 12
=DR i561 TD 1*!
REC i5 es el contador A tamFiGn indicara el radio,
REC c5 indica el color A tomara 9alores !" 1 / 2,
c5 6 i5 CDD &
CIRCLE&2!"2(!#"i5"c5
NEET i5
END
Ejem!o: Programa que hace una cuenta atr1s.
SCREEN 12
=DR i561! TD ! STEP $1
REC i5 es el contador 82e" a?ora" 9a ?acia atr3s,
LDC+TE 1!" 1!
PRINT i5
SLEEP 1
NEET i5
END
En este =ltimo ejemplo0 ca.e destacar que hemos utilizado la instruccin STEP ," para
indicar que el contador disminu$a cada +ez una unidad. En los anteriores casos en que no
hemos puesto nada0 el contador aumenta de 1 en 1. Con STEP podemos elegir el "paso" que
queramos (9 en 90 > en >0 K9 en K90 etc.#.
La instruccin LOCATE sit=a el cursor en la posicin '*( (en este caso 2 R $ R 1B# de la
pantalla.
B/c!e$ con3iciona!e$: los .ucles condicionales sir+en para realizar una serie de
instrucciones hasta que se cumple una condicin. 4in em.argo0 a di5erencia del
caso anterior0 esta condicin no es necesario que la cumpla un contadorF puede ser0
por ejemplo0 el pulsado de una tecla.
DO
nstrucciones
LOOP U%TIL con3icin
Ejem!o: Programa que muestra la hora en pantalla hasta que pulsamos la tecla "5".
CLS
DD
a1 6 TICE1
SLEEP 1
LDC+TE 12"&*BPRINT a1
F1 6 INHEI1
LDDP -NTIL F1 6 "@"
END
La instruccin TIME4 nos da la hora del ordenador $0 en este caso0 la asigna a la +aria.le
aS. Por su parte0 la instruccin I%DEG40 detecta si se ha pulsado alguna tecla $0 en este
caso le asigna su +alor a la +aria.le .S.
En muchas ocasiones puede ser mejor que el programa termine al apretar cualquier tecla0
en lugar de una en concreto. En ese caso0 cam.iar<amos la instruccin del 5inal del .ucle
por-
LDDP -NTIL F1 >J ""
Es decir0 hasta que la +aria.le .S es distinta de "" (sin +alor#0 lo cual ocurre al apretar
cualquier tecla $a que est1 accin le asignar1 un +alor di5erente sin +alor.
E. !leatoriedad.
!lgunos procesos0 como lanzar una moneda al aire o tirar un dado0 son 5enmenos
aleatorios0 es decir0 no podemos conocer a priori0 su resultado. Lo =nico que podemos sa.er
es la pro.a.ilidad de que suceda cada resultado posi.le.
En nuestros programas0 introduciremos la aleatoriedad generando n=mero al azar0 es decir0
n=meros cu$o +alor nos dar1 el ordenador pero que nosotros no sa.emos de antemano lo que
+alen.
La instruccin RA%DOMIHE TIMER indica al ordenador que de.e comenzar a generar
n=meros al azar. ! partir de ese momento0 cada +ez que utilicemos la instruccin R%D0
generaremos un n=mero al azar comprendido entre B $ 1. ;a$ que se:alar que el n=mero
generado nunca es e2actamente B ni 1.
Ejem!o: Programa que "simula" el lanzamiento de una moneda al aire.
REC Cara o cr2K
R+NDDCILE TICER
a 6 RND
I= a > !,* THEN
PRINT "Cara"
ELSE
PRINT "Cr2K"
ENDI=
END
Cuando queramos generar n=meros aleatorios ma$ores que 10 tenemos que modi5icar la
instruccin ")&. Por ejemplo0 para simular el lanzamiento de un dado necesitamos n=meros
enteros entre 1 $ A. La instruccin-
a 6 %MRND
generar<a un n=mero aleatorio entre B $ A (nunca B ni A#. El pro.lema es que el n=mero no
ser<a entero. Para trans5ormarlo en entero podr<amos hacer-
a 6 INT%MRND#
Pero esta instruccin nos generar<a n=meros entre B $ G. Para resol+erlo sumamos 1-
a 6 INT%MRND# 7 1
Esto $a nos genera n=mero entre 1 $ A.
C. ,ra.ajo con muchos datos.
I>"> Arra($
En ocasiones un programa requiere que tra.ajemos con muchos datos0 que de.er<amos
almacenar en di5erentes +aria.les0 una por cada dato.
Por ejemplo0 podemos crear un programa para almacenar las horas a las que empieza cada
clase en un colegio $ nos a+ise para dar el tim.re-
CLS
REC +cti9ar TimFre
REC Las ?oras se almacenan como cadena de caracteres
INP-T "Hora de entrada"0?11
INP-T "Seg2nda ?ora"0?21
INP-T "Tercera ?ora"0?&1
INP-T "C2arta ?ora"0?(1
INP-T "N2inta ?ora"0?*1
INP-T "SeOta ?ora"0?%1
INP-T "SGptima ?ora"0?)1
INP-T "Hora de salida"0?P1
i 6 1
DD
?1 6 TICE1
I= ?1 6 ?11 THEN
LDC+TE 12"&*B PRINT "+CTIQ+ TICBRE"
i 6 i 7 1
END I=
I= ?1 6 ?21 THEN
LDC+TE 12"&*B PRINT "+CTIQ+ TICBRE"
i 6 i 7 1
END I=
R
R
I= ?1 6 ?P1 THEN
LDC+TE 12"&*B PRINT "+CTIQ+ TICBRE"
i 6 i 7 1
END I=
F1 6 INHEI1
LDDP -NTIL F1 6 "@" DR i 6 '
END
El programa termina al 5inal del d<a (i R D# o cuando pulsamos "5". En este programa +emos
lo costoso que resulta tra.ajar de esta manera cuando tenemos muchas +aria.les ($ eso que
D no son tantasV#.
Para resol+er esta di5icultad e2isten los Arra($0 que son unas +aria.les pueden almacenar
muchos +alores al mismo tiempo0 siendo cada una de ellas identi5icada por un +alor distinto
de un <ndice.
*n Arra( es0 por tanto0 un elemento que permite almacenar di+ersas 9aria:!e$ 3e! mi$mo
.io.
Para crear un arra$ utilizamos la instruccin DIM indicando0 a continuacin0 el nom.re del
arra$ (con la misma terminacin que el tipo de +aria.les que +a a almacenar# $0 entre
parHntesis0 sin poner espacios tras el nom.re del arra$0 el n=mero de +aria.les que podr1
almacenar. Por ejemplo0 en el caso anterior0 podr<amos crear un arra$ de C +aria.les de tipo
cadena de caracteres de la siguiente 5orma-
DIC ?oras1P#
Con esto0 podr<amos modi5icar el programa anterior haciHndolo m1s compacto-
CLS
REC TimFre a2tom3tico
REC Las ?oras se almacenan como cadena de caracteres
DIC ?oras1P#
=DR i 6 1 TD P
INP-T "Teclea la ?ora"0?oras1i#
NEET i
i 6 1
DD
?1 6 TICE1
I= ?1 6 ?oras1i# THEN
LDC+TE 12"&*B PRINT "+CTIQ+ TICBRE"
i 6 i 7 10
END I=
F1 6 INHEI1
LDDP -NTIL F1 6 "@" DR i 6 '
END
I>#> Leer ( e$cri:ir en arcJi9o$ e'.erno$>
;asta ahora0 los resultados de los programas que hemos realizado se guarda.an en la
memoria mientras el programa se encontra.a en ejecucin0 pero luego se perd<an.
La +entaja de la utilizacin de archi+os e2ternos es que si queremos que los resultados que
producen nuestros programas0 podemos guardarlos en alg=n archi+o de te2to. !dem1s0
tam.iHn podremos hacer que nuestros programas lean los datos desde alg=n archi+o de
te2to $0 de este modo0 no tendremos que teclearlos cada +ez.
Las instrucciones que utilizaremos ara e$cri:ir en un archi+o de te2to ser1n-
OPE% nom:reKarcJi9o FOR OUTPUT AS LnMKarcJi9o: a.re ($ lo crea si no
e2iste pre+iamente# un archi+o con el nom.re especi5icado en nom:reKarcJi9o. Con
la instruccin FOR OUTPUT indicamos que ese archi+o recoger1 los resultados del
programa. La instruccin AS LnMKarcJi9o crea un identi5icador del archi+o para
que0 despuHs0 podamos re5erirnos a Hl de 5orma r1pida $ sencilla.
NRITE LnMKarcJi9o: sir+e para escri.ir en el archi+o especi5icado por el
identi5icador LnMKarcJi9o los resultados del programa.
6eamos un ejemplo que nos permite escri.ir en un archi+o las horas en las que tendr1 que
sonar el tim.re del apartado anterior-
CLS
REC =ic?ero de datos para el timFre a2tom3tico
DPEN "CBSTecnoStimFre" =DR D-TP-T +S T1
i 6 1
DD
INP-T "Teclea la ?ora o p2lsa @"0?1
I= ?1 >J "@" THEN
URITE T1" i" ?1
REC "i" indica el n:mero de ?ora
i 6 i 71
END I=
LDDP -NTIL ?1 6 "@"
CLDSE T1
END
La instruccin CLOSE LnMKarcJi9o cierra el archi+o en el que se han escrito los datos. En
este ejemplo0 se crea un archi+o llamado tim.re dentro de la carpeta ,ecno que se
encuentra en el disco duro (C-#. El .ucle permite ir escri.iendo todas las horas hasta que le
damos la condicin de 5inalizacin (teclear "5"#. La instruccin W",E escri.e los
resultados en un 5ichero que queda de la siguiente 5orma-
Las instrucciones que utilizaremos ara !eer de un archi+o de te2to ser1n-
OPE% nom:reKarcJi9o FOR I%PUT AS LnMKarcJi9o: a.re (el archi+o de.e
e2istir pre+iamente# un archi+o con el nom.re especi5icado en nom:reKarcJi9o. Con
la instruccin FOR I%PUT indicamos que de ese archi+o se leer1n los datos con los
que tra.ajar1 programa. La instruccin AS LnMKarcJi9o crea un identi5icador del
archi+o para que0 despuHs0 podamos re5erirnos a Hl de 5orma r1pida $ sencilla.
I%PUT LnMKarcJi9o* 9aria:!e"* 9aria:!e#: sir+e para leer del archi+o
especi5icado por el identi5icador LnMKarcJi9o las +aria.les incluidas en la lista.
6eamos un ejemplo que lee las horas del archi+o tim.re $ las utiliza para dar el mensaje de
acti+ar el tim.re-
CLS
REC TimFre a2tom3tico con lect2ra de datos eOterna,
REC Las ?oras se almacenan como cadena de caracteres
DIC ?oras1P#
DIC N2mP#
DPEN "CBSTecnoStimFre" =DR INP-T +S T1
i 6 1
DD
INP-T T1" N2mi#" ?oras1i#
i 6 i 71
LDDP -NTIL ED=1##
i 6 1
DD
?1 6 TICE1
I= ?1 6 ?oras1i# THEN
LDC+TE 12"&*B PRINT "+CTIQ+ TICBRE"BSLEEP 1*
i 6 i 7 10
END I=
F1 6 INHEI1
LDDP -NTIL F1 6 "@" DR i 6 '
CLDSE T1
END
Mediante el primer .ucle (DO O LOOP U%TIL )EOF)"++#0 el programa lee0 el n=mero de
hora $ las horas del archi+o tim.re $ las guarda en los arra($ )um $ horasS. La condicin
de 5inalizacin del .ucle utiliza la 5uncin EOF)nMKarcJi9o+ que da el +alor 6E"&!&E"O
cuando se llega al 5inal del archi+o que se est1 le$endo0 de 5orma que0 en ese momento0
termina la lectura de datos.
El segundo .ucle (DO O LOOP U%TIL :4 < &E& OR i < P# consulta continuamente la hora
mediante J4 < TIME4 $ la compara con la primera hora almacenada en el arra$ (o.ser+a
que0 al entrar al .ucle0 i < "#.
Cuando coinciden las dos horas XJ4 < Jora$4)i+Y0 se da el mensaje de acti+ar el tim.re $
aumenta el +alor de i. &e esta 5orma0 la siguiente comparacin se realizar1 entre la segunda
hora almacenada en el arra$ (i < ## $ la hora actual. 4i se pulsa &E& o $a no ha$ m1s clases (i
< P#0 el programa sale del .ucle $ termina.
I>-> S/:r/.ina$>
En algunas ocasiones0 ha$ algunas operaciones que queremos realizar muchas +eces $ para
realizarlas0 hemos de realizar0 cada +ez +arias operaciones complicadas. Por ejemplo0
podemos crear un programa que di.uje un c<rculo situado cada +ez en di5erentes
posiciones. Con este 5in0 nos interesar<a tener un miniprograma que haga la operacin de
crear un circun5erencia $0 que cada +ez que queramos hacer una0 nos .aste con hacer una
llamada a este miniprograma. Este tipo de miniprogramas se pueden realizar $ se denominan
$/:r/.ina$.
S/:r/.ina$ $in arg/men.o$
La instruccin que nos permite hacer una llamada a una de estas $/:r/.ina$ es GOSUB
seguido del nom.re de la su.rutina. Por su parte0 la su.rutina es similar a cualquier otro
programa pero de.e comenzar con el nom.re que se le ha$a dado0 seguido de dos puntos0 $
de.e terminar con la instruccin RETUR% que indica que se de.e +ol+er0 una +ez realizadas
todas las operaciones0 al programa principal.
6eamos0 mejor0 el 5uncionamiento de las $/:r/.ina$ con un ejemplo-
Ejem!o: programa que di.uja un c<rculo amarillo utilizando una circun5erencia.
SCREEN 12
VDS-B PELDT+
BEEP WTras diF2Xar la pelota el programa emite 2n pitidoW
END
PELDT+B
CIRCLE1!!"1!!#" 1!" )
P+INT1!!"1!!#" 1(" )
RET-RN
La primera parte0 lo que llamamos programa principal0 lo =nico que hace es llamar a la
$/:r/.ina PELO,!0 que es la encargada de crear un c<rculo de radio 1B p<2eles $ pintarlo de
amarillo. Cuando la su.rutina termina +uel+e ("E,*")# al programa principal $0 entonces0 se
emite un pitido.
S/:r/.ina$ con arg/men.o$
El anterior tipo de su.rutinas es interesante para algunas cosas como di.ujar de 5orma
repetida una 5igura. 4in em.argo0 resulta mucho m1s =til el uso de otro tipo de su.rutinas
que permiten pasar +alores entre el rograma rincia! $ la propia $/:r/.ina.
Para emplear este tipo de su.rutinas0 el programa principal de.e incluir0 antes que
cualquier otra0 la instruccin DECLARE SUB nom:reK$/:r/.ina)!i$.a 3e arg/men.o$+. En
esta e2presin0 nom:reK$/:r/.ina es el nom.re que daremos a la su.rutina $ !i$.a 3e
arg/men.o$ es una serie de +aria.les que en+iamos a la su.rutina0 o .ien que la su.rutina
nos de+uel+e.
En este caso0 para llamar a la su.rutina0 utilizaremos la 5uncin CALL
nom:reK$/:r/.ina)!i$.a 3e arg/men.o$+. 6e1moslo con un ejemplo-
Ejem!o: programa que crea 1B c<rculos amarillos de posiciones $ tama:os aleatorios
utilizando una su.rutina.
DECL+RE S-B PELDT+2O"A"r#
SCREEN 12
R+NDDCILE TICER
=DR i 6 1 TD 1!
O1 6 %&'MRND
O2 6 &)'MRND
r1 6 1*MRND 7 1
C+LL PELDT+2O1" O2" r1#
NEET i
END
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
S-B PELDT+2a1"a2"a&#
CIRCLEa1"a2#" a&" )
P+INTa1"a2#" 1(" )
BEEP
END S-B
En este caso0 el programa principal no aparece junto a la su.rutina. En cuanto escri.amos la
instruccin SUB para comenzar a crear la su.rutina0 el editor nos a.rir1 una nue+a +entana
donde crearla. Para pasar del programa principal a la su.rutina $ +ice+ersa0 hemos de pulsar
"39" $ elegir aquella parte que queramos modi5icar.
El 5uncionamiento de este ejemplo es m1s sencillo de lo que puede parecer. Primero0 en el
programa principal se declara la su.rutina que se +a a utilizar. 4e de.e poner el nom.re $ la
lista de argumentos que +a a utilizar. Imor.an.e- los argumentos que ponemos al declarar
la su.rutina no tienen que tener el mismo nom.re que las +aria.les que se le pase (o.ser+a
que la instruccin C!LL PELO,!9(210 290 r1# no utiliza los mismos nom.re que al declarar la
5uncin#0 pero $0 3e:en $er 3e! mi$mo .io.
El programa hace un .ucle de 1B iteraciones en el que0 cada +ez0 se genera un n=mero
aleatorio entre B $ A>D para la posicin ' (21# $ otro n=mero aleatorio entre B $ >ED para
la posicin ( (29#. !s< mismo0 se genera un +alor aleatorio del radio entre 1 $ 1A.
Estos +alores se le en+<an a la su.rutina que los reci.e en 5orma de sus propias +aria.les
a"* a# $ a-0 que0 de nue+o0 no es necesario que tengan el mismo nom.re que en el
programa principal que en la su.rutina paro s< que sean del mismo tipo.
Con estas +aria.les a"* a# $ a- la su.rutina crea un c<rculo0 lo pinta de amarillo $ emite un
pitido antes de +ol+er al programa principal0 en el que el .ucle contin=a hasta que se
realizan 1B iteraciones.
QPor A/; .an.o !0o con e! nom:re 3e !a$ 9aria:!e$R es decir0 Zpor que no utilizar siempre
el mismo nom.re[ ;a$ dos razones-
1. Por un lado0 la razn de que en el programa principal $ en la su.rutina las +aria.les
tengan nom.res di5erentes es que las su.rutinas se pueden crear de 5orma
independiente a los programas para luego se utilizados por +arios de ellos. Es decir0
puedo crear una su.rutina0 guardarla $0 despuHs0 esa misma su.rutina utilizarla con
muchos programas. &e este modo0 cada +ez que creamos un programa que +a$a a
utilizar la su.rutina es su5iciente con sa.er el tipo de argumentos que utiliza $ no
su nom.re e2acto.
9. El hecho de que en la declaracin $ en la llamada los nom.re de las +aria.les puedan
ser di5erentes es de.ido a que0 en ocasiones nos puede con+enir utilizar
instrucciones como esta-
=DR i 6 1 TD 1!
C+LL PELDT+2i"i"iMi#
NEET i
que genera c<rculos en las posiciones (2R10$R1#0 radio R 1F (2R90$R9#0 radio @0 $ as<
sucesi+amente. !l no crear una +aria.le para ' $ otra para ( cada +ez0 ahorramos
espacio de memoria $ tiempo de ejecucin.
En cualquier caso0 si no nos entendemos .ien con di5erentes nom.res0 utilizaremos siempre
el mismo.
Ejem!o: programa que ordena tripletes de n=meros.
DECL+RE DRDEN+O1"O2"O&#
REC O1" O2 A O& ser3n los n:mero de entrada sin ordenar
REC La s2Fr2tina de9ol9er3 en O1" O2 A O& los n:meros ordenados de
REC menor a maAor
INP-T "Dame 2n n:mero"0O1
INP-T "Dame otro n:mero"0O2
INP-T "Dame otro m3s"0O&
C+LL DRDEN+O1" O2" O&#
LDC+TE 12" &*B PRINT O10">"0O20">"0O&
END
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
S-B DRDEN+a1"a2"a&#
DIC +&#
+1# 6 a1
+2# 6 a2
+&# 6 a&
=DR i 6 1 TD &
=DR X 6 1 TD i
I= +X# J +i# THEN
amin 6 +i#
+i# 6 +X#
+X# 6 amin
END I=
NEET X
NEET i
a1 6 +1#
a2 6 +2#
a& 6 +&#
END S-B
8.4. G/ar3ar imSgene$ en memoria>
6ol+iendo al programa que di.uja.a una pelota por medio de una su.rutina0 +amos a +er
cmo podemos conseguir que el di.ujo se guarde en la memoria. Para ello0 hemos de
reser+ar una cantidad de memoria $ guardar el di.ujo en la misma. Estudiemos el ejemplo-
SCREEN 12
DIC Fola52!!!#
VDS-B PELDT+
VETPP"PP#$112"112#" Fola5
CLS
END
PELDT+B
CIRCLE1!!"1!!#" 1!" )
P+INT1!!"1!!#" 1(" )
RET-RN
G/ar3ar e! 3i:/jo en !a memoria
La instruccin DIM :o!a6)#TTT+ reser+e 9BBB posiciones de memoria (9BBB .$tes# para
guardar el di.ujo $0 a ese espacio "reser+ado" le denomina :o!a60 para0 m1s tarde0 poder
hacer re5erencia e Hl.
*na +ez reser+ada la memoria0 $ con el di.ujo en pantalla0 se recorta $ quarda en la
memoria del ordenador. Para ello se utiliza la instruccin GET)'"*("+,)'#*(#+* :o!a6. Esta
instruccin recorta un rect1ngulo (que de.e englo.ar al di.ujo# de e2tremo superior
izquierdo )'"*("+ $ e2tremo in5erior derecho )'#*(#+ $ lo guarda en :o!a6 u otro nom.re
que especi5iquemos a continuacin del segundo +Hrtice.
L!e9ar e! 3i:/jo 3e !a memoria a !a an.a!!a
Para +er cmo podemos lle+ar un di.ujo guardado en la memoria a la pantalla0 analicemos el
siguiente ejemplo-
SCREEN 12
DIC Fola52!!!#
VDS-B PELDT+
VETPP"PP#$112"112#" Fola5
CLS
=DR A 6 1 TD 2!!
P-T2!!"A#" Fola5" pset
VDS-B RET+RDD
NEET A
END
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
PELDT+B
CIRCLE1!!"1!!#" 1!" )
P+INT1!!"1!!#" 1(" )
RET-RN
RET+RDDB
=DR i 6 1 TD 1!!!!
i 6 1 7 1
NEET i
RET-RN
En este ejemplo0 el programa principal0 en primer lugar crea una pelota amarilla (instruccin
GOSUB# $ la guarda en la memoria con el nom.re de :o!a6 (instruccin GET#.
*na +ez guardada la pelota0 el programa entra en un .ucle que utiliza la instruccin
PUT)#TT* (+* :o!a6* $e.. Esta instruccin lo que hace es situar el o.jeto guardado con el
nom.re :o!a6 con su +Hrtice superior izquierdo en la posicin ('<#TT* (#. !:adir $e. al
5inal sir+e para que0 en su desplazamiento0 la pelota no .orre el 5ondo de la pantalla (si
quieres entender mejor quH signi5ica esto0 prue.a el programa con $ sin $e.#. Como ( +a
cam.iando0 la pelota ir1 .ajando en la pantalla.
La llamada a la su.rutina RETARDO lo =nico que hace es perder el tiempo para que la pelota
no +a$a tan r1pida.
A;n3ice I: Ejercicio$>
1# "ealiza un programa que di.uje los aros ol<mpicos.
9# Modi5ica el programa anterior para que los aros salgan uno tras otro.
># "ealiza un programa que calcule la intensidad de corriente que atra+iesa una
resistencia a partir del +alor de la misma $ del +oltaje entre sus e2tremos. &ise:a
antes de escri.ir el programa en (asic el correspondiente diagrama de 5lujo.
("ecuerda ( R 6/" ##.
@# "ealiza un programa que te haga una pregunta $ que si la aciertas te 5elicite0 pero si
la 5allas te mande a estudiar.
G# "ealiza un programa que calcule la ra<z cuadrada de un n=mero si es positi+o. En
caso contrario de.e a+isar de que no se puede realizar.
A# "ealiza un programa que realice una cuenta atr1s pero que nos pida los +alores de
tiempo inicial $ 5inal.
E# Crea un programa que controle el 5uncionamiento de un sem15oro (que cam.ie entre
+erde0 rojo $ amarillo# $ que emita pitidos para a+isar a las personas ciegas de que
pueden cruzar.
C# Crea un programa que nos muestra la hora en pantalla $ que 5inalice al pulsar
cualquier tecla.
D# Crea un programa que genere 1BB puntos situados aleatoriamente en la pantalla $
cu$o color tam.iHn sea generado al azar.
1B# "ealiza un programa que simule el lanzamiento de un dado.
11# Modi5ica el programa anterior para almacenar en un arra$ de A posiciones el
n=mero de +eces que sale cada n=mero (de 1 a A# cuando lanzamos el dado GBB
+eces.
19# "ealiza un programa que almacene en un arra$ de 99 posiciones los nom.res $
apellidos de los alumnos de @\ de E4O $ en otro sus edades.
1># Modi5ica el programa anterior para que los nom.res $ las edades se guarden en un
archi+o de te2to ()om.re !pellido1 !pellido90 Edad#.
1@# Crea un programa que lea el archi+o de te2to anterior con los nom.res $ las edades
$ escri.a en otro archi+o de te2to di5erente el nom.re $ los apellidos de los
alumnos junto con su asignatura pre5erida (que tendr1 que preguntar el programa#.
1G# Crea un programa que genere >BB n=meros al azar entre B $ 1BBB $ los escri.a en
un archi+o de te2to llamado numaleat.t2t de tres en tres (210 290 2>#.
1A# *tilizando la su.rutina O"&E)!0 crea un programa que lea el archi+o numaleat.t2t0
que ordene los tr<os de n=meros $ los guarde de nue+o0 ordenados0 en un archi+o
llamado ordenados.t2t.
1E# Mediante modi5icaciones en el programa de la pelota en mo+imiento0 crea un nue+o
programa en el que dos pelotas se mue+an seg=n las diagonales de la pantalla $ se
crucen en el centro.
A;n3ice II: g!o$ario 3e in$.r/ccione$
! continuacin se muestra un listado de las instrucciones m1s utilizadas en ?(asic con una
.re+e descripcin de su 5uncin.
Este glosario es =nicamente una re5erencia de consulta r1pida para aquellos usuarios que se
hallan 5amiliarizado $a un poco con el uso de las di5erentes instrucciones. Las e2plicaciones
m1s detalladas se pueden encontrar a lo largo del documento.
BEEP: el programa emite un pitido.
CALL nom:reK$/:r/.ina)!i$.aKarg/men.o$+: llama a la su.rutina con el nom.re
especi5icado por nom.re]su.rutina0 en+i1ndole las +aria.les que sir+en de
argumentos especi5icados en la lista de argumentos. Estas +aria.le pueden ser
modi5icadas o no en la su.rutina antes de ser de+ueltas al programa principal.
CLS: .orra la pantalla.
CIRCLE)'*(+* r* co!or: di.uja una circun5erencia de radio r con centro en el punto
)'*(+ $ del color especi5icado en color.
CLOSE LnMKarcJi9o: cierra el archi+o correspondiente al identi5icados dado por
n\]archi+o.
DECLARE SUB nom:reK$/:r/.ina: declara la su.rutina que ser1 utilizada en el
programa principal.
DIM nom:reKarra().amaUo+: declara un arra$ de tantas +aria.les como
especi5iquemos en tama:o.
DO
roce$o$
LOOP U%TIL con3icin
"ealiza iterati+amente las instrucciones que 5iguran en la lista de procesos hasta
que se cumple la condicin de 5inalizacin.
E%D: indica 5inal de programa.
E%D SUB: indica 5inal de su.rutina.
EOF)nMKarcJi9o+: comprue.a si el archi+o correspondiente al identi5icador
n\]archi+o a llegado a su 5inal.
FOR con.a3or < inicio TO Ein STEP a$o
roce$o$
%EFT con.a3or
"ealiza iterati+amente las instrucciones que 5iguran en la lista de procesos desde
que el contador tiene el +alor de inicio hasta que toma el +alor 5inal0 aumentando o
disminu$endo Hste en cada iteracin tantas unidades como especi5iquemos en paso.
IF con3icin T?E%
roce$o$
E%D IF
"ealiza las instrucciones que 5iguran en la lista de procesos si se cumple la
condicin.
IF con3icin T?E%
roce$o$ $i 9er3a3ero
ELSE
roce$o$ $i Ea!$o
E%D IF
"ealiza las instrucciones que 5iguran en la lista de procesos si +erdadero si se
cumple la condicin0 $ en caso contrario se lle+an a ca.o las instrucciones que
5iguran en la lista procesos si 5also.
GET)'"*("+,)'#*(#+* nom:re]o:je.o- guarda un di.ujo0 comprendido en el
rect1ngulo de +Hrtice superior izquierdo (210$1# $ +Hrtice in5erior izquierdo (290$9#0
con el nom.re nom.re]o.jeto.
GOSUB nom:reK$/:r/.ina: llama a la su.rutina especi5icada por nom.r]su.rutina.
I%DEG4: lee el +alor de la tecla que pulsemos.
I%PUT &Men$aje&7 V!i$.aK9aria:!e$W: muestra en pantalla la cadena de te2to
incluida en Mensaje $ lee los +alores de las +aria.le incluidas en lista]+aria.les.
I%PUT LnMKarcJi9o* !i$.aK9aria:!e$: lee las +aria.les incluidas en
lista]+aria.les del archi+o correspondiente al identi5icador n\]archi+o.
LI%E)'"*("+,)'#*(#+* co!or: di.uja una l<nea del color especi5icado por color
entre los puntos (210$1# $ (290$9#.
LOCATE '*(: situa el cursor en la posicin (20$# de la pantalla.
OPE% nom:reKarcJi9o FOR OUTPUT AS LnMKarcJi9o: a.re un archi+o con el
nom.re especi5icado0 cre1ndolo en caso de que no e2ista pre+iemente0 para
escritura $ le asigna un identi5icador para poder hacer0 m1s tarde0 re5erencia a Hl.
OPE% nom:reKarcJi9o FOR I%PUT AS LnMKarcJi9o: a.re un archi+o con el
nom.re especi5icado0 para lectura $ le asigna un identi5icador para poder hacer0
m1s tarde0 re5erencia a Hl.
PAI%T)'*(+* !imi.e* co!or: pinta del color especi5icado por color el relleno de la
5igura que tenga como punto interior (20$# $ su .orde lo pinta del color especi5icado
por limite.
PRI%T &Men$aje& X PRI%T V!i$.a 3e 9aria:!e$W: muestre en pantalla la cadena de
te2to incluida en Mensaje $/o una serie de +aria.les. Los mensajes $ las +aria.les
se pueden intercalar separando unos de otras por medio de "F".
PSET)'*(+* co!or: di.uja un punto del color especi5icado por color en la posicin
(20$#.
PUT)' (+* nom:reKo:je.o* $e.: muestra un di.ujo guardado en memoria con el
nom.re nom.re]o.jeto0 coloc1ndolo en la posicin (20$#. La opcin pset e+ita que el
o.jeto .orre el 5ondo de la pantalla.
RE%DOMIHE TIMER: inicializa el generador de n=meros aleatorios.
REM comen.ario: se utiliza para escri.ir comentarios0 que no tendr1n ninguna
in5luencia en el programa0 que nos a$udar1n a comprender su 5uncionamiento.
RETUR%: indica que una su.rutina que no admite argumentos ha terminado $ ha de
+ol+er al programa principal.
R%D: genera un n=mero aleatorio entre B $ 1.
SCREE% "#: esta.lece la de5inicin de pantalla en A@B2>@B p<2eles $ 1G colores.
SLEEP .: detiene el programa durnante t segundos.
SUB nom:reK$/:r/.ina)!i$.aKarg/men.o$+: indica el inicio de la su.rutina
nom.re]su.rutina que utiliza $ de+uel+e las +aria.les incluidas en lista]argumentos.
TIME4: lee la hora del ordenador en 5ormato cadena de caracteres.
NRITE LnMKarcJi9o* !i$.aK9aria:!e$: escri.e en el archi+o de te2to
correspondiente al identi5icador n\]archi+o las +aria.les incluidas en
lista]+aria.les.