Tutorial 0.0 de programación ::
Un programa es una serie de
instrucciones lógicamente combinadas que le dicen a la computadora
que hacer para luego obtener el resultado esperado.
La base
de todos los lenguajes de programación está en como pensamos las
cosas los seres humanos, así los programas pueden tomar decisiones,
hacer muchas veces una tarea, hacer cálculos, etc.
Un primer
ejemplo es cuando una persona está en frente a un semáforo, y tiene
que decidir si avanza o se queda parado dependiendo del color de la
luz del semáforo. Claro, como el pensamiento es mínimo a veces ni
siquiera registramos que estamos ante una situación de decisión, y
como lo hacemos millones de veces no le prestamos importancia, pero
las computadoras son tontas, hay que decirles las cosas que queremos
en extremo detalle, si no, el programa no funcionará de la manera
esperada. Volviendo al semáforo, un posible pensamiento
es:
SI la luz es verde ENTONCES, avanzo
SI NO, me quedo
quieto.
Cuando hacemos un programa, esta situación es muy
común, la de tener que decidir entre varias opciones para luego
llevar a cabo determinada acción. Por lo común de esta situación
todos los lenguajes de programación ofrecen una forma simple y muy
parecida al lenguaje natural para resolverla, y como los lenguajes
en su mayoría están hechos en ingles, las sentencias del lenguaje
van a ser parecidas al lenguaje natural pero en ingles, así la
situación del semáforo, se resuelve por los lenguajes con la palabra
IF (SI condicional en ingles), también hay sentencias para ENTONCES
(THEN en algunos lenguajes) y SI NO ( ELSE ),
concretamente:
En lenguaje Pascal:
IF ( la luz es verde ) THEN avanzo
ELSE me quedo
quieto;
En lenguaje C/C++:
IF ( la luz es verde ) { avanzo; }
ELSE { me quedo
quieto; }
Observemos que a lo que se le aplica el
IF es una frase que es verdadera o falsa, en realidad nunca decimos
"SI ¿que hora es?" o "SI el teléfono", tanto "¿qué hora es?" y "el
teléfono" son frases que no tienen valor de verdadero o falso,
también se llaman sentencias lógicas o expresiones Booleanas, más
adelante veremos que son y como se usan las expresiones Booleanas,
por ahora sabemos que son verdaderas o falsas.
Otra vez en el
semáforo, nosotros miramos el semáforo una vez y nos hacemos la
pregunta del color de la luz unas sola vez y luego cerramos los
ojos, estamos viendo constantemente (o por lo menos cada tanto) al
semáforo para ver si cambió de luz, para poder cruzar o para
apurarme si estoy en el medio de la calle y cambia a rojo. Si solo
hacemos una pregunta y la luz estaba roja podríamos no cruzar
nunca!. El pensamiento que llevamos a cabo se puede expresar
así:
(En el caso que la luz esté roja y no pueda
cruzar)
MIENTRAS la luz está roja, espero (hasta que esté
verde).
luego cruzo.
(En el caso que la luz esté
verde, puedo cruzar)
MIENTRAS la luz está verde, doy un paso
(digamos que camino paso a paso).
SI estoy en la calle ENTONCES
me apuro (cambió la luz a roja).
Esta situación se ve en
muchas cosas del mundo real, mientras pasa algo hago otra cosa,
"mientras no me canse sigo corriendo", "mientras gane sigo
apostando", "mientras no engorde como torta", etc. Esta situación es
también muy común en la programación, por lo tanto también tiene una
solución dada por los lenguajes para manejarla. Con el semáforo
queda así:
Pascal:
WHILE (la luz está
roja) DO espero;
cruzo la calle;
C/C++:
WHILE (la luz está roja) { espero; }
cruzo la
calle;
Pascal:
WHILE (la luz
está verde) DO doy un paso;
IF (estoy en la calle) THEN me
apuro;
C/C++:
WHILE (la luz
está verde) { doy un paso; }
IF (estoy en la calle) { me apuro;
}
(while = mientras, DO = hacer)
Podemos
observar que el WHILE también es aplicado sobre una frase que es
verdadera o falsa, como el IF. Se dice que WHILE es un bucle o loop,
ya que si la frase que evalúa da verdadero, la acción (esperar o dar
un paso en este caso) se hace varias veces, una por cada vuelta del
bucle.
En le caso que no tenga tiempo para esperar si el
semáforo está en rojo, solo quiero esperar 10 segundos en él para
ver si cambia, si lo hace cruzo, si no tomo otra dirección (sigo
caminando).
En lenguaje natural sería:
PARA los
segundos, empiezo a contar desde cero, si es menor que 10 espero y
cuento el siguiente segundo, si no sigo caminando en otra
dirección.
Veamos como queda en un lenguaje de
programación, es un poco más difícil que lo
anterior:
Pascal:
FOR segundos := 1 to
10 DO (* Cuento los segundos de 1 a 10
*)
BEGIN
espero; (* Espera 1 segundo
*)
END;
sigo caminando en otra
dirección;
C/C++:
FOR
(segundos=1; segundos<=10; segundos++)
{
espero; // Espera 1 segundo
}
sigo
caminando en otra dirección;
Podemos notar que en
C/C++ la sentencia FOR (para) es mucho más complicada de entender
que la de Pascal, lo que significa es que para los segundos
comenzando desde uno se hace "espero", luego que termina esa acción
se suma uno a los segundos (segundos++ equivale a segundos =
segundos + 1), y por último se fija si el nuevo valor de segundos es
menor o igual que 10, vemos que en cada vuelta se suma 1 así que en
10 vueltas va a terminar. Vuelta equivale a bucle o loop, como el
WHILE, el FOR es un bucle o loop FOR.
Observemos también que
el ejemplo no pregunta si la luz cambió dentro de los 10 segundos,
se hizo a propósito para simplificar, luego veremos un ejemplo
completo.
Paso a paso, el BEGIN de Pascal es equivalente al
"{" de C/C++ y el END equivale al "}" de C/C++, estas sentencias
indican donde comienza y termina el área que es afectada por el FOR,
en los ejemplos anteriores agregué a propósito los "{ }" en los IF
de C/C++, ya que tanto en C/C++ como en Pascal sirven para decir lo
que es afectado por todas las sentencias IF, WHILE, FOR y las que
veremos luego.
Por ahora vimos lo más básico de la
programación pensando en lenguaje natural, más adelante veremos más
cosas de los lenguajes y cuando tengamos una base comenzaremos a
programar.
Pablo Pazos
25/04/2005