280 likes | 642 Views
3. El Lenguaje C++ ( Introducción, variables, operadores, funciones, primeras compilaciones). Isidro González Caballero ( Universidad de Oviedo) Valencia, 07-11/05/20102. Técnicas Fundamentales de Simulación, Reconstrucción y Análisis de Datos en Física Experimental de Partículas.
E N D
3 El Lenguaje C++(Introducción, variables, operadores, funciones, primeras compilaciones) Isidro González Caballero (Universidad de Oviedo) Valencia, 07-11/05/20102 Técnicas Fundamentales de Simulación, Reconstrucción y Análisis de Datos en Física Experimental de Partículas
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
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
Tipos fundamentales unsigned Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
Operadores aritméticos Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
Operadores lógicos Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
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
Tipos derivados, static, const... Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
Tipos derivados, static, const... //Punteros int*ptrNumero; //Puntero a un entero //Arrays float reales[20]; //Un array de 20 floats doublepunto[2] = {1.2, 3.4}; //Con inicializacion //Struct struct punto2D {short int x; short int y;}; //static staticint contador; //const constcharla_letra_c = 'c'; constdouble pi = 3.1415926; Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
Hello world 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 Ejecutable(a.out, .exe, …) Linkar g++ main.o Ejecutar ./a.out a.out Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
Preprocesador Código(.cc, .C, .cpp…) #include <iostream> int main() { cout << “Hola mundo” << endl; return 0; } • 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 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 Fichero objeto(.obj, .o) Ficheros intermedios(.i, .ii) Compilar g++ -o main.cc Preproceso Compilación main.o other.o libMyLib.so Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
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
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> Salto de línea cout<< "Hola\n"; cout << "2 y 4 es “; cout << 2+4 << endl; float pi=3.1415 cout << "El valor de pi=" << pi << endl; 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
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
Á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 staticque 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
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; constdouble pi = 3.1415926; 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
Ejercicio 1: Compilar y ejecutar [host] tar xvfz ejercicio1.tar.gz [host] cd ejercicio1 [host] ls ejercicio1.cpp [host] g++ ejercicio1.cpp [host] ls ejercicio1.cpp a.out [host] ./a.out El cuadrado de 7 es 49 pi^2 = 9.8696 [host] g++ ejercicio1.cpp –o ejercicio1.exe [host] ls a.out ejercicio1.cpp ejercicio1.exe [host] ./ejercicio1.exe El cuadrado de 7 es 49 pi^2 = 9.8696 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
Ejercicio 2: Varios ficheros • Descargar y descomprimir ejercicio2.tar.gz • Los ficheros de código: • cuadrado.h: Declaración de la funcióndouble 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
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
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; elseif (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
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; break; 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
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; break; default: cout << "otro valor" << endl; } Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas
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
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
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
Argumentos por valor y por referencia Por valor • 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
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