La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Objetivos: Dominar C++ al nivel necesario para poder armar programas que simulen en base a Geant4. 1 5. Técnicas de Simulación 2. Programando C++ www.gphysics.net.

Presentaciones similares


Presentación del tema: "Objetivos: Dominar C++ al nivel necesario para poder armar programas que simulen en base a Geant4. 1 5. Técnicas de Simulación 2. Programando C++ www.gphysics.net."— Transcripción de la presentación:

1 Objetivos: Dominar C++ al nivel necesario para poder armar programas que simulen en base a Geant Técnicas de Simulación 2. Programando C++ – UFRO-Master-Fisica-Medica-5-2-Programando C Dr. Willy H. Gerber Instituto de Fisica Universidad Austral Valdivia, Chile

2 Programa para armar programas 2 – UFRO-Master-Fisica-Medica-5-2-Programando C Trabajaremos con Visual Studio 2008

3 Programa para armar programas 3 – UFRO-Master-Fisica-Medica-5-2-Programando C Creemos un proyecto…

4 Programa para armar programas 4 – UFRO-Master-Fisica-Medica-5-2-Programando C … en C++ :

5 Programa para armar programas 5 – UFRO-Master-Fisica-Medica-5-2-Programando C Estructura creada:

6 Programa para armar programas 6 – UFRO-Master-Fisica-Medica-5-2-Programando C Ejecutar:

7 Ejemplo simple 7 – UFRO-Master-Fisica-Medica-5-2-Programando C // UFROTest.cpp : main project file. #include "stdafx.h" using namespace System; int main(array ^args) { Console::WriteLine(L"Hello World"); Console::ReadLine(); return 0; } Comencemos con un ejemplo simple: Comentario (línea que comienza con //) Inicio programa principal (main)

8 Otro ejemplo 8 – UFRO-Master-Fisica-Medica-5-2-Programando C Otro ejemplo, con dos línea: Los espacios no son considerados en la compilación. O sea también se podría escribir: int main(array ^args) { Console::Write(Adios "); Console::WriteLine(mundo cruel"); Console::ReadLine(); return 0; } int main(array ^args) { Console::Write(Adios"); Console::WriteLine(mundo cruel"); Console::ReadLine(); return 0; }

9 Variables 9 – UFRO-Master-Fisica-Medica-5-2-Programando C string^ s=Hola; En el ejemplo se introdujo el concepto de texto (string) que se escribe entre : Existen además por ejemplo: int n=2; char c=h; float x=5.67; double y=2.345; bool decision=true; números enteros caracteres números reales (baja precisión) números reales (alta precisión) valor lógico Nota, es muy distinto 2, 2, 2 y 2.0 (porque?) int n; n=2; Ejemplo de definición y asignación int n; n=2; Ejemplo de error

10 Operadores sobre int y float 10 – UFRO-Master-Fisica-Medica-5-2-Programando C Los operadores básicos son: + suma - resta * multiplicación / división % modulo ++ incrementa en 1 Los operadores pueden ser empleados para asignar valores y/o para entregar valores: float a, b, x, y; a=1.2; b=0.2; x=5.1; y=a*x+b/x; Console::WriteLine(2*(x/a)+b); Nota: En el calculo primero se aplican * y /, luego + y -. Las operaciones se hacen de izquierda a derecha.

11 Operadores sobre char, conversión y char de string 11 – UFRO-Master-Fisica-Medica-5-2-Programando C char letra; letra = 'a' + 1; Console::WriteLine(letra); El carácter se asocia al código ASCII: Entrega como resultado b int numero; numero = 'a'; Console::WriteLine(numero); Entrega como resultado 97 Conversión de tipos (typecast) double x=2.6; int n=(int)x; Asocia a n el valor 2 (cuidado, trunca, no redondea) Cada string es una colección o arreglo de chars, por ello String^ nombre (test); char primera_letra=nombre[0]; char segunda_letra=nombre[1]; Asigna la t a primera_letra Asigna la e a segunda_letra

12 Funciones matemáticas 12 – UFRO-Master-Fisica-Medica-5-2-Programando C Si se agrega al inicio la referencia a las funciones matemáticas: #include se pueden usar las funciones matemáticas que incluye el C++, calculando y asignando valores como por ejemplo y=cos(x) Las funciones que incluye el C++ son: abs acos asin atan atan2 ceil cos cosh exp fabs floor fmod frexp ldexp log log10 modf pow sin sinh sqrt tan tanh

