Como aprender a programar desde 0 (parte 8)


Cómo aprender a programar y no morir en el intento – Parte 8

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 queha 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”.

Cómo aprender a programar y no morir en el intento – Parte 8

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:

Contenidos:

  1. Comentarios.
  2. Leyendo datos desde teclado.
  3. Iteraciones condicionales.
  4. Ciclos o búcles.
  5. Ejercicio: Programando un terminal de venta simple.
Veremos bastante hoy, así que vamos, manos a la obra:

1.- Comentarios.

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.

2.- Leyendo datos desde teclado.

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:
  1. tipodevariable: Tal como hemos visto en numerosas ocasiones, cada variable que definimos en un programa contiene un tipo de datos que puede almacenar (int, float, char, etc). A su vez, el lenguaje C utiliza unos simbolos que representan esos tipos y que se incluyen en las funciones scanf y printf para decirle al compilador que tipo de dato es el que estamos leyendo/mostrando. Estos simbolos son la d para variables de tipo int, la f para variables de tipo float y la c para variables de tipo char entre otras.
  2. El símbolo %: Este símbolo siempre debe ir por obligación acompañando a los símbolos 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.
  3. nombredevariable: Es el nombre que le damos a una variable en particular cuando la definimos.
  4. El símbolo &: En el lenguaje C, cuando utilizamos el símbolo & 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 información. Como dijimos hace algún tiempo, toda variable al momento de ser creada, apunta a un área de memoria interna del computador para manipular su información. A esta área accedemos con el símbolo & cuando leemos un dato.
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.

3.- Iteraciones condicionales.

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.

4.- Ciclos o búcles.

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.

5.- Ejercicio: Programando un terminal de venta simple.

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.
Fin

Como aprender a programar desde 0 (parte 7)


Cómo aprender a programar y no morir en el intento – Parte 7

En la última edición de esta saga, dimos por concluído el aprendizaje de Pseudo-código, un paso importante al momento de aprender a programar. Tan importante como el que prometimos que daríamos ahora, el ingreso al mundo de los lenguajes reales de programación.
Hoy, y en las próximas ediciones, nos adentraremos de lleno en la programación en C, donde intentaremos cubrir todo lo posible para que podamos convertirnos en unos aces de la programación.

Cómo aprender a programar y no morir en el intento – Parte 7

Viendo que ahora ingresaremos a la programación propiamente tal, es bueno indicar los:

Implementos necesarios:

  1. Un entorno de programación en C (recomendamos Dev C/C++ de Bloodshed, un buen entorno de programación que además es gratuito. Ese es el que utilizaremos a través de los siguientes tutoriales. Pueden descargarlo en este enlace).
Con todo eso claro, vamos a los contenidos que cubriremos hoy:

Contenidos:

  1. Introducción al lenguaje C.
  2. Librerías.
  3. Variables en C.
  4. Funciones básicas.
  5. Primer programa en C.

1.- Introducción al Lenguaje C:

Nota: La instalación del entorno de programación, hemos decidido no cubrirla, ya que es bastante estándar en lo que a instalaciones de programas se refiere. Les recomendamos hacer la instalación de forma normal, dándole siguiente en las ventanas y dejando las opciones que vienen por defecto. Más adelante indicaremos si es necesario hacer cambios sobre esto.
Y bueno, llegamos al momento que tanto esperabamos: Empezar a trabajar con lenguajes reales de programación.
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. Además, como iremos viendo a medida que nos adentremos en los siguientes capitulos, tiene mucha similitud con el Pseudo-código que hemos visto hasta ahora.
C es un lenguaje de programación que fue creado en 1972 en los laboratorios Bell. Utiliza un paradigma estructurado (también denominado como imperativo y/o procedural) y presenta una eficiencia notable en su código, además de características de bajo nivel que permiten controlar algunos aspectos de memoria y perifericos, por lo que se convierte en la elección favorita e idónea al momento de desarrollar aplicaciones e incluso desarrollos para Sistemas Operativos.
Los programas desarrollados en C, presentan una estructura bastante similar a la que habíamos visto hasta el momento en Pseudo-código, con algunas adiciones (como las librerías, que ya veremos) y uno que otro cambio, sobretodo en las palabras reservadas y algunas formas de definir cosas. Todo esto lo iremos viendo a su debido tiempo.
En resumen, algunos puntos a considerar para el futuro:
  • Los programas en lenguaje C, se escriben en entornos de programación, en realidad si queremos podemos escribirlos en block de notas, pero los entornos de programación presentan funcionalidades que nos hacen la vida mucho más fácil, desde la detección de errores hasta la orientación sobre algunas palabras reservadas y/o comandos.
  • En C, tal como en otros lenguajes, al momento de terminar nuestros programas, en el entorno de programación podemos “compilarlos”, lo que significa que el entorno hará una revisión del programa completo en busca de errores y nos advertirá sobre ellos para poder corregirlos.
  • Entre los tipos de errores que se pueden presentar al momento de compilar o terminar un programa, principalmente tenemos 2: los léxicos y los sintácticos. Los primeros se refieren a cuando tenemos algo dentro de nuestro programa que está mal escrito, por ejemplo si en vez de un ciclo while escribimos whlie. Por otro lado tenemos los errores sintácticos, que se refieren a cuando lo que hemos escrito no tiene sentido, por ejemplo el querer asignar un valor numérico a una variable de tipo carácter o algo por el estilo.
