Módulo 1 - Fundamentos de Programación en C, C++

24
MP 11 Fundamentos Programación UF 02 Diseño Modular MP 11 UF 02 Fundamentos Programación - Módulo 1. Página 1 MÓDULO 1 FUNDAMENTOS PROGRAMACIÓN EN C, C++. OBJETIVOS. En este módulo se pretende hacer una presentación del lenguaje C/C++ y al mismo tiempo introducir los conceptos elementales de un entorno para poder realizar aplicaciones C/C++ de consola. Todavía no entraremos en la estructura y sintaxis del lenguaje, no obstante, conoceremos algunos elementos de C/C++ para comenzar a realizar los primeros programas. Concretamente, se revisarán los siguientes aspectos: Elementos básicos de un ordenador. Programas y lenguajes informáticos. Generalidades sobre los lenguajes C/C++. El entorno de un Entorno Integrado de Desarrollo (EID) Introducción a la sintaxis de C/C++. Las funciones de entrada y salida de C: printf() y scanf(). Los objetos de entrada y salida de C++: cout y cin. Expresiones.

Transcript of Módulo 1 - Fundamentos de Programación en C, C++

Page 1: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – Fundamentos Programación UF 02 – Diseño Modular

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 1

MÓDULO 1 – FUNDAMENTOS PROGRAMACIÓN EN C, C++.

OBJETIVOS.

En este módulo se pretende hacer una presentación del lenguaje C/C++ y al mismo tiempo introducir los conceptos elementales de un entorno para poder realizar aplicaciones C/C++ de consola. Todavía no entraremos en la estructura y sintaxis del lenguaje, no obstante, conoceremos algunos elementos de C/C++ para comenzar a realizar los primeros programas.

Concretamente, se revisarán los siguientes aspectos:

Elementos básicos de un ordenador.

Programas y lenguajes informáticos.

Generalidades sobre los lenguajes C/C++.

El entorno de un Entorno Integrado de Desarrollo (EID)

Introducción a la sintaxis de C/C++.

Las funciones de entrada y salida de C: printf() y scanf().

Los objetos de entrada y salida de C++: cout y cin.

Expresiones.

Page 2: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 2

1. PRÁCTICA 1: HOLA MUNDO.

El resultado de esta práctica será sólo una aplicación que extrae por pantalla "HOLA MUNDO". Ésta es tradicionalmente la primera aplicación que se hace en cualquier lenguaje de programación. Es una aplicación extremadamente sencilla y con ella aprendemos sólo como comenzar a escribir código y construir aplicaciones ejecutables.

1.1. DESARROLLO DE LA PRÁCTICA.

1) Iremos a Inicio Programa Dev C++. Aparecerá una pantalla inicial donde hay varias opciones. Escogeremos la opción Archivo Nuevo Código Fuente.

2) Antes de introducir ninguna instrucción, daremos nombre al archivo para que no haya equivocaciones, ya que siempre guardará el último archivo sobre el anterior que mantenga su mismo nombre. Para ello, iremos a Archivo Guardar como. Entonces se abrirá una ventana donde se nos solicitará el nombre del archivo (m1p01.c) y la ubicación donde se guardará. Efectuamos estas modificaciones y clicamos en Guardar:

Page 3: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 3

3) Ya podemos escribir el código del programa en la ventana de texto. Escribiremos el siguiente código:

/*m1p01.c - Hola Mundo*/

#include <stdio.h> /*declaración de función printf*/

int main () {

printf ("HOLA MUNDO");

return 0;

}

4) Para ejecutar el programa y ver cuál es el resultado, en la parte superior del menú seleccionaremos:

- Compila (método abreviado tecla F9).

En la parte inferior de la pantalla se visualiza la orden que se ha ejecutado

Gcc -c "m1p01.c" -o "m1p01"

Completado correctamente.

- Monta (método abreviado tecla F11).

En la parte inferior de la pantalla se visualiza la orden que se ha ejecutado

Gcc -c "m1p01.c" -o "m1p01"

Completado correctamente.

- Y por último Ejecuta (método abreviado tecla F3).

5) Se ha creado el archivo ejecutable m1p01 .. \Módulo_1\m1p01.

6) Si todo ha ido bien, veremos una pantalla en la que se nos indica que el programa se está ejecutando.

1.2. EXPLICACIÓN DEL PROGRAMA.

Ahora haremos una breve explicación del programa "HOLA MUNDO":

/*m1p01.c - Hola Mundo*/

#include <stdio.h> /*declaración de función printf*/

int main () {

printf ("HOLA MUNDO");

return 0;

}

Lo primero que podemos observar en el texto del código son los colores: verde, rojo, azul y negro.

En el texto entre dos marcas /* y */ se pone de color rojo, que es el color predeterminado para los comentarios. Pueden usarse otras formas de poner comentarios.

La palabra #include con el color verde.

Las palabras int y return se ponen automáticamente de color azul, que es el dolor predeterminado para las palabras reservadas de C y de las directivas del preprocesador.

El resto del código es de color negro.

Page 4: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 4

#include <stdio.h> indica al compilador que se utilizará alguna función, la declaración de la cual se encuentra en el archivo de cabecera stdio.h. En este caso se trata de la función printf().

