1 / 29

5. Técnicas de Simulación 2. Programando C++

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

serena
Download Presentation

5. Técnicas de Simulación 2. Programando C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Programa para armar programas Trabajaremos con Visual Studio 2008 www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  3. Programa para armar programas Creemos un proyecto… www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  4. Programa para armar programas … en C++ : www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  5. Programa para armar programas Estructura creada: www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  6. Programa para armar programas Ejecutar: www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

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

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

  9. Variables En el ejemplo se introdujo el concepto de texto (string) que se escribe entre “: string^ s=“Hola”; 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?) Ejemplo de definición y asignación Ejemplo de error int n; n=2; int n; n=‘2’; www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  10. Operadores sobre int y float 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. www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  11. Operadores sobre char , conversión y char de string El carácter se asocia al código ASCII: char letra; letra = 'a' + 1; Console::WriteLine(letra); 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 char’s, 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 www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

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

  13. Generadores random En la librería: #include <stdlib.h> Esta definida el generador de números al azar rand (); Genera números enteros entre 0 y RAND_MAX Para generar un numero real entre 0 y 1: int x = rand (); double y = (double)x/RAND_MAX; 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. www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  14. Funciones propias 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 <iostream.h> 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. www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  15. Funciones propias • 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(); } www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  16. Condicionamientos 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} Si se da la condicion1… … realiza instrucciones1 … si no se dio condicion1 pero si condicion2 … realiza instrucciones2 … y si no se dio ni condicion1 ni condicion2 … realiza instrucciones3 Nota: pueden existir el numero que se quiera de else if (incluido ninguno) y existir o no el else final. Las instrucciones pueden también contener condiciones if Las condiciones se definen como x==y x!=y x >y x >=y x <y x <=y x es idéntico de y x es diferente a y x mayor que y x mayor o igual que y x menor que y x menor o igual que y www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  17. Abortar y recurrencia 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); } } www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  18. Variables lógicas 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 www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  19. Loops - while 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; } www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  20. Loops - for 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++) { } www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  21. Operaciones sobre strings 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; www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

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

  23. Estructuras 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, …) 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, …) Las estructuras pueden ser retronadas por las subrutinas nombre subrutina(…){ nombre p; … return p; } www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  24. Estructuras Funciones a ser llamadas en estructuras struct Tiempo {   int hora, minutos;   double segundos;   void Tiempo::imprimir (); }; La función en si seria 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. www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

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

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

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

  28. Estructuras generales y Archivos “Headers” 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; )}; La definición se graba en un archivo .h que se cita en el programa main como: #include “nombre.h” Las funciones se escriben en el archivo nombre.cpp www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

  29. Clases Las class son estructuras en que las variables son de uso exclusivamente Internas y no pueden ser modificadas externamente (privadas)   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); }; Ejemplo class Complex { private:   double real, imag;   double mag, theta;   bool cartesian, polar;   void calculateCartesian ();   void calculatePolar (); public:   Complex () { cartesian = false; polar = false; } www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

More Related