Iremos viendo más sobre estas y otras consideraciones y detalles a medida que vayamos avanzando en nuestro aprendizaje.

2.- Librerías:

Un punto muy importante dentro de la programación, en especial en el lenguaje C, son las famosas y nunca bien ponderadas librerías.

¿Qué es una librería?

Una librería es una plantilla que contiene una serie de funciones, las cuales pueden ser utilizadas por un programa que ha invocado esta librería al inicio. Las librerías normalmente representan una“categoría” de funciones (por ej. existe una librería donde están todas las funciones matemáticas más comunes) y de acuerdo a eso las invocamos.
El lenguaje C nos proporciona múltiples librerías para nuestras necesidades, por lo que cada vez que necesitemos realizar una determinada acción, podemos hacer una búsqueda de la función y por ende librería correspondiente. Adicionalmente, podemos crear nuestras propias librerías y utilizarlas libremente (así como otras que han sido creadas por otros usuarios y puestas a disposición en Internet).
Podemos reconocer las librerías por su extensión que es la letra “h”. Por ejemplo, si tuviéramos la librería comolohago, la encontraríamos como comolohago.h. Estas librerías se encuentran en el directorio include de nuestra instalación correspondiente al entorno de programación.
Tal como indicabamos en la definición, las librerías deben ser invocadas o en estricto rigor “incluidas” en el programa donde las vayamos a utilizar. Para esto, al inicio, en las primeras líneas de nuestro programa, debemos utilizar la sentencia #INCLUDE y el nombre de la librería entre < y >. Por ejemplo, si quisiéramos incluir la librería“ejemplo.h”, pondríamos al inicio de nuestro programa:
#INCLUDE <ejemplo.h>
Podemos incluir las librerías que queramos (siempre que existan). Sin embargo, no es recomendable incluir librerías 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 librería que no hayamos incluido, al momento de compilar nos lanzará un error avisándonos del hecho.
Antes de concluir con el capítulo sobre las librerías, es bueno añadir que las más comunes que se usan en prácticamente el 100% de los programas en C son las librerias stdlib.h y stdio.h, por lo que siempre es bueno añadirlas. Otra de las comunes es la conio.h, pero no es utilizada todo el tiempo y probablemente no la requeriremos hasta que vayamos mucho más adelante.

3.- Variables en C:

Al igual que en Pseudo-código, 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 números 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 más comunes que utilizaremos:
  1. int: Se utilizan para almacenar y operar con números enteros (correspondiente al conjunto Z de las matemáticas). 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 varían en el rango permitido.
  2. char: Se utilizan para almacenar caracteres, tal como el tipo Letra de Pseudo-código.
  3. float: Se utilizan para almacenar y operar con números decimales (correspondiente al conjunto Q de las matemáticas). Adicionalmente se pueden utilizar para almacenar números enteros, pero no es lo recomendable. Su rango va entre 3,4 *E-38 (elevado a) hasta 3,4 * E+38 (elevado a).
  4. 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 adentrándonos más y viendo más ejemplos.

4.- Funciones básicas:

