Ya dejando un poco atrás la locura navideña, y preparándonos para recibir este año 2009, hemos decidido hacer un alto de las festividades (en confabulación con nuestro “maravilloso” servicio de hosting que nos ha fallado a diestra y siniestra, por lo que ofrecemos nuestras disculpas) y traerles un nuevo número de esta gran saga que ha sacado chispas busca darles una pequeña manito durante sus primeros pasos del mundo de la programación.
En el número anterior, nos adentramos en nuestro primer lenguaje real, C, haciendo una larga introducción y comparación con lo que habíamos visto hasta ahora, terminando con nuestro primer programa. En esta ocasión, seguiremos adentrándonos más en el tema y terminaremos con la confección de un programa algo más complejo.
Así que sin más espera, los invitamos a seguirnos después del salto, que no es en verdad un salto, sino que un “leer más”.
Nota: Como es habitual, les recomendamos, si no lo han hecho ya, leer los números anteriores de esta saga, que pueden encontrar en la categoría de Programación de CLH.
Tal como prometimos en el número anterior, en este veremos los siguientes contenidos:
Veremos bastante hoy, así que vamos, manos a la obra:
Si nos hemos fijado hasta ahora, siempre que realizamos algún ejemplo o ejercicio de código, en C, Pseudo-código o bien en nuestros tutoriales de PHP, siempre ponemos las explicaciones entre unos símbolos /* y */.
Esto, junto a otros símbolos, es lo que en la programación (a todo nivel) se conoce como comentarios.
Los comentarios en la programación, si bien no son obligatorios, se convierten en una herramienta util y su mayor función es entregarnos la posibilidad de añadir pequeñas anotaciones sobre lo que estimemos conveniente, ya sea sobre el código propiamente tal u otras cosas como notas de autoría 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 más de alguna ocasión nos tocará revisar códigos que hayamos realizado hace algún tiempo y puede que en ese programa hayamos utilizado alguna función o lógica 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 código es revisado por terceros o bien nosotros revisamos códigos hechos por alguien más.
Hay 2 formas de comentarios: los de línea simple y los de múltiples líneas. La única diferenciación es en los símbolos que utilizamos para iniciar y terminar los comentarios.
Cuando los comentarios son de línea simple solo debemos añadir al principio de la línea el símbolo // . Debemos tener en cuenta de que solo será válido como comentario lo que escribamos en la misma línea. Si pasamos a otra línea lo tomará como código y nos lanzará error, por lo que debemos utilizar símbolo de comentario de múltiples líneas.
Para múltiples líneas, 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 símbolos para cada caso, pueden utilizar siempre el formato de múltiples líneas, que cubre comentarios ya sea en 1 línea o en varias.
Cuando trabajabamos en Pseudo-código, una de las funcionalidades que más utilizabamos, era la lectura o recepción de datos ingresados por un usuario vía teclado. Eso nos permitía interactuar de una mayor forma con quien utilizaba el programa y realizar procesamientos mucho mejores y personalizados.
Pues bien, en C también podemos leer datos desde teclado, de una forma tan similar como en pseudolenguaje. Si recordamos el tutorial anterior, hablábamos de la función scanf, la cual nos permitía realizar esa tarea y que se utiliza de la siguiente forma:
scanf("%tipodevariable", &nombredelavariable);
Como podemos observar, esta función presenta 2 parámetros: %tipodevariable (entre comillas) y &nombredelavariable, los cuales a su vez presentan 2 signos: % y &. Vamos por parte explicando:
Con esas definiciones claras, veamos un pequeño ejemplo, para lo que utilizaremos el entorno de programación que instalamos en el número anterior:
Ejemplo: Realizar un programa que lea un dato numérico por teclado y luego mostrarlo por pantalla. (La explicación del código, como siempre en negrita, cursiva y entre /* y */.
#include <stdio.h> #include <stdlib.h> #include <conio.h> /* Partimos por agregar las librerías necesarias para nuestro programa, incluida la conio.h para hacer uso de la función getch( ); */ int numero; /* Declaramos una variable llamada numero de tipo int */ int main( ) { /* Declaramos la función main o principal */ printf("Ingrese un numero del 1 al 10: "); /* Mostramos un mensaje al usuario para que ingrese un numero del 1 al 10 */ scanf("%d", &numero); /* Con scanf leemos el dato, indicando con %d que es un dato de tipo int e indicamos que guardaremos la información en el área de memoria de la variable numero poniendo &numero */ printf("Ingreso el numero %d", numero); getch(); /* Mostramos el numero que ingreso el usuario, poniendo un mensaje con printf y en la posición donde mostraremos el número ponemos el símbolo correspondiente al tipo de dato, o sea %d, y luego de la coma la variable que mostraremos. En la línea 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 función main.
Compilamos el programa y no deberíamos tener errores. Lo ejecutamos y probamos que funcione.
Así de simple es la captura de datos vía teclado.
Las iteraciones condicionales en C son bastante similares a las que vimos en pseudocódigo (Si y Si No, Switch) y cumplen exactamente la misma función, esto es, ejecutar una serie de acciones a partir del cumplimiento de una condición. No entraremos en mayor detalle, pues lo vimos de forma bastante completa en el pasado.
En lo que si adentraremos es en como se usan en C:
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 y else. Esta iteración tiene las mismas características que en pseudo, o sea, todo else debe ir luego de un if y dentro de un if y de un else pueden ir múltiples if y elses. La forma de declaración es:
if(condición) { 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 más de una sentencia, necesariamente deben llevar llaves. Si desean, para evitar confusiones, podemos utilizar siempre las llaves.
Veamos un ejemplo ampliando el caso anterior. También pediremos un dato al usuario, pero en vez de mostrarlo lo someteremos a un simple if y else para ver si el número 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á más complejo y largo, pero la lógica es básicamente la misma.
La iteración switch la veremos en el próximo número, ya que implica un mayor nivel de detalle y no queremos extendernos por sobre los demás contenidos de momento.
Tal como las iteraciones, en pseudolenguaje también definimos y utilizamos ciclos y búcles 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 Pseudocódigo, en C (y otros lenguajes) es conocido como while y es uno de los más usados. La forma de utilizarlo es la misma, o sea:
while(condición) { sentencia 1; sentencia 2; }
Tal como en Pseudo, este ciclo sólo se ejecutará (y se mantendrá en ejecución) mientras la condición se cumpla.
Para
Este ciclo en lenguaje C es conocido como for y se utiliza de la misma forma, o sea:
for(inicialización de variable ; condición ; aumento o decremento de la variable) { sentencia 1; sentencia 2; sentencia 3; }
Tal como en el caso del ciclo while, este ciclo se continuará ejecutando mientras se cumpla la condición, pero a diferencia del anterior, este siempre se ejecutará, ya que la variable para la condición 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 condición no se cumpla y el while del final debe ir con punto y coma, o sea:
do { sentencia 1; sentencia 2; sentencia 3; }while(condición);
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á más que nada del gusto personal.
A continuación 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 <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("%d\n",numero); /* Mostramos el número y utlizamos \n para hacer salto de línea */ numero++; // Incrementamos el valor } for(numero=1;numero<=10;numero++) // Seguimos con un ciclo for especificando los parámetros { printf("%d\n",numero); // Mostramos el número } numero=1; // Reinicializamos el número a 1 do // Terminamos con un ciclo do-while { printf("%d\n",numero); // Mostramos el número numero++; // Incrementamos el valor }while(numero<=10); // Definimos la condición getch(); // Dejamos el programa en espera }
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.
Ahora que hemos visto aspectos básicos del lenguaje C, desarrollaremos un ejercicio en el que combinaremos todos los conocimientos adquiridos hasta ahora.
Lo que haremos será programar un terminal de venta simple, en donde primero desplegaremos una lista de productos, luego pediremos el código del producto, la cantidad que se desea llevar y mostraremos el total a cancelar. No nos complicaremos mucho y en el futuro iremos añadiendo 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 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 código del producto*/ scanf("%d",&codigo); /* Leemos el código */ printf("\nIngrese la cantidad que desea llevar: "); /* Solicitamos la cantidad que llevarán */ scanf("%d",&cantidad); /* Leemos la cantidad */ if(codigo==1) /* Comparamos mediante iteraciones el código para asignar el valor total */ valor=100; if(codigo==2) valor=350; if(codigo==3) valor=200; total=valor*cantidad; /* Multiplicamos el valor por la cantidad para obtener el total */ printf("\nEl total es de: %d",total); /* Mostramos el total */ printf("\nIngrese el pago: "); /* Solicitamos el pago */ scanf("%d",&pago); /* Leemos el pago */ if(pago<total) /* Vemos mediante un if si el pago es suficiente */ printf("\nEl pago no es suficiente"); else { vuelto=pago-total; /* Obtenemos el vuelto */ printf("\nEl vuelto es de: %d",vuelto); /* Mostramos el vuelto */ } printf("\nVenta finalizada"); /* Damos el mensaje de despedida */ getch(); }
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 sólo producto, así que su aplicación es bastante limitada. Para poder realizar múltiples ventas o 1 venta de múltiples 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 próximas lecciones le iremos añadiendo más y más cosas a este programa para crear una aplicación mucho más completa.
Con esto damos por terminada la lección de hoy, hemos cubierto bastante y aún nos queda un largo camino por recorrer, así que mucha paciencia.
En la próxima edición de Como aprender a programar y no morir en el intento veremos:
Recuerden que como siempre, este tutorial ha sido:
Esperamos que este tutorial haya sido de utilidad para Uds.
Muchas gracias por leer, y será hasta una próxima oportunidad.
Staff CLH
7:21:32 pm
Ni porque lo copie me da un error todo #include
#include
#include
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 código del producto*/
scanf(“%d”,&codigo); /* Leemos el código */
printf(“\nIngrese la cantidad que desea llevar: “); /* Solicitamos la cantidad que llevarán */
scanf(“%d”,&cantidad); /* Leemos la cantidad */
if(codigo==1) /* Comparamos mediante iteraciones el código para asignar el valor total */
valor=100;
if(codigo==2)
valor=350;
if(codigo==3)
valor=200;
total=valor*cantidad; /* Multiplicamos el valor por la cantidad para obtener el total */
printf(“\nEl total es de: %d”,total); /* Mostramos el total */
printf(“\nIngrese el pago: “); /* Solicitamos el pago */
scanf(“%d”,&pago); /* Leemos el pago */
if(pago<total) /* Vemos mediante un if si el pago es suficiente */
printf("\nEl pago no es suficiente");
else
{
vuelto=pago-total; /* Obtenemos el vuelto */
printf("\nEl vuelto es de: %d",vuelto); /* Mostramos el vuelto */
}
printf("\nVenta finalizada"); /* Damos el mensaje de despedida */
getch();
}
7:26:03 am
Hola! Este tutorial está genial, muchas gracias por todo.
Tengo una duda, qué es y y por qué van ahí?
Me daba error al compilarlo, lo eliminé y funciona perfectamente.
Gracias de todos modos!
10:00:11 am
@Ender: Son etiquetas HTML que se nos pasaron en el código, no deberían ir ahí, las quitaremos. Gracias por avisarnos!
10:22:02 am
Hola, antes que nada agradecer por estos excelentes tutoriales.
No tienen desperdicio y esta parte 8 esta perfecta. Me ha motivado un monton.
Hacia unos años que queria meterme en esto de la programacion, pero no terminaba de agarrar viaje 🙂
El metodo que usan esta buenisimo y la progresion y nivel de los tutoriales es el adecuado.(a mi gusto)
Sigan asi!!!!