El Lenguaje C++ ( Introducción, variables, operadores, funciones, primeras compilaciones)
description
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