En nuestros primeros programas de Pseudo-código, utilizamos una serie de funciones básicas para leer datos desde teclado o mostrarselos al usuario, así como operaciones matemáticas y otras cosas similares que nos ayudaron a llevar a cabo nuestros programas más simples.
En C tenemos estos mismos operadores y funciones, con unas leves diferencias como veremos a continuación:
a) La Función Principal: En Pseudo-código utilizabamos la función principal ( ) que era donde escribíamos el cuerpo del programa. En C también tenemos una función principal, pero la diferencia es que aqui tiene un tipo(tipo int) y su nombre es main. Entonces, para declarar la función principal decimos:
int main( )
{
código del programa
}
Adicionalmente, podemos decir que la función main de C, cuenta con 2 parámetros como argc (de tipo int) y argv(de tipo char, es un vector). Estos parámetros corresponden a argumentos que nosotros le podemos dar a un programa particular, siendo el primero un entero que indica el número de argumentos, y el segundo un vector de tipo char que contiene en cada posición los argumentos que enviamos. Esto es un poco avanzado, así que no lo veremos aún, pero podremos apreciar que es bastante útil.
b) Mostrando información por pantalla: Cuando queríamos mostrar algún tipo de información en pseudo-código, utilizabamos la sentencia mostrar. En C, utilizaremos printf, la cual se utiliza de la misma forma que la veníamos utilizando hasta ahora, es decir:
printf(“mensaje”);
o bien
printf(“%tipo de variable”,nombre de la variable);
Se puede utilizar una combinatoria de ambas. En la parte de %tipo de variable, utilizamos los tipos definidos en el lenguaje C, como por ejemplo:
%d: Si la variable es un entero (int).
%f: Si la variable es un decimal o punto flotante (float).
%c: Si la variable es un caracter (char).
c) Leyendo información desde teclado: Tal como debemos recordar, en pseudo-código utilizabamos la sentencia leer. En lenguaje C, utilizaremos scanf, que funciona de la misma forma que la hemos utilizado hasta ahora, es decir:
scanf(“%tipo de variable”,&nombre de la variable);
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 añadimos un &. Esto es necesario, ya que así le decimos al programa que guarde la información 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 acción.
d) Operadores matemáticos y lógicos: Son bastante similares a los que utilizabamos en pseudolenguaje, o sea:
  • +: Suma.
  • -: Resta.
  • *: Multiplicación.
  • /: División.
  • <: Menor que.
  • >: Mayor que.
  • ==: Igual a. (un solo igual es asignación de valor, no comparación).
  • !=: Distinto que.
  • %: Módulo, o resto de la división.
  • ++: Incremento en uno.
  • –: Decremento en uno.
Existen otros que iremos viendo a medida que los vayamos necesitando.

5.- Primer programa en C:

Para terminar con el capitulo de hoy, nos tomaremos un pequeño descanso de tanta teoría, y realizaremos nuestro primer programa en C. Para eso, crearemos un archivo fuente donde estará nuestro código en nuestro entorno de programación (Si instalaron Dev-C++ vamos al menú Archivo > Nuevo > Archivo Fuente o bien presionamosCTRL + N) con lo que se abrirá una plantilla en blanco. Ahí es donde escribiremos el código.
Entonces bien, tal como fue clásico en pseudo-código, aquí lo seguirá siendo, así que haremos nuestro nunca bien ponderado Hola Mundo, pero ahora en C. El código a continuación, y los comentarios como siempre, en negrita, cursiva y entre /* y */:
#include <stdlib.h>
#include <stdio.h>
/* Partimos por incluir las librerías stdlib.h y stdio.h mediante #include */
int main() /* Declaramos la función principal */
{
printf(“Hola Mundo”); /* Mostramos el mensaje */
}
Con el código escrito, no nos queda más que probar nuestro programa. Así que primero vamos al menú Ejecutar > 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 extensión .c) y en tipo seleccionamos C source files (*.c).
Guardamos y el entorno de programación compilará (o sea revisará el programa que escribimos en busca de errores). Si encuentra algún 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 programación que por defecto cuando un programa termina, cierra la ventana de ejecución. Por ahora haremos un pequeño truco para poder visualizar nuestro programa de forma correcta.
Añadiremos luego del mensaje, una función básica de C llamada getch();, la cual cumple la función de dejar el programa en espera hasta que el usuario presione una tecla, así podremos ver el resultado. Así que nuestro nuevo código quedaría 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.
Fin

Como aprender a programar desde 0 (parte 6)


Cómo aprender a programar y no morir en el intento – Parte 6

Continuando con nuestra interminable reconocida y solicitada saga orientada a quienes se empiezan a adentrar al mundo de la programación, hoy les traemos una nueva edición, realmente la última que veremos sobre Pseudo lenguajes y además las últimas consideraciones previas a la entrada a los lenguajes reales.

Cómo aprender a programar y no morir en el intento – Parte 6

Contenidos:

  1. Funciones.
  2. Ultimas consideraciones sobre Pseudo-código.
  3. Entrando a un lenguaje real.
  4. Más sobre los paradigmas de programación.
Como pueden apreciar, hay harto que cubrir, así que vamos directo a eso:

1.- Funciones.