13 Generadores random 13 – UFRO-Master-Fisica-Medica-5-2-Programando C En la librería: #include Esta definida el generador de números al azar rand (); Genera números enteros entre 0 y RAND_MAX int x = rand (); double y = (double)x/RAND_MAX; Para generar un numero real entre 0 y 1: Cuidado, el seed (semilla, valor inicial de la secuencia) es siempre el mismo, o sea la secuencia es siempre la misma. Si se desea cambiar esto se debe variar el seed.

14 Funciones propias 14 – UFRO-Master-Fisica-Medica-5-2-Programando C Los programas permiten la definición de funciones o subrutinas propias. Un ejemplo podría ser una función writeMessage que se encargue de enviar un mensaje a la pantalla. Se definen en paralelo al programa principal que lo llama: #include void writeMessage (String^ txt) { Console::WriteLine(Mensaje: +txt); Console::ReadLine(); } void main () { writeMessage("Hola.); } Existen también librerías que traen funciones que pueden ser llamadas, Geant4 es una muy completa para cálculos de dinámica de partículas.

15 Funciones propias 15 – UFRO-Master-Fisica-Medica-5-2-Programando C Las subrutinas pueden: - Tener múltiples argumentos (Nota: cada argumento tiene que llevar su tipo, ejemplo: int n, int m, float x … es ilegal tratar de resumir: int n, m, float x - Pueden devolver un valor, el que se especifica en la definición de la subrutina y en el valor que entrega: double poly(double x) { double u=1+2*x+3*pow(x,2); return u; } void main () { Console::WriteLine(P(2.5)=+poly(2.5)); Console::ReadLine(); }

16 Condicionamientos 16 – UFRO-Master-Fisica-Medica-5-2-Programando C En el desarrollo del programa se pueden condicionar la ejecución de una serie de instrucciones: if (condicion1) { instrucciones1 } else if(condicion2){ instrucciones2 } else{ instrucciones3 } Las condiciones se definen como x==y x!=y x >y x >=y x

17 Abortar y recurrencia 17 – UFRO-Master-Fisica-Medica-5-2-Programando C Si se desea abortar una subrutina basta con incluir el comando: return; Y el sistema volverá al punto donde se llamo la subrutina (en el main o en la subrutina que sea). C y C++ tienen además la posibilidad de realizar llamadas recurrentes, o sea la subrutina se llama a si misma: void ConteoRegresivo(int cnt) { if(cnt==0) {return;} else{ Console::WriteLine(cnt); Console::ReadLine(); ConteoRegresivo(cnt-1); }

18 Variables lógicas 18 – UFRO-Master-Fisica-Medica-5-2-Programando C Alternativas bool flag; flag = true; flag = false; true=verdadero false=falso Determinar variable lógica, ejemplos: flag=(x!=0); flag=(n>0); Si x es distinto de cero, flag es verdadero, si no falso. Si n es mayor que cero, flag es verdadero, si no falso. Operadores lógicos: && || ! And Ir Nota flag12=flag1 && flag2 flag12=flag1 || flag2 flag2=!flag1

19 Loops - while 19 – UFRO-Master-Fisica-Medica-5-2-Programando C El loop while(){} El loop (circulo cerrado) mas simple es el while simple: while(condición){ instrucciones } Que se repite mientras que la condición se cumpla. Por ello las instrucciones deben contener algún cambio que lleve finalmente a que la condición no se cumpla y pueda salir del loop (error en la ejecución, el compilador no descubre estos problemas). n=10 while(n>0){ n=n-1; }

20 Loops - for 20 – UFRO-Master-Fisica-Medica-5-2-Programando C El loop for(){} Otro loop (circulo cerrado) es el for: for(int i=inicio;limite;i++ o i--){ instrucciones } Ejemplo: for (int i = 0; i < 4; i++) { }

21 Operaciones sobre strings 21 – UFRO-Master-Fisica-Medica-5-2-Programando C Largo de un string String^ txt (text); int len=txt.length(); Asigna a león el valor 4 Posición de char en string String^ txt (text); int idx=txt.find(x); Asigna a idx el valor 3 String^ txt (text); int idx=txt.find(ex); Asigna a idx el valor 2 Concatenar strings String^ txt1 (te); String^ txt2 (xt); String^ txt (); txt=txt1+txt2;

22 Estructuras 22 – UFRO-Master-Fisica-Medica-5-2-Programando C Estructuras struct nombre { double fvariable1, fvariable2; int nvariable1; … }; struct Point { double x, y; }; Ejemplo Elementos de la estructura: nombre.fvariable1 Asignación de valores a estructura (solo al crear!): nombre ejemplo = {1.0, 2.3, 2, …} Asignación de estructura: nombre ejemplo2 = ejemplo1; (también se pueden hacer asignaciones de estructuras)

23 Estructuras 23 – UFRO-Master-Fisica-Medica-5-2-Programando C Las estructuras se pueden usar igual que los otros tipos de variables. En particular se pueden pasar como argumentos: void subrutina(nombre p, …) Lo que significa que una copia (no la misma estructura) es creada en la subrutina. Si se desea hacer referencia a la estructura original se debe pasar la dirección a la memoria: void subrutina(nombre& p, …) Las estructuras pueden ser retronadas por las subrutinas nombre subrutina(…){ nombre p; … return p; } Si se quiere evitar que modificaciones en la subrutina repercutan en la rutina que hace la llamada se puede bloquear la modificación agregando const: void subrutina(const nombre& p, …)

24 Estructuras 24 – UFRO-Master-Fisica-Medica-5-2-Programando C Funciones a ser llamadas en estructuras void Tiempo::imprimir () { Tiempo hoy = *this; instrucciones } en que se llama vía el puntero this la estructura. En todo caso se pueden citar en la función directamente las variables como serian hora, minutos y segundos. struct Tiempo { int hora, minutos; double segundos; void Tiempo::imprimir (); }; La función en si seria

25 Punteros y Referencias 25 – UFRO-Master-Fisica-Medica-5-2-Programando C Punteros int* x o int *x Referencia int& x o int &x *px = &x; &rx = x; x = 1; lvalue = rvalue; add *px &rx x val add El puntero *px contiene la dirección de donde esta el valor x La referencia &rx retorna el valor x

26 Alocución de memoria dinámica y arreglos 26 – UFRO-Master-Fisica-Medica-5-2-Programando C int *pint; pint = new int; delate pint; Definir puntero Reservar memoria Liberar memoria int n = 10; int *parray; parray = new int[n]; delte parray;

27 Puntero y referencia en subrutinas 27 – UFRO-Master-Fisica-Medica-5-2-Programando C tipo *funcion(tipo *p) { return p; } tipo &funcion(tipo &r) { return r; }

28 Estructuras generales y Archivos Headers 28 – UFRO-Master-Fisica-Medica-5-2-Programando C Una estructura general tiene la forma: struct nombre { // instance variables variables (ej. double x, y; int n;) // constructors funciones que asignan valores (ej set(int n, double x, double y); set(int n); ) // modifiers funciones de modificación (ej. void change (double x, double y); ) // functions funciones de trabajo (ej. void print (int n) const; ) }; #include nombre.h La definición se graba en un archivo.h que se cita en el programa main como: Las funciones se escriben en el archivo nombre.cpp

29 Clases 29 – UFRO-Master-Fisica-Medica-5-2-Programando C Las class son estructuras en que las variables son de uso exclusivamente Internas y no pueden ser modificadas externamente (privadas) Ejemplo class Complex { private: double real, imag; double mag, theta; bool cartesian, polar; void calculateCartesian (); void calculatePolar (); public: Complex () { cartesian = false; polar = false; } Complex (double r, double i) { real = r; imag = i; cartesian = true; polar = false; } void printCartesian (); void printPolar (); double getReal (); double getImag (); double getMag (); double getTheta (); void setCartesian (double r, double i); void setPolar (double m, double t); };


Descargar ppt "Objetivos: Dominar C++ al nivel necesario para poder armar programas que simulen en base a Geant4. 1 5. Técnicas de Simulación 2. Programando C++ www.gphysics.net."

Presentaciones similares


Anuncios Google