TallerC-Cpp: Capítulo 2.- Aventurándonos en los dominios de C

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Capitulo 2 del taller de programacion C/C++)
m (Correcion de capitulos)
 
Línea 305: Línea 305:
 
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[TallerC-Cpp: Capítulo 1.- ¡Mi primer programa!]]
 
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[TallerC-Cpp: Capítulo 1.- ¡Mi primer programa!]]
 
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[Taller de Programción C-Cpp]]
 
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[Taller de Programción C-Cpp]]
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[TallerC-Cpp: Capítulo 2.- Bucles (a marearse dando vueltas)]]
+
| style="text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;" | [[TallerC-Cpp: Capítulo 3.- Bucles (a marearse dando vueltas)]]
 
|}
 
|}
  
 
<!-- Categorías -->
 
<!-- Categorías -->
 
[[Categoría:Programación]]
 
[[Categoría:Programación]]

Última revisión de 12:51 20 jul 2009

En este capítulo vamos a entrar por primera vez en el código.

Clip.png Como es la primera vez que tocamos este tema que tan lejos nos va a llevar, muchas líneas las introduciremos de un modo un poco Ad hoc, es decir no las daremos una explicación intensiva, pues serán objeto de capítulos posteriores, simplemente haremos un esfuerzo en creer que es necesario tenerlas allí.

Concretamente, en este capítulo usaremos los conocimientos adquiridos en anteriores capítulos paras crearnos un ¡Hola mundo! en lenguaje C (No en C++), y usaremos nuestras primeras variables.

Contenido

[editar] Pasos previos

De una forma análoga al capítulo anterior, haremos lo siguiente:

  1. Crear la carpeta /home/USUARIO/proyectos_codeblocks/TallerProgramacion/002/
  2. Crear un proyecto, pero esta vez de lenguaje C, en la anterior carpeta, llamado HolaMundo-002
  3. Borramos del proyecto el main.c.
  4. Borramos main.c de /home/USUARIO/proyectos_codeblocks/TallerProgramacion/002/HolaMundo-002/main.c
  5. Guardamos el proyecto con File/SaveProject.

Con eso tendremos un proyecto virgen para empezar a trabajar.

[editar] Nuestro primer ¡Hola Mundo! en lenguaje C

[editar] Creación de main.c

Clip.png Los archivos de C++ se denotan con la extensión *.cpp, los de C simplemente con *.c.

Para crear nuestro archivo fuente, vamos a File/New/File..., y elegimos C/C++ Soource.

New file dialog

Luego elegimos lenguaje C, y en la pantalla siguiente marcamos Debug, y Release, y presionamos en el navegador (botón a la derecha del cuadro de texto), y le damos el nombre main.c. Aceptamos y finalizamos.

De esta forma ya tenemos nuestro archivo virgen sobre el que vamos a a trabajar.

[editar] Primer programa

Algo que no se suele hacer, pero que es a todas luces muy instructivo, es crear un primer programa, que no haga absolutamente nada. El código sería el siguiente:

int main()
{
    return 0;
}

Este simple código ya nos enseña un montón de cosas. En C, las órdenes, llamémoslas puntuales, deben ir siempre sucedidas de un ; (punto y coma), así por ejemplo:

return 0;

Es una orden que simplemente termina con la función main (no intentéis comprenderlo, se explicará más adelante), y por tanto debe tener al final el ;.

Por otra parte, cuando las órdenes contendrán otras dentro (porque dependen de ella), en vez de llevar un ;, lo que llevan son unas llaves { }, entre las cuales estarán todas las órdenes dependientes, así, por ejemplo:

int main(){}

Es una función, que al ejecutarse, correrá todas las órdenes que estén incluidas entre las llaves (por ejemplo return).

Advert.3.png Por el momento huelgan más explicaciones, simplemente nos quedamos con la siguiente idea:

En C, Nuestro programa deberá estar comprendido entre las lineas int main(){ y return 0;}

Es decir, es algo como:

int main()
{
--------------- NUESTRO CODIGO AQUI -------------------
    return 0;
}

Probar a compilar y ejecutar, veréis como solamente sale el valor devuelto por nuestro código (0 si no hay errores).

Clip.png Mucho antes de encontrarnos con un error en ejecución, nos encontraremos con errores en la compilación (de sintaxis). Evidentemente, si el código tiene errores, el ejecutable no se creará, y por tanto no podremos ejecutarlo.

[editar] Comentarios

Una herramienta tremendamente potente en la programación son los comentarios. La idea es que podemos insertar en el código lineas que sólo afectarán al lector/programador, pero que a la hora de compilar serán simplemente pasado por alto.

En C existen dos tipos de comentarios:

  1. Si introduces // (dos barras), todo lo que siga a las barras en esa línea será un comentario.
  2. Si introduces /* (una barra seguida de un asterisco), todo lo que lo siga será un comentario hasta que introduzcas */ (un asterisco y una barra).

Así, por ejemplo, una versión comentada de nuestro código podría ser:

// Iniciamos nuestro programa
int main()
{
    /* V Nuestro codigo aqui V */
    /* A Nuestro codigo aqui A */
    
    // Si el codigo llega hasta aqui, cierra devolviendo 0 (sin errores)
    return 0;
}

[editar] Nuestro primer Hola Mundo

C por si sólo tan sólo permite operaciones básicas, tanto es así, que sin ayuda no podríamos imprimir nada en pantalla de una forma simple. Para poder interactuar con la pantalla (imprimir cosas en la terminal), necesitamos añadir funciones prefabricadas, eso se hace mediante los #include. En realidad el tema es más complicado, pero de momento haremos un acto de fe, aunque se explicará como se merece más adelante.

Concretamente, si incluimos stdio.h (standart input output), dispondremos de una orden llamada printf que nos permitirá sacar cadenas de texto por la terminal. Así, nuestro código será:

#include<stdio.h>

// Iniciamos nuestro programa
int main()
{
    /* V Nuestro codigo aqui V */
    printf("¡Hola Mundo!");
    /* A Nuestro codigo aqui A */

    // Si el codigo llega hasta aqui, cierra devolviendo 0 (sin errores)
    return 0;
}

Compilar y ejecutar, ¡y tendréis en pantalla nuestro saludo favorito!

Clip.png Las comillas abren y cierran cadenas de caracteres, por el momento no son necesarias más explicaciones.

[editar] Nuestras primeras variables

[editar] Manejando variables

El lenguaje C tiene como particularidad la necesidad de predeclarar, es decir, no se podrá usar nada que no se le haya dicho previamente que es. En el caso de variables, vamos a ir introduciendo las siguientes:

  • Número entero, por ejemplo 12, se denota por int.
  • Número decimal, por ejemplo 0.17, se denota por float.

Así, por ejemplo, supongamos que queremos crear los dos números anteriores, el código sería:

#include<stdio.h>

// Iniciamos nuestro programa
int main()
{
    /* V Nuestro codigo aqui V */
    int a;      // Declaramos la variable a como un entero
    float b;    // Declaramos la variable b como un decimal
    
    a = 12;     // Asignamos a a el valor 12
    b = 0.17;   // Asignamos a b el valor 0.17
    
    // Imprimimos un mensaje amigable
    printf("¡Hola Mundo!");
    /* A Nuestro codigo aqui A */

    // Si el codigo llega hasta aqui, cierra devolviendo 0 (sin errores)
    return 0;
}

Y supongamos que queremos sumarlas. El resultado de la suma será un número decimal, y por tanto, si usáramos un entero, perderíamos información, así que el código sería:

#include<stdio.h>

// Iniciamos nuestro programa
int main()
{
    /* V Nuestro codigo aqui V */
    int a;      // Declaramos la variable a como un entero
    float b,c;    // Declaramos las variables b y c como decimales

    a = 12;     // Asignamos a a el valor 12
    b = 0.17;   // Asignamos a b el valor 0.17
    c = a + b;  // Asignamos a c la suma de ambos

    // Imprimimos un mensaje amigable
    printf("¡Hola Mundo!");
    /* A Nuestro codigo aqui A */

    // Si el codigo llega hasta aqui, cierra devolviendo 0 (sin errores)
    return 0;
}
Clip.png Las operaciones básicas en C son la suma +, la resta -, la multiplicación *, la división /.

Especial cuidado con la división.

Guarda todos los archivos y el proyecto.

[editar] Imprimiendo variables

Primero de todo crea un nuevo proyecto HolaMundo-003 (/home/USUARIO/proyectos_codeblocks/TallerProgramacion/002/HolaMundo-003), borra el main.c, y copia en su lugar el de HolaMundo-002, y añádelo al proyecto.

Clip.png Alternativamente puedes copiar /home/USUARIO/proyectos_codeblocks/TallerProgramacion/002/HolaMundo-002 como /home/USUARIO/proyectos_codeblocks/TallerProgramacion/002/HolaMundo-003, y funcionará bien, pero el ejecutable tendrá el nombre equivocado. Habitualmente esta es una solución más cómoda, pero menos limpia.