El último tema que cubriremos sobre programación en pseudo-código 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 más en la programación.
Intentaremos simplificar este tema lo que más podamos. De cualquier forma, a pesar de la complejidad que puede presentar, no se preocupen si no lo entienden a la perfección en un comienzo, ya que a medida que vayamos viendo los ejemplos y en otros contenidos más avanzados iremos comprendiendo bien este tema.
Hasta ahora, cada vez que escribíamos un programa y dentro de el necesitábamos tener procedimientos de cálculo o manipulación de datos, los escribíamos línea por línea estructuradamente dentro del principal de nuestro programa, algo así:
Definición de variable / asignación de valor
Operación 1
Operación 2
Operación 3
Asignación de resultados
Si las operaciones anteriores las necesitamos utilizar más de una vez o para distintas variables, adicionalmente podíamos añadirlas 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 operación es de una sola línea, como una operación matemática 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 líneas de código, es cuando el tema se vuelve mucho más complejo y engorroso, ya que nuestros programas empiezan a aumentar de tamaño y será mucho más 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 parámetros que les entreguemos, y a la vez dándonos la opción de retornarnos un valor que puede ser constante o variable dependiendo de los resultados de las operaciones y cálculos internos de la función.
La programación está compuesta fundamentalmente de funciones, y hasta ahora, a través 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 función, es la que contiene los contenidos principales del programa que escribimos, valga la redundancia. A esa función no le entregamos ningún tipo de parámetros y no nos retorna nada. Otras funciones que hemos utilizado hasta ahora son las iteraciones condicionales (Si, Si no), los ciclos (mientras, para, haga mientras) y otras como leer, mostrar, etc.
¿Qué ventajas presentan las funciones?
Principalmente orden, comodidad y economía. El uso de funciones nos permite no tener que repetir operaciones según el número de veces que las vayamos a necesitar y en vez de eso solo definirlas una vez y llamarlas cuando sea necesario. Eso también implicará que nuestro programa sea mucho más liviano al momento de ejecutarse. Existen una serie de otras ventanas que iremos descubriendo más adelante.
Las funciones se escriben fuera de la función principal (normalmente por orden, se escriben después) y se definen de acuerdo a la siguiente estructura:
tipo     nombre_función(parámetro 1, parámetro 2, etc.)
{
operación 1;
operación 2;
sentencia 1;
sentencia 2;
retorno de variable;
}
Donde:
  1. Tipo: Detalla el tipo de valores que devuelve la función. Estos tipos pueden ser los mismos que los de las variables, los cuales han sido especificados en los números anteriores de esta saga. Sin embargo, no hay que confundirse, ya que por el hecho de que una función 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 función obligatoriamente.
  2. Nombre de la función: Es un nombre único, tal como si estuviésemos definiendo una nueva variable. El nombre de la función puede ser cualquiera, pero es recomendable, por orden, darle un nombre adecuado. Por ejemplo si definimos una función que encuentre el número máximo entre una serie de valores, es recomendable nombrar a esa función como numero_maximo. De esa forma, siempre podremos ver que hace cada parte de nuestro programa rápidamente cuando lo estemos revisando.
  3. Parámetros: Tal como hemos definido en distintas partes de esta saga de tutoriales, los parámetros que recibe una función son los que utilizará para operar dentro de ella y devolver resultados. Normalmente las operaciones declaradas en una función son procedimientos estándar que varían dependiendo de los valores que manejamos. En una función podemos recibir múltiples parámetros y estos pueden ser de distintos tipos, solo debemos asegurarnos de escribir primero el tipo y luego el nombre de ese parámetro, tal como si definiéramos variables. Estos nombres no pueden repetirse dentro de la función.
  4. Operaciones y sentencias: Básicamente podemos hacer lo mismo que hacemos dentro de nuestros programas, ya sea usar operadores matemáticos, iteraciones condicionales, ciclos, mostrar, leer, etc. Todo está permitido.
  5. Valor a retornar: Esto es opcional, una función puede o no retornar un valor, ya que muchas veces el resultado podemos mostrarlo directamente en pantalla con la función 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 función.
