El Lenguaje C++ ( Introducción, variables, operadores, funciones, primeras compilaciones)

Post on 23-Jan-2016

67 views 0 download

description

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. - PowerPoint PPT Presentation

Transcript of El Lenguaje C++ ( Introducción, variables, operadores, funciones, primeras compilaciones)

EL LENGUAJE C++(Introducción, variables, operadores, funciones, primeras compilaciones)

Técnicas Fundamentales de

Simulación, Reconstrucción y

Análisis de Datos en Física

Experimental de Partículas

Isidro González Caballero (Universidad de Oviedo)

Valencia, 07-11/05/20102

33

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

2

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

3

Tipos fundamentales

Nombre ¿Qué representa? Entero, real, lógico

char Un carácter Entero

short int Un entero corto Entero

int Un entero Entero

long int Un entero con mayor rango de validez Entero

float Un real Real

double Un real de doble precisión Real

long double

Un real de doble precisión y mayor Real

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

4

Operadores aritméticos

Operador 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 = 0int k = --i; //k = 0

+=,-=,*=,/=

opera y asigna r += 2.6; //r = r + 2.6r *= 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

5

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

6

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ónchar 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

Comentarios

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

7

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. En medio

struct Una estructura Delante

class Una clase Delante

static Ámbito del programa Delante

const No puede modificarse Delante

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

8

Tipos derivados, static, const...

//Punterosint* ptrNumero; //Puntero a un entero

//Arraysfloat reales[20]; //Un array de 20 floatsdouble punto[2] = {1.2, 3.4}; //Con inicializacion

//Structstruct punto2D {short int x; short int y;};

//staticstatic int contador;

//constconst char la_letra_c = 'c';const double pi = 3.1415926;

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

9

Compilar

g++ -o main.cc

Escribir, compilar, linkar, ejecutar

Código(.cc, .C, .cpp…)

#include <iostream>

int main() {

cout << “Hola mundo”

<< endl;

return 0;

}

Diseñar

Escribir

Fichero objeto(.obj, .o)

Ejecutable(a.out, .exe, …)Ejecutar

./a.out

Hello world Linkar

g++ main.o

main.o

libMyLib.so

other.o

a.out

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

10

Compilación

Preprocesador

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

Compilar

g++ -o main.cc

Código(.cc, .C, .cpp…)

#include <iostream>

int main() {

cout << “Hola mundo”

<< endl;

return 0;

}

Fichero objeto(.obj, .o)

main.o

libMyLib.so

other.o

Ficheros intermedios

(.i, .ii)Preproceso

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

11

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

12

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.1415cout << "El valor de pi=" << pi << endl;

Hola2 y 4 es 6El valor de pi=3.1415

Salto de línea

Resultado

Téc. Fund. de Simulación, Reconstrucción y Análisis de datos en F. Exp. de Partículas

13

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

14

Á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

15

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 = 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

16

[host] tar xvfz ejercicio1.tar.gz[host] cd ejercicio1[host] lsejercicio1.cpp[host] g++ ejercicio1.cpp[host] lsejercicio1.cpp a.out[host] ./a.outEl cuadrado de 7 es 49pi^2 = 9.8696[host] g++ ejercicio1.cpp –o ejercicio1.exe[host] lsa.out ejercicio1.cpp ejercicio1.exe[host] ./ejercicio1.exeEl cuadrado de 7 es 49pi^2 = 9.8696

Ejercicio 1: Compilar y ejecutar

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

17

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

18

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

19

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

20

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

21

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

22

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

23

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

24

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 = 1do { 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

25

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

26

Nota: Para comprimir un directorio en un solo fichero y poder enviarlo por correo

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;

[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

27