Todo programa C contiene siempre la función main(). Dentro de un programa C podemos escribir más de una función, pero obligatoriamente debemos tener la función main() que es la que primero se ejecutará.

La única sentencia de este programa es una llamada a la función de la librería estándar de entrada y de salida: printf(). En este caso, la función sólo tiene un argumento que es una cadena de caracteres cerrados entre dobles comillas. Esta cadena contiene caracteres para imprimir por pantalla y un código de formato especial: \n. Este es un código de nueva línea y sirve para que, lo que se imprime en la pantalla después, se haga en la siguiente línea.

Debemos recordar que toda sentencia acaba con el carácter ; (punto y coma).

Las siglas GCC significan GNU Compiler Collection (Colección de Compiladores GNU). Como su nombre indica es una colección de compiladores de diferentes lenguajes: C, C++, Objective C, Chill, Ada, Fortran y Java.

Este compilador se distribuye bajo licencia pública (General Public License), lo que implica su libre distribución.

Existen versiones para prácticamente todos los SO. Viene incorporado en la mayoría las distribuciones de GNU/Linux. La versión DOS de este compilador es el DJGPP y se puede descargar en su web oficial www.delorie.com/djgpp.

El desarrollo de GCC utiliza un entorno abierto y soporta múltiples plataformas. De esta forma son miles de voluntarios de todo el mundial que participan en su desarrollo.

El compilador GCC se puede descargar desde la página oficial del GCC: gcc.gnu.org.

1.2.1. Opciones más comunes del Compilador GCC.

-c Sólo compila. Crea los ficheros objetos pero no ejecutables.

-o Nombre del ejecutable.

-l Para enlazar bibliotecas.

-v Muestra los pasos de compilación.

-L Añade path a las rutas de búsqueda.

-Wall Activa muchos mensajes de aviso (warning). Útil para nuevos usuarios.

-g Genera información para el depurador.

1.2.2. Extensiones más comunes de ficheros.

.c Fichero fuente de C.

-cc Fichero fuente de C++.

