Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Ejercicios de Programación: Cálculo de Centro de Masas y Sistemas de Partículas - Prof. Be, Exámenes de Física

Este documento contiene una serie de ejercicios relacionados con el tema de programación, específicamente sobre el cálculo del centro de masas de sistemas de partículas en c++. El documento incluye la definición de clases y métodos necesarios para resolver los ejercicios, además de código para leer datos de un archivo y calcular el centro de masas. Se incluyen versiones recursivas y iterativas para resolver un problema de física relacionado con la altura que alcanza una pelota en cada rebote.

Tipo: Exámenes

2015/2016

Subido el 31/01/2016

airam_cedres_glez
airam_cedres_glez 🇪🇸

1 documento

1 / 5

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
1. Realice una función en C++ para calcular el vector de posición
rcm
del centro de masas de un
sistema de n partículas (con componentes x, y, z) a partir de la siguiente expresión:
siendo mi la masa de la partícula i-ésima, y
ri
su vector de posición. Pista: la función debe tener
como cabecera: void CalcularPosCM(double m[], double r[][3], int n, double rcm[3]);
2 puntos
2. Se tiene un fichero con información de un sistema que contiene una fila para cada partícula con
cuatro números: el primero es el valor de la masa, y los otros tres son las coordenadas x, y, z de la
posición. Realice una función que lea los datos de dicho fichero, y calcule el vector de posición del
centro de masas usando la función del ejercicio anterior.
2 puntos
3. Cuando se suelta una pelota desde una altura inicial L, ésta rebota sucesivamente hasta quedarse
quieta. En cada rebote la altura que asciende se va haciendo menor, siguiendo una progresión
geométrica que puede modelarse matemáticamente como:
siendo an la altura que asciende en el rebote número n. Realice una función recursiva y otra iterativa
para calcular la altura correspondiente al rebote n-ésimo, dada la altura inicial L.
2 puntos
4. Para trabajar cómodamente con sistemas de partículas vamos a definir la clase cParticula y la clase
cSistema. La clase cParticula tendrá como atributos públicos:
- masa: masa de la partícula
- pos[ ]: vector de 3 componentes que representa las coordenadas x, y, z de la posición
La clase cSistema contendrá los siguientes miembros públicos:
- num_particulas: número de partículas del sistema
- particula[ ]: vector de objetos cParticula
- masaCM: masa total del sistema, es decir, la suma de las masas de todas las partículas
- posCM[ ]: vector de 3 elementos con los valores x, y, z de la posición del centro de masas
- CalcularMasaCM(): método que calcula el atributo masaCM
- CalcularPosCM(): método que calcula los valores del vector posCM[ ].
- EliminarParticula(i): método que elimina la partícula i-esima del sistema y recalcula los atributos
afectados por dicho cambio.
Defina ambas clases e implemente los métodos.
2 puntos
5. Dado un sistema como el descrito anteriormente, realice una función que ordene sus partículas
atendiendo al valor de su masa.
2 puntos
Examen
Programación
29 de Enero de 2016
CALIFICACIÓN:
Nombre: DNI o pasaporte:
an=
{
L si n=0
0.79an1en otro caso
rcm=
i=1
n
mi
ri
i=1
n
mi
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Ejercicios de Programación: Cálculo de Centro de Masas y Sistemas de Partículas - Prof. Be y más Exámenes en PDF de Física solo en Docsity!

1. Realice una función en C++ para calcular el vector de posición r ⃗ cm del centro de masas de un

sistema de n partículas (con componentes x, y, z ) a partir de la siguiente expresión:

siendo mi la masa de la partícula i -ésima, y ⃗ ri su vector de posición. Pista: la función debe tener

como cabecera: void CalcularPosCM(double m[], double r[][3], int n, double rcm[3]);

2 puntos

2. Se tiene un fichero con información de un sistema que contiene una fila para cada partícula con

cuatro números: el primero es el valor de la masa, y los otros tres son las coordenadas x, y, z de la

posición. Realice una función que lea los datos de dicho fichero, y calcule el vector de posición del

centro de masas usando la función del ejercicio anterior.

2 puntos

3. Cuando se suelta una pelota desde una altura inicial L , ésta rebota sucesivamente hasta quedarse

quieta. En cada rebote la altura que asciende se va haciendo menor, siguiendo una progresión

geométrica que puede modelarse matemáticamente como:

siendo an la altura que asciende en el rebote número n. Realice una función recursiva y otra iterativa

para calcular la altura correspondiente al rebote n -ésimo, dada la altura inicial L.

2 puntos

4. Para trabajar cómodamente con sistemas de partículas vamos a definir la clase cParticula y la clase

cSistema. La clase cParticula tendrá como atributos públicos:

  • masa : masa de la partícula
  • pos [ ] : vector de 3 componentes que representa las coordenadas x, y, z de la posición

La clase cSistema contendrá los siguientes miembros públicos:

  • num_particulas : número de partículas del sistema
  • particula[ ] : vector de objetos _cParticula
  • masaCM:_ masa total del sistema, es decir, la suma de las masas de todas las partículas
  • posCM[ ] : vector de 3 elementos con los valores x, y, z de la posición del centro de masas
  • CalcularMasaCM() : método que calcula el atributo m _asaCM
  • CalcularPosCM()_ : método que calcula los valores del vector posCM[ ].
  • EliminarParticula(i) : método que elimina la partícula i-esima del sistema y recalcula los atributos

afectados por dicho cambio.

Defina ambas clases e implemente los métodos.

2 puntos

5. Dado un sistema como el descrito anteriormente, realice una función que ordene sus partículas

atendiendo al valor de su masa.

2 puntos

Programación

29 de Enero de 2016

CALIFICACIÓN:

Nombre: DNI o pasaporte:

an =

L si n = 0 0.79∗ an − 1 en otro caso rcm =

i = 1 n miri

i = 1 n mi

//Examen de Febrero de 2016 #include #include #include #define MAX 100 using namespace std; //Ejercicio 1: Función para calcular el centro de masas de un //sistema de partículas void CalcularPosCM(double m[], double r[][3], int n, double rcm[3]) { int i, j; double masatotal; masatotal = 0.0; for(i=0; i<n; i++) masatotal+=m[i]; for(j=0; j<3; j++) { rcm[j] = 0.0; for(i=0; i<n; i++) rcm[j] += m[i]*r[i][j]; rcm[j] = rcm[j]/masatotal; } return; } //Ejercicio 2: leer los datos de partículas de un fichero y calcular la posición //del centro de masas. Paso como parámetros los arrays que voy a leer y el número //de partículas que voy a contar void CalcularPosCMFichero(string nombrefich,double m[], double r[][3], int &n, double rcm[3]) { ifstream fich; fich.open(nombrefich.c_str()); n=0; while(!fich.eof()) { fich >> m[n]; //Leo la masa fich >> r[n][0]; //Leo la coordenada x fich >> r[n][1]; //Leo la coordenada y fich >> r[n][2]; //Leo la coordenada z n++; } fich.close(); CalcularPosCM(m, r, n, rcm); return; Programación

29 de Enero de 2016

CALIFICACIÓN:

//Ejercicio 4: definir clases cParticula y cSistema class cParticula { public: double masa; double pos[3]; }; class cSistema { public: int num_particulas; cParticula particula[MAX]; double masaCM; double posCM[3]; void CalcularMasaCM(void); void CalcularPosCM(void); void EliminarParticula (int i); }; void cSistema::CalcularMasaCM(void) { int i; masaCM = 0.0; for(i=0; i<num_particulas; i++) masaCM+=particula[i].masa; return; } void cSistema::CalcularPosCM(void) { int i, j; //Podemos suponer que el método CalcularMasaCM() se ha invocado o no //Dependiendo de si se ha hecho antes o no, habrá que invocarlo desde //aquí para calcular la masa total del sistema (masaCM) CalcularMasaCM(); for(j=0; j<3; j++) { posCM[j] = 0.0; for(i=0; i<num_particulas; i++) posCM[j] += particula[i].masa*particula[i].pos[j]; posCM[j] = posCM[j]/masaCM; } return; } void cSistema::EliminarParticula(int k) { int i; cParticula paux; for(i=k; i<num_particulas; i++) particula[i]=particula[i+1]; //Atributos que cambian de valor num_particulas--; CalcularMasaCM(); CalcularPosCM(); return; Programación

29 de Enero de 2016

CALIFICACIÓN:

//Ejercicio 5: ordenar partículas del sistema según la masa void OrdenarParticulas(cSistema sistema) { int i, j; cParticula paux; //Uso algoritmo de la burbuja for(i=1; i<sistema.num_particulas; i++) for(j=sistema.num_particulas-1; j>=i; j--) if(sistema.particula[j].masa<sistema.particula[j-1].masa) { paux = sistema.particula[j]; sistema.particula[j] = sistema.particula[j-1]; sistema.particula[j-1] = paux; } return; Programación

29 de Enero de 2016

CALIFICACIÓN: