5 t cnicas de simulaci n 2 programando c n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
5. Técnicas de Simulación 2. Programando C++ PowerPoint Presentation
Download Presentation
5. Técnicas de Simulación 2. Programando C++

Loading in 2 Seconds...

play fullscreen
1 / 29

5. Técnicas de Simulación 2. Programando C++ - PowerPoint PPT Presentation


  • 86 Views
  • Uploaded on

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:.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '5. Técnicas de Simulación 2. Programando C++' - serena


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
5 t cnicas de simulaci n 2 programando c

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

slide2

Programa para armar programas

Trabajaremos con Visual Studio 2008

www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

slide3

Programa para armar programas

Creemos un proyecto…

www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

slide4

Programa para armar programas

… en C++ :

www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

slide5

Programa para armar programas

Estructura creada:

www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

slide6

Programa para armar programas

Ejecutar:

www.gphysics.net – UFRO-Master-Fisica-Medica-5-2-Programando C++-05.09

slide7

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

slide8

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

slide9

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

slide10

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

slide11

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

slide12

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

slide13

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

slide14

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

slide15

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

slide16

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

slide17

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

slide18

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

slide19

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

slide20

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

slide21

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

slide22

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

slide23

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

slide24

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

slide25

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

slide26

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

slide27

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

slide28

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

slide29

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