Escolar Documentos
Profissional Documentos
Cultura Documentos
Ok, ok. Sabemos que el ttulo de este tutorial es tremendamente sensacionalista, algo extremo y har que
ms de alguno no quiera hacer click en el vinculo Leer ms, pero nos arriesgaremos.
Dando vuelta por Internet, nos dimos cuenta de que, a pesar de estar lleno de manuales sobre lenguajes de
programacin (C, C++, Java, PHP, ASP, .NET, etc), muy pocos sitios se enfocan a dar informacin para las
personas que les interesa adentrarse en el mundo de la programacin y desean saber como hacerlo y por
donde partir.
Es por esto que hoy, con el apoyo de nuestro buen Topher, damos inicio a una saga polmica y
complicada que esperamos hacer muy completa y lo ms simple que se pueda sobre como aprender a
programar, desde una introduccin con los conceptos ms bsicos hasta entrar de lleno a la programacin en
s.
Lo que buscamos en el fondo es que quienes esten interesados, a travs de estas guas puedanaprender a
programar y no solo aprender a hacer programas.
Estn listos?, el viaje es largo y hoy solo es la primera parada, as que busquen algo para comer, para
tomar, armen una mochila de campamento y empaquen un par de calcetines, ya que nadie sabe lo que nos
espera por delante.
Toda la informacin, como siempre (y si se atreven), despus del salto.
Antes de comenzar, para dejar todo bien claro:
Nota: En Como Lo Hago no somos ni grus ni profesionales de la programacin, por lo que no nos
atreveramos a ofrecer estas guas como un mtodo seguro llame sha, 100% garantizado, un abdomen ms
plano en 7 das ni infalible. No utilizamos ninguna gua ni manual oficial para redactar esto, pero lo haremos lo
ms completo posible, a partir de las experiencias personales de como aprendimos a programar e
intentaremos traspasar todo eso en las siguientes lneas, por lo que estn en todo su derecho de disputar los
contenidos de este y los tutoriales siguientes y obviamente de seguir sus propios mtodos si los estiman
convenientes.
Con eso claro, veamos lo que cubriremos en la primera parte de este tutorial:
Contenidos:
1.
Qu es la programacin?.
2.
3.
4.
Puede parecer poco, pero creanme que no lo es. As que ya con todo eso definido, no hay ms excusas,
vamos. Esto es como andar en bicicleta, una vez que se aprende nunca se olvida.
1.- Qu es la programacin?
Hum que pregunta ms amplia. La verdad es que definir que es la programacin puede enfocarse desde
una serie de aspectos: Desde uno netamente tcnico hasta uno ms abstracto o conceptual, pero veamos.
Mirandolo desde un aspecto netamente tcnico o computacional, la programacin es la realizacin de
programas (dah!), es decir, la realizacin de una serie de instrucciones que interactuarn tanto con el
hardware de nuestro computador, como con otras aplicaciones y/o el usuario que las maneje.
En aspectos ms simples an, al programar en la mayora de los casos lo que hacemos queda tan reducido
como a preparar una serie de instrucciones y operaciones que nos permitan hacer una recoleccin de datos,
operar con esos datos de alguna forma y luego presentar una serie de resultados producto de esas
operaciones.
Y finalmente mirandolo desde un aspecto ms conceptual, la programacin se refiere netamente a la
resolucin de problemas. Cuando programamos lo que queremos hacer es otorgar una solucin a una
inquietud, abordando aquel problema desde distintos puntos de vista hasta encontrar la respuesta ms ptima
y/o efectiva. De a poco iremos comprendiendo ms esta definicin.
En los computadores, todo se maneja a base de nmeros binarios (1s y 0s), por lo que cuando por ejemplo
queremos realizar una suma, nuestro equipo no entiende si le decimos suma 2 + 2 sino que entendera una
instruccin o serie de instrucciones en binario que le permita realizar la operacin. Por eso cuando nosotros
programamos, lo que hacemos es crear un intermediario entre el usuario que usa un lenguaje real y nuestro
equipo que utiliza un lenguaje de mquina.
Cmo hacemos esto?, bueno muy fcil (aunque no tanto): Los entornos de programacin (tema que
abordaremos ms adelante en detalle) se encargan de realizar esa traduccin de lenguaje real a lenguaje de
mquina de las instrucciones que programamos y luego de vuelta la traduccin de lenguaje mquina a
lenguaje real de los resultados de las operaciones. As que cuando vemos el resultado 4 en pantalla es que
nuestro equipo ha mandado el mensaje en binario y ha sido traducido por el programa que hicimos.
Hasta ahora hemos visto conceptos algo complejos, pero no se preocupen, de a poco se irn entendiendo y
en el fondo si no llegan a entender eso no limitar su capacidad de programacin.
Bueno tiempo.
Hablando un poco ms en serio, podemos definir las necesidades en 2 tipos: las fsicas y laspersonales.
a) Necesidades fsicas:
Fsicas?, Say what?, Es un concurso de popularidad?. No, en verdad por necesidades fsicas nos
refermos de cierta forma a implementos reales o computacionales que se utilizarn para empezar a
programar. Para las primeras guas solo necesitaremos de nosotros mismos y a lo ms una hoja de papel y un
lpiz. (para jugar al gato en los ratos de ocio. No, ya vern porque). Eventualmente cuando nos adentremos
ms necesitaremos de estas cosas:
1.
2.
3.
Como pueden apreciar, no necesitamos nada de otro mundo. Son cosas que estn accesibles a solo unos
clicks de distancia (a menos que no tengan computador, ya que no pueden ir clickeando por la vida para
comprarse uno. O sea pueden, pero cuesta ms). Pero en todo caso no se preocupen por esos tems an, ya
lo veremos con ms calma cuando sea necesario.
b) Necesidades personales:
Personales es un trmino que utilizamos con bastante cuidado, ya que en verdad a lo que nos referimos es a
una serie de caractersticas y habilidades (natas y/o adquiridas) personales que ayudan mucho en el
aprendizaje. Si bien el no tener alguna de estas puede que termine por no ser un impedimento si sirve de
mucho tenerlas. Nos referimos a:
1.
Paciencia, y mucha: Y hacemos mucho hincapi en este punto, por eso lo hemos puesto al tope de
la lista. La programacin puede llegar a ser muy frustrante y en muchas ocasiones podemos
quedarnos pegados por un buen rato en la busqueda de una solucin a un problema, por muy
2.
pequeo que sea. Ms adelante daremos algunos consejos sobre esto. Lo importante es tener
paciencia y entender que siempre hay baches en el camino, por muy buenos que lleguemos a ser.
Perseverancia: Va ligado netamente al punto anterior. En la programacin siempre hay que ser
perseverante para poder lograr los objetivos que nos proponemos. En muchas ocasiones nos
encontraremos con distintos problemas que van desde: no saber como afrontar un problema, hasta
bloqueos mentales o desconocimiento. Saldremos adelante solo siendo perseverantes y solo
continuando cuando pensemos que ya debemos tirar la esponja. Estas ltimas 2 cualidades es lo
que separa a los buenos programadores de los malos. No los conocimientos de lenguajes, sino la
3.
4.
situacin desde otro lado. En ms de alguna ocasin con esto obtendremos mejores soluciones que
las que habiamos pensado originalmente.
Pensar lgica y bsicamente: Algn tiempo atrs, cuando estaba en la universidad, un profesor nos
dijo Seores, les contar algo que nadie se ha atrevido a decirles hasta ahora: Estas mquinas que
estn frente a Uds. que son conocidas mundialmente como computadores capaces de hacer cosas
que la mente humana no puede, son en verdad tremendamente bsicas y tontas. Curioso, no?. Es
una tremenda verdad. Los computadores son mquinas tremendamente estpidas que saben
realizar solo un par de operaciones bsicas como cargar, grabar o sumar. Todo lo dems que
pueden hacer es, o bien una combinacin de esas operaciones, o el producto de otros
programadores que han desarrollado aplicaciones que les permiten a estas mquinas realizar otros
trabajos. A qu vamos con esto?, a que siempre hay que tener presente lo bsico de la forma de
pensar de los computadores cuando programamos y por eso muchas veces debemos pensar igual
de bsico que ellos. Cuando necesitamos encontrar una solucin, debemos enfrentar la situacin
como un computador lo hara sin saber otro tipo de informaciones que nosotros sabemos y debemos
5.
6.
mismo camino hecho para agregar cosas que deberan haber estado ah.
Conocimientos matemticos: Si bien no es extremadamente necesario y no necesitamos ser unos
magos de los nmeros, ya que hoy con Internet tenemos acceso a la informacin de manera rpida y
sencilla, si es bueno tener nociones matemticas sobre operaciones, conocimientos algebraicos,
7.
Es por esto que en las carreras relacionadas con el rea de la computacin e informtica, previo a la
programacin siempre nos pasan (muchas veces odiandolo y sin entender bien porque) Clculo y lgebra. El
primero nos ensea a expandir la mente y mirar los problemas desde distintos puntos y el segundo nos
ensea a establecer una estructura de pensamiento. As que ya saben, a dejar de odiar a esos viejos
pelados (referencia personal?) que nos llenan de funciones, sistemas de ecuaciones y grficos.
Y finalmente un detalle a siempre tener en consideracin: En la programacin, siempre hay ms de una
forma de resolver los problemas.
descubrir como funcionan las cosas y como se resuelven los problemas. Para hacer esto hay una serie de
formas y mtodos, pero en el fondo debemos encontrar el que ms nos acomode. Desde sentarnos en la
vereda y ver como un conductor est haciendo funcionar su automvil hasta abrir la calculadora de Windows y
ver como es el modo de interpretar una operacin que le indiquemos realizar. No necesitamos intentar
descifrar el procedimiento exacto y detallado, si no que plantearnos esas inquietudes y ver como funcionan.
Por ejemplo, cuando le decimos a la calculadora de Windows que realice una suma y le damos los datos, esta
lo que hace es leer los datos que le dimos, interpretar cuales son nmeros y cuales signos. En base al signo,
ve la factibilidad de realizar la operacin y la hace. As de simple.
Una vez que empecemos a entrenar nuestra forma de pensar de esa manera, podemos empezar a entrar a
cosas mucho ms concretas como el punto que viene a continuacin.
Veamos un ejemplo, les parece?, ya que despus de tanta teora vamos a marearnos un poco. Viendo la
misma historia antes mencionada, intentemos hacer un algoritmo (bsico) de como haramos un huevo frito:
Algoritmo para hacer un huevo frito:
1.
Voy a la cocina.
2.
3.
4.
5.
6.
7.
Lo fro.
Me lo como.
Si bien tenemos los pasos bsicos establecidos de forma correcta, podemos empezar a ver de que nuestro
algoritmo tiene ciertas fallas, como por ejemplo: Qu pasa si no hay huevos?, Qu pasa si no hay aceite?,
Qu pasa si no hay gas?. Pueden ser preguntas y respuestas algo bsicas, pero reflejan lo que decamos de
plantearnos supuestos. Cuando programamos siempre tenemos que cubrir todos los aspectos necesarios, ya
que por muy bien que conozcamos nuestro programa, el usuario puede no saberlo todo, y es por esto que
debemos estar preparados para cubrir cualquiera de estas situaciones. Una versin mejorada del algoritmo
sera:
Algoritmo para hacer un huevo frito 2.0:
1.
2.
Voy a la cocina.
Veo si hay huevos en el refrigerador.
3.
4.
5.
6.
7.
8.
matemtica, en realidad para todo. Siempre que hay un problema, hay un algoritmo que se pueda realizar
para encontrar la solucin.
As que los instamos a practicar un poco este tema, mientras nosotros vamos desarrollando la que ser la
segunda parte de esta gua para aprender a programar y no morir en el intento.
Por ahora lo dejaremos hasta aqu, ya que hemos cubierto los aspectos ms bsicos y necesarios y han ledo
bastante. Es momento de descansar la vista un poco y seguir pensando, que es la mejor prctica posible.
En la prxima edicin de Como aprender a programar y no morir en el intento:
1.
2.
Introduccin al Pseudo-cdigo.
3.
Con las Fiestas Patrias ya quedando atrs, y luego de una tonelada algunos tutoriales de cocina que les
dejamos en estos das, volvemos un poco ms a la normalidad en Como Lo Hago, y que mejor que
trayndoles la segunda parte de esta saga de tutoriales que hemos estado preparando para aquellos que
quieren adentrarse en el mundo de la programacin.
Bueno sin ms preambulo les digo, que como siempre, todo el detalle est despus del salto
Tenemos harto que aprender hoy, y un recuento de lo pasado sera solo acumular lneas, as que vamos,
manos a la obra:
Contenidos:
Tal como lo prometimos en el tutorial anterior, hoy veremos los siguientes temas:
1.
2.
3.
Introduccin al Pseudo-Cdigo.
Haciendo nuestro primer programa.
1.-reas de memoria.
Quizs para gente ms experimentada en el tema de la programacin, pueda parecer algo repentino entrar a
esto tan luego, pero hay una razn de fondo que es empezar a relacionarnos con el concepto de las variables
de cierta forma.
Pero bueno, Qu son las reas de memoria?. Para contestar esta pregunta, nos haremos otra, Cmo
almacena la informacin una mquina/equipo/computador?.
Bsicamente lo hace de 2 formas, o mediante el uso de 2 tipos de memoria: la voltil y la no voltil.
La memoria voltil es toda aquella que una vez que apagamos el computador se vaca (Ej: Memoria RAM).
Tiene la ventaja de ser de mayor acceso (lectura/escritura) y obviamente la desventaja de que su
almacenamiento no es permanente.
Por su lado la memoria no voltil es justamente lo contrario a la anterior, ya que una vez que almacenamos
informacin ah, quedar hasta que decidamos borrarla o alguien lo decida por nosotros. Ejemplos de
memoria no voltil son los almacenamientos magnticos (discos duros) o los pticos (CD, DVD, etc).
En la programacin se utilizan ambos tipos de memoria. Por un lado se utiliza la memoria voltil para el
trabajo con variables (explicaremos eso en detalle) y por otro lado la memoria no voltil cuando estamos
trabajando con archivos o en otras situaciones que iremos viendo a medida que ocurran.
En una representacin grfica, la memoria voltil que utiliza la programacin (RAM), sera algo como esto,
guardando las proporciones:
Cada cuadradito representa un rea de memoria, el cual posee una direccin expresada en valores
hexadecimales (algo por ejemplo como FA2246) la cual se llama direccin de memoria, y es utilizada
cuando se quiere acceder a los datos almacenados en ese cuadradito.
Se acuerdan esa vez que les dijimos que explicaramos las variables en detalle?, que tiempos aquellos
no?, bueno el momento es ahora.
Las variables
Esta definicin no intenta ser tcnica ni mucho menos. Solo pretendemos que el concepto quede claro para
que lo intentamos lograr.
Una variable es un enlace contenedor de y a un dato. Por qu enlace contenedor?, porque una variable
esta relacionada a una direccin de memoria, por ende enlace, y contiene un valor correspondiente a un dato
que podemos recibir o tomar de otro lado (usuario, otra variable, el resultado de una operacin, etc), ergo
contenedor. Esta definicin se ir haciendo ms clara a medida que vayamos avanzando.
Las variables tienen ciertas caractersticas, como son:
Nombre: Corresponde al identificador de la variable. Los nombres de variables dentro de un programa deben
ser nicos, no empezar con un nmero, no contener smbolos y respetar las palabras reservadas dentro de un
lenguaje de programacin (Por ej: En Java, la palabra new es reservada, por lo que no se puede nombrar una
variable as).
Tipo: Corresponde al tipo de datos que podrn almacenarse en la variable. Si bien en lenguajes como PHP
no es necesario definir el tipo, la mayora de los otros lenguajes lo piden. Los tipos ms comunes son:
1.
2.
que abarca (valores mximos y mnimos que se les puede dar) vara del lenguaje en uso. Existen 2
variaciones comunes como son el short int o short y el long int o long. Varan en el rango.
Float: Corresponde a valores de punto flotante (nmeros decimales correspondientes al universo Q
de las matemticas). En algunos lenguajes se puede utilizar como double, short double o long
double. Su rango difiere del lenguaje a utilizar.
3.
4.
5.
Adems debemos tener presente que las variables pueden cambiar su valor a lo largo del programa (a no ser
que sean definidas como constantes, ya veremos eso ms adelante) y existen observaciones sobre las
operaciones que ejecutamos sobre ellas. Estos puntos los detallaremos ms adelante.
Dejando esa definicin un poco ms clara, volvemos al tema de las reas de memoria.
Cuando creamos una variable, o bien la definimos, el equipo le asigna automticamente un rea de memoria
en la cual almacenar su valor. En caso de sobrepasar el rea asignada, se le asignar una nueva rea de
memoria, y as sucesivamente.
Esta seccin de las reas de memoria ir quedando cada vez ms clara segn vayamos avanzando.
Antes de entrar de lleno a este tema, es bueno detenernos y explicar un poco el tema de los paradigmas de
programacin.
Paradigmas de programacin
En la programacin existen una serie de paradigmas que se refieren principalmente al enfoque que le
daremos a un problema para solucionarlo o bien la forma en que veremos las cosas. Los paradigmas ms
comunes son:
1.
2.
3.
4.
Para las primeras etapas de estas guas nos enfocaremos en el paradigma estructurado. A medida que
vayamos avanzando nos interiorizaremos ms en esto.
Volviendo al tema del Pseudo-cdigo, y habiendo establecido el punto de los paradigmas, veamos el formato
clsico y bsico de un programa:
Inicio
Definicin/declaracin de variables
Cuerpo del programa
Fin
A medida que vayamos haciendo programas ms complejos veremos como este formato se va a ampliando.
Una explicacin de las partes:
1.
2.
3.
realizacin de nuestro programa, junto con su tipo y en algunos casos, su valor inicial.
Cuerpo del programa: Aqu ir el desarrollo de nuestro programa, indicando informacin que
4.
Cumpliendo esos pasos bsicos, podemos empezar a hacer nuestros primeros programas. As que a tomar
una hoja de papel, un lpiz y una goma, porque de seguro deberemos borrar ms de alguna cosa por ah.
Inicio
/* Establecemos el inicio del programa */
Principal( )
/* Definimos la funcin Principal que es donde ir el cuerpo del programa. Ya adentraremos el tema
de las funciones */
mostrar Hola Mundo;
/* Utilizamos la sentencia mostrar para enviar un mensaje que se despliegue en pantalla y entre
comillas la frase que mostraremos, en este caso Hola Mundo. Luego de la sentencia ponemos un
punto y coma para indicar el fin de esta, algo que utilizaremos mucho cuando estemos programando
en algn lenguaje, ya que eso le indica al entorno de programacin que es el fin de la sentencia */
Fin
/* Finalizamos el programa */
Y as de simple. Hemos hecho nuestro primer programa enviando un mensaje Hola Mundo que se mostrar
en la pantalla. Para este programa, como solo mostramos un mensaje, podrn ver que no hicimos uso de
variables, por eso nos saltamos la parte de la definicin de ellas. En posteriores ejercicios haremos uso de
eso.
Por hoy ya hemos visto bastante, as que es momento de asimilar la informacin y descansar un poco. Para
recapitular, hoy hemos aprendido sobre:
1.
reas de memoria.
2.
3.
Variables.
Pseudo-cdigo.
4.
5.
Paradigmas de programacin.
Hicimos nuestro primer programa.
Bastante, no?, pues bueno, en la prxima gua nos enfocaremos principalmente en ms sobre Pseudocdigo:
1.
Definicin de variables.
2.
3.
4.
Ciclos o bcles.
Continuando con esta saga, hoy les traemos la 3a edicin de estas guas donde estamos cubriendo el tema
de la programacin paso a paso desde sus principios ms bsicos.
Ya hemos visto en los dos nmeros anteriores toda la informacin bsica antes de empezar a llevar cdigo a
papel, por lo que de este nmero en adelante nos dedicaremos de lleno a la programacin en s.
Todo el detalle, como siempre, despus del salto.
Parte 1.
Parte 2.
Contenidos:
1.
2.
Definicin de variables.
Leyendo datos desde teclado.
3.
4.
Operaciones matemticas.
Iteraciones condicionales.
En el tutorial anterior ya dimos una explicacin de lo que son las variables y como se encuentran involucradas
en los procesos de la programacin, por lo que hoy nos enfocaremos solamente a su definicin y uso dentro
del cdigo propiamente tal.
Las variables tienen lo que se llama un ciclo de vida, que representa toda la duracin de una variable a
travs de un programa. Este ciclo de vida se inicia con la definicin o creacin de la variable y termina con la
finalizacin del programa o la liberacin del rea de memoria donde estaba contenida.
Para crear o definir una variable en pseudocdigo siempre se utiliza la siguiente sintaxis, la cual representa
fielmente la utilizada en los lenguajes de programacin reales:
Tipo Nombre Valor Inicial (opcional)
Tal como vimos en el tutorial anterior, en los lenguajes de programacin se utilizan ciertos tipos para definir
los tipos (valga la redundancia) de informacin que puede almacenar la variable en cuestin. Les recomiendo
revisar ese tutorial como recordatorio de los tipos que vimos. En pseudocdigo utilizaremos los siguientes
tipos:
1.
Nmero: Este tipo de variables almacenarn cualquier valor de tipo nmero, ya sea entero (conjunto
Z) o bien real (conjunto R del universo de las matemticas, o sea, enteros ms decimales). Cabe
recordar que en los lenguajes reales hay distintos tipos para los enteros y para los decimales, pero
2.
3.
las cadenas de palabras, pero aqu los agruparemos dentro de un mismo tipo.
Lgico: Este tipo de variables almacenarn valores de tipo lgico (verdadero o falso). En vez de
almacenar las palabras verdadero o falso le asignaremos un 0 si se trata del primero y un 1 si se
trata del segundo.
Vale la pena mencionar, que a pesar de que las variables de tipo Letra puedan almacenar caracteres
correspondientes a nmeros, no podremos realizar operaciones matemticas sobre ellos, por lo que si
necesitamos este tipo de operaciones es recomendable almacenar en variables de tipo Nmero.
Durante el ciclo de vida de la variable (periodo entre su declaracin y su fin) podemos modificar su contenido
cuantas veces queramos, siendo bastante til al momento de querer reciclar una variable para no tener que
crear otra del mismo tipo, hecho que nos termina ayudando a ahorrar memoria en uso.
Tal como indicamos en la sintaxis, toda variable debe llevar un nombre, el cual puede ser cualquiera, pero
debe respetar los siguientes criterios:
1.
2.
3.
su nombre. Si bien no se puede nombrar variables como 2auto o _perro si podemos tener otras
como auto2 o perro_.
No pueden llevar como nombre una palabra reservada del lenguaje. Todos los lenguajes tienen
ciertas palabras reservadas que son utilizadas para definir tipos de variables o funciones del
lenguaje propiamente tal. Por ejemplo, nunca podramos nombrar una variable como while ya que
los lenguajes reservan esa palabra para una funcin de tipo ciclo. De a poco iremos conociendo las
palabras que estn reservadas para cada lenguaje, aunque no hay de que preocuparse, ya que
siempre nos avisar al momento de compilar el programa y nos obligar a cambiarla para que no
hayan conflictos.
Adems, indicamos en la sintaxis que a una variable podemos asignarle opcionalmente un valor inicial.
Elopcionalmente se debe a que al momento de crear la variable podemos asignarle un valor, pero si no lo
hacemos no afecta, ya que lo podemos hacer ms adelante. Lo nico en lo que hay que fijarse es que la
variable contenga ya algn valor cuando queramos operar con ella. Por ejemplo, si deseamos sumar un valor
almacenado en una variable, esta no puede estar en blanco.
Veremos a continuacin, algunos ejemplos que cubren todo lo que hemos visto en las lneas anteriores:
Retomando el ejemplo del hola mundo que vimos en el tutorial anterior, ahora en vez de desplegar
directamente el mensaje, lo desplegaremos con el uso de una variable. (comentarios en negrita, cursiva y
entre /* y */):
Inicio
/* Establecemos el inicio del programa */
Letra mensaje=Hola mundo;
/* A continuacin definimos una variable de tipo Letra, de nombre mensaje y le damos un valor
inicial de Hola mundo, el mensaje que queremos mostrar. Luego de la sentencia ponemos un punto
y coma para indicar el fin de esta, algo que utilizaremos mucho cuando estemos programando en
algn lenguaje, ya que eso le indica al entorno de programacin que es el fin de la sentencia */
Principal( )
/* Definimos la funcin Principal que es donde ir el cuerpo del programa. Ya adentraremos el tema
de las funciones */
mostrar mensaje;
/* Utilizamos la sentencia mostrar para enviar un mensaje que se despliegue en pantalla y luego la
variable que contiene el mensaje, en este caso mensaje. Cerramos la sentencia con un punto y coma
para indicar que se ejecute la lnea */
Fin
/* Finalizamos el programa */
Como podemos ver, en este ejemplo hemos definido una variable de tipo Letra, llamada mensaje y le hemos
asignado como valor inicial el mensaje que vamos a mostrar por pantalla. Ahora, Qu pasa si no queremos
asignar un valor inicial, y se lo damos ms adelante?, sera algo como esto:
Inicio
/* Establecemos el inicio del programa */
Letra mensaje;
/* A continuacin definimos una variable de tipo Letra, de nombre mensaje. Luego de la sentencia
ponemos un punto y coma para indicar el fin de esta, algo que utilizaremos mucho cuando estemos
programando en algn lenguaje, ya que eso le indica al entorno de programacin que es el fin de la
sentencia */
Principal( )
/* Definimos la funcin Principal que es donde ir el cuerpo del programa. Ya adentraremos el tema
de las funciones */
mensaje=Hola mundo;
/* Asignamos el valor Hola mundo a la variable mensaje y cerramos con punto y coma*/
mostrar mensaje;
/* Utilizamos la sentencia mostrar para enviar un mensaje que se despliegue en pantalla y luego la
variable que contiene el mensaje, en este caso mensaje. Cerramos la sentencia con un punto y coma
para indicar que se ejecute la lnea */
Fin
/* Finalizamos el programa */
Esos son los pasos fundamentales para ir trabajando con variables. Todo esto se ir haciendo cada vez ms
claro a medida que vayamos desarrollando nuestros programas.
Letra mensaje;
/* A continuacin definimos una variable de tipo Letra, de nombre mensaje. Luego de la sentencia
ponemos un punto y coma para indicar el fin de esta, algo que utilizaremos mucho cuando estemos
programando en algn lenguaje, ya que eso le indica al entorno de programacin que es el fin de la
sentencia */
Principal( )
/* Definimos la funcin Principal que es donde ir el cuerpo del programa. Ya adentraremos el tema
de las funciones */
mostrar(Ingrese un mensaje para mostrar: );
leer(%letra,mensaje);
/* Utilizamos la funcin mostrar para desplegar un mensaje por pantalla . Luego con la funcin leer
indicamos entre parentesis el tipo de dato que recolectaremos, en este caso letra (acompaado de un
porcentaje, esto es netamente para ir acostumbrndonos a como leeremos los datos en lenguajes
reales) y luego de la coma el segundo parmetro, correspondiente a la variable donde almacenaremos
la informacin, o sea, mensaje. Terminamos todo con un punto y coma. */
mostrar mensaje;
/* Utilizamos la sentencia mostrar para enviar un mensaje que se despliegue en pantalla y luego la
variable que contiene el mensaje, en este caso mensaje. Cerramos la sentencia con un punto y coma
para indicar que se ejecute la lnea */
Fin
/* Finalizamos el programa */
Con esto podemos recibir toda la infromacin que necesitemos por parte del usuario y desplegarla sin
problemas en pantalla.
+: Suma.
-: Resta.
3.
4.
*: Multiplicacin.
/: Divisin.
5.
6.
7.
8.
9.
: Decremento.
Fin
/* Finalizamos el programa */
De esta forma desplegaremos un resultado de operar con un dato ingresado por el usuario. Dentro de esas
operaciones podemos hacer todas las detalladas con anterioridad.
/* Definimos la funcin Principal que es donde ir el cuerpo del programa. Ya adentraremos el tema
de las funciones */
mostrar(Ingrese su edad: );
Si (edad > 18)
mostrar Ud. es mayor de edad;
Si no
mostrar Ud. es menor de edad;
/* Utilizamos la iteracin condicional Si con la condicin si la edad es mayor a 18, y en caso de que
sea desplegamos el mensaje Ud. es mayor de edad con la funcin mostrar. Luego utilizamos Si no
lo que significa Si no es mayor a 18 y mostramos el mensaje Ud. no es mayor de edad con la
funcin mostrar. */
Fin
/* Finalizamos el programa */
Claramente el ejemplo anterior presenta una de las iteraciones condicionales ms bsicas. Pueden realizarse
modificaciones para hacer iteraciones multiples e incluso ms de una condicin, ya sea excluyente o no
excluyente, pero eso lo veremos en una prxima edicin, ya que hoy hemos cubierto ms que suficiente.
En la prxima edicin de Como aprender a programar y no morir en el intento Parte 3:
1.
2.
3.
As que a armarse de paciencia, que hemos avanzado bastante pero an queda un largo camino por recorrer.
Contenidos:
1.
2.
3.
En los ejercicios anteriores hicimos uso de condiciones excluyentes para las iteraciones, o sea, algo como Si
se da esta condicin, haga esto, si no, haga esto otro, lo cual es bastante sencillo de entender y aplicar. Sin
embargo, cuando estemos realizando programas a ms alto nivel comunmente nos encontraremos con
situaciones donde debamos evaluar multiples iteraciones, como por ejemplo Si se da esta condicin, haga
esto, si no se da, pero se da esta otra, haga esto y si no se da ninguna de las 2, haga esto otro. Con palabras
es algo complicado, pero viendo segn sentencias, sera algo as:
Si
(condicin)
sentencia
Si
1;
no
Si(condicin)
sentencia
2;
Si
sentencia 3;
no
Ahora, tal como mencionamos en el tutorial anterior, dentro de un Si, pueden ir una infinidad de Si y Si no, lo
mismo dentro de un Si no. Sin embargo, lo nico que debemos recordar es que siempre un Si no debe ir
precedido de un Si.
Teniendo eso claro, Qu pasa ahora si dentro de nuestro Si debemos evaluar ms de una condicin o bien
una de 2 posibles?.
Ah es donde empezamos a utilizar el concepto de ms de una condicin. Dentro de un Si, podemos evaluar
el nmero de condiciones que nosotros queramos, utilizando los operadores && para y, y || para. Por
ejemplo, si dentro de un Si necesitaramos evaluar la condicin de que una persona tuviese ms de 18 aos y
su nombre fuera Juan, utilizaramos algo como esto:
Si
sentencia
(edad
>
18
&&
Si
sentencia 2;
nombre==Juan)
1;
no
Por otro lado, si quisieramos evaluar alguna de las 2 condiciones como ciertas, bien que su edad sea mayor a
18, o su nombre fuese Juan, haramos algo como esto:
Si
(edad
>
18
sentencia
Si
||
nombre==Juan)
1;
no
sentencia 2;
De esta forma, mediante esos operadores, podemos evaluar una serie de condiciones, tanto excluyentes,
como adherentes. Esta evaluacin puede mezclarse con iteraciones mltiples, segn lo necesitemos.
Su funcionamiento es bastante parecido a la iteracin anterior, pero en este caso lo que basicamente se hace
es:
Evaluacin de la variable:
Si
la
variable
es
Sentencia
Salir;
Si
Sentencia
Salir;
Si
x:
1;
la
variable
es
y:
2;
la
variable
es
z:
Sentencia
Salir;
3;
Dentro de una iteracin condicional Switch, podemos presentar todos los escenarios que deseemos. Lo nico
a tener en consideracin es que debemos conocer todos los posibles valores que pueda tomar la variable
para as plantear sus posibles desenlaces.
Adems incluimos una nueva sentencia: Salir. Esta es utilizada debido a que por defecto, una iteracin
condicional de tipo Switch recorre siempre todos los posibles escenarios (a pesar de que no ejecuta las
sentencias correspondientes a escenarios donde el valor no corresponde), por lo que al agregar Salir,
ejecutar las sentencias correspondientes y luego saldr de la iteracin, ahorrando tiempo de ejecucin.
Adicionalmente es bueno aadir un escenario de tipo defecto (default en los lenguajes reales de
programacin), al cual se ingresar si el valor ingresado en la variable no corresponde a ninguno de los
escenarios posibles planteados. Esto quedar mucho ms claro ms adelante cuando
Las iteraciones condicionales de tipo Switch son especialmente ideales al momento de plantear mens dentro
de un programa, ya que el usuario ingresar una opcin y conoceremos todos los posibles valores para
plantear sus sentencias.
Existen una gran cantidad de casos donde podemos utilizar Si y Si no, o Switch, eso depender del gusto de
cada uno. Sin embargo en algunos casos no podremos utilizar Switch, ya que la evaluacin de valor se debe
hacer con comparaciones exactas (Si el valor es igual a 1 por ejemplo) y no comparaciones mediante
operadores (Si el valor es mayor a cierto valor).
Veamos ahora un ejemplo para que todo esto quede ms claro. Utilizaremos un Switch (llamndolo
evaluar) para determinar opciones de un men. (comentarios en negrita, cursiva y entre /* y */).
Inicio
/* Damos inicio al programa */
Numero
opcin;
Letra
nombre;
/* Declaramos una variable de tipo nmero y de nombre opcin la cual utilizaremos para que el usuario
ingrese la opcin del men a la cual quiere ingresar, y tambin una variable de tipo letra y de nombre
nombre la cual usaremos dentro de las opciones del men como ya veremos. */
Principal(
{
/* Definimos la funcin Principal que es donde ir el cuerpo del programa, adems abrimos
parentesis de llaves para incluir dentro todo lo concerniente a esta funcin. Ya adentraremos el tema
de las funciones. */
mostrar(Seleccione
mostrar(1.-
una
Ingresar
opcin:
usuario
\n);
\n);
mostrar(2.Borrar
usuario
\n);
mostrar(3.Listar
usuarios
\n);
/* Mediante la sentencia mostrar, desplegamos un mensaje en pantalla para que el usuario sepa que
debe ingresar su opcin y luego vamos mostrando las opciones con la misma opcin. Utilizamos \n
para indicarle al programa que haga un salto de lnea */
leer(%numero,
opcion);
/* Mediante la sentencia leer, recabamos el dato que quiere ingresar el usuario. A leer le damos como
parmetro primero el tipo de valor que queremos recolectar, o sea nmero con un % antes para
acostumbrarnos al formato de lenguajes reales y luego le damos la variable donde almacenaremos el
valor, o sea, opcion */
evaluar(opcion)
{
/* Llamamos a la iteracin evaluar y le damos como parmetro el dato en el cual nos basaremos, o sea,
opcion, luego abrimos llaves para dar inicio al contenido de la iteracin */
caso
1:
leer(%letra,nombre);
mostrar(Ingrese
el
nombre
del
usuario:
);
.
salir;
/* Definimos el caso 1, que es decirle al programa en caso de que la evaluacin nos diga que la
opcin seleccionada fue 1, haga esto y luego definimos las sentencias a ejecutar, finalizando con
salir,
caso
tal
como
2:
lo
mostrar(Ingrese
el
explicamos
nombre
anteriormente.
del
usuario
/*
borrar:
);
anterior
*/
leer(%letra,nombre);
salir;
/*
caso
Luego
definimos
3:
el
caso
mostrar(Los
2,
tal
como
usuarios
el
son:
);
.
salir;
/* A continuacin el caso 3 */
caso defecto: mostrar(Seleccion una opcin no vlida);
salir;
/* Y finalmente el caso defecto en caso de que haya seleccionado una opcin no definida para el
men. Luego de esta ltima definicin, cerramos el parntesis de llave correspondiente a la iteracin
evaluar y el parntesis correspondiente a la funcin principal, y finalizamos el programa mediante Fin.
*/
}
}
Fin
Como podemos ver, hemos utilizado el nuevo tipo de iteracin y definido todos sus posibles escenarios. Tal
como indicamos anteriormente, en las iteraciones de este tipo solo podemos evaluar valores fijos y no hacer
comparaciones mediante operadores. Esto nos dar la pauta sobre que tipo de iteracin utilizar para cada
caso.
Hora de pasar al ltimo punto del tutorial de hoy:
Mientras (o while en los lenguajes reales): Se ejecuta si es que la condicin dada se cumpla y
2.
3.
condicin dada. A diferencia del Mientras, este ciclo se ejecuta al menos una vez.
Para (o for en los lenguajes reales): Se ejecuta si es que la condicin dada se cumple inicialmente y
mientras se siga cumpliendo. A diferencia de los 2 anteriores, en sus parmetros definimos todas las
condiciones necesarias.
Las diferencias quedarn claras en los ejemplos que daremos ms adelante. Tal como en el caso de las
iteraciones condicionales, existen situaciones ideales para el uso de cada uno de ellos. Sin embargo, hay una
serie de casos donde podemos usar cualquiera de ellos de forma eficiente.
Ahora, cuando usamos un ciclo, debemos definir ciertas cosas, como:
1.
Una variable a utilizar en la condicin que definir la duracin del ciclo, la cual puede ser definida por
2.
3.
4.
Una condicin para evaluar esa variable y que definir la duracin de la ejecucin del ciclo.
Una instancia de cambio de la variable. Esta instancia, debe ir modificando el valor de la variable
para que en algn momento cumpla la condicin que define la duracin del ciclo, de lo contrario, el
ciclo se ejecutar infinitamente.
La diferencia entre cada tipo de ciclo se ve principalmente en la forma en que definimos y utilizamos las cosas
de la lista anterior.
{
/* Definimos la funcin Principal que es donde ir el cuerpo del programa y abrimos llaves. Ya
adentraremos el tema de las funciones */
mientras(num<=100)
{
mostrar(%numero,
num++;
num);
}
/* Definimos un ciclo de tipo mientras y le decimos que la condicin es que se ejecute mientras num
sea menor o igual a 100, dentro de el mediante la sentencia mostrar desplegamos el valor actual de la
variable y luego con el operador de incremento lo aumentamos en uno y se vuelve a ejecutar. De esta
forma la primera vez que entre mostrar 1 y luego ir aumentando y mostrando hasta que llegue a 100
*/
haga
{
mostrar(%numero,
num++;
num);
}mientras(num<=100);
/* Ahora hacemos la misma operacin pero usando un ciclo de tipo haga-mientras. Definimos las
mismas operaciones pero a diferencia del caso anterior, ahora declaramos la condicin al final. Como
requisito de este tipo de ciclos, el mientras del final debe ir con un punto y coma al final. Recordemos
que este ciclo se ejecutar al menos una vez */
para(num=1;num<=100;num++)
{
mostrar(%numero,
num);
}
/* Y finalmente hacemos el mismo proceso con un ciclo de tipo para. La diferencia con los 2
anteriores es que ahora dentro de sus parametros establecemos toda las condiciones para la
ejecucin de este ciclo. Partiendo por un valor inicial para num, en este caso 1, la condicin de
duracin que es mientras sea menor o igual a 100 y el incremento para que se cumpla esta condicin.
Dentro del ciclo solo ponemos la sentencia mostrar porque ya hemos definido lo dems */
}
Fin
Como podemos ver, hemos declarado la misma operacin mediante 3 ciclos distintos. Cada uno de ellos
desplegar el mismo resultado, los nmeros de 1 a 100, pero la forma en que definimos estos ciclos es
diferente. Con ms prctica podremos ir viendo que tipo de ciclo es adecuado para que situacin. Idealmente
a la sentencia mostrar en los 3 casos podramos haberle aadido un salto de lnea, porque como esta
declarado mostrar los nmeros uno al lado del otro. Como es un ejemplo no es necesario que lo definamos.
Es bueno aadir que dentro de un ciclo, cualquiera de ellos, podemos definir todas las operaciones que
estimemos conveniente, incluidas iteraciones condicionales y todo lo que hemos visto hasta ahora como
muestra de datos, lectura de datos de teclado, etc.
Adems es bueno tambin recordar que todo ciclo debe tener un fin, por eso debemos ser cuidadosos al
momento de definir las condiciones de duracin, ya que un ciclo que corr eternamente matar nuestro
programa.
Tal como debemos definir cuidadosamente el fin, un punto a considerar es que un ciclo no necesariamente
debe siempre ejecutarse, es por eso que definimos la condicin de inicio y duracin. Por ejemplo, podemos
condicionar el inicio de un ciclo a que cierta variable porte cierto valor y en caso de que no lo tenga, el ciclo
nunca se ejecute.
El trabajo con los ciclos puede presentar cierta complejidad en sus inicios, pero a medida que vayamos
avanzando se ir simplificando.
Con esto cerramos la lista de contenidos de esta edicin del tutorial, definiendo que para el prximo nmero,
veremos:
1.
2.
3.
Lo prometido es deuda, as que llegamos con una nueva edicin de esta gua en la que Como Lo Hago intenta
ayudarlos a adentrarse al mundo de la programacin de la mejor manera posible.
En esta edicin, cubriremos las ltimas temticas relativas a programacin en pseudo-cdigo para ya a partir
de las prximas entrar de lleno en los lenguajes reales.
Como es habitual, veamos lo que cubriremos en esta ocasin:
Contenidos
1.- Introduccin a los arrays
2.- Vectores
3.- Matrices
As que con todo especificado, vamos, a seguir aprendiendo:
Para esto es que en la programacin disponemos de los arrays o arreglos, los cuales son variables que nos
permiten almacenar ms de un valor del mismo tipo y manipularlos, todo dentro de la misma variable.
Comunmente en los lenguajes de programacin, los arreglos solo pueden contener mltiples valores del
mismo tipo y hasta una longitud finita indicada al momento de su declaracin. Sin embargo, en algunos
lenguajes especificos, existen tipos de arrays que no se apegan a estas reglas (ya sea almacenando valores
de distinto tipo o siendo dinmicos, o sea, creciendo a medida que decidimos almacenar un nuevo valor en
ellos).
Los arreglos pueden ser unidimensionales o bidimensionales. Los primeros en la programacin son conocidos
como vectores, y los segundos como matrices.
Independiente de su dimensionalidad, los arrays deben cumplir con ciertas caractersticas, algunas similares a
las variables que hemos visto hasta ahora y otras no tanto.
1.- Nombre: Todo array debe tener un nombre, el cual debe cumplir con las mismas caractersticas de los
nombres de variable, o sea, debe ser nico, no debe ser una palabra reservada del lenguaje, ni empezar con
nmeros, guiones o underscores (pueden llevar alguno de los 3 ltimos entremedio).
2.- Tipo: Todo array debe tener un tipo, que corresponde al tipo de valores que se podrn almacenar en el.
Pueden ser los mismos tipos que para las variables vistas hasta ahora.
3.- Posicin: Aqu entra la diferencia. Para facilitar la visualizacin, imaginmonos que una variable comn y
corriente es una cajn en el que guardamos algo. Ahora, cuando pensamos en un array, pensemos que es
una cajonera, con un nmero de cajones, dentro de los cuales se pueden almacenar varias cosas. Cada uno
de estos cajones corresponde a una posicin del array. Cada posicin es como si fuera una variable dentro
del array y almacena un valor. Despus cuando queramos rescatar ese valor, se accede a la posicin
necesaria.
Veremos algunos esquemas ahora que especificaremos los tipos de arrays.
Vectores
Los vectores en la programacin, son arrays unidimensionales en los cuales se pueden almacenar mltiples
valores (finitos) y que cuentan con las caractersticas anteriormente definidas.
Para declarar un vector, en pseudocdigo, lo hacemos de la siguiente forma:
Numero vector[5];
Tipo nombre[largo];
El largo indicara cuantas posiciones tendr el vector, y por ende, cuantos datos se podrn almacenar.
Antes de seguir, debemos hacer una salvedad. En el mundo de la computacin, siempre se empieza a contar
desde el cero y no el uno. Eso debemos tener en cuenta cuando queramos acceder a una posicin, ya que
estaremos accediendo al nmero correspondiente a si empezramos a contar desde el cero. Por ejemplo, con
ese vector que recin declaramos, tendramos algo como esto:
Si nos fijamos, a pesar de ser un vector de largo 5, sus posiciones van desde el 0 a la 4, siendo estas a las
que debemos acceder si queremos recuperar la informacin almacenada ah.
Para almacenar valores en un vector los asignamos de la misma forma que a una variable comn y corriente,
a diferencia de que ahora debemos indicar el indice correspondiente a la posicin donde almacenaremos el
valor, por ejemplo, si queremos almacenar el valor 2 en la tercera posicin de un vector de 5 posiciones:
Vector[2]=2;
Y si queremos leer el valor de un vector, lo hacemos de la misma forma. Por ejemplo, si queremos comprobar
un valor en un Si:
Si(vector[2]==2)
Tanto para ingresar datos, como para leerlos, una operacin comn es recorrerlos mediante ciclos, ya sea con
un ciclo de tipo Mientras o uno de tipo Para. Al hacer esto, declaramos una variable para utilizar como indice,
la cual se ir moviendo a lo largo del vector. Por ejemplo, si quisieramos llenar un vector con nmeros iguales
a su indice, haramos algo como esto, asumiendo que el vector es de largo 5:
i=0;
mientras(i<5)
{
vector[i]=i;
i++;
}
Si en vez de ingresar datos, quisiramos leerlos, lo hacemos de la misma forma.
Para resumir, veamos un ejemplo. En este caso lo que haremos ser declarar un vector, decirle al usuario que
llene los valores para sus posiciones y luego las mostraremos por pantalla.
Inicio
Damos inicio al programa
Numero vector[5];
Numero i=0;
Declaramos el vector y la variable que utilizaremos como ndice para recorrerlo.
principal()
mientras(i<5)
{
Mediante un ciclo mientras, le mostramos un mensaje al usuario para que ingrese el valor
correspondiente a la posicin del vector y luego leemos el dato.
mostrar(Ingrese
el
valor
leer(vector[i],
i++;
i=0;
}
mostrar(Los valores ingresados fueron: );
%numero
del
vector,
i);
&numero);
mostrar(%numero,
i++;
}
vector[i]);
Fin
Trabajar con vectores lleva un poco de costumbre, pero con prctica nos veremos utilizndolos ms y ms a
menudo y viendo como nos facilitan todo.
Matrices
Al igual que los vectores, las matrices son arrays. Sin embargo, a diferencia de ellos, son bidimensionales, o
sea operan en 2 dimensiones, a las cuales nos referiremos como filas y columnas, como si fueran una especie
de tabla.
Algo as:
Para declarar una matriz se hace igual que un vector, pero ahora en vez de indicar el largo, debemos indicar
el nmero de filas y el nmero de columnas. Como ejemplo:
Numero matriz[4][4];
Esa es una matriz cuadrada, de 4 filas y 4 columnas. No es necesario que siempre tengan el mismo nmero
de filas y de columnas. Al igual que en el lgebra, pueden variar.
Para el proceso de ingreso de datos en una posicin de la matriz, debemos indicar su posicin relativa con
respecto a filas y columnas. Por ejemplo, si quisieramos almacenar el valor 8 en la segunda fila y primera
columna, diramos algo como esto:
matriz[1][0]=8;
Al igual que en los vectores, cuando queremos ingresar o leer mltiples datos, hacemos uso de ciclos. La
diferencia ahora es que para las matrices debemos utilizar 2 ciclos, uno que recorra las filas y otro las
columnas. Sera ejemplificado algo as, con una matriz de 4 x 4 y llenando todas sus posiciones con un 8:
i=0;
j=0;
mientras(i<4)
{
mientras
{
(j<4)
Matriz[i][j]=8;
j++:
}
i++;
}
Para recorrer sera el mismo proceso, pero en vez de ingresar datos, los leemos.
Veamos ahora un ejemplo, donde primero declararemos una matriz, luego le diremos a un usuario que
ingrese valores y finalmente los mostraremos:
Inicio
Damos inicio al programa.
Numero
Numero
matriz[4][4];
i=0;
Numero j=0;
Declaramos la matriz y las variables que utilizaremos para recorrerlas.
Principal()
mientras(i<4)
{
mientras(j<4)
{
Dentro de los 2 ciclos necesarios para recorrer filas y columnas en la matriz, mostramos un mensaje
para que ingresen un valor a esa posicin y luego lo leemos.
mostrar(Ingrese
leer(%numero,
el
valor
correspondiente
j++;
}
i++;
}
i=0;
j=0;
mostrar(Los valores ingresados son: );
Avisaremos que mostraremos los valores
mientras(i<4)
{
mientras(j<4)
{
la
fila
%numero
la
columna
%numero,i,j);
&matriz[i][j]);
mostrar(%numero,matriz[i][j]);
j++;
}
i++;
}
Fin
Como podemos apreciar, es un proceso bastante sencillo. La mayor complejidad se presente en poder
entender el tema de los ndices, pero una vez que lo logramos, todo se vuelve muy simple.
Con este ultimo tema estamos llegando al final de esta edicin, en la cual hemos cubierto el tema de los
arrays por completo, desde sus declaraciones hasta usos variados.
En la prxima edicin:
1.- Funciones
2.- Ultimas consideraciones de Pseudo-codigo
3.- Entrando a un lenguaje real.
4.- Mas sobre los paradigmas de programacin.
Y recuerden que como siempre, este tutorial ha sido desarrollado, probado y documentado por el equipo de
Como Lo Hago, por lo que cuenta con nuestro Sello de Garanta. Cualquier duda pueden consultarnos en el
rea habilitada a continuacin.
Esperamos que este tutorial haya sido de utilidad para Uds.
Muchas gracias por leer y ser hasta una prxima oportunidad.
Continuando con nuestra interminable reconocida y solicitada saga orientada a quienes se empiezan a
adentrar al mundo de la programacin, hoy les traemos una nueva edicin, realmente la ltima que veremos
sobre Pseudo lenguajes y adems las ltimas consideraciones previas a la entrada a los lenguajes reales.
Nota: Tal como dice el ttulo, esta es la 6ta parte de estas guas. Para un completo entendimiento,
recomendamos, si no lo han hecho, leer las partes anteriores, las cuales pueden ser encontradas en
lacategora de Programacin de nuestros tutoriales.
Con eso claro, veamos los contenidos que cubriremos hoy:
Contenidos:
1.
2.
Funciones.
Ultimas consideraciones sobre Pseudo-cdigo.
3.
4.
Como pueden apreciar, hay harto que cubrir, as que vamos directo a eso:
1.- Funciones.
El ltimo tema que cubriremos sobre programacin en pseudo-cdigo propiamente tal, ser el de las
funciones, el cual es un elemento de suma importancia tanto para estas etapas tempranas como para cuando
nos adentremos aun ms en la programacin.
Intentaremos simplificar este tema lo que ms podamos. De cualquier forma, a pesar de la complejidad que
puede presentar, no se preocupen si no lo entienden a la perfeccin en un comienzo, ya que a medida que
vayamos viendo los ejemplos y en otros contenidos ms avanzados iremos comprendiendo bien este tema.
Hasta ahora, cada vez que escribamos un programa y dentro de el necesitbamos tener procedimientos de
clculo o manipulacin de datos, los escribamos lnea por lnea estructuradamente dentro del principal de
nuestro programa, algo as:
Definicin
de
variable
asignacin
de
valor
Operacin
Operacin
1
2
Operacin
Asignacin de resultados
Si las operaciones anteriores las necesitamos utilizar ms de una vez o para distintas variables,
adicionalmente podamos aadirlas dentro de un ciclo, si el tipo de variables nos lo permiten, o bien repetir las
operaciones dentro del programa las veces que sean necesarias.
Ahora, si la operacin es de una sola lnea, como una operacin matemtica por s sola, no presenta mayores
complejidades ni costos repetirla todas las veces que sean necesarias. Sin embargo, cuando hablamos ya de
un proceso que contiene varias operaciones, y por ende varias lneas de cdigo, es cuando el tema se vuelve
mucho ms complejo y engorroso, ya que nuestros programas empiezan a aumentar de tamao y ser mucho
ms costoso (computacionalmente hablando) ejecutarlos.
Para esto es que se definen las Funciones, las cuales, como su nombre lo indica, ofrecen la funcionalidad de
agrupar y ejecutar una serie de operaciones, tanto por si solas como dependiendo de ciertos parmetros que
les entreguemos, y a la vez dndonos la opcin de retornarnos un valor que puede ser constante o variable
dependiendo de los resultados de las operaciones y clculos internos de la funcin.
La programacin est compuesta fundamentalmente de funciones, y hasta ahora, a travs de los contenidos y
ejemplos, hemos utilizado una serie de ellas. Por ejemplo, la parte principal que declaramos en cada
programa que hacemos es una funcin, es la que contiene los contenidos principales del programa que
escribimos, valga la redundancia. A esa funcin no le entregamos ningn tipo de parmetros y no nos retorna
nada. Otras funciones que hemos utilizado hasta ahora son las iteraciones condicionales (Si, Si no), los
ciclos (mientras, para, haga mientras) y otras como leer, mostrar, etc.
Qu ventajas presentan las funciones?
Principalmente orden, comodidad y economa. El uso de funciones nos permite no tener que repetir
operaciones segn el nmero de veces que las vayamos a necesitar y en vez de eso solo definirlas una vez y
llamarlas cuando sea necesario. Eso tambin implicar que nuestro programa sea mucho ms liviano al
momento de ejecutarse. Existen una serie de otras ventanas que iremos descubriendo ms adelante.
Las funciones se escriben fuera de la funcin principal (normalmente por orden, se escriben despus) y se
definen de acuerdo a la siguiente estructura:
tipo
{
nombre_funcin(parmetro
1,
parmetro
2,
etc.)
operacin
operacin
1;
2;
sentencia
sentencia 2;
1;
retorno de variable;
}
Donde:
1.
Tipo: Detalla el tipo de valores que devuelve la funcin. Estos tipos pueden ser los mismos que los
de las variables, los cuales han sido especificados en los nmeros anteriores de esta saga. Sin
embargo, no hay que confundirse, ya que por el hecho de que una funcin sea de un determinado
tipo, no significa que dentro de las operaciones no puedan declararse y usarse variables de otros
tipos, solo debemos fijarnos que las variables que retornamos si lo sean. Se debe definir un tipo para
2.
la funcin obligatoriamente.
Nombre de la funcin: Es un nombre nico, tal como si estuvisemos definiendo una nueva
variable. El nombre de la funcin puede ser cualquiera, pero es recomendable, por orden, darle un
nombre adecuado. Por ejemplo si definimos una funcin que encuentre el nmero mximo entre una
serie de valores, es recomendable nombrar a esa funcin como numero_maximo. De esa forma,
siempre podremos ver que hace cada parte de nuestro programa rpidamente cuando lo estemos
3.
revisando.
Parmetros: Tal como hemos definido en distintas partes de esta saga de tutoriales, los parmetros
que recibe una funcin son los que utilizar para operar dentro de ella y devolver resultados.
Normalmente las operaciones declaradas en una funcin son procedimientos estndar que varan
dependiendo de los valores que manejamos. En una funcin podemos recibir mltiples parmetros y
estos pueden ser de distintos tipos, solo debemos asegurarnos de escribir primero el tipo y luego el
4.
nombre de ese parmetro, tal como si definiramos variables. Estos nombres no pueden repetirse
dentro de la funcin.
Operaciones y sentencias: Bsicamente podemos hacer lo mismo que hacemos dentro de nuestros
programas, ya sea usar operadores matemticos, iteraciones condicionales, ciclos, mostrar, leer, etc.
5.
principal
{
/* Declaramos la funcin principal del programa */
mostrar(Por
leer(%numero,
favor
ingrese
el
nmero
mostrar(Por
favor
ahora
ingrese
el
nmero
leer(%numero,
/* Mediante mostrar y leer, recibimos por teclado los 2 nmeros ingresados por el usuario */
1:
);
&num1);
2:
);
&num2);
mayor=numero_mayor(num1,
num2);
/* A la variable mayor, le asignamos el resultado de llamar a la funcin numero_mayor, especificada luego de
la funcin principal, pasndole como parmetros las variables num1 y num2 */
mostrar(El
nmero
mayor
de
los
que
ingreso
es:
%numero,
mayor);
/* Nuestra variable mayor ya recibi el resultado de la funcin, as que lo desplegamos */
}
numero numero_mayor(numero valor1, numero valor2)
{
/* Declaramos una funcin de tipo numero, llamada numero_mayor y que recibe como parmetro 2 variables
de tipo numero, llamadas valor1 y valor2, que corresponden a los num1 y num2 enviados desde arriba */
Si(valor1 > valor2)
{
retornar valor1;
}
Si no
{
retornar valor2;
}
/* Mediante una iteracin condiciional, hacemos una comparacin entre los 2 nmeros y retornamos el mayor
de los 2 para que se le asigne a la variable mayor y se muestre por pantalla al usuario. */
}
Fin
Con este simple ejemplo hemos podido apreciar un poco el funcionamiento y uso de las funciones en la
programacin. Hay un importante concepto que hemos utilizado ahora, pero que detallaremos ms en
profundidad cuando estemos hablando de lenguajes reales, que es el paso de parmetros desde una funcin
a otra (lo que hicimos cuando llamamos a la funcin y lo que esta recibe por el otro lado). Por ahora no vale la
pena entrar en esos detalles, pero ya los veremos ms completamente.
Con las funciones sucede lo mismo, esta pasada que le hemos dado ahora es bastante superficial, pero
iremos cubriendo otros aspectos y descubriendo sus usos completos y ms complejos a medida que vayamos
programando ms y ms. Por ahora es una buena tcnica ir combinando los otros contenidos que hemos visto
en los captulos anteriores con esto e ir practicando. Por ahora, al siguiente tema.
1.
Paradigma estructurado: Es el paradigma que hemos estado viendo hasta ahora con el pseudolenguaje y que luego veremos con C. Este paradigma, como su nombre lo indica, expresa una
declaracin y funcionamiento estructurado para sus programas, en donde desde arriba a abajo en
una misma plantilla de programa debe estar el inicio, la declaracin de las variables del programa y
las funciones (la principal y otras funciones). Todo definido desde su inicio a su final. Adems, los
lenguajes estructurados se enfocan principalmente en el tratamiento de datos, recibindolos,
2.
3.
4.
mltiples mini-programas listos para ejecutarse cuando el usuario presione el botn o seleccione el
men. Por ahora no adentraremos ms en esto, por las mismas razones el caso anterior.
Paradigma orientado a aspectos: Este es un paradigma que actualmente se encuentra bajo
investigacin, por lo que no hay gran informacin disponible. Decidimos mencionarlo ms por
ancdota que por cubrirlo propiamente tal. Quizs cuando estemos en nmeros futuros de esta saga
podamos ir adelantando ms informacin.
Con esto podemos tener un poco ms claro por qu existen distintos lenguajes de programacin y que los
diferencia, es principalmente su paradigma.
Para casos de esta saga, por las razones antes descritas, seguiremos con el lenguaje C, el cual nos servir
de base para todo el aprendizaje que tendremos que hacer.
Por ahora lo dejaremos hasta aqu, ya que hemos cubierto suficiente y es momento de tomar un descanso
hasta tutoriales futuros donde ya empezaremos a utilizar un lenguaje real de programacin.
En la prxima edicin:
1.
Introduccin al lenguaje C.
2.
3.
Variables en C.
Funciones bsicas.
4.
Iteraciones condicionales.
En la ltima edicin de esta saga, dimos por concludo el aprendizaje de Pseudo-cdigo, un paso importante
al momento de aprender a programar. Tan importante como el que prometimos que daramos ahora, el
ingreso al mundo de los lenguajes reales de programacin.
Hoy, y en las prximas ediciones, nos adentraremos de lleno en la programacin en C, donde intentaremos
cubrir todo lo posible para que podamos convertirnos en unos aces de la programacin.
Viendo que ahora ingresaremos a la programacin propiamente tal, es bueno indicar los:
Implementos necesarios:
1.
Con todo eso claro, vamos a los contenidos que cubriremos hoy:
Contenidos:
1.
2.
Introduccin al lenguaje C.
Libreras.
3.
4.
Variables en C.
Funciones bsicas.
5.
Primer programa en C.
Nota: La instalacin del entorno de programacin, hemos decidido no cubrirla, ya que es bastante estndar en
lo que a instalaciones de programas se refiere. Les recomendamos hacer la instalacin de forma normal,
dndole siguiente en las ventanas y dejando las opciones que vienen por defecto. Ms adelante indicaremos
si es necesario hacer cambios sobre esto.
Y bueno, llegamos al momento que tanto esperabamos: Empezar a trabajar con lenguajes reales de
programacin.
Para comenzar, hemos optado por el lenguaje C, debido a que por su forma y paradigma, es un buen y simple
lenguaje para continuar el aprendizaje. Adems, como iremos viendo a medida que nos adentremos en los
siguientes capitulos, tiene mucha similitud con el Pseudo-cdigo que hemos visto hasta ahora.
C es un lenguaje de programacin que fue creado en 1972 en los laboratorios Bell. Utiliza un paradigma
estructurado (tambin denominado como imperativo y/o procedural) y presenta una eficiencia notable en su
cdigo, adems de caractersticas de bajo nivel que permiten controlar algunos aspectos de memoria y
perifericos, por lo que se convierte en la eleccin favorita e idnea al momento de desarrollar aplicaciones e
incluso desarrollos para Sistemas Operativos.
Los programas desarrollados en C, presentan una estructura bastante similar a la que habamos visto hasta el
momento en Pseudo-cdigo, con algunas adiciones (como las libreras, que ya veremos) y uno que otro
cambio, sobretodo en las palabras reservadas y algunas formas de definir cosas. Todo esto lo iremos viendo a
su debido tiempo.
En resumen, algunos puntos a considerar para el futuro:
Entre los tipos de errores que se pueden presentar al momento de compilar o terminar un programa,
principalmente tenemos 2: los lxicos y los sintcticos. Los primeros se refieren a cuando tenemos
algo dentro de nuestro programa que est mal escrito, por ejemplo si en vez de un
ciclo while escribimos whlie. Por otro lado tenemos los errores sintcticos, que se refieren a cuando
lo que hemos escrito no tiene sentido, por ejemplo el querer asignar un valor numrico a una variable
de tipo carcter o algo por el estilo.
Iremos viendo ms sobre estas y otras consideraciones y detalles a medida que vayamos avanzando en
nuestro aprendizaje.
2.- Libreras:
Un punto muy importante dentro de la programacin, en especial en el lenguaje C, son las famosas y nunca
bien ponderadas libreras.
Qu es una librera?
Una librera es una plantilla que contiene una serie de funciones, las cuales pueden ser utilizadas por un
programa que ha invocado esta librera al inicio. Las libreras normalmente representan una categora de
funciones (por ej. existe una librera donde estn todas las funciones matemticas ms comunes) y de
acuerdo a eso las invocamos.
El lenguaje C nos proporciona mltiples libreras para nuestras necesidades, por lo que cada vez que
necesitemos realizar una determinada accin, podemos hacer una bsqueda de la funcin y por ende librera
correspondiente. Adicionalmente, podemos crear nuestras propias libreras y utilizarlas libremente (as como
otras que han sido creadas por otros usuarios y puestas a disposicin en Internet).
Podemos reconocer las libreras por su extensin que es la letra h. Por ejemplo, si tuviramos la
librera comolohago, la encontraramos como comolohago.h. Estas libreras se encuentran en el
directorio include de nuestra instalacin correspondiente al entorno de programacin.
Tal como indicabamos en la definicin, las libreras deben ser invocadas o en estricto rigor incluidas en el
programa donde las vayamos a utilizar. Para esto, al inicio, en las primeras lneas de nuestro programa,
debemos utilizar la sentencia #INCLUDE y el nombre de la librera entre < y >. Por ejemplo, si quisiramos
incluir la librera ejemplo.h, pondramos al inicio de nuestro programa:
#INCLUDE <ejemplo.h>
Podemos incluir las libreras que queramos (siempre que existan). Sin embargo, no es recomendable incluir
libreras que no vayamos a utilizar, ya que es un gasto extra sobre el programa. En caso de que alguna de las
funciones, o sentencias de nuestro programa necesite de una librera que no hayamos incluido, al momento
de compilar nos lanzar un error avisndonos del hecho.
Antes de concluir con el captulo sobre las libreras, es bueno aadir que las ms comunes que se usan en
prcticamente el 100% de los programas en C son las librerias stdlib.h y stdio.h, por lo que siempre es
bueno aadirlas. Otra de las comunes es la conio.h, pero no es utilizada todo el tiempo y probablemente no la
requeriremos hasta que vayamos mucho ms adelante.
3.- Variables en C:
Al igual que en Pseudo-cdigo, en lenguaje C, as como en otros lenguajes, contamos con variables para
almacenar, operar y mostrar datos.
No entraremos en detalles sobre definiciones de que es una variable, porque esos temas ya los hemos
cubierto en nmeros anteriores. Nos dedicaremos de lleno a cubrir las variables en C, las cuales son muy
similares a las que utilizabamos en Pseudo-lenguaje. Entre las ms comunes que utilizaremos:
1.
int: Se utilizan para almacenar y operar con nmeros enteros (correspondiente al conjunto Z de las
matemticas). Pueden almacenar tanto enteros positivos como negativos hasta un cierto rango(32768 a 32767). Existen 2 variaciones que son el short int y el long int, los cuales varan en el
2.
rango permitido.
char: Se utilizan para almacenar caracteres, tal como el tipo Letra de Pseudo-cdigo.
3.
float: Se utilizan para almacenar y operar con nmeros decimales (correspondiente al conjunto Q de
las matemticas). Adicionalmente se pueden utilizar para almacenar nmeros enteros, pero no es lo
4.
recomendable. Su rango va entre 3,4 *E-38 (elevado a) hasta 3,4 * E+38 (elevado a).
boolean: Almacenan datos de tipo booleano. Pueden tener 2 valores: true o false.
Esas son las variables principales que utilizaremos al programar. Iremos conociendo otras y viendo
variaciones de estas mismas a medida que vayamos adentrndonos ms y viendo ms ejemplos.
main(
{
cdigo
del
programa
}
Adicionalmente, podemos decir que la funcin main de C, cuenta con 2 parmetros como argc (de tipo
int) y argv (de tipo char, es un vector). Estos parmetros corresponden a argumentos que nosotros le
podemos dar a un programa particular, siendo el primero un entero que indica el nmero de argumentos, y el
segundo un vector de tipo char que contiene en cada posicin los argumentos que enviamos. Esto es un poco
avanzado, as que no lo veremos an, pero podremos apreciar que es bastante til.
b) Mostrando informacin por pantalla: Cuando queramos mostrar algn tipo de informacin en pseudocdigo, utilizabamos la sentencia mostrar. En C, utilizaremos printf, la cual se utiliza de la misma forma que la
venamos utilizando hasta ahora, es decir:
printf(mensaje);
o bien
printf(%tipo de variable,nombre de la variable);
Se puede utilizar una combinatoria de ambas. En la parte de %tipo de variable, utilizamos los tipos definidos
en el lenguaje C, como por ejemplo:
%d: Si
%f: Si
la
la
variable
variable
es
un
es
decimal
un
punto
entero (int).
flotante (float).
Como podemos apreciar, hay una diferencia con el caso de printf, y es que ac al momento de hacer un
scanf, al lado del nombre de la variable aadimos un &. Esto es necesario, ya que as le decimos al programa
que guarde la informacin en el rea de memoria que asignamos para esa variable cuando la declaramos. A
esa rea de memoria accedemos con &.
Cuando incluimos una sentencia de tipo scanf, el programa se detiene hasta que el usuario ingresa datos y
presiona enter, por lo que tenemos la seguridad que el resto del programa no se ejecutar hasta que se
cumpla esa accin.
d) Operadores matemticos y lgicos: Son bastante similares a los que utilizabamos en pseudolenguaje, o
sea:
+: Suma.
-: Resta.
*: Multiplicacin.
/: Divisin.
<: Menor que.
>: Mayor que.
==: Igual a. (un solo igual es asignacin de valor, no comparacin).
!=: Distinto que.
%: Mdulo, o resto de la divisin.
++: Incremento en uno.
: Decremento en uno.
Existen otros que iremos viendo a medida que los vayamos necesitando.
main() /*
Declaramos
Mundo); /*
la
Mostramos
funcin
el
<stdlib.h>
<stdio.h>
principal
mensaje
*/
*/
}
Con el cdigo escrito, no nos queda ms que probar nuestro programa. As que primero vamos al
menEjecutar > Compilar o bien presionamos CTRL + F9 en nuestro teclado. Esto nos pedir guardar el
programa y se abrir una ventana, ah colocamos como nombre holamundo.c (o bien el que uds quieran pero
con la extensin .c) y en tipo seleccionamos C source files (*.c).
Guardamos y el entorno de programacin compilar (o sea revisar el programa que escribimos en busca de
errores). Si encuentra algn error, nos indicar abajo donde est la falla. De lo contrario nos dir que est listo
y sin errores, por lo que presionamos Cerrar en la ventana de aviso.
Luego, vamos al men Ejecutar > Ejecutar o bien CTRL + F10 en nuestro teclado, y nuestro programa
correr (no saldr corriendo, sino que se ejecutar).
Funcion?, Se ejecut y desapareci?, no se asusten. No hay nada malo con el programa. Es el entorno de
programacin que por defecto cuando un programa termina, cierra la ventana de ejecucin. Por ahora
haremos un pequeo truco para poder visualizar nuestro programa de forma correcta.
Aadiremos luego del mensaje, una funcin bsica de C llamada getch();, la cual cumple la funcin de dejar
el programa en espera hasta que el usuario presione una tecla, as podremos ver el resultado. As que nuestro
nuevo cdigo quedara de la siguiente forma:
#include
#include <stdio.h>
int
<stdlib.h>
main()
{
printf(Hola
mundo);
getch();
}
Compilamos y ejecutamos de nuevo y veremos la ventana con el resultado de nuestro programa, o sea, el
mensaje Hola Mundo. Para cerrar solo presionamos una tecla.
Y con eso terminamos por hoy, donde hemos dado nuestros primeros pasos en el lenguaje C e incluso hemos
realizado nuestro primer programa.
En la prxima edicin:
1.
2.
3.
Iteraciones condicionales.
Ciclos o bcles.
Ya dejando un poco atrs la locura navidea, y preparndonos para recibir este ao 2009, hemos decidido
hacer un alto de las festividades (en confabulacin con nuestro maravilloso servicio de hosting que nos ha
fallado a diestra y siniestra, por lo que ofrecemos nuestras disculpas) y traerles un nuevo nmero de esta gran
saga que ha sacado chispas busca darles una pequea manito durante sus primeros pasos del mundo de la
programacin.
En el nmero anterior, nos adentramos en nuestro primer lenguaje real, C, haciendo una larga introduccin y
comparacin con lo que habamos visto hasta ahora, terminando con nuestro primer programa. En esta
ocasin, seguiremos adentrndonos ms en el tema y terminaremos con la confeccin de un programa algo
ms complejo.
As que sin ms espera, los invitamos a seguirnos despus del salto, que no es en verdad un salto, sino que
un leer ms.
Nota: Como es habitual, les recomendamos, si no lo han hecho ya, leer los nmeros anteriores de esta saga,
que pueden encontrar en la categora de Programacin de CLH.
Tal como prometimos en el nmero anterior, en este veremos los siguientes contenidos:
Contenidos:
1.
2.
Comentarios.
Leyendo datos desde teclado.
3.
4.
Iteraciones condicionales.
Ciclos o bcles.
5.
1.- Comentarios.
Si nos hemos fijado hasta ahora, siempre que realizamos algn ejemplo o ejercicio de cdigo, en C, Pseudocdigo o bien en nuestros tutoriales de PHP, siempre ponemos las explicaciones entre unos smbolos /* y */.
Esto, junto a otros smbolos, es lo que en la programacin (a todo nivel) se conoce como comentarios.
Los comentarios en la programacin, si bien no son obligatorios, se convierten en una herramienta util y su
mayor funcin es entregarnos la posibilidad de aadir pequeas anotaciones sobre lo que estimemos
conveniente, ya sea sobre el cdigo propiamente tal u otras cosas como notas de autora o funcionamiento del
programa en s.
Por qu usar comentarios?
Principalmente por un tema de orden. Tenemos que pensar de que si bien nuestra memoria puede ser
excelente, en ms de alguna ocasin nos tocar revisar cdigos que hayamos realizado hace algn tiempo y
puede que en ese programa hayamos utilizado alguna funcin o lgica que no tiene sentido en este momento.
Por eso el uso de comentarios nos simplifica el tener que estar mucho tiempo deduciendo lo que alguna vez
hicimos. Lo mismo se presta para cuando nuestro cdigo es revisado por terceros o bien nosotros revisamos
cdigos hechos por alguien ms.
Hay 2 formas de comentarios: los de lnea simple y los de mltiples lneas. La nica diferenciacin es en los
smbolos que utilizamos para iniciar y terminar los comentarios.
Cuando los comentarios son de lnea simple solo debemos aadir al principio de la lnea el smbolo // .
Debemos tener en cuenta de que solo ser vlido como comentario lo que escribamos en la misma lnea. Si
pasamos a otra lnea lo tomar como cdigo y nos lanzar error, por lo que debemos utilizar smbolo de
comentario de mltiples lneas.
Para mltiples lneas, utilizamos el mismo que hemos usado hasta ahora, o sea al principio del comentario
ponemos /* y al final del comentario cerramos con */. Todo lo que escribamos entremedio ser considerado
como comentario.
De cualquier forma, si es que les complica recordar los smbolos para cada caso, pueden utilizar siempre el
formato de mltiples lneas, que cubre comentarios ya sea en 1 lnea o en varias.
Cuando trabajabamos en Pseudo-cdigo, una de las funcionalidades que ms utilizabamos, era la lectura o
recepcin de datos ingresados por un usuario va teclado. Eso nos permita interactuar de una mayor forma
con quien utilizaba el programa y realizar procesamientos mucho mejores y personalizados.
Pues bien, en C tambin podemos leer datos desde teclado, de una forma tan similar como en
pseudolenguaje. Si recordamos el tutorial anterior, hablbamos de la funcin scanf, la cual nos permita
realizar esa tarea y que se utiliza de la siguiente forma:
scanf(%tipodevariable, &nombredelavariable);
Como
podemos
observar,
esta
funcin
presenta
comillas) y&nombredelavariable, los cuales a su vez presentan 2 signos: % y &. Vamos por parte
explicando:
1.
tipodevariable: Tal como hemos visto en numerosas ocasiones, cada variable que definimos en un
programa contiene un tipo de datos que puede almacenar (int, float, char, etc). A su vez, el lenguaje
C utiliza unos simbolos que representan esos tipos y que se incluyen en las funciones scanf y printf
para decirle al compilador que tipo de dato es el que estamos leyendo/mostrando. Estos simbolos
son la d para variables de tipo int, la f para variables de tipo float y la c para variables de tipo char
2.
entre otras.
El smbolo %: Este smbolo siempre debe ir por obligacin acompaando a los smbolos indicados
3.
4.
en el punto anterior, de esta forma el compilador comprender que estamos hablando de un tipo de
dato y no de una consonante por s sola.
nombredevariable: Es el nombre que le damos a una variable en particular cuando la definimos.
El smbolo &: En el lenguaje C, cuando utilizamos el smbolo & junto al nombre de una variable, le
estamos diciendo al compilador que nos estamos refiriendo al rea de memoria en el que esa
variable almacena su informacin. Como dijimos hace algn tiempo, toda variable al momento de ser
creada, apunta a un rea de memoria interna del computador para manipular su informacin. A esta
rea accedemos con el smbolo & cuando leemos un dato.
Con esas definiciones claras, veamos un pequeo ejemplo, para lo que utilizaremos el entorno de
programacin que instalamos en el nmero anterior:
Ejemplo: Realizar un programa que lea un dato numrico por teclado y luego mostrarlo por pantalla. (La
explicacin del cdigo, como siempre en negrita, cursiva y entre /* y */.
#include
#include
<stdio.h>
<stdlib.h>
#include <conio.h>
/* Partimos por agregar las libreras necesarias para nuestro programa, incluida la conio.h para hacer
uso de la funcin getch( ); */
int numero;
/* Declaramos una variable llamada numero de tipo int */
int
{
/* Declaramos la funcin main o principal */
main(
el
numero
%d,
numero);
getch();
/* Mostramos el numero que ingreso el usuario, poniendo un mensaje con printf y en la posicin donde
mostraremos el nmero ponemos el smbolo correspondiente al tipo de dato, o sea %d, y luego de la
coma la variable que mostraremos. En la lnea siguiente ponemos un getch ( ); para que el programa
quede en espera hasta que presionemos una tecla y as podamos ver el resultado antes que se cierre
*/
} // Cerramos llave de la funcin main.
Compilamos el programa y no deberamos tener errores. Lo ejecutamos y probamos que funcione.
As de simple es la captura de datos va teclado.
1;
2;
else
{
sentencia
sentencia 4;
3;
}
Cuando utilizamos if y else, podemos o no usar llaves para abrir y cerrar el if. Cuando un if y/o un else tienen
solo una sentencia a ejecutar, podemos escribirlos sin llaves para abrir y cerrar. Si es ms de una sentencia,
necesariamente deben llevar llaves. Si desean, para evitar confusiones, podemos utilizar siempre las llaves.
Veamos un ejemplo ampliando el caso anterior. Tambin pediremos un dato al usuario, pero en vez de
mostrarlo lo someteremos a un simple if y else para ver si el nmero es mayor a 5:
#include
<stdlib.h>
#include
#include <conio.h>
<stdio.h>
int numero;
int main()
{
printf(Ingrese un numero del 1 al 10: );
scanf(%d,&numero);
/* Primero vemos con un if si el numero es igual a 5. Recordemos que para comparar utilizamos doble
signo igual */
if(numero==5)
printf(El numero ingresado es 5);
else // Si no es igual a 5
if(numero > 5) // Si es mayor a 5 mostramos el mensaje
printf(El numero ingresado es mayor a 5);
else // Si es menor a 5 mostramos el mensaje
printf(El numero ingresado es menor a 5);
getch();
}
A medida que vayamos avanzando, el uso de if y else ser ms complejo y largo, pero la lgica es
bsicamente la misma.
La iteracin switch la veremos en el prximo nmero, ya que implica un mayor nivel de detalle y no queremos
extendernos por sobre los dems contenidos de momento.
1;
2;
Tal como en Pseudo, este ciclo slo se ejecutar (y se mantendr en ejecucin) mientras la condicin se
cumpla.
Para
Este ciclo en lenguaje C es conocido como for y se utiliza de la misma forma, o sea:
for(inicializacin
{
de
variable
condicin
aumento
decremento
de
la
variable)
sentencia
sentencia
1;
2;
sentencia
}
3;
Tal como en el caso del ciclo while, este ciclo se continuar ejecutando mientras se cumpla la condicin, pero
a diferencia del anterior, este siempre se ejecutar, ya que la variable para la condicin se inicializa dentro del
propio ciclo.
Haga mientras
Corresponde al ciclo do-while, bastante similar al caso del while pero con 2 diferencias. Este ciclo se
ejecutar al menos 1 vez aunque la condicin no se cumpla y el while del final debe ir con punto y coma, o
sea:
do
{
sentencia
sentencia
1;
2;
sentencia
}while(condicin);
3;
Tal como en pseudolenguaje, hay ocasiones ideales para el uso de cada tipo de ciclo, pero en muchas
ocasiones podemos usar cualquiera de los 3 y depender ms que nada del gusto personal.
A continuacin veremos un ejemplo en donde utilizaremos los 3 ciclos para resolver un mismo problema.
Ejercicio: Enumerar del 1 al 10 utilizando los 3 ciclos vistos hasta ahora.
#include
<stdlib.h>
#include
#include <conio.h>
<stdio.h>
int numero;
int main()
{
numero=1; // Asignamos el valor inicial a la variable
while(numero<=10) // Partimos con un ciclo while
{
printf(%d\n,numero); /* Mostramos el nmero y utlizamos \n para hacer salto de lnea */
<stdlib.h>
<stdio.h>
#include <conio.h>
int codigo, cantidad, valor, total, vuelto, pago; /* Declaramos las variables que usaremos, todas de tipo int
*/
int main()
{
printf(\t Lista de productos\n); /* Partimos por listar los productos, utilizamos \t para separar los textos,
tal como si utilizaramos la tecla TAB */
printf(Codigo\t Nombre\t Precio\n);
printf(1\t Silla\t 100\n);
printf(2\t Puerta\t 350\n);
printf(3\t Sillon\t 200\n);
printf(\nIngrese el codigo del producto que desea llevar: ); /* Solicitamos el cdigo del producto*/
scanf(%d,&codigo); /* Leemos el cdigo */
Iteracin Switch.
Vectores.
3.
4.
Matrices.
Terminal de venta 2da parte.
Empezamos ya de lleno el 2009, y que mejor que seguir con lo que el 2008 nos di tantos dolores de
cabeza ayud a entrar de mejor forma al mundo de la programacin.
Hoy, en la parte 9, o primera del 2009, seguiremos viendo contenidos del lenguaje C, as como el programa
que empezamos a confeccionar en la edicin pasada.
Si recuerdan el nmero anterior, en esta ocasin veremos:
Contenidos:
1.
2.
Iteracin Switch.
Vectores.
3.
4.
Matrices.
Continuacin de la confeccin de un terminal de venta.
ordenado usar una iteracin sobre otra, las 2 cumplen la misma funcionalidad, por lo que pueden ser usadas
sin problemas. En lo personal, lo cual en ningn sentido es un estndar, prefiero usar iteraciones de tipo
Switch cuando en los programas definimos algn tipo de men, por un tema de orden. En un ejemplo ms
adelante podremos apreciar porque.
Entonces, usando switch en C, lo primero que necesitamos es una variable que tome un valor (todo
switchdebe ser inicializado por una variable) y conocer los valores, o la mayora de ellos, que pudise tomar,
como veremos en el siguiente ejemplo.
Adems, dentro de los casos, podemos definir un caso por defecto, el cual cubrir todas las opciones no
definidas. Esto es muy til para prevenir que el usuario ingrese un valor que no tenemos cubierto dentro de
nuestras opciones.
Veamos un ejemplo.
Ejemplo: Plantearemos un pequeo men, y definiremos cada caso, utilizando una iteracin de tipo switch.
#include
#include
<stdlib.h>
<stdio.h>
#include <conio.h>
int opcion;
int main()
{
/* A continuacin escribimos nuestro men, tabulando y dando saltos de lnea */
printf(\tMenu);
printf(\n1.- Mostrar hola mundo);
printf(\n2.- Dar los buenos dias);
printf(\n3.- Salir);
printf(\nIngrese su opcion: );
scanf(%d,&opcion); /* Leemos la opcin que ingrese el usuario */
switch(opcion) // Activamos el switch con la variable opcin.
{
case 1:
break;
case 2:
break;
case 3:
default:
break;
}
getch(); /* Ponemos el programa en pausa hasta que se presione una tecla */
}
Como podemos ver, al final de cada caso, debemos incluir la sentencia break;, que indicar que despus de
ejecutar las sentencias correspondientes al caso, se debe salir del switch.
Compilamos y probamos. Ahora, como podrn apreciar, este switch solo se ejecuta una vez. En caso de que
quisieramos hacerlo repetitivo hasta que se diga salir, podemos insertarlo dentro de un ciclo y poner como
condicin que se ejecute mientras no se seleccione la opcin de salida.
As de simple es la iteracin switch. Es de gran utilidad para ordenar nuestras opciones y en especial para
utilizarlo con mens, as que es muy recomendable aprender a usarlo y manejarlo para los programas que
vayamos a desarrollar.
2.- Vectores:
Tal como veamos en pseudo-lenguaje, en la programacin existen unas variables especiales conocidas como
arreglos, las cuales presentan la facultad de almacenar mltiples valores, ya sea unidimensionalmente o
bidimensionalmente. Los vectores representan los primeros.
En C, tambin podemos utilizar vectores, de la misma forma en la que los planteabamos para pseudocdigo,
es decir, declarndolos y rellenndolos segn su posicin, as como las mismas condiciones para recorrerlos
y leerlos.
Tal como en todos los casos, no entraremos a repetir las definiciones que hemos hecho en guas anteriores y
slo nos preocuparemos de su uso en lenguaje C.
Veamos un pequeo ejemplo, para que nos quede todo ms claro:
Ejemplo: Declararemos un vector, lo rellenaremos y luego mostraremos su contenido:
#include
<stdlib.h>
#include
#include <conio.h>
<stdio.h>
Ahora, si nos fijamos en el ejemplo, podemos ver que dentro del ciclo for, hemos definido la variable i y no al
principio del programa. Esto es posible en este tipo de ciclos, pero esa variable solamente vive dentro del
bcle y no despus (por eso la volvemos a declarar en el segundo ciclo). Esta es una gran forma de matar
variables rpidamente despus de su uso y no gastar espacio innecesariamente.
3.- Matrices:
En el caso de las matrices, utilizamos procedimientos bastante similares a los de los vectores, salvo que,
siendo arreglos bidimensionales, para recorrer una matriz necesitaremos de 2 ciclos, uno para las filas, y 1
para las columnas.
La definicin tambin vara en el nmero de dimensiones que declaramos. Si para los vectores hacamos una
declaracin del tipo vector [5] por su unidimensionalidad, para las matrices aplicamos una definicin del
tipo matriz [5[[5], la primera relacionada con sus filas, y la 2da con sus columnas.
Veamos un ejemplo para que nos quede ms claro.
Ejemplo: Repetiremos el ejemplo anterior, pero en este caso utilizaremos una matriz:
#include
<stdlib.h>
#include
#include <conio.h>
<stdio.h>
<stdlib.h>
#include
#include <conio.h>
<stdio.h>
<stdlib.h>
<stdio.h>
int codigo, cantidad, valor, total, vuelto, pago; /* Declaramos las variables que usaremos en el proceso */
int ok=1; /* Adicionalmente declaramos una variable ok, que nos servir de bandera para un ciclo que
usaremos */
int opcion=1; /* Declaramos una variable opcion, que regulara si queremos hacer ms de una venta */
int main()
{
while(opcion==1)
{
while(codigo!=4) /* Definimos un ciclo que se ejecute siempre que el usuario no presione la tecla para
finalizar la venta */
{
printf(\t Lista de productos\n); /* Listamos los productos */
printf(Codigo\t Nombre\t Precio\n);
printf(1\t Silla\t 100\n);
printf(2\t Puerta\t 350\n);
printf(3\t Sillon\t 200\n);
printf(\nPara cerrar la venta, presione 4); /* Aadimos la opcin para cerrar la venta */
printf(\nIngrese el codigo del producto que desea llevar: ); /* Pedimos el cdigo del producto */
scanf(%d,&codigo); /* Leemos el cdigo del producto */
if(codigo==4) /* Si el cdigo es igual a 4, significa que la venta est finalizada, as que cerramos el
proceso de venta */
break;
printf(\nIngrese la cantidad que desea llevar: ); /* Pedimos la cantidad */
scanf(%d,&cantidad); /* Leemos la cantidad */
if(codigo==1) /* Igualamos el cdigo para asignar el precio */
valor=100;
if(codigo==2)
valor=350;
if(codigo==3)
valor=200;
total=total+(valor*cantidad); /* A total le asignamos, el total acumulado hasta ahora, ms el nuevo valor y
nueva cantidad, multiplicados entre s */
}
printf(\nEl total es de: %d,total); /* Saliendo de la venta, indicamos el total */
while(ok==1) /* Declaramos un ciclo con la variable ok, para el proceso de pago y vuelto, as se
ejecutar hasta que se pague la cantidad correcta */
{
printf(\nIngrese el pago: ); /* Solicitamos el pago */
scanf(%d,&pago); /* Leemos el pago */
if(pago<total) /* Si el pago es inferior al total, mostramos un mensaje de error */
printf(\nEl pago no es suficiente);
else /* De lo contrario, cambiamos el valor de ok para romper el ciclo y mostramos los mensajes de
vuelto */
{
ok=0;
vuelto=pago-total;
printf(\nEl vuelto es de: %d,vuelto);
}
}
printf(\nDesea hacer otra venta? (1=Si , 0=No): ); /* Preguntamos si desea hacer otra venta */
scanf(%d,,&opcion); /* Leemos la respuesta */
}
printf(\nVenta finalizada); /* Mensaje final */
getch(); /* Programa en pausa hasta pulsar una tecla */
}
Como podemos apreciar en esta nueva versin, hacemos uso de algunos ciclos. De esta forma, podemos
hacer una venta de mltiples productos, y validamos el pago hasta que sea el correcto, para as completar de
forma correcta la venta. Adems, luego de finalizar una venta, podemos hacer otra automticamente al
sealarlo y de esta forma no necesitamos volver a ejecutar el programa cada vez que queramos vender algo.
Recordemos que nuestro programa lo vamos construyendo de a poco, an hay muchos puntos que pueden
ser mejorados y eso es lo que iremos haciendo en los prximos nmeros. Por ahora lo dejaremos aqu, pero
los incentivamos a que vayan aadiendo nuevas cosas de lo que hemos ido aprendiendo.
En la prxima edicin de Cmo aprender a programar y no morir en el intento:
1.
2.
3.
4.
Contenidos
1.
2.
3.
4.
Funciones.
Aadiendo un men al terminal de venta.
Ahora, en un escenario ms normal an, estos datos nunca estarn necesariamente ordenados bajo algn
criterio en particular, por lo que si necesitaramos acceder a ellos bajo un orden especial, sera imposible
lograrlo por si solo.
Para esto es que en la programacin existen los mtodos de ordenamiento, los cuales son bsicamente
algoritmos que realizan una lectura de una serie de datos y un posterior ordenamiento de acuerdo a ciertos
criterios (alfabeticamente, menor a mayor, etc).
Existen una serie de mtodos de ordenamiento como el de la burbuja, quicksort, insercin, seleccin, etc.
Cada uno de ellos se diferencia del otro tanto en su funcionamiento como en el costo (de ejecucin) que
significan para el programa en s.
Qu mtodo utilizar?
Si bien, como decamos, cada mtodo presenta ciertas ventajas por sobre otro, en ningn caso son
diferencias radicales y en estricto rigor no se notan a menos que trabajemos con cantidades msivas de
datos, por lo que el consejo por ahora es utilizar el mtodo que encontremos ms sencillo y/o nos acomode
ms. A pesar de esto hay escenarios que presentan una mejor adaptabilidad a un mtodo en particular. Ya
iremos viendo ms de esto en futuras guas.
Partiendo veremos uno de los mtodos ms conocidos y utilizados como es el mtodo de la burbuja,
llamado de esta forma por la forma en que se realiza el ordenamiento de datos, emulando una burbuja.
Cmo funciona el mtodo de la burbuja?
Este mtodo, utilizado comunmente cuando se necesita ordenar datos dentro de un vector o una matriz,
funciona mediante el uso de 4 variables:
1.
2.
3.
4.
Una variable que recorre el vector una posicin ms adelante que la variable anterior.
Una variable auxiliar.
La forma de funcionamiento es bastante simple: Nuestro vector es recorrido por una variable (la definida en el
nmero 2) y por otra en una posicin ms adelante. Vamos realizando una comparacin entre las 2 variables
y si se cumple el criterio establecido se hace un movimiento circular: El valor ms adelantado pasa a la
variable auxiliar, el valor ms atrasado pasa a la posicin adelantada y el valor de la variable auxiliar pasa a la
posicin retrasada. Esto se realiza hasta que se alcanza el final del vector en cuestin.
Veamos un ejemplo de este mtodo de ordenamiento:
Ejemplo: Ordenar un vector de tamao 5 de menor a mayor mediante el mtodo de la burbuja (los
comentarios, como siempre, en negrita, cursiva y entre /* y */):
#include
#include
#include <stdlib.h> // Incluimos las libreras
int main()
{
<stdio.h>
<conio.h>
En que se diferencian?, tal como en el caso de los mtodos de ordenamiento, cada uno de estos mtodos se
separa de otro por la forma en la que trabajan y el costo de ejecucin que implica para el programa en s.
Todas a su vez tienen una serie de ventajas y desventajas, siendo la ms costosa de todas la bsqueda
secuencial, debido a que su forma de trabajo es buscar una referencia indicada registro por registro, uno a la
vez como si examinramos una serie de filas una por una hasta encontrar lo que buscamos. Sin embargo, es
esta ltima, la ms sencilla de implementar y la que menos requerimientos tiene.
Su funcionamiento se explica mediante el siguiente algoritmo:
Consideremos que tenemos un vector, el cual est lleno de cdigos numricos de productos de un
supermercado y necesitamos buscar un producto en particular. Al ingresar el cdigo a buscar y decirle al
programa que lo ubique en tal vector, operara de la siguiente manera:
1.
2.
Va a la posicin 1.
Compara el valor de esa posicin con el ingresado a buscar.
3.
4.
5.
Como podemos apreciar, es un funcionamiento simple y bsico, pero que funciona. El gran problema radica
cuando estamos operando con una cantidad masiva de datos, ya que los accesos a memoria seran
demasiados y el costo de ejecucin (algo que los programadores siempre deben tener en cuenta)sera alto.
Adicionalmente es bueno aadir que ese ejemplo referencia a un escenario ideal donde los cdigos no estn
repetidos. En caso de que lo estuviesen, deberamos avisar en cada posicin que se encuentre una
coincidencia.
Veamos un ejemplo de bsqueda secuencial:
Ejemplo: Llenar un vector de tamao 5 con nmeros y luego buscar algn valor y mostrar por pantalla la
posicin en la que se encuentra:
#include
#include
#include <stdlib.h> // Incluimos las libreras
int main()
{
int arreglo[5],i,valor,x;
/* Declaramos las siguientes variables:
arreglo = Un vector de 5 posiciones donde tendremos los valores.
i = Variable para recorrer el vector.
valor = Variable para guardar el valor a buscar
x = Bandera que utilizamos para marcar que hayan valores.
*/
x=0; // Dejamos como 0 a x, lo que significa que no se han encontrado coincidencias
printf (Ingrese valores para llenar el vector:\n);
// Mostramos un mensaje e introducimos valores al vector
for (i=0; i< 5; i++)
scanf(%d,&arreglo[i]);
<stdio.h>
<conio.h>
3.- Funciones
En la Parte 6 de esta saga, veamos en una primera instancia lo que eran las funciones cuando hablabamos
de pseudo-cdigo. Los conceptos son exactamente los mismos, as como la forma de funcionamiento y
operacin de la funcin en s, es decir:
tipo
{
nombre_funcion(valor
1,
valor
operacin
operacin
valor
n)
1;
2;
.
.
operacin n;
retorno
}
de
valor;
<stdio.h>
<conio.h>
<stdlib.h>
#include
#include <conio.h> /* Incluimos las libreras */
<stdio.h>
int codigo, cantidad, valor, total, vuelto, pago; /* Declaramos las variables que usaremos en el proceso */
int ok=1; /* Adicionalmente declaramos una variable ok, que nos servir de bandera para un ciclo que
usaremos */
int opcion=1; /* Declaramos una variable opcion, que regulara si queremos hacer ms de una venta */
int main()
{
while(opcion==1)
{
while(codigo!=4) /* Definimos un ciclo que se ejecute siempre que el usuario no presione la tecla para finalizar
la venta */
{
printf(\t Lista de productos\n); /* Listamos los productos */
printf(Codigo\t Nombre\t Precio\n);
printf(1\t Silla\t 100\n);
printf(2\t Puerta\t 350\n);
printf(3\t Sillon\t 200\n);
printf(\nPara cerrar la venta, presione 4); /* Aadimos la opcin para cerrar la venta */
printf(\nIngrese el codigo del producto que desea llevar: ); /* Pedimos el cdigo del producto */
scanf(%d,&codigo); /* Leemos el cdigo del producto */
if(codigo==4) /* Si el cdigo es igual a 4, significa que la venta est finalizada, as que cerramos el proceso de
venta */
break;
printf(\nIngrese la cantidad que desea llevar: ); /* Pedimos la cantidad */
scanf(%d,&cantidad); /* Leemos la cantidad */
if(codigo==1) /* Igualamos el cdigo para asignar el precio */
valor=100;
if(codigo==2)
valor=350;
if(codigo==3)
valor=200;
total=total+(valor*cantidad); /* A total le asignamos, el total acumulado hasta ahora, ms el nuevo valor y
nueva cantidad, multiplicados entre s */
}
printf(\nEl total es de: %d,total); /* Saliendo de la venta, indicamos el total */
while(ok==1) /* Declaramos un ciclo con la variable ok, para el proceso de pago y vuelto, as se ejecutar
hasta que se pague la cantidad correcta */
{
printf(\nIngrese el pago: ); /* Solicitamos el pago */
scanf(%d,&pago); /* Leemos el pago */
if(pago<total) /* Si el pago es inferior al total, mostramos un mensaje de error */
printf(\nEl pago no es suficiente);
else /* De lo contrario, cambiamos el valor de ok para romper el ciclo y mostramos los mensajes de vuelto */
{
ok=0;
vuelto=pago-total;
printf(\nEl vuelto es de: %d,vuelto);
}
}
printf(\nDesea hacer otra venta? (1=Si , 0=No): ); /* Preguntamos si desea hacer otra venta */
scanf(%d,,&opcion); /* Leemos la respuesta */
}
printf(\nVenta finalizada); /* Mensaje final */
getch(); /* Programa en pausa hasta pulsar una tecla */
}
Todo aquel cdigo se refiere a lo que nombraramos como mdulo de ventas, que es la funcionalidad
principal del programa. Para confeccionar un men, algo muy conveniente es hacer uso de un ciclo tipo dowhile y un switch, de la siguiente forma, utilizando una nueva variable llamada menu para recoger la opcin
elegida, nuestro programa quedara as:
llamado a libreras
declaracin de variables
inicio de funcin main
do
{
printf(1.printf(2.printf(3.printf(4.-
Mdulo
de
Administrar
Administrar
Cerrar
printf(Ingrese
scanf(%d,&menu);
ventas\n);
productos\n);
clientes\n);
sistema\n);
opcin:
);
switch(menu)
{
case 1: Aqu insertaramos nuestro cdigo anterior del mdulo de ventas
break;
case 2: Por ahora en blanco, pero ira el cdigo para administrar los productos
break;
case 3: Por ahora en blanco, pero ira el cdigo para administrar los clientes
break;
case 4: break;
}
}while(menu!=4);
fin de funcin main
Con ese cdigo, que dejaramos al principio de nuestro programa, insertando el cdigo anterior en el caso 1
del switch, le diramos al men que se ejecutase hasta que se seleccione la opcin 4, que es cerrar sistema.
No es un cdigo difcil de implementar, solo debemos fijarnos en el orden y no tendremos problemas.
Y eso sera en la edicin de hoy de Como aprender a programar y no morir en el intento. En el prximo
nmero cubriremos:
1.
2.
3.
Estructuras.
Recursividad.