1 Técnicas Fundamentales de Simulación, Reconstrucción y Análisis de Datos en Física Experimental de Partículas El Lenguaje C++ (Introducción, variables, operadores, funciones, primeras compilaciones) 3 Isidro González Caballero (Universidad de Oviedo) Valencia, 07-11/05/20102
2 Bibliografía Google Programación Orientada a Objetos y C++G. Booch: "Object-Oriented Analysis and Design". Addison-Wesley S. B. Lippman: "C++ Primer". Addison-Wesley B. Stroustrup: "The Annotated C++ Reference Manual". Addison-Wesley B. Stroustrup: "The C++ Programming Language". Addison- Wesley Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
3 Introducción El C++ es un superconjunto del CSoporta tanto metodologías de programación estructurada como OOP Tiene la capacidad de usar librerías C y FORTRAN Características ajenas a la OOP y al C: Chequeo de tipos mejorado (más estricto) Constantes simbólicas (const) (chequeo de tipos constantes) Sustitución de funciones inline (eficiencia de ejecución) Argumentos por defecto (ahorro de código) Sobrecarga de funciones y operadores (los tipos derivados tienen sintaxis iguales a los nativos) Manejo de memoria dinámica El tipo referencia (alias) Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
4 Tipos fundamentales Nombre ¿Qué representa? Entero, real, lógico charUn carácter Entero short int Un entero corto int Un entero long int Un entero con mayor rango de validez float Un real Real double Un real de doble precisión long double Un real de doble precisión y mayor bool cierto (true) o falso (false) Lógico unsigned Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
5 Operadores aritméticosFunción Uso = asignación int i = 7; * multiplicación double r = 3.5 * i; / división double t = r / 1.2; % modulo (resto) i = 21 % 6; // i = 3 + suma double rt = r + t; - resta r = rt – t; ++,-- incremento int i = 0; int j = i++; //j = 0 int k = --i; //k = 0 +=,-=, *=,/= opera y asigna r += 2.6; //r = r r *= 2.6; //r = r * 2.6 Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
6 Operadores lógicos Operador Función Uso < menor que i < 5 <=menor o igual que r <= 5 > mayor que i > 5 >= mayor o igual que i >= 5 == igualdad i == 5 != desigualdad i != 5 ! NOT lógico !true; //false && Y lógico i < 5 && j > 4 || O lógico i < 5 || j > 4 Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
7 Declaraciones Antes de utilizar una variable tenemos que declarar su tipo Para las funciones debemos declarar su signatura y tipo de retorno La signatura está formada por el nombre de la función y el tipo de los argumentos que espera Podemos inicializar una variable al declararla No siempre una declaración reserva un espacio en memoria definición Comentarios char letra; /*Declaración y definición de un carácter*/ int total = 10; //Decl., def. e inic. de un entero double random(double seed); //Declaración de una función Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
8 Tipos derivados, static, const...Nombre/Símb ¿Qué representa? Delante/Detras [] Array Detrás * Puntero, posición en memoria En medio & Referencia, alias de la var. struct Una estructura Delante class Una clase static Ámbito del programa const No puede modificarse Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
9 Tipos derivados, static, const...//Punteros int* ptrNumero; //Puntero a un entero //Arrays float reales[20]; //Un array de 20 floats double punto[2] = {1.2, 3.4}; //Con inicializacion //Struct struct punto2D {short int x; short int y;}; //static static int contador; //const const char la_letra_c = 'c'; const double pi = ; Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
10 Escribir, compilar, linkar, ejecutarCódigo (.cc, .C, .cpp…) #include
11 Ficheros intermedios (.i, .ii) Algunas posibilidadesPreprocesador Código (.cc, .C, .cpp…) #include
12 Directivas de preprocesador#include ″header.h″ Incluye el fichero header.h #include
13 Output básico Debe incluirse el cabecero (header) iostreamSe utilizan dos objetos de tipo ostream: cout para la salida estándar o cerr para los mensajes de error... ... seguido del operador << … … y el mensaje de salida #include
14 Funciones Tienen un tipo de retorno (void si no devuelven nada)Se debe especificar el tipo de cada uno de sus parámetros (signatura) El cuerpo de la función va entre llaves { } La función principal del sistema es int main() #include
15 Ámbito (scope) y tiempo de vidaEl ámbito es el espacio del programa en que un nombre (variable) es válido Normalmente es el espacio entre su declaración y la siguiente llave cerrada, } Las variables solo existen (ocupan espacio en memoria) mientras su ámbito es válido Salvo las declaradas static que duran hasta el final del programa Aunque solo pueden ser utilizadas en el código dentro de su ámbito Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
16 Ejercicio 1: Programa #include
17 Ejercicio 1: Compilar y ejecutar[host] tar xvfz ejercicio1.tar.gz [host] cd ejercicio1 [host] ls ejercicio1.cpp [host] g++ ejercicio1.cpp ejercicio1.cpp a.out [host] ./a.out El cuadrado de 7 es 49 pi^2 = [host] g++ ejercicio1.cpp –o ejercicio1.exe a.out ejercicio1.cpp ejercicio1.exe [host] ./ejercicio1.exe Descomprimimos el fichero tras descargarlo Compilar y linkar. El resultado es… Ejecutar Compilar y linkar elegiendo el fichero de salida Ejecutar Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
18 Ejercicio 2: Varios ficherosDescargar y descomprimir ejercicio2.tar.gz Los ficheros de código: cuadrado.h: Declaración de la función double cuadrado (double) cuadrado.cpp: Implementación ejercicio2.cpp: Función main El script compila.csh compila y enlaza todo: Crea los ficheros objeto cuadrado.o y ejercicio2.o Enlaza los objetos en el ejecutable ejercicio2.exe [host] g++ -c -o cuadrado.o cuadrado.cpp [host] g++ -c -o ejercicio2.o ejercicio2.cpp [host] g++ -o ejercicio2.exe cuadrado.o ejercicio2.o Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
19 Control de flujo: if-then-elseEjecución condicional Sintaxis simple: Si la expresión lógica es cierta se ejecuta sentencia1 Sintaxis completa: Si la expresión lógica es falsa se ejecuta la sentencia2 Si hay más de una sentencia a ejecutar por caso se meten entre { } if (expresión lógica) sentencia1; if (expresión lógica) sentencia1; else sentencia2; Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
20 if-then-else ejemplo int mifuncion(); //Una funcion que devuelve un numero entero .... int i = mifuncion(); cout << "El valor devuelto por mifuncion es "; if (i < 0) cout << "negativo" << endl; else if (i > 0) cout << "positivo" << endl; else cout << "nulo" << endl; Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
21 Control de flujo: switchEjecución condicional Se trata de evitar if-then-else encadenados Sintaxis: switch (variable) case (valor1): setencia1; break; case (valor2): setencia2; break; ... default: setenciadef; Se ejecuta si variable == valor1 Se ejecuta si variable == valor1 Se ejecuta si no se ha ejecutado ninguna de las anteriores Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
22 switch: ejemplo int mifuncion(); //Una funcion que devuelve un numero entero .... int i = mifuncion(); cout << "El valor devuelto por mifuncion es "; switch (i) { case (0): cout << "nulo" << endl; break; case(1): cout << "uno" << endl; default: cout << "otro valor" << endl; } Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
23 Control de flujo: for Iteraciones Sintaxis:La inicialización (de un contador) solo se ejecuta la primera vez que entra en el bloque La parada es una expresión lógica Mientras sea cierta se sigue iterando Cuando sea falsa se sale del bucle La acción (normalmente el incremento de un contador) se ejecuta al final de cada iteración for (inicialización; parada; acción) sentencia; Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
24 Control de flujo: while y do-whileSintaxis: Sólo si expresión es cierta se ejecuta una nueva iteración La comprobación se hace al inicio Sintaxis Sólo si expresion es cierta se ejecuta una nueva iteración La comprobación se hace al final: La sentencia se ejecuta al menos una vez! while (expresion) sentencia; do sentencia; while (expresion) Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
25 Ejemplo Iteración: Tabla del 3cout << "Tabla de multiplicar del 3..." << endl; for (int i = 1; i <= 10; i++) { cout << "3 * " << i << " = " << 3 * i << endl; } int i = 1; while (i <= 10) { cout << "3 * " << i << " = " << 3 * i << endl; i++; } int i = 1 do { cout << "3 * " << i << " = " << 3 * i << endl; i++; } while (i <= 10) Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
26 Argumentos por valor y por referenciaA la función le llega una copia en memoria de la variable que pasamos Cuando la función termina esa copia se destruye Las modificaciones del valor de la variable dentro de la función no salen al exterior Es la forma por de pasar variables por defecto Por referencia A la función le llega la dirección de memoria de la variable que pasamos ¡No hay copia! Cuando la función termina no se destruye ese espacio en memoria Las modificaciones del valor de la variable sí salen al exterior de la llamada Se utiliza & para indicarlo Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
27 Ejercicios: Hacer un programa que calcule los cuadrados de los 10 primeros números aprovechando el código del ejercicio2 Hacer un programa que calcule el cuadrado de un numero cualquiera (usar cin) Hacer un programa que muestre los 10 primeros números primos double variable; cout << “Introduce un numero real: “ << endl; cin >> variable; Nota: Para comprimir un directorio en un solo fichero y poder enviarlo por correo [host] tar cvfz ficherocomprimido.tar.gz directorio Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas