Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
intento: Parte 2
Nota: Si por alguna razn se perdieron la primera parte de esta saga, pueden leerla en este enlace.
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:
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?.
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
conarchivos 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.
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. Int: Corresponde a nmeros enteros (correspondiente al universo Z de las matemticas). El rango 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.
2. 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. Char: Corresponde a valores de caractres alfanumricos (0 a 9 y abecedario). Solo se puede almacenar un valor
dentro de este tipo de variables.
4. Boolean: Corresponden a valores de tipo lgico. Almacenan slo 2 posibles valores: true o false.
5. String: Corresponde a una cadena de caractres, por ejemplo una palabra o frase. Su rango depende de cada
lenguaje.
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.
Introduccin al Pseudo-Cdigo
El Pseudo-Cdigo, como su nombre lo indica, es una especie de lenguaje de programacin utilizado para
introducir a los futuros programadores a la estructura de la realizacin de programas.
En l, se utilizan todos los recursos de un lenguaje de programacin normal, a pesar de que los nombres y conceptos
puedan variar dependiendo de quien lo ensee, y se busca principalmente practicar un poco la lgicaque
posteriormente debemos implementar.
Lo principal que se debe entender, es que a pesar de establecer algunas reglas sobre como se operar con elpseudo-
cdigo, los nicos errores que se pueden cometer son de lgica y no como expresamos las distintas funcionalidades
del programa, as que hay que irse sintiendo lo suficientemente libres para experimentar.
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:
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
Fin
A medida que vayamos haciendo programas ms complejos veremos como este formato se va a ampliando. Una
explicacin de las partes:
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.
Para hacer nuestro bautizo oficial en el mundo de la programacin, partiremos por realizar el ejercicio ms clsico
que aparece en todos los libros de programacin de aqu a la eternidad, el famoso Hola mundo.
En este programa lo que haremos ser simplemente mostrar un mensaje en pantalla que diga Hola Mundo. El cdigo
a continuacin, y los comentarios van en negritas, cursiva y entremedio de /* y */.
dijo: Inicio
Principal( )
/* Definimos la funcin Principal que es donde ir el cuerpo del programa. Ya adentraremos el tema de las
funciones */
/* 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 */
[/quote]
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. Variables.
3. Pseudo-cdigo.
4. Paradigmas de programacin.
5. Hicimos nuestro primer programa.
Bastante, no?, pues bueno, en la prxima gua nos enfocaremos principalmente en ms sobre Pseudo-
cdigo:
1. Definicin de variables.
2. Leyendo datos desde teclado (ingresados por el usuario).
3. Iteraciones condicionales (Si, Si no).
4. Ciclos o bcles.
Por ahora es mi deber recordar que como siempre, este tutorial ha sido desarrollado, probado y documentado
por el equipo de Como Lo Hago por lo que cuenta con nuestro infalible y a veces programable Sello de
garanta. Cualquier comentario, problema o duda que puedan tener, sientanse libre de dejarnos unas lneas en
el rea habilitada a continuacin.
Parte3
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.
Bueno los espero en la cuarta edicion, no se olviden de comentar, seguir y dar puntos!!!
Ah les recuerdo que son 11 partes en donde veremos pseudocodigo , C y algo de C++
Es la hora, es la hora!, es la hora de seguir programando.
Tal como lo prometimos, ahora les traemos la cuarta parte de esta gua que est sacando chispas muchos
esperaban, en la cual seguiremos viendo el maravilloso mundo de la programacin de una manera sencilla.
Continuaremos justo desde donde terminamos la ltima vez, as que sin ms que decir, los esperamos despus del
salto.
intento: Parte 4
Nota: Si es primera vez que entran en estos tutoriales, les recomendamos leer las partes anteriores para estar al da
con lo que ya hemos cubierto:
Parte 1.
Parte 2.
Parte 3.
Y tal como es costumbre, partiremos por revisar los contenidos de esta edicin:
Contenidos:
En la edicin anterior de esta saga, comenzamos a ver lo que son las iteraciones condicionales y como aplicarlas
cuando dentro de un programa necesitamos tomar un camino u otro, en su mayora mutuamente excluyente, a partir de
una condicin dada. La simpleza de su utilizacin pudimos apreciarla a travs de los ejercicios resueltos.
Pero la programacin, como la vida, siempre se complica, y eso es lo que haremos ahora.
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:
dijo:Si (condicin)
sentencia 1;
Si no
Si(condicin)
sentencia 2;
Si no
sentencia 3;[/quote]
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:
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:
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.
A pesar de que el Si y Si no (if y else en los lenguajes reales) es la iteracin condicional ms utilizada, existe una
bastante til al momento de evaluar distintos escenarios dentro de un programa, la cual es el famoso Switch, el cual
evala el valor de una variable y a partir de ese valor presenta distintas sentencias a partir de posibles casos que se
puedan dar.
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 x:
Sentencia 1;
Salir;
Si la variable es y:
Sentencia 2;
Salir;
Si la variable es z:
Sentencia 3;
Salir;
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. */
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 */
salir;
/* Luego definimos el caso 2, tal como el anterior */
caso 3: mostrar(Los usuarios son: );
.
salir;
/* A continuacin el caso 3 */
}
}
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.
Ciclos o Bcles
Un aspecto importantsimo de la programacin, es el uso de ciclos o bcles, los cuales son utilizados en el 99,9% de
los programas de alto nivel, ya veremos porque.
Hasta este momento, hemos desarrollado una serie de programas donde damos inicio, ejecutamos algunas
sentencias de forma ordenada, secuencial y estructurada y los finalizamos. Con los conocimientos que poseemos
hasta este punto, si quisieramos ejecutar una operacin un determinado nmero de veces, tendramos que definir una
lnea para cada vez que queramos ejecutar la operacin, lo cual si el nmero de repeticiones es largo, se convertira en
una operacin tediosa y tendramos un programa con un gran nmero de lneas.
Para economizar este proceso y hacer todo mucho ms sencillo es que aparecen los ciclos, los cuales nos permiten
ejecutar una sentencia un nmero de veces que nosotros determinemos a partir de una condicin dada.
Existen 3 ciclos comunes que se utilizan, cada uno de ellos con caractersticas especiales e ideales para cierto tipo de
usos:
1. Mientras (o while en los lenguajes reales): Se ejecuta si es que la condicin dada se cumpla y correr tantas veces
segn se respete esa condicin.
2. Haga Mientras (o do-while en los lenguajes reales): Se ejecuta tantas veces segn se respete la condicin dada. A
diferencia del Mientras, este ciclo se ejecuta al menos una vez.
3. 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.
1. Una variable a utilizar en la condicin que definir la duracin del ciclo, la cual puede ser definida por nosotros o por
un dato ledo desde teclado.
2. Un valor inicial para esa variable, una vez ms, definido por nosotros o por el usuario.
3. Una condicin para evaluar esa variable y que definir la duracin de la ejecucin del ciclo.
4. 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.
Haremos un programa donde enumeremos del 1 al 100, utilizando los 3 tipos de ciclos descritos con
anterioridad.(comentarios en negrita, cursiva y entre /* y */ )
Inicio
/* Damos inicio al programa */
Numero num=1;
/* Declaramos una variable de tipo Numero y nombre num, y le damos el valor inicial 1, que es desde donde
partiremos a enumerar */
Principal( )
{
/* 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:
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, problema o comentario, pueden dejarnos unas
lneas en el rea habilitada a continuacin.
Lo prometido es deuda, as que llegamos con una nueva edicin de esta gua en la que se 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.
intento: Parte 5
Contenidos
2. Vectores
3. Matrices
Hasta ahora, todos los datos con los que hemos trabajado los hemos almacenado en variables, las cuales entre sus
caractersticas podemos indicar que son capaces de almacenar un valor simple, o sea un nmero (de uno o ms
dgitos) o un carcter (o cadena de ellos) o un valor booleano. De cualquier forma siempre almacenan solamente un
y nada ms que un valor a la vez.
Pero, qu pasa si es que necesitamos almacenar ms de un valor?. Podramos usar ms variables, sin embargo,
cuando los valores necesarios de almacenar son 10 o ms, disponer de tantas variables, y ms importante an,
recordar sus nombres y manipularlas, puede ser bastante engorroso.
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.
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:
_______
01234
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++;
}
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
Numero vector[5];
Numero i=0;
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 %numero del vector, i);
leer(vector, &numero);
i++;
i=0;
}
mostrar(Los valores ingresados fueron: );
mientras(i<5)
{
mostrar(%numero, 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 lascolumnas. 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[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
Numero matriz[4][4];
Numero i=0;
Numero j=0;
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.
i=0;
j=0;
mientras(i<4)
{
mientras(j<4)
{
mostrar(%numero,matriz[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.
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.
intento: Parte 6
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 mis posts.
Contenidos
1. Funciones.
Como pueden apreciar, hay harto que cubrir, as que vamos directo a eso:
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:
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.
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 1;
operacin 2;
sentencia 1;
sentencia 2;
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 la funcin obligatoriamente.
2. 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 revisando.
3. 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 nombre de ese parmetro, tal como si definiramos variables. Estos nombres no pueden
repetirse dentro de la funcin.
4. 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. Todo est permitido.
5. Valor a retornar: Esto es opcional, una funcin puede o no retornar un valor, ya que muchas veces el resultado
podemos mostrarlo directamente en pantalla con la funcin mostrar. Si decidimos devolver un valor, lo hacemos
mediante la sentencia retornar junto al valor o variable que enviemos. Solo debemos recordar que el valor o variable
retornado tiene que coincidir con el tipo de la funcin.
Con toda la definicin ya ms clara, veremos un ejemplo de declaracin y uso de funciones:
Ejemplo: Realizaremos un programa en donde crearemos una funcin que defina que nmero es mayor entre 2
entregados como parmetros. Los comentarios, como siempre, en negrita, cursiva y entre /* y */:
Inicio
/* Damos inicio al programa */
principal ( )
{
/* Declaramos la funcin principal del programa */
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 */
/* 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.
En estos momentos que estamos llegando al final de nuestra cobertura sobre el pseudo-cdigo o pseudo-lenguaje, es
bueno repasar algunas consideraciones antes de adentrarnos al lenguaje real en el que decidamos programar,
por ejemplo:
1.- Recordemos que el pseudo-lenguaje no es un lenguaje de programacin real, y por ende, lo que hemos cubierto
hasta ac no lo encontrarn en libros o puede que aparezca de forma distinta. No se preocupen, el objetivo nunca ha
sido ni ser que nos convirtamos en expertos de pseudo-cdigo, si no que entendamos como se desarrollan los
procedimientos en la programacin y como plantearnos soluciones a los problemas mediante el entendimiento de la
estructura de los programas.
2.- El pseudo-cdigo, a pesar de no ser un lenguaje real, utiliza un paradigma estructurado y por la forma y palabras
que normalmente se uilizan, se asemeja bastante al lenguaje C, por lo que es la opcin natural para seguir. Veremos
ms de esto en el prximo punto.
3.- Lamentablemente, al no tratarse de un lenguaje real, no existe ningn software que podamos utilizar para
programar y as ver nuestros errores para poder solucionarlos. Esto por un lado es bueno, ya que agudiza nuestra
forma para leer el cdigo y detectar errores, algo que nos servir de sobremanera ms adelante.
4.- Es recomendable que repasemos e intentemos entender de la mejor forma todos los puntos explicados en esta y
pasadas ediciones de esta saga. Si bien hemos cubierto una pequea parte de todo lo que comprende la
programacin, hasta ahora hemos visto las bases fundamentales para entender los lenguajes reales y todo el resto de
aplicaciones dentro de la programacin, por lo que entender de la mejor manera estas bases ser esencial para que la
enseanza no se complique ms adelante.
Ahora que hemos de alguna forma terminado con el pseudo-lenguaje ha llegado un momento importante:Decidir el
lenguaje de programacin que empezaremos a aprender.
Esta decisin no es sencilla, y depende de varios factores, entre ellos el paradigma de programacin, la facilidad del
lenguaje, la extensibilidad y funcionalidades, actualizacin con los tiempos e incluso preferencia personal entre
muchas otras razones.
Al momento de elegir debemos tomar esas consideraciones, aunque tambin fijarnos en otras como ladocumentacin
disponible, grupos de usuarios y todo lo que nos pueda apoyar a que el aprendizaje sea ms sencillo.
Como experiencia personal, y el camino que seguiremos en esta saga de tutoriales, una de las mejores opciones para
continuar es el lenguaje C, esto debido a lo similar que es al pseudo-cdigo que hemos visto y porque ambos
comparten el mismo paradigma estructurado, con lo que la transicin se hace mucho ms sencilla y as es posible
pasar a otros lenguajes con mayor facilidad en el futuro. As que preprense, que para all vamos.
1. Paradigma estructurado: Es el paradigma que hemos estado viendo hasta ahora con el pseudo-lenguaje 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, operando con ellos y mostrando resultados. No tienen ms profundidad que eso.
2. Paradigma orientado a objeto: A diferencia del estructurado, en este paradigma, todo se trata como un objeto,
cada uno de ellos con atributos, tal como si hablramos de objetos del mundo real. Los lenguajes de POO
(programacin orientada a objetos), operan mediante distintas clases, que son plantillas que determinan el
comportamiento de un objeto. Pueden haber clases donde se determine un objeto, sus atributos y los mtodos
(parecido a las funciones) que se aplican a ellos y otras clases donde solo se encuentre el mtodo principal (como la
funcin principal). Este es un paradigma mucho ms complejo que no queremos detallar por ahora para no
confundirnos, porque el paso desde un lenguaje estructurado a uno POO complica al principio, pero no se preocupen,
ya lo veremos.
3. Paradigma orientado a eventos: En este paradigma se habla de lenguajes que dentro de un programa, presentan
una serie de acciones que estn siempre listas y se encuentran en espera para dispararse de acuerdo a un evento
que ocurra (normalmente ejecutado por un usuario). Por ejemplo, tenemos programas como Word o Excel, que en sus
mens y botones cuentan con 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.
4. 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.
intento: Parte 7
Viendo que ahora ingresaremos a la programacin propiamente tal, es bueno indicar los:
Implementos necesarios:
Un entorno de programacin en C (recomendamos Dev C/C++ de Bloodshed, un buen entorno de programacin que
adems es gratuito. Ese es el que utilizaremos a travs de los siguientes tutoriales. Pueden descargarlo en este
enlace).
Con todo eso claro, vamos a los contenidos que cubriremos hoy:
Contenidos:
1. Introduccin al lenguaje C.
2. Libreras.
3. Variables en C.
4. Funciones bsicas.
5. Primer programa en C.
Introduccin al Lenguaje 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.
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.
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:
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 rango permitido.
char: Se utilizan para almacenar caracteres, tal como el tipo Letra de Pseudo-cdigo.
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 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.
Funciones bsicas
En nuestros primeros programas de Pseudo-cdigo, utilizamos una serie de funciones bsicas para leer datos desde
teclado o mostrarselos al usuario, as como operaciones matemticas y otras cosas similares que nos ayudaron a llevar
a cabo nuestros programas ms simples.
En C tenemos estos mismos operadores y funciones, con unas leves diferencias como veremos a
continuacin:
a) La Funcin Principal: En Pseudo-cdigo utilizabamos la funcin principal ( ) que era donde escribamos el cuerpo
del programa. En C tambin tenemos una funcin principal, pero la diferencia es que aqui tiene un tipo (tipo int) y su
nombre es main. Entonces, para declarar la funcin principal decimos:
int 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 pseudo-cdigo,
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
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:
c) Leyendo informacin desde teclado: Tal como debemos recordar, en pseudo-cdigo utilizabamos la sentencia
leer. En lenguaje C, utilizaremos scanf, que funciona de la misma forma que la hemos utilizado hasta ahora, es decir:
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.
Primer programa en C
Para terminar con el capitulo de hoy, nos tomaremos un pequeo descanso de tanta teora, y realizaremos nuestro
primer programa en C. Para eso, crearemos un archivo fuente donde estar nuestro cdigo en nuestro entorno de
programacin (Si instalaron Dev-C++ vamos al men Archivo > Nuevo > Archivo Fuente o bien presionamos CTRL +
N) con lo que se abrir una plantilla en blanco. Ah es donde escribiremos el cdigo.
Entonces bien, tal como fue clsico en pseudo-cdigo, aqu lo seguir siendo, as que haremos nuestro nunca bien
ponderado Hola Mundo, pero ahora en C. El cdigo a continuacin, y los comentarios como siempre, en negrita,
cursiva y entre /* y */:
#include <stdlib.h>
#include <stdio.h>
/* Partimos por incluir las libreras stdlib.h y stdio.h mediante #include */
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 <stdlib.h>
#include <stdio.h>
int 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.
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 numero 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.
intento: Parte 8
Nota: Como es habitual, les recomendamos, si no lo han hecho ya, leer los nmeros anteriores de esta saga, que
pueden encontrar en la lista de mis posts.
Tal como prometimos en el nmero anterior, en este veremos los siguientes contenidos:
Contenidos:
1. Comentarios.
2. Leyendo datos desde teclado.
3. Iteraciones condicionales.
4. Ciclos o bcles.
5. Ejercicio: Programando un terminal de venta simple.
Comentarios
Si nos hemos fijado hasta ahora, siempre que realizamos algn ejemplo o ejercicio de cdigo, en C, Pseudo-cdigo 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.
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);
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 entre otras.
El smbolo %: Este smbolo siempre debe ir por obligacin acompaando a los smbolos indicados 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 <stdio.h>
#include <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;
int main( )
{
/* Declaramos la funcin main o principal */
scanf(%d, &numero);
/* Con scanf leemos el dato, indicando con %d que es un dato de tipo int e indicamos que guardaremos la
informacin en el rea de memoria de la variable numero poniendo &numero */
Iteraciones condicionales
Las iteraciones condicionales en C son bastante similares a las que vimos en pseudocdigo (Si y Si No, Switch) y
cumplen exactamente la misma funcin, esto es, ejecutar una serie de acciones a partir del cumplimiento de una
condicin. No entraremos en mayor detalle, pues lo vimos de forma bastante completa en el pasado.
Si y Si no
En C se utiliza de la misma forma, radicando la diferencia en que en vez de ser Si y Si no, hablamos de if yelse. Esta
iteracin tiene las mismas caractersticas que en pseudo, o sea, todo else debe ir luego de un if y dentro de un if y de
un else pueden ir mltiples if y elses. La forma de declaracin es:
if(condicin)
{
sentencia 1;
sentencia 2;
}
else
{
sentencia 3;
sentencia 4;
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 <stdio.h>
#include <conio.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.
Ciclos o bcles
Tal como las iteraciones, en pseudolenguaje tambin definimos y utilizamos ciclos y bcles que cumplen la misma
funcionalidad que en C, por lo que no nos desviaremos definiendo nuevamente esos temas, si no que veremos cada
caso para C y luego un ejemplo que los reune a todos.
Mientras
El ciclo mientras que usabamos en Pseudocdigo, en C (y otros lenguajes) es conocido como while y es uno de los
ms usados. La forma de utilizarlo es la misma, o sea:
while(condicin)
{
sentencia 1;
sentencia 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:
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 1;
sentencia 2;
sentencia 3;
}while(condicin);
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.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int numero;
int main()
{
numero=1; // Asignamos el valor inicial a la variable
while(numero<=10) // Partimos con un ciclo while
{
printf(%dn,numero); /* Mostramos el nmero y utlizamos n para hacer salto de lnea */
numero++; // Incrementamos el valor
}
Luego de compilar y ejecutar podemos ver que como resultado se enumerar del 1 al 10, 3 veces seguidas, 1 por cada
ciclo que definimos.
Lo que haremos ser programar un terminal de venta simple, en donde primero desplegaremos una lista de productos,
luego pediremos el cdigo del producto, la cantidad que se desea llevar y mostraremos el total a cancelar. No nos
complicaremos mucho y en el futuro iremos aadiendo nuevas funcionalidades. As que manos a la obra:
#include <stdlib.h>
#include <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 productosn); /* Partimos por listar los productos, utilizamos t para separar los textos, tal
como si utilizaramos la tecla TAB */
printf(Codigot Nombret Precion);
printf(1t Sillat 100n);
printf(2t Puertat 350n);
printf(3t Sillont 200n);
printf(nIngrese el codigo del producto que desea llevar: ); /* Solicitamos el cdigo del producto*/
scanf(%d,&codigo); /* Leemos el cdigo */
printf(nIngrese la cantidad que desea llevar: ); /* Solicitamos la cantidad que llevarn */
scanf(%d,&cantidad); /* Leemos la cantidad */
Y as tenemos nuestro simple terminal de venta. Como podemos apreciar, este programa no es lo suficientemente
ptimo, ya que solo podemos realizar 1 venta por sobre 1 slo producto, as que su aplicacin es bastante limitada.
Para poder realizar mltiples ventas o 1 venta de mltiples productos es necesario el uso de ciclos para poder repetir
las acciones necesarias.
Desde ya los incentivamos a que vayan modificando este programa y agregando esa funcionalidad. De cualquier forma
en las prximas lecciones le iremos aadiendo ms y ms cosas a este programa para crear una aplicacin mucho
ms completa.
Con esto damos por terminada la leccin de hoy, hemos cubierto bastante y an nos queda un largo camino por
recorrer, as que mucha paciencia.
Hoy, en la parte 9, seguiremos viendo contenidos del lenguaje C, as como el programa que empezamos a
confeccionar en la edicin pasada.
Contenidos:
1. Iteracin Switch.
2. Vectores.
3. Matrices.
4. Continuacin de la confeccin de un terminal de venta.
Iteracin Switch
En el nmero anterior, veamos las iteraciones condicionales if y else, las cuales nos permitan tomar distintos caminos
dentro de un programa, dependiendo de una condicin determinada. Adems, cuando veamos los nmeros sobre
pseudo-lenguaje, conocmos una iteracin llamada Switch, la cual presentaba una funcionalidad bastante similar, pero
tal como explicbamos aquella vez, es bastante mejor para usar en casos determinados.
El funcionamiento de esta iteracin, ya lo hemos detallado en nmeros anteriores, por lo que no adentraremos en
repetir lo mismo, si no que veremos como funciona en lenguaje C.
Ahora, una buena pregunta, es Cundo usar if/else y cundo usar switch?. La verdad, es que como todo en la
programacin, es cosa de gustos. A pesar de que pueden haber casos en los que sea ms cmodo y/o 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 switch debe 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 <stdlib.h>
#include <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 */
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.
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.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main()
{
for(int i=0; i<5; i++) /* Definimos un ciclo para llenar el vector */
{
printf(nIngrese el valor de la posicion %d del vector: ,i);
scanf(%d,&vector[i]); /* Leemos los datos de cada posicin */
}
printf(nLos valores ingresados fueron: ); /* Mostramos los valores */
for(int i=0;i<5; i++)
{
printf(%dt,vector[i]);
}
getch(); /* Ponemos el programa en pausa hasta que se presione una tecla */
}
Como podemos ver, el procedimiento es el mismo que usabamos para pseudo-cdigo, utilizando ciclos tanto para
rellenar posiciones secuencialmente, como para leerlas, accediendo mediante el ndice que marcamos con la variable i,
que se va moviendo a lo largo del vector.
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.
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 por su unidimensionalidad, para las matrices aplicamos una definicin del
tipomatriz , la primera relacionada con sus filas, y la 2da con sus columnas.
Ejemplo: Repetiremos el ejemplo anterior, pero en este caso utilizaremos una matriz:
]#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main()
{
for(int i=0; i<3; i++) /* Definimos un ciclo para las filas */
{
for(int j=0; j<3; j++) /* Otro ciclo para las columnas */
{
printf(nIngrese el valor para la fila %d y la columna %d: ,i,j);
scanf(%d,&matriz[i][j]);
}
}
printf(Los valores ingresados son:n );
for (int i=0; i<3; i++) /* Mostramos los valores ingresados, tabulando y dando salto de lnea para hacer la forma de la ma
triz */
{
for (int j=0; j<3; j++)
{
printf(%dt,matriz[i][j]);
}
printf(n);
}
getch(); /* Ponemos el programa en pausa hasta que se presione una tecla */
}
El procedimiento es el mismo, pero solo nso enfocamos en recorrer 2 dimensiones en vez de una. A medida que
vayamos utilizando vectores y matrices en nuestros programas nos iremos acostumbrando cada vez ms a su
funcionamiento.
Terminal de venta
Si recuerdan, al final del nmero anterior, realizamos la confeccin de un terminal de venta, en el cual listabamos unos
productos y realizabamos una venta, especificando el vuelto correspondiente al cliente.
Hoy, seguiremos trabajando sobre ese terminal, aadiendo la funcionalidad de poder vender ms de un producto en
una venta y de realizar ms de una venta. Si recordamos, tenamos este cdigo:
include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main()
{
printf(t Lista de productosn);
printf(Codigot Nombret Precion);
printf(1t Sillat 100n);
printf(2t Puertat 350n);
printf(3t Sillont 200n);
if(codigo==1)
valor=100;
if(codigo==2)
valor=350;
if(codigo==3)
valor=200;
total=valor*cantidad;
#include <stdlib.h>
#include <stdio.h>
#include <conio.h> /* Incluimos las libreras */
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 productosn); /* Listamos los productos */
printf(Codigot Nombret Precion);
printf(1t Sillat 100n);
printf(2t Puertat 350n);
printf(3t Sillont 200n);
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 */
total=total+(valor*cantidad); /* A total le asignamos, el total acumulado hasta ahora, ms el nuevo valor y nueva cantida
d, 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.
Bienvenidos a una nueva edicin de Como aprender a programar y no morir en el intento. Soy su anfitrin, Juan
Xabadu, y tal vez me recuerden de pelculas como: Querida, me ca del Taxi y Jurassic Park vs Forrest Gump como
siempre, los acompaare en esta gran aventura en que nos hemos embarcado hace bastante tiempo, dando nuestros
primeros pasos en el mundo de la programacin.
Hoy veremos los primeros contenidos sobre mtodos de bsqueda y ordenamiento, as como funciones y
continuaremos con nuestro ejemplo del terminal de venta.
Contenidos
En un escenario normal, el 99,9% de los programas que realicemos operan con una cantidad de datos mediana a alta,
los cuales pueden ser o no ingresados por un usuario y son almacenados en distitnos medios, ya sea en variables,
arreglos o archivos entre otras cosas.
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.
Este mtodo, utilizado comunmente cuando se necesita ordenar datos dentro de un vector o una matriz, funciona
mediante el uso de 4 variables:
Una variable que recorre el vector una posicin ms adelante que la variable anterior.
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.
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 <stdio.h>
#include <conio.h>
#include <stdlib.h> // Incluimos las libreras
int main()
{
int arreglo[5], aux, i, j;
/* Declaramos las siguientes variables:
getch();
}
Como podemos ver, es un algoritmo bastante simple que cumple la funcin solicitada, ordenar de menor a mayor
aplicando el mtodo de la burbuja. Existen otros mtodos que sern de mayor utilidad cuando trabajemos con una
cantidad de datos mayor, pero por ahora con este podremos cumplir el objetivo sin problemas.
Una funcionalidad que siempre es til al momento de hacer un programa, es la de poder buscar un dato especfico del
que necesitamos saber informacin o bien trabajar con el.
En lenguajes de programacin de 3a generacin, orientados al proceso, como C, existen una serie de mtodos de
bsqueda que nos permiten cumplir esa tarea, entre ellos podemos destacar la bsqueda secuencial, la binaria, acceso
directo y el trabajo mediante ndices.
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.
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:
Va a la posicin 1.
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.
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 <stdio.h>
#include <conio.h>
#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);
getch();
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:
retorno de valor;
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // Incluimos las libreras
getch();
Siguiendo con nuestro clsico ejemplo del terminal de ventas, si recordamos, la ltima vez habamos dejado nuestro
ejemplo adaptado para poder realizar ms de una venta y vender en cada una de ellas ms de un producto.
Bueno, el trabajo que realizaremos hoy ser confeccionar un men para que la aplicacin sea ms completa y la
funcin de ventas solo sea una parte de ese men.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h> /* Incluimos las libreras */
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 productosn); /* Listamos los productos */
printf(Codigot Nombret Precion);
printf(1t Sillat 100n);
printf(2t Puertat 350n);
printf(3t Sillont 200n);
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 */
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 do-while 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
do
{
printf(1.- Mdulo de ventasn);
printf(2.- Administrar productosn);
printf(3.- Administrar clientesn);
printf(4.- Cerrar sisteman);
printf(Ingrese opcin: );
scanf(%d,&menu);
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);
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.
Y eso sera en la edicin de hoy de Como aprender a programar y no morir en el intento. En el prximo nmero
cubriremos: