5. Técnicas de Simulación
   2. Programando C++
                            Dr. Willy H. Gerber
                          ...
Programa para armar programas

 Trabajaremos con Visual Studio 2008




                                                  ...
Programa para armar programas

 Creemos un proyecto…




                                                                 ...
Programa para armar programas

 … en C++ :




                                                                           ...
Programa para armar programas

 Estructura creada:




                                                                   ...
Programa para armar programas

 Ejecutar:




                                                                            ...
Ejemplo simple


  Comencemos con un ejemplo simple:


                                                           Comentar...
Otro ejemplo

  Otro ejemplo, con dos línea:

       int main(array<System::String ^> ^args)
       {
         Console::Wr...
Variables

  En el ejemplo se introdujo el concepto de texto (string) que se
  escribe entre “:

              string^ s=“...
Operadores sobre int y float

   Los operadores básicos son:
                                             +     suma
     ...
Operadores sobre char , conversión y char de string

  El carácter se asocia al código ASCII:

           char letra;
    ...
Funciones matemáticas

  Si se agrega al inicio la referencia a las funciones matemáticas:

                 #include <mat...
Generadores random

  En la librería:

                     #include <stdlib.h>

  Esta definida el generador de números a...
Funciones propias

  Los programas permiten la definición de funciones o subrutinas propias.

  Un ejemplo podría ser una ...
Funciones propias

  Las subrutinas pueden:

  - Tener múltiples argumentos (Nota: cada argumento tiene que llevar su tipo...
Condicionamientos

 En el desarrollo del programa se pueden condicionar la ejecución de una
 serie de instrucciones:
     ...
Abortar y recurrencia

  Si se desea abortar una subrutina basta con incluir el comando:

                              re...
Variables lógicas

   Alternativas

             bool flag;
             flag = true;                        true=verdader...
Loops - while

   El loop while(){}

   El loop (circulo cerrado) mas simple es el while simple:

                        ...
Loops - for

   El loop for(){}

   Otro loop (circulo cerrado) es el for:

                              for(int i=inicio...
Operaciones sobre strings

   Largo de un string

             String^ txt (“text”);
             int len=txt.length();   ...
Estructuras

   Estructuras                                               Ejemplo

                 struct nombre {       ...
Estructuras

   Las estructuras se pueden usar igual que los otros tipos de variables.
   En particular se pueden pasar co...
Estructuras

   Funciones a ser llamadas en estructuras

       struct Tiempo {
        int hora, minutos;
        double ...
Punteros y Referencias


   Punteros

    int* x o int *x         *px = &x;                                        El punt...
Alocución de memoria dinámica y arreglos

      int *pint;               Definir puntero
      pint = new int;          Re...
Puntero y referencia en subrutinas



            tipo *funcion(tipo *p)
            {
              ...
              ......
Estructuras generales y Archivos “Headers”

  Una estructura general tiene la forma:
      struct nombre {
       // insta...
Clases

 Las class son estructuras en que las variables son de uso exclusivamente
 Internas y no pueden ser modificadas ex...
Upcoming SlideShare
Loading in...5
×

UFRO Master Fisica Medica 5 2 Programando C

944

Published on

UFRO Lecture, Fall 2009

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
944
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
27
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

UFRO Master Fisica Medica 5 2 Programando C

  1. 1. 5. Técnicas de Simulación 2. Programando C++ Dr. Willy H. Gerber Instituto de Fisica Universidad Austral Valdivia, Chile Objetivos: Dominar C++ al nivel necesario para poder armar programas que simulen en base a Geant4. 1 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  2. 2. Programa para armar programas Trabajaremos con Visual Studio 2008 2 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  3. 3. Programa para armar programas Creemos un proyecto… 3 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  4. 4. Programa para armar programas … en C++ : 4 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  5. 5. Programa para armar programas Estructura creada: 5 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  6. 6. Programa para armar programas Ejecutar: 6 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  7. 7. Ejemplo simple Comencemos con un ejemplo simple: Comentario (línea que comienza con //) // UFROTest.cpp : main project file. #include quot;stdafx.hquot; Inicio programa principal (main) using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(Lquot;Hello Worldquot;); Console::ReadLine(); return 0; } 7 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  8. 8. Otro ejemplo Otro ejemplo, con dos línea: int main(array<System::String ^> ^args) { Console::Write(“Adios quot;); Console::WriteLine(“mundo cruelquot;); 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(“Adiosquot;); Console::WriteLine(“mundo cruelquot;); Console::ReadLine(); return 0; } 8 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  9. 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; números enteros char c=‘h’; caracteres float x=5.67; números reales (baja precisión) double y=2.345; números reales (alta precisión) bool decision=true; 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; int n; n=2; n=‘2’; 9 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  10. 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. 10 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  11. 11. Operadores sobre char , conversión y char de string El carácter se asocia al código ASCII: char letra; letra = 'a' + 1; Entrega como resultado ‘b’ Console::WriteLine(letra); int numero; numero = 'a'; Entrega como resultado 97 Console::WriteLine(numero); Conversión de tipos (typecast) double x=2.6; Asocia a n el valor 2 int n=(int)x; (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]; Asigna la ‘t’ a primera_letra char segunda_letra=nombre[1]; Asigna la ‘e’ a segunda_letra 11 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  12. 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) Las funciones que incluye el C++ son: abs fabs modf acos floor pow asin fmod sin atan frexp sinh atan2 ldexp sqrt ceil log tan cos log10 tanh cosh exp 12 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  13. 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. 13 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  14. 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(quot;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. 14 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  15. 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(); } 15 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  16. 16. Condicionamientos En el desarrollo del programa se pueden condicionar la ejecución de una serie de instrucciones: if (condicion1) { Si se da la condicion1… instrucciones1 … realiza instrucciones1 } else if(condicion2){ … si no se dio condicion1 pero si condicion2 instrucciones2 … realiza instrucciones2 } else{ … y si no se dio ni condicion1 ni condicion2 instrucciones3 … 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 es idéntico de y x!=y x es diferente a y x >y x mayor que y x >=y x mayor o igual que y x <y x menor que y x <=y x menor o igual que y 16 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  17. 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); } } 17 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  18. 18. Variables lógicas Alternativas bool flag; flag = true; true=verdadero flag = false; false=falso Determinar variable lógica, ejemplos: flag=(x!=0); Si x es distinto de cero, flag es verdadero, si no falso. flag=(n>0); Si n es mayor que cero, flag es verdadero, si no falso. Operadores lógicos: && And flag12=flag1 && flag2 || Ir flag12=flag1 || flag2 ! Nota flag2=!flag1 18 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  19. 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; } 19 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  20. 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++) { } 20 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  21. 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; 21 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  22. 22. Estructuras Estructuras Ejemplo struct nombre { struct Point { double fvariable1, fvariable2; double x, y; int nvariable1; }; … }; Elementos de la estructura: nombre.fvariable1 Asignación de valores a estructura (solo al crear!): (también se pueden hacer asignaciones de nombre ejemplo = {1.0, 2.3, 2, …} estructuras) Asignación de estructura: nombre ejemplo2 = ejemplo1; 22 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  23. 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; } 23 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  24. 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. 24 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  25. 25. Punteros y Referencias Punteros int* x o int *x *px = &x; El puntero *px contiene la dirección *px de donde esta el valor x add &rx Referencia add x val int& x o int &x &rx = x; La referencia &rx retorna el valor x x = 1; lvalue = rvalue; 25 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  26. 26. Alocución de memoria dinámica y arreglos int *pint; Definir puntero pint = new int; Reservar memoria delate pint; Liberar memoria int n = 10; int *parray; parray = new int[n]; delte parray; 26 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  27. 27. Puntero y referencia en subrutinas tipo *funcion(tipo *p) { ... ... return p; } tipo &funcion(tipo &r) { ... ... return r; } 27 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  28. 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 28 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  29. 29. Clases Las class son estructuras en que las variables son de uso exclusivamente Internas y no pueden ser modificadas externamente (privadas) Ejemplo Complex (double r, double i) { class Complex real = r; imag = i; { cartesian = true; polar = false; private: } double real, imag; double mag, theta; void printCartesian (); bool cartesian, polar; void printPolar (); void calculateCartesian (); double getReal (); void calculatePolar (); double getImag (); double getMag (); public: double getTheta (); Complex () { cartesian = false; polar = false; } void setCartesian (double r, double i); void setPolar (double m, double t); }; 29 www.gphysics.net – UFRO-2008-Master-Fisica-Medica-5-2-Programando C++-05.09
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×