La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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,

Presentaciones similares


Presentación del tema: "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,"— Transcripción de la presentación:

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 C
Soporta 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 char
Un 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éticos
Funció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, ejecutar
Código (.cc, .C, .cpp…) #include <iostream> int main() { cout << “Hola mundo” << endl; return 0; } Fichero objeto (.obj, .o) Diseñar Escribir Compilar g++ -o main.cc main.o other.o libMyLib.so Hello world Ejecutable (a.out, .exe, …) Ejecutar ./a.out Linkar g++ main.o a.out Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

11 Ficheros intermedios (.i, .ii) Algunas posibilidades
Preprocesador Código (.cc, .C, .cpp…) #include <iostream> int main() { cout << “Hola mundo” << endl; return 0; } Fichero objeto (.obj, .o) Compilar g++ -o main.cc Ficheros intermedios (.i, .ii) Preproceso Compilación main.o other.o libMyLib.so Algunas posibilidades Incluir código de otros ficheros Remplazar variables o símbolos en gral. no necesario en C++ Trucos sucios no recomendable  Incluye cierta lógica No son comandos C++… … pero están presentes en cualquier compilador Muy utilizadas en C… … suprimidas algunas en C++ Se escriben con el símbolo # al comienzo Es una especie de parser Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

12 Directivas de preprocesador
#include ″header.h″ Incluye el fichero header.h #include <header.h> Idem para “ficheros estándar”… algo subjetivo  #define VAR value Reemplaza la secuencia VAR por value #ifdef, #ifndef, #else, #endif Lógica para chequer el valor de variables #pragma Mensajes al compilador. Poco utilizado Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

13 Output básico Debe incluirse el cabecero (header) iostream
Se 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 <iostream> cout << "Hola\n"; cout << "2 y 4 es “; cout << 2+4 << endl; float pi=3.1415 cout << "El valor de pi=" << pi << endl; Salto de línea Resultado Hola 2 y 4 es 6 El valor de pi=3.1415 Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

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 <iostream> float cuadrado(float r); int main() { cout << "El cuadrado de 7 es " << cuadrado(7); return 0; //Todo ha ido bien } float cuadrado(float r) { float c = r*r; return c; Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

15 Ámbito (scope) y tiempo de vida
El á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 <iostream>
using namespace std; //Necesario para cout y endl double cuadrado(double); //Declaramos funcion int main() { //Funcion principal int siete = 7; cout << "El cuadrado de " << siete << " es " << cuadrado(7) << endl; const double pi = ; cout << "pi*pi = " << cuadrado(pi) << endl; return 0; } double cuadrado(double r) { double c = r*r; return c; Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

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 ficheros
Descargar 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-else
Ejecució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: switch
Ejecució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-while
Sintaxis: 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 3
cout << "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 referencia
A 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


Descargar ppt "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,"

Presentaciones similares


Anuncios Google