-h Fichero cabecera de C/C++ (sólo útil para los #include).

-s Fichero fuente en ensamblador.

-i Fichero después de pasar por el procesador.

-o Fichero objeto.

Page 5: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 5

2. PRÁCTICA 2: UNA CONVERSACIÓN EN C.

El objetivo de esta práctica es hacer servir las funciones de entrada y salida de C: printf() y scanf(). También se comenzará con el uso de variables.

2.1. DESARROLLO DE LA PRÁCTICA.

Crearemos un nuevo archivo C denominado m1p02.c y escribir en la ventana de edición el siguiente código:

//m1p02.c - Una conversación en C -

#include <stdio.h> //printf y scanf

void LimpiaBuffer() { while(getchar() != '\n') }

int main(){

char nombre[30];

int edad;

printf("Por favor, escribir vuestro nombre\n");

scanf("%s",nombre);

printf("Ahora puede escribir vuestra edad\n");

LimpiaBuffer ();

scanf("%d",edad);

printf("Muy bien %s",usted tiene %d años\n" ,nombre, edad);

return 0;

}

Para compilar y montar el programa presionaremos la tecla F11 o bien seleccionamos la opción Compilar del menú principal. En la ventana inferior de la pantalla el compilador nos mostrará los errores que ha encontrado o en caso contrario pondrá:

gcc “m1p02.c” -o “m1p02” completado correctamente

Si hay errores, marcará la línea y el error. Habrá que corregirlos y volver a realizar el anterior proceso.

2.2. EXPLICACIÓN DEL PROGRAMA.

En primer lugar se puede observar que en esta práctica se ha utilizado otro tipo de comentarios: //m1p02.c - Una conversación en C -

Cuando se ponen los símbolos //, todo lo que hay a continuación y hasta el final de la línea es ignorado por el compilador.

La segunda línea: #include <stdio.h> //printf y scanf informa al compilador que añade las definiciones de las funciones que se encuentran en el archivo de cabecera stdio.h. En este caso, esta línea es necesaria ya que utilizaremos las funciones printf() y scanf(). El comentario explica esta circunstancia.

La tercera línea: void LimpiaBuffer() { while(getchar() != '\n') } esta función evitará que el programa se salte la instrucción scanf("%d",edad);.

Con la línea: int main() { comienza la función principal, que en este caso, devuelve un cero.

Page 6: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 6

Se declaran dos variables:

char nombre[30];

int edad ;

una variable preparada para guardar una cadena de caracteres de hasta 30 caracteres, denominado nombre, y una variable entera denominada edad.

En C es obligatorio declarar todas las variables antes de usarlas. Esta declaración sirve para que se reserve la memoria necesaria para su almacenamiento.

En la siguiente parte del código:

printf("Por favor, escribir vuestro nombre\n");

scanf("%s",nombre);

printf("Ahora puede escribir vuestra edad\n");

LimpiaBuffer ();

scanf("%d",%edad);

la primera línea hace que se imprima en la pantalla el texto del argumento de printf() y hace que el cursor vaya a la línea siguiente. En este momento, la ejecución del programa se detiene esperando que el usuario introduzca una cadena de caracteres.

La función scanf() se encarga de leer el contenido de la cadena introducida por teclado y se almacena en la variable nombre. %s es el código de tipo correspondiente a las cadenas de caracteres.

El hecho que el número no es exactamente una variable sino una cadena de caracteres (un vector o array de caracteres) no debe ponerse & delante del nombre en la función scanf().

Normalmente, el segundo argumento y siguientes de esta función es el nombre de una variable precedida por el carácter &.

Después de imprimir el texto del argumento de printf() de la tercera línea, el programa llama a la función LimpiaBuffer() para limpiar el buffer del teclado y permitir la ejecución de la siguiente instrucción.

En la quinta sentencia se vuelve a detener y scanf() espera que se introduzca un entero con el teclado. Este entero será almacenado en la variable entera edad. En este caso, sí es obligatorio poner & delante del número de variable edad.

La línea:

printf("Muy bien %s",usted tiene %d años\n" ,nombre, edad);

ilustra el uso de printf() con más de un argumento. Debemos fijarnos que en el primer argumento hay dos códigos de tipos, uno del tipo de cadena de caracteres (%s) y otro del tipo número entero (%d).

Los dos argumentos que siguen al primero corresponden exactamente a dos variables del tipo de los códigos antes mencionados. En la función printf() no debe ponerse & delante del nombre de las variables.

Al ejecutar el programa se puede observar que los caracteres especiales, como las vocales acentuadas, se imprimen bien en la pantalla.

Page 7: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 7

2.3. CAPTURA DE LA EJECUCIÓN DEL PROGRAMA.

Page 8: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 8

3. PRÁCTICA 3: SISTEMAS DE NUMERACIÓN.

En C y C++ se utilizan básicamente cuatro tipos de sistemas de numeración:

El sistema binario (base 2). Es el que utilizan los ordenadores y consta de dos únicos símbolos: el cero (0) y el uno (1).

El sistema octal (base 8). Este sistema utiliza 8 dígitos: 0, 1, 2, 3, 4, 5, 6 y 7.

El sistema decimal (base 10). Es el utilizado por el ser humano y consta de 10 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9.

El sistema hexadecimal (base 16). Consta de 16 dígitos: 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F.

3.1. DESARROLLO DE LA PRÁCTICA.

Abriremos un nuevo archivo denominado m1p03.c. En este caso escribiremos en la ventana el siguiente código:

//m1p03.c - Números en diferentes bases

#include <stdio.h>

#include <string.h>

int convertir(char *numero, int base);

int DeCaracterANumero(char d);

int main()

{

printf(" '331' en octal a decimal es: %d\n,convertir("331", 8));

printf(" 'D9' en hexadecimal a decimal es: %d\n,convertir("D9", 16));

printf(" '10110' en binario a decimal es: %d\n,convertir("10110", 2));

return 0 ;

}

int convertir(char *número, int base)

{

Int Multiplicador = 1, Digitn, Valor = 0;

Digitn =strlen(numero)-1;

while(Digitn >=0)

{

Valor += DeCaracterANumero(numero[Digitn])*Multiplicador;

Multiplicador *= base;

Digitn--;

}

return Valor;

}

int DeCaracterANumero(char d)

{

if(d >= '0' && d <= '9') return d-'0';

if(d >= 'a' && d <= 'f') return 10+d-'a';

if(d >= 'A' && d <= 'F') return 10+d-'A';

return -1; // este carácter no es válido

}

Page 9: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 9

3.2. EXPLICACIÓN DEL PROGRAMA.

Como podemos comprobar hay conceptos que no hemos visto. Sólo hemos de editar el programa, compilarlo, ejecutarlo y veremos cómo:

'331' en octal corresponde al 217 en decimal;

'D9' en hexadecimal corresponde al 217 en decimal;

'10110' en binario corresponde al 217 en decimal.

3.3. CAPTURA DE LA EJECUCIÓN DEL PROGRAMA.

Page 10: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 10

4. PRÁCTICA 4: UNA CONVERSACIÓN EN C++.

En la práctica 2 hemos utilizado dos de las funciones de entrada y salida más importantes de: printf() y scanf(). C++, como superconjunto de C, incluye también estas funciones, pero incorpora otros elementos que pueden ser más cómodos en muchos casos, se trata de los objetos cout (pone datos en la salida estándar -pantalla-) y cin (toma datos de la entrada estándar -teclado-). Las declaraciones de estos objetos se encuentran en el archivo de cabecera: iostream.h:

4.1. DESARROLLO DE LA PRÁCTICA.

Abriremos un nuevo archivo pero en este caso seleccionaremos como tipo de fichero C++ Source file. Le pondremos como nombre m1p04 y comprobaremos como el programa coloca automáticamente la extensión .cc.

Escribiremos en la ventana de texto el siguiente código:

//m1p04.c - Una conversación en C++ -

#include <iostream>

using namespace std;

int main(){

char nombre[30];

int edad;

cout <<"Por favor, escribir vuestro nombre\n";

cin >> nombre;

cout <<"Ahora puede escribir vuestra edad\n";

cin >> edad;

cout <<"Muy bien ", <<nombre<<" usted tiene"; <<edad<<" años" <<endl;

return 0;

}

Presionaremos la tecla F11 (Compilar) y F3 para ejecutar. Veremos como ahora se compila con g++: g++"m1p04.cc" -o "m1p04

4.2. EXPLICACIÓN DEL PROGRAMA.

Para imprimir en pantalla se utiliza el objeto cout. Este objeto ya no es exactamente una función, pero aunque no se puede explicar en detalle qué es, es fácil explicar cómo funciona.

Las instrucciones "#include <iostream>" y "using namespace std; " son necesarias para que las declaraciones que permiten el acceso a "cout" y "cin" están en una librería externa.

Se puede imaginar que cout es la pantalla y que el operador <<, denominado operador de inserción, envía información al objeto cout (pantalla). La eficacia de esta forma de enviar datos por pantalla es que no hace falta indicar qué tipo de datos enviamos.

Para enviar una cadena se escribe:

cout <<"Ahora puede escribir vuestra edad\n";

y para enviar una variable numérica se escribe: cout << edad

Page 11: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 11

Por tanto, no se utilizan codigos de tipos como hacíamos en las funciones de C printf() y scanf().

Para imprimir diferentes tipos de datos sólo hace falta utilizar el operador << más de una vez:

cout <<"Muy bien ", << nombre <<" usted tiene"; << edad <<" años" <<endl;

El manipulador endl inserta un carácter de nueva línea, tal como hacía "\n", y además vacía el buffer.

Lo mismo pasa con el objeto cin. Este representa la entrada estándar (el teclado) y va asociado con el operador de extracción: >>.

La sentencia: cin >> nombre; lee del teclado una cadena de caracteres (sin espacios) y la almacena en la variable nombre.

Y la sentencia cin >> edad; lee del teclado un número entero y lo almacena en la variable edad.

Para poder leer cadenas de caracteres con espacios (por espacios José Antonio) se debe utilizar la siguiente función asociada al objeto cin: cin.getline(nombre, 30, '\n');

Esta sentencia hace que se lean hasta 30 caracteres o hasta que presionemos INTRO.

Entender el funcionamiento de estos objetos no es necesario para poder usarlos. No es el objetivo de este cuso entrar en la programación orientada a objetos y, por este motivo, no entraremos en más detalles.

4.3. CAPTURA DE LA EJECUCIÓN DEL PROGRAMA.

Page 12: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 12

5. PRÁCTICA 5: CONVERSIÓN DE MILLAS A KM.

En esta práctica aprenderemos a borrar la pantalla y a utilizar las primeras expresiones.

5.1. DESARROLLO DE LA PRÁCTICA.

Crearemos un nuevo archivo denominado m1p05.c del tipo C Source file. Escribiremos en la ventana de texto el siguiente código:

//m1p05.c - Conversión de Millas a Km -

#include <stdio.h> //printf y scanf

#include <stdlib.h> //system()

int main(){

float Millas;

float Kms;

system("clear"); //borra la pantalla

printf("Por favor, introduzca el número de millas\n");

scanf("%f",&Millas);

Kms=1.609*Millas; //realiza el cálculo y lo asigna a Kms

Printf("%f Millas equivale a &f Kms\n", Millas, Kms;

return 0;

}

Presionaremos la tecla F11 (Montar) y F3 para comprobar su funcionamiento.

5.2. EXPLICACIÓN DEL PROGRAMA.

En primer lugar, se borra la pantalla. Esto se consigue con la sentencia: system("clear");

Esta sentencia sirve para llamar al comando del SO "clear" (clear screen) y borrar la pantalla. Para poder utilizar esta función se debe llamar al archivo cabecera: stdlib.h.

En este caso utilizaremos dos variables reales del tipo float, denominados Millas y Kms, que se deben declarar: float Millas;

float Kms;

Para poder escribir o leer datos de este tipo, la cadena de control de las funciones printf() y scan() utiliza el código de control %f.

La variable Millas es leída y asignada directamente con la función scanf(). Debemos recordar que se debe poner el carácter & delante del nombre de la variable.

La variable Kms se calcula y se asigna con la siguiente sentencia de asignación:

Kms=1.609*Millas; //realiza el cálculo y lo asigna a Kms

En C, el símbolo = se utiliza para asignar el valor de la expresión de la derecha en la variable de la izquierda. En este caso, la expresión es el resultado de multiplicar (*) el contenido de la variable Millas por el número 1.609 (el punto entre el 1 y el 6 representa el punto decimal. No se utilizan separadores de millares en las constantes numéricas).

Page 13: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 13

5.3. CAPTURA DE LA EJECUCIÓN DEL PROGRAMA.

Page 14: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 14

6. PRÁCTICA 6: TABLAS MATEMÁTICAS.

En esta práctica aprenderemos a utilizar el código de formato de tabulación horizontal y a escribir números decimales con formato. Además, conoceremos el nombre de algunas funciones matemáticas comunes y su utilización.

6.1. DESARROLLO DE LA PRÁCTICA.

Crearemos un nuevo archivo denominado m1p06.c del tipo C Source file. Escribiremos en la ventana de texto el siguiente código:

//m1p06.c - Tablas matemáticas -

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

int main(){

double x;

printf("Funciones matemáticas\n");

printf("Introduzca el valor inicial de x: ");

scanf("%lf",&x);

system("clear");

printf("Funciones matemáticas\n\n");

printf("x\tx^2\tx^3\tsqrt(x)\tx^(-1)\tln(x)\tlog(x)\texp(x)\n");

printf("_____________________________________________\n\n");

printf("%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2f\t%.2f\n"

,x,x*x,x*x*x,sqrt(x),1/x,log(x),log10(x),exp(x));

return 0 ;

}

Si intentamos compilar y ejecutar este programa veremos cómo nos da errores. Estos se producen al utilizar las funciones matemáticas que se encuentran en la librería <math.h>. Es necesario especificar una opción al compilar para que cargue este archivo.

Para hacerlo escogeremos la opción Parámetros Pedidos y surgirá otra ventana, la cual nos permitirá personalizar las órdenes del editor y del lenguaje. Iremos a Montar un fichero y añadiremos -lm a continuación de gcc.

Montaremos el programa (F11) y acto seguido lo ejecutaremos (F3). En la pantalla inferior veremos que se ha ejecutado gcc con la opción -lm:

Se está montando fichero: m1p06.c … gcc -lm "m1p06.c" -o "m1p06" completado correctamente Tiempo total: 0 segundos

Page 15: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 15

6.2. EXPLICACIÓN DEL PROGRAMA.

Podemos introducir cualquier número con o sin decimales. El valor de este número será almacenado en la variable x, que es del tipo double. En el módulo siguiente trataremos con más detalle los tipos de variable. En estos momentos es suficiente decir que el tipo double es el tipo con más precisión para los números con decimales.

Una vez introducido el número y la tecla INTRO, se borra la pantalla (con system("clear")) y se mostraría de la siguiente forma:

Esto se ha conseguido con las siguientes líneas de código:

printf("Funciones matemáticas\n\n");

printf("x\tx^2\tx^3\tsqrt(x)\tx^(-1)\tln(x)\tlog(x)\texp(x)\n");

printf("_____________________________________________\n\n");

printf("%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2f\t%.2f\n"

,x,x*x,x*x*x,sqrt(x),1/x,log(x),log10(x),exp(x));

La primera línea vuelve a imprimir el título después de haber borrado la pantalla con la línea anterior. A continuación está la función printf() con un solo argumento, este argumento es una cadena de caracteres con códigos de escape. El código \t corresponde al tabulador horizontal.

Normalmente la pantalla de salida tiene 80 caracteres por línea. Podemos imaginarnos esta pantalla dividida en 10 columnas de 8 caracteres cada una. El tabulador hace que se pase desde una columna al inicio de la siguiente. Para que la salida quede bien, debemos asegurarnos que lo que queremos tabular no ocupe más de 8 caracteres.

La tercera línea es otra llamada a la función printf() con un solo argumento para imprimir una línea.

Por último, la última función printf() tiene 9 argumentos: la cadena de control y las 8 expresiones que queremos imprimir, estas expresiones son:

x el valor de la misma variable

x*x el cuadrado

x*x*x el cubo (en C no es correcto poner x^2 ni n^3)

sqrt(x) raíz cuadrado

log(x) el logaritmo neperiano

log10(x) el algoritmo decimal

exp(x) el exponencial (el resultado de elevar el número e a x)

Todas estas expresiones son del tipo double. Para imprimir un valor double con la función printf() se utiliza el código de formato %lf (long float). Este código permite un modificador para indicar cuantos decimales se imprimirán. En este caso, %.2lf hace que se impriman dos decimales.

Page 16: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 16

Estos caracteres se ven como dos, pero representan un único carácter. El grupo de códigos que se encuentran en la izquierda de la tabla se utilizaban para mover el cursor en los terminales. El terminal podía ser la pantalla o la impresora. Es por esto que nos encontramos cosas como una nueva línea, retorno de carro, etc.

Si tenemos la necesidad de mostrar en el monitor el carácter \, debemos poner el código \\. Lo mismo sucede con los caracteres ¿,', y ".

El código octal y hexadecimal nos permite introducir directamente el código numérico en octal o en hexadecimal.

6.3. CAPTURA DE LA EJECUCIÓN DEL PROGRAMA.

Page 17: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 17

7. RESUMEN TEÓRICO.

7.1. ELEMENTOS BÁSICOS DE UN ORDENADOR.

Un ordenador es un sistema capaz de almacenar y procesar con mucha rapidez una gran cantidad de información. Una de las partes más importantes de un ordenador es la memoria.

La memoria de un ordenador está constituida por un gran número de unidades elementales denominadas bits. Para facilitar el acceso a estos elementos, los bits se agrupan en grupos de ocho, denominados bytes u octetos. La memoria suele medirse en KB (Kilobytes - 1024bytes), MB (Megabytes - 1024KB) y GB (Gigabytes - 1014MB).

La CPU (Central Processing Unit) o Unidad Central de Proceso, accede a la memoria por palabras (words) constituidas por 2, 4 u 8 bytes (16bits, 32bits o 64bits). Los PC habituales -desde el procesador 386- tienen arquitectura de 32bits (4bytes). Este dato es importante a la hora de escribir un programa.

La memoria de un ordenador se utiliza para almacenar diversos tipos de información: datos y programas. Dentro de los programas se puede distinguir entre aplicaciones y el propio SO. Éste último es un conjunto de programas encargados de la gestión interna del ordenador y la comunicación con los diferentes periféricos.

7.2. LOS PROGRAMAS Y LOS LENGUAJES INFORMÁTICOS.

Un programa está constituido básicamente por un conjunto de instrucciones que se ejecutan secuencialmente, una detrás de otra (debe mencionarse, no obstante, la existencia de programas paralelos, es decir, que se pueden ejecutar simultáneamente en más de un procesador).

Las instrucciones que entiende un procesador están constituidas por 1 (unos) y 0 (ceros). A esto se le denomina lenguaje máquina o binario. Desde los primeros años en los que existen los ordenadores se desarrollaron lenguajes de alto nivel, más cercanos al lenguaje natural. A lo largo de toda la historia de los ordenadores, han existido muchos lenguajes de programación de alto nivel. Estos han experimentado una diversificación y una evolución (lo mismo que ha sucedido con las lenguas naturales).

Cada lenguaje dispone de una sintaxis o conjunto de reglas para construir las diferentes instrucciones. Los lenguajes de alto nivel son más o menos comprensibles por el usuario pero no por el procesador, el cual debe traducirlos a su propio lenguaje máquina. Esta es la labor que se puede hacer con un intérprete (como tradicionalmente hace el BASIC) o con un programa especial denominado compilador.

Este último traduce el programa al lenguaje propio de la máquina y suele hacerlo en dos partes: compilado y enlazado (linkado). La primera parte, o compilado, crea un fichero objeto en un lenguaje próximo al ordenador. La segunda parte, realiza el proceso de montaje del programa con unas librerías necesarias para crear el programa ejecutable. Estas dos partes pueden hacerse en de una sola vez o bien por separado.

Una de las ventajas más importante de los lenguajes de alto nivel es la portabilidad, donde un programa desarrollado en un PC podrá, en principio, ser ejecutado en otra plataforma (Mac, UNIX, etc.). Unos lenguajes aseguran más que otros esta característica. C es uno de los destacados respecto a la portabilidad. De todas formas, por cuestiones comerciales y técnicas, la portabilidad nunca es nunca al 100%.

Page 18: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 18

7.3. LOS LENGUAJES C Y C++.

7.3.1. EL LENGUAJE C.

La invención del lenguaje C se adjudica a Dennis Ritchie a mediados de los años 70, en los laboratorios Bell de la AT&T. Fue posteriormente estandarizado por un comité del ANSI (American National Standard Institute), para poder garantizar la contabilidad de las diferentes implementaciones, dando lugar al estándar ANSI C.

De hecho, C no es exactamente un lenguaje de alto nivel, es más bien un lenguaje de nivel medio, ya que combina elementos de un lenguaje de alto nivel, como el COBOL o el PASCAL, con elementos propios del lenguaje ensamblador, que es un lenguaje muy cercano al lenguaje máquina. Esta característica hace de C una herramienta adecuada para la programación, tanto a nivel de sistema como a nivel de aplicaciones.

Un aspecto a destacar de C es que contiene sólo un número muy reducido de palabras clave (32 en ANSI C). Son estas:

Como comparación se puede decir que el BASIC del IBM PC tiene 159 palabras clave.

El lenguaje C está constituido por tres elementos:

El compilador.

El preprocesador.

La librería estándar.

El compilador es el elemento más característico del lenguaje C. Su misión es la de traducir a lenguaje máquina el programa C contenido en uno o más archivos fuente. El compilador es capaz de detectar algunos errores durante el proceso de compilación, enviando al usuario los correspondientes mensajes de error.

El preprocesador es un componente característico de C que no existen en otros lenguajes de programación. El preprocesador actúa sobre el programa fuente antes que comience la compilación. Fundamentalmente puede hacer dos cosas: llamar librerías y definir constantes simbólicas.

Con el objetivo de mantener el lenguaje lo más sencillo posible, muchas sentencias incorporadas a otros lenguajes no tienen contrapartida en C. Por ejemplo, en C no hay sentencias de entrada y salida de datos. Esta y otras operaciones importantes se realizan mediante funciones pre-programadas que vienen incorporadas al compilador o se pueden conseguir de otra forma. Estas funciones están agrupadas en un conjunto de librerías que forman la denominada librería estándar. Las declaraciones y definiciones de estas funciones están en archivos cabecera con extensión .h que se deben incorporar desde el preprocesador con la directiva #include, como ya veremos.

El código de cualquier programa escrito en C se almacena en uno o más archivos en el disco del ordenador. Estos archivos que contienen el código fuente deben acabar con la extensión .c. Esto es así para que el compilador pueda reconocer que es código C.

Page 19: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 19

7.3.2. EL LENGUAJE C++.

El lenguaje C++ fue desarrollado en la década de los 80 a partir del estándar ANSI C y su característica principal es la incorporación de las clases y la programación orientada a objetos (POO).

De hecho, C++ se puede utilizar de dos formas diferentes:

Como un lenguaje estructurado, prácticamente compatible con C, con unas pocas modificaciones y algunas mejoras.

Como un lenguaje orientado a objetos que representa un cambio cualitativo en la forma de entender un programa.

Para poder informar al compilador que el código que estamos compilando está en C++ los archivos fuente deben utilizar la extensión .cc en lugar de .c.

En este curso de introducción al C/C++ sólo desarrollaremos la primera forma de utilizar C++, pero se indicará si una sentencia o función es propia de C++ o bien es compatible con el estándar ANSI C.

7.3.3. LOS ENTORNOS INTEGRADOS DE DESARROLLO.

Dentro del mundo del código abierto hay otros EID para desarrollar programario y que nos permiten escribir aplicaciones C/C++ para consola.

Para Linux los más conocidos son:

Emacs (Editor MACroS). Es un editor de 1975 muy popular entre los programadores, debido a que es un editor de texto extensible, personalizable, auto-documentado y de tiempo real.

Se ejecuta en muchos SO. Dese sus incios ha habido muchas implementaciones de Emacs. Se ejecuta tanto en terminales como en entornos gráficos.

Vim (Vi IMproved). Es un entorno de programación basado en editor de texto vi de UNIX y está presente en todos los sistemas. Su utilización no es muy intuitiva y queda restringida en modo texto en las ventanas de la consola, aunque existen versiones para las XWindows, lo cual limita su uso generalizado.

KDevelop. Es un EID del año 1998 para los sistemas Linux y otros sistemas UNIX publicados bajo licencia GPL y es totalmente gráfico. Soporta multitud de lenguajes de programación como C, C++, Java, Ada, SQL, Phyton, Perl y Pascal.

Emacs, Vim y KDevelop, pero no entraremos a detallar su funcionamiento.

Para Microsoft Windows entre otros EID tenemos:

Dev C++. Es un completo EID para los lenguajes de programación C y C++, para poder desarrollar aplicaciones de consola o gráficas, estas últimas con las librerías gráficas wxWindows especialmente diseñadas para este entorno.

Dev C++ está basado enMingw puerto de GCC y GDB. En realidad no es un compilador, se trata más bien de un entorno que incluye uneditor de proyectos, un editor de textos, un compilador, un enlazador y un depurador. El compilador que se suministra con Dev C++ es Mingw y pertenece a otro proyecto.

Visual-MinGW (Minimalist GNU for Windows). MingGW o MinGW32, es una implementación de los compiladores GCC par la plataforma Win32. Es un compilador a utilizar acompañado de algún EID, como por ejemplo Dev C++.

Page 20: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 20

7.4. INTRODUCCIÓN A LA SINTAXIS DE C.

Antes de comenzar un estudio detallado de todos los elementos de C, se debe tener una idea básica de los elementos de un programa escrito en C:

1 - Todo programa C contiene siempre la función main(). Es en esta función donde comienza el programa. La definición de la función main() se encuentra entre los símbolos { y }. Éstos son los símbolos que delimitan un bloque de sentencias.

Toda función C, incluyendo la función main(), puede devolver o retornar un valor. El tipo de valor de retorno se debe poner delante del nombre de la función en su definición. Si no se pone ningún tipo se sobreentiende el tipo por defecto que es int. Si queremos que no retorne ningún valor debemos poner tipo void.

2 - Un programa debe declarar todas las variables que haga servir. Esto quiere decir, indicar al principio del programa, o bien al principio de un bloque, de qué tipo es la variable y su nombre.

En este punto se debe indicar que en C++ no hace falta que las declaraciones de variables se hagan al inicio, no obstante, esta característica sólo es útil si utilizamos programas muy largos e interesa que la declaración esté cerca del lugar donde se utiliza la variable. Si los programas son muy largos, es recomendable que las declaraciones se hagan todas juntas al comienzo de cada función.

3 - Toda sentencia C, incluyendo las declaraciones de variables, acaban en ; (punto y coma).

4 - Para utilizar una función pre-definida, por ejemplo, una función de la librería estándar, el programa debe contener una directiva #include con un archivo cabecera donde se encuentre la definición de esta función. Se deben conocer los archivos cabeceras que son necesarios para cada función en particular.

5 - Es aconsejable poner comentarios. Éstos son necesarios para documentar el código, aunque son ignorados por el compilador.

Principalmente hay dos formas de poner comentarios:

o Los comentarios tradicionales de C, que es todo el texto que va entre los símbolos /* y */.

o Los comentarios tradicionales de C++, que es todo el texto que va después de los símbolos // y hasta el final de la línea.

Page 21: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 21

8. ANEXO.

8.1. CÓDIGOS DE FORMATO MÁS HABITUALES EN LA FUNCIÓN SCANF().

8.2. CÓDIGOS DE FORMATO PARA LA FUNCIÓN PRINTF().

Page 22: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 22

9. EJERCICIOS.

De forma excepcional, en este módulo deberemos proporcionar tanto el código fuente como el archivo ejecutable. A partir del módulo 2, sólo deberemos proporcionar el código fuente de los ejercicios realizados.

1) printf() y scanf().

Como variación de la práctica 2 de este módulo, haremos un programa que nos solicite por pantalla el nombre de un municipio, un carácter y su código postal. El programa deberá escribir después el nombre del municipio, el carácter y a continuación el código postal. La salida deberá ser como esta:

Introduzca el nombre de un municipio y un carácter: Vilanova /

Introduzca su código postal: 08800

Los datos introducidos son: Vilanova / 08800

En este ejercicio debemos recoger un carácter. El código de tipo %c lo utilizaremos para recoger uno.

Consulta la tablas para obtener una breve descripción de los diferentes códigos de formato a utilizar por las funciones printf() y scanf().

Denominaremos al programa m1e1.cc dentro de la carpeta Módulo_1.

2) cout y cin.

Haremos el mismo programa del ejercicio anterior haciendo uso de cout y cin de C++. Se debe tener en cuenta que el programa debe permitir la introducción de nombres compuestos como Vilanova i La Geltrú, por tanto, se debe tener en cuenta lo tratado en la práctica 4 de este módulo. En primer lugar, se solicitará el nombre del municipio; en segundo lugar, el código postal; y, finalmente, el carácter:

Denominaremos al programa m1e2.cc dentro de la carpeta Módulo_1.

3) Resistencias en paralelo.

Haremos un programa que calcule la resistencia equivalente de un sistema de dos resistencias conectadas en paralelo. Esta resistencia equivalente puede calcularse mediante la fórmula:

El programa debe solicitar los datos R1 y R2, que serán almacenados en variables del tipo double y retornará el valor de RE, también del tipo double.

Para poder leer las variables del tipo double se utiliza el código de tipo %If.

Se debe tener en cuenta, para poder evaluar la expresión de antes, la jerarquía de las operaciones y, por lo tanto, una sentencia de asignación como: RE=R1xR2/R1+R2;, no es correcta. La sentencia correcta sería: RE=(R1xR2)/(R1+R2);

Denominaremos al programa m1e3.cc dentro de la carpeta Módulo_1.

Page 23: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 23

4) Conversión de escalas de temperatura.

Basándonos en la práctica 5, haremos un programa que pueda realizar la conversión de temperatura de °F a °C; es decir, un programa que nos solicite un número de °F y debe retornar el valor equivalente en °C. Para poder realizar este programa se debe tener en cuenta que:

°C = (°F - 32) / 1.8

donde F es la temperatura en grados Fahrenheit y C la temperatura en grados centígrados. Las variables de este programa serán del tipo double.

Denominaremos al programa m1e4.cc dentro de la carpeta Módulo_1.

5) Tasa Anual Equivalente (TAE).

TAE representa el porcentaje real que se aplicará por una operación de préstamo o imposición a plazo. Para el cálculo (en caso de un préstamo) se deben tener en cuenta todos los gastos derivados, pero para simplificar sólo contabilizaremos el fraccionamiento de pagos.

Si la TAE es i (expresada en tanto por uno) con un fraccionamiento de pagos n, puede calcularse con la fórmula:

TAE = (1 + i/n)n - 1

Realizaremos un programa que permite introducir los datos y calcule y presente por pantalla la TAE correspondiente.

Para elevar un número a un otro número se utiliza la función pow(). Esta función acepta dos parámetros del tipo double, la base y el exponente, y retorna la potencia, también del tipo double. Para utilizar la función pow() se debe incluir el archivo de cabecera math.h, lo cual se hace con la directiva: #include <math.h>

Denominaremos al programa m1e5.cc dentro de la carpeta Módulo_1.

6) printf() y scanf().

En este ejercicio debemos escribir un programa para solicitar al usuario que introduzca tres números reales y muestre en la pantalla su media aritmética.

La sentencia scanf("%f%f%f",&a,&b,&c); nos permite introducir los tres valores en la misma línea. Debemos poner un espacio en blanco entre valor y valor.

La ejecución del programa debería ser más o menos como esto:

Introduzca 3 valores reales 2.5 3.7 6.3

La media aritmética de 2.500000 3.700000 6.300000 es 4.166667

Denominaremos al programa m1e6.cc dentro de la carpeta Módulo_1.

Page 24: Módulo 1 - Fundamentos de Programación en C, C++

MP 11 – UF 02 – Fundamentos Programación - Módulo 1. Página 24

9.1. PROBLEMAS COMPLEMENTARIOS.

7) La ecuación de segundo grado.

En este ejercicio se solicita una primera versión de un programa que mejoraremos en otro módulo. Se trata de resolver una ecuación de segundo grado del tipo:

ax2 + bx + c = 0

De momento no haremos ninguna comprobación que las soluciones sean reales, por tanto, se debe tener en cuenta que esta versión del programa fallará si los coeficientes hacen que la ecuación no tenga soluciones reales.

El programa debe solicitar los tres coeficientes a, b y c. Estos coeficientes serán del tipo double y se deben declarar de la siguiente forma:

void main(){

double a,b,c; //coeficientes

double disc; //discriminante de la ecuación

double x1,x2; //soluciones de la ecuación

...

Para leer los datos se puede utilizar una función scanf() para cada coeficiente:

printf("\n introducir el coeficiente a:");

scanf("%lf",&a);

printf("\n introducir el coeficiente b :");

scanf("%lf",&b);

printf("\n introducir el coeficiente b :");

scanf("%lf",&c);

O bien un única función scanf() que lea los tres coeficientes a la vez:

printf("\n introducir los coeficientes a, b i c\n");

scanf("%lf %lf %lf", &a,&b,&c);

Para poder leer y escribir variables del tipo double el código de tipo que se utiliza es %If.

La fórmula para resolver ecuaciones de segundo grado es:

Para poder hacer la raíz cuadrada se utiliza la función sqrt(). Para utilizarla es necesario incluir al principio del código el archivo de cabecera math.h: #include <math.h>

Es más fácil de entender el programa si utilizamos variables para los cálculos parciales, por ejemplo: disc=b*b-4*a*c;

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

Denominaremos al programa m1e7.cc dentro de la carpeta Módulo_1.