Programacion

Ξ 34 comentarios

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

por Xabadu
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 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”.

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.

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:

  1. Iteración Switch.
  2. Vectores.
  3. Matrices.
  4. Terminal de venta – 2da parte.

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

Comparte este tutorial

El culpable de todo esto

Las tardes gloriosas de domingo y las grandes ovaciones a estadio lleno, no son algo extraño para Xabadu. Luego de ser descubierto a los 4 años en un partido de barrio por los ojeadores del gran Aviación F.C., sacudió el mercado nacional al ser traspasado en $500 pesos chilenos (1 USD) y 3 coca colas al renombrado Estrella Blanca de Lolol. Luego de una impresionante carrera por equipos como Lozapenco, Santa Cruz, Deportivo Lago Chungará y una incursión en la 3a división del futbol de Kazajstan, su record imbatible hasta la fecha de 1257 goles en 20 partidos lo llevo a ser elegido como uno de los arqueros más recordados en la historia pelotera nacional. Una lesión en el colmillo superior derecho lo llevó al retiro el año 2003, pero está de vuelta y sin duda que su jerarquía y experiencia internacional será un gran aporte.

En los barrios marginales se le conoce como: Xabadu

Comentarios en Facebook

34 Comentarios

  • Klauder, si te aparece el número del espacio de memoria, probablemente estás incluyendo un & al momento de imprimir la variable. Quítalo y deberías ver todo bien.
    Saludos!

  • Yo tengo un problema con el programa de ventas ya cuando lo corro el programa se ejecuta bien pero cuando le ingreso el numero deja de funcionar y windows me lo cierra espero me puedan ayudar

  • Hola, antes de nada me gustaria mostrar mi agradecimiento por este webtutorial, que me esta causando sensacion por este mundo! Y la buena onda que transmite!

    Estoy haciendo un programa que sume resistencias en serie, cuyo resultado es la suma de todas ellas.
    El programa inicialmente me debe preguntar el numero de resistencias que quiero sumar.
    Luego me pregunta uno a uno el valor de las resistencias, hasta aqui bien.
    Despues deboo introducir el valor de cada una y el resultado debe ser la suma de todas ellas.
    Yo lo he intentado con un ciclo “while”. Creo que es posible asi. Pero el resultado total es unicamente el valor de la ultima resistencia que introduzco, haber si me podeis decir que hao mal.

    Aqui va el programa (Esta en C o en C++, no importa):

    #include
    #include
    #include
    int nr, nra;
    float r, ra, tot;
    int main()
    {
    printf(“CALCULO DE RESISTENCIAS:\n\n”);
    printf(“Ingrese numero de resistencias: “);
    scanf(“%d”, &nr);
    nra=1;
    ra=0;
    while(nraSe entiende por resistencia un valor.
    ->Y el ultimo printf, antes del getch(); %f no hace referencia a r, sino a la resistencia total, que nose que cuenta seria.

    GRACIAS!! Un saludo desde Mallorca, España

  • Lo siento por el comentario anterior se me ha colado algo raro, el programa es este:

    #include
    #include
    #include
    int nr, nra;
    float r, ra, tot;
    int main()
    {
    printf(“CALCULO DE RESISTENCIAS:\n\n”);
    printf(“Ingrese numero de resistencias: “);
    scanf(“%d”, &nr);
    nra=1;
    ra=0;
    while(nra<=nr)
    {
    printf("Ingrese resistencia %d: ", nra);
    scanf("%f", &r);
    tot=r+ra;
    tot=ra;

    /*Aqui deberia ir una cuenta que guarde el "tot" en "ra" para que "ra" cada vez
    cambie su valor, de modo que el programa sume el valor introducida en este
    mismo momento mas el valor de ra, que seria la suma de los valores anteriores,
    empezando con un valor de ra inicial de 0, de modo que pongo lo siguiente: "tot=ra;"
    Pero el sistema me da como resultado solo al resistencia introducida en ultimo lugar,
    de modo que ra se queda en 0 i no cambia (aumenta) su valor*/

    nra++;
    }
    printf("\nRt en serie: %f Ohmnios.", tot);
    getch();
    }

  • Hola, este re bueno el tutorial pero yo queria saber los programadores tienen la capacidad o pueden aprender la hackeación, por cierto esta recomendación ( recomendamos Dev C/C++ de Bloodshed) no se puede instalar porque?

  • Hola, me encantan los tutoriales, pero tengo una duda, en el ultimo programa de esta parte veo que no hemos puesto un “si el codigo de producto introducido es igual o mayor a 4 imprimir:codigo incorrecto”
    lo digo por que si el usuario pone un numero que no sea del 1 al 3 me imagino que tendremos un problema, verdad?

  • Muchísimas gracias por este tutorial, la verdad siempre le había tenido miedo a la programación, pero desde que estoy leyendo esta guía he cogido muchísimo interés por el tema! gracias a todos los que hacen parte de este proyecto tan bonito.

  • #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”); //aqui no deberia empezar con \t o si? /* 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();

    }

  • Hola

    Agradezco por este tutorial tan claro la verdad estoy empezando desde 0 y hasta ahora me surge una duda todos los ejercicios me han funcionado perfectamente.

    La duda es porque estábamos utilizando el signo & para capturar desde teclado en una variable es decir cuando capturábamos por teclado utilizábamos (“%d”,&nombre de la variable) y en el while para capturar no se utiliza este símbolo?

    Gracias si me pueden contestar

    • Hola Cesar,

      La diferencia está en la función. Cuando capturamos y usamos scanf, se utiliza el signo & para almacenar en el área de memoria de la variable, pero cuando solo queremos imprimir en pantalla con printf, no se coloca.

      Saludos!

1 2 3 4

Responder a Xabadu Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Gente linda que nos quiere

Donde mas estamos