Con toda la definición ya más clara, veremos un ejemplo de declaración y uso de funciones:
Ejemplo: Realizaremos un programa en donde crearemos una función que defina que número es mayor entre 2 entregados como parámetros. Los comentarios, como siempre, en negrita, cursiva y entre /* y */:
Inicio/* Damos inicio al programa */
Numero num1, num2, mayor;
/* Declaramos 3 variables de tipo Número: num1 y num2 que serán 2 números que el usuario ingresará por teclado, y mayor, que será donde se almacenará el número mayor después de que la función nos devuelva el resultado */
principal ( )
{
/* Declaramos la función principal del programa */
mostrar(“Por favor ingrese el número 1: “);
leer(%numero, &num1);
mostrar(“Por favor ahora ingrese el número 2: “);
leer(%numero, &num2);

/* Mediante mostrar y leer, recibimos por teclado los 2 números ingresados por el usuario */
mayor=numero_mayor(num1, num2);/* A la variable mayor, le asignamos el resultado de llamar a la función numero_mayor, especificada luego de la función principal, pasándole como parámetros las variables num1 y num2 */
mostrar(“El número mayor de los que ingreso es: %numero”, mayor);/* Nuestra variable mayor ya recibió el resultado de la función, así que lo desplegamos */
}
numero numero_mayor(numero valor1, numero valor2)
{
/* Declaramos una función de tipo numero, llamada numero_mayor y que recibe como parámetro 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 iteración condiciional, hacemos una comparación entre los 2 números 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 programación. Hay un importante concepto que hemos utilizado ahora, pero que detallaremos más en profundidad cuando estemos hablando de lenguajes reales, que es el paso de parámetros desde una función a otra (lo que hicimos cuando llamamos a la función y lo que esta recibe por el otro lado). Por ahora no vale la pena entrar en esos detalles, pero ya los veremos más 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 más complejos a medida que vayamos programando más y más. Por ahora es una buena técnica ir combinando los otros contenidos que hemos visto en los capítulos anteriores con esto e ir practicando. Por ahora, al siguiente tema.

2.- Últimas consideraciones sobre el Pseudo-código:

En estos momentos que estamos llegando al final de nuestra cobertura sobre el pseudo-código 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 programación real, y por ende, lo que hemos cubierto hasta acá no lo encontrarán 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-código, si no que entendamos como se desarrollan los procedimientos en la programación y como plantearnos soluciones a los problemas mediante el entendimiento de la estructura de los programas.
2.- El pseudo-código, 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 opción natural para seguir. Veremos más de esto en el próximo punto.
3.- Lamentablemente, al no tratarse de un lenguaje real, no existe ningún 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 código y detectar errores, algo que nos servirá de sobremanera más 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 pequeña parte de todo lo que comprende la programación, hasta ahora hemos visto las bases fundamentales para entender los lenguajes reales y todo el resto de aplicaciones dentro de la programación, por lo que entender de la mejor manera estas bases será esencial para que la enseñanza no se complique más adelante.

3.- Entrando a un lenguaje real:

Ahora que hemos de alguna forma “terminado” con el pseudo-lenguaje ha llegado un momento importante: Decidir el lenguaje de programación que empezaremos a aprender.
Esta decisión no es sencilla, y depende de varios factores, entre ellos el paradigma de programación, la facilidad del lenguaje, la extensibilidad y funcionalidades, actualización con los tiempos e incluso preferencia personal entre muchas otras razones.
Al momento de elegir debemos tomar esas consideraciones, aunque también fijarnos en otras como la documentación disponible, grupos de usuarios y todo lo que nos pueda apoyar a que el aprendizaje sea más 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-código que hemos visto y porque ambos comparten el mismo paradigma estructurado, con lo que la transición se hace mucho más sencilla y así es posible pasar a otros lenguajes con mayor facilidad en el futuro. Así que prepárense, que para allá vamos.

4.- Más sobre los paradigmas de programación:

Tal como veíamos en este tutorial, actualmente existen 4 paradigmas comunes de programación, como son (ojo que son definiciones básicas, para que nos hagamos la idea de cada uno):
  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 declaración y funcionamiento estructurado para sus programas, en donde desde arriba a abajo en una misma “plantilla de programa” debe estar el inicio, la declaración de las variables del programa y las funciones (la principal y otras funciones). Todo definido desde su inicio a su final. Además, los lenguajes estructurados se enfocan principalmente en el tratamiento de datos, recibiéndolos, operando con ellos y mostrando resultados. No tienen más 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 habláramos de objetos del mundo real. Los lenguajes de POO (programación 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 métodos (parecido a las funciones) que se aplican a ellos y otras clases donde solo se encuentre el método principal (como la función principal). Este es un paradigma mucho más 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 están “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 menús y botones cuentan con múltiples mini-programas listos para ejecutarse cuando el usuario presione el botón o seleccione el menú. Por ahora no adentraremos más en esto, por las mismas razones el caso anterior.
  4. Paradigma orientado a aspectos: Este es un paradigma que actualmente se encuentra bajo investigación, por lo que no hay gran información disponible. Decidimos mencionarlo más por anécdota que por cubrirlo propiamente tal. Quizás cuando estemos en números futuros de esta saga podamos ir adelantando más información.
Con esto podemos tener un poco más claro por qué existen distintos lenguajes de programación 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.
Fin

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Bluehost Review