Ahora supongamos que en lugar de nuestro querido ¡Hola Mundo!, queremos imprimir nuestros tres números en dos líneas. Lo primero será aprender a introducir un salto de línea. Para operaciones de este tipo se usa:

  • \n introduce un salto de línea.
  • \t introduce una tabulación.

Pero ahora nos enfrentamos a un segundo problema, si sólo podemos imprimir texto, ¿Cómo imprimimos números? La solución pasa por insertar esos números en las cadenas de texto (cadenas formateadas). Para ello se inserta lo siguiente en la cadena de texto:

  • Para insertar un entero ponemos %d
  • Para insertar un decimal ponemos %f

Así, podemos cambiar:

    // Imprimimos un mensaje amigable
    printf("¡Hola Mundo!");

Por:

    // Imprimimos datos y resultados
    printf("a = %d, b = %f\n", a, b);     // Imprimimos datos
    printf("su suma es: %f", c);        // Imprimimos el resultado

[editar] Recibiendo datos

Suele ser habitual que algunos datos se reciban en tiempo real por pantalla, para ello, stdio.h nos ofrece otra función llamada scanf, de funcionamiento muy parecido a printf. Así, por ejemplo, para pedir a y b por pantalla podemos cambiar:

    b = 0.17;   // Asignamos a b el valor 0.17
    c = a + b;  // Asignamos a c la suma de ambos

Por:

    // Pedimos a por pantalla
    printf("Dame un número entero:\n");
    scanf("%d",&a);
    // Pedimos b por pantalla
    printf("Dame un número decimal:\n");
    scanf("%f",&b);

Compilamos y ejecutamos. ¡Una maravilla!

main.c deberá quedar finalmente así:

#include<stdio.h>

// Iniciamos nuestro programa
int main()
{
    /* V Nuestro codigo aqui V */
    int a;      // Declaramos la variable a como un entero
    float b,c;    // Declaramos las variables b y c como decimales

    // Pedimos a por pantalla
    printf("Dame un número entero:\n");
    scanf("%d",&a);
    // Pedimos b por pantalla
    printf("Dame un número decimal:\n");
    scanf("%f",&b);
    c = a + b;  // Asignamos a c la suma de ambos

    // Imprimimos datos y resultados
    printf("a = %d, b = %f\n", a, b);     // Imprimimos datos
    printf("su suma es: %f", c);        // Imprimimos el resultado
    /* A Nuestro codigo aqui A */

    // Si el codigo llega hasta aqui, cierra devolviendo 0 (sin errores)
    return 0;
}
Clip.png Nunca se insiste lo suficiente en la importancia de los comentarios, y de una tabulación correcta. Podéis elegir el modelo que más os convenga, o que os parezca más bonito, pero es muy importante respetarlo para que los códigos sean lo más legibles posibles.

[editar] Conclusiones

En este capítulo hemos aprendido algunos aspectos básicos sobre el lenguaje C que nos han permitido desarrollar nuestra primera aplicación. Todos los conceptos se han introducido sin demasiada explicación, pero con los sencillos ejercicios que siguen estas líneas quedarán mucho más claros, y además se irán puliendo (y se introducirán explicaciones mucho más detalladas) en capítulos siguientes.

[editar] Ejercicios

1.- Es fundamental familiarizarse con algunos errores básicos de sintaxis, y para ello podéis empezar borrando algunos ; o llaves en el código, y darle a compilar, para ver como os advierte de los fallos. También podéis probar a poner órdenes que no existan, como por ejemplo cambiar main por main2.


2.- Es habitual preguntarse si a C le importa que pongamos espacios, tabulaciones, o retornos de carro (intros) en el código. La respuesta es no, siempre y cuando no rompamos ninguna palabra (p.ej.- re turn 0 sería un error), o no estemos dentro de una cadena de caracteres (Ya veremos esto último más adelante). Podéis probar a introducir líneas vacías, a tabular, etc, y compilar a ver que errores os encontráis.


3.- Probar a eliminar el #include<stdio.h>, y compilar.


4.- Crear un código que pida dos enteros y los almacene en a y en b, y luego los divida y los almacene sobre un decimal c (c = a / b;), imprimiéndolo como resultado. ¿Qué ocurre si a=1, y b=2? ¿Y si usas la orden c = a / (float)b; con esos mismos números?

[editar] Enlaces

[[Página oficial del compilador gcc]]
[[Página oficial de la IDE Code::Blocks]]


TallerC-Cpp: Capítulo 1.- ¡Mi primer programa! Taller de Programción C-Cpp TallerC-Cpp: Capítulo 3.- Bucles (a marearse dando vueltas)
Herramientas personales