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


Física 02 2012, Exámenes de Física

Examen final, febrero 2012

Tipo: Exámenes

2011/2012

Subido el 31/01/2012

manu93-10
manu93-10 🇪🇸

4

(1)

4 documentos

1 / 6

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Para este examen vamos a suponer que trabajamos con datos de una galaxia con sólo unos mil millones de
estrellas, como es la Pequeña Nube de Magallanes y que no necesitaremos demasiada precisión para los
cálculos. Así, en estos ejercicios utilizaremos los tipos de datos básicos de C++, int, float y double.
1. Se tiene un vector que contiene los valores de masa de n estrellas, y queremos saber cuál es la más pequeña.
Dado un vector con n números reales, realice una función en C++ que devuelva la posición dentro del vector en
la que se encuentra el valor menor. Implemente la función de dos formas distintas: iterativa y recursiva ( pista:
en el caso recursivo deberá usar parámetros extra además del vector y el número de elementos).
2 puntos
2. Deseamos saber cuántas estrellas destacan por su tamaño (por ser muy grandes o muy pequeñas). Dado un
vector con n números reales, realice una función en C++ que devuelva cuántos valores quedan fuera del
siguiente rango:
[
x2σ ,
x+2∗σ]
donde:
y
2 puntos
3. Tenemos un vector con los nombres de todas las estrellas de una galaxia. Cada nombre consiste en un código
de 9 caracteres, donde los tres primeros identifican un grupo y los cinco últimos un valor numérico relativo a su
masa (por ejemplo algunas estrellas del subgrupo “WOH” serían “WOH-44503” y “WOH-65231” y del grupo
“WUR”, “WUR-02442” y “WUR-44909”). Realice una función que ordene un vector de cadenas de caracteres,
codificados tal como se ha explicado anteriormente, en función de los cinco dígitos finales de su nombre (por
ejemplo, las estrellas anteriores se ordenarían como {“WUR-02442”, “WOH-44503”, “WUR-44909”, “WOH-
65231”}).
2 puntos
4. Para cada estrella se tiene un fichero con los datos de su composición porcentual estimada de Hidrógeno,
Helio, Carbono, Hierro, etc. Cada fichero consta de una serie de líneas en la que en cada una hay una cadena
de caracteres que identifica el nombre del elemento y un valor numérico que indica el valor de su composición
estimada (por ejemplo, “Hierro 0,5”). Realice una función que reciba el nombre de un archivo (por ejemplo
“WOH-44503.txt”) y muestre por pantalla los valores correspondientes a “Hidrógeno”, “Helio” y “Otros
elementos”. En la línea “Otros elementos” se mostrará la suma de los valores del resto de elementos existentes
distintos del “Hidrógeno” y del “Helio”.
2 puntos
5. Queremos trabajar con una clase denominada cGalaxia con los siguientes atributos públicos:
num: número de estrellas tipo: int
nombre: vector de nombres de las estrellas tipo string [MAX]
masa: vector de masas de las estrellas tipo: double [MAX]
distancia: matriz de distancias entre las estrellas tipo: double [MAX][MAX]
siendo MAX una constante definida como #define MAX 10000, y los siguientes métodos:
masaTotal(): obtiene la masa total estimada como la suma de las masas de todas las estrellas
distanciaPromedio(): media de las distancias entre dos estrellas cualesquiera (la distancia
de una estrella a sí misma no debe considerarse)
fuerzaAtraccion (int i, int j): obtiene el valor de la fuerza de atracción entre dos
estrellas aisladas, según la Ley de la Gravitación Universal de Newton dado por
F=Gm1m2
,
con
G=6.67x1011
Defina la clase cGalaxia e implemente los métodos mencionados usando C++. 2 puntos
Nombre: DNI o pasaporte:
σ=
(
i=0
n1(xi
x)2
n
)
x=
i=0
n1xi
n
Examen
Programación
10 de Febrero de 2012
CALIFICACIÓN:
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Física 02 2012 y más Exámenes en PDF de Física solo en Docsity!

Para este examen vamos a suponer que trabajamos con datos de una galaxia con sólo unos mil millones de estrellas, como es la Pequeña Nube de Magallanes y que no necesitaremos demasiada precisión para los cálculos_._ Así, en estos ejercicios utilizaremos los tipos de datos básicos de C++, int , float y double.

  1. Se tiene un vector que contiene los valores de masa de n estrellas, y queremos saber cuál es la más pequeña. Dado un vector con n números reales, realice una función en C++ que devuelva la posición dentro del vector en la que se encuentra el valor menor. Implemente la función de dos formas distintas: iterativa y recursiva ( pista: en el caso recursivo deberá usar parámetros extra además del vector y el número de elementos ). 2 puntos
  2. Deseamos saber cuántas estrellas destacan por su tamaño (por ser muy grandes o muy pequeñas). Dado un vector con n números reales, realice una función en C++ que devuelva cuántos valores quedan fuera del

siguiente rango: [ ̄ x − 2 ∗σ , ̄ x + 2 ∗σ] donde:

y 2 puntos

  1. Tenemos un vector con los nombres de todas las estrellas de una galaxia. Cada nombre consiste en un código de 9 caracteres, donde los tres primeros identifican un grupo y los cinco últimos un valor numérico relativo a su masa (por ejemplo algunas estrellas del subgrupo “WOH” serían “WOH-44503” y “WOH-65231” y del grupo “WUR”, “WUR-02442” y “WUR-44909”). Realice una función que ordene un vector de cadenas de caracteres, codificados tal como se ha explicado anteriormente, en función de los cinco dígitos finales de su nombre (por ejemplo, las estrellas anteriores se ordenarían como {“WUR-02442”, “WOH-44503”, “WUR-44909”, “WOH- 65231”}). 2 puntos
  2. Para cada estrella se tiene un fichero con los datos de su composición porcentual estimada de Hidrógeno, Helio, Carbono, Hierro, etc. Cada fichero consta de una serie de líneas en la que en cada una hay una cadena de caracteres que identifica el nombre del elemento y un valor numérico que indica el valor de su composición estimada (por ejemplo, “Hierro 0,5”). Realice una función que reciba el nombre de un archivo (por ejemplo “WOH-44503.txt”) y muestre por pantalla los valores correspondientes a “Hidrógeno”, “Helio” y “Otros elementos”. En la línea “Otros elementos” se mostrará la suma de los valores del resto de elementos existentes distintos del “Hidrógeno” y del “Helio”. 2 puntos
  3. Queremos trabajar con una clase denominada cGalaxia con los siguientes atributos públicos: num: número de estrellas tipo: int nombre: vector de nombres de las estrellas tipo string [MAX] masa: vector de masas de las estrellas tipo: double [MAX] distancia: matriz de distancias entre las estrellas tipo: double [MAX][MAX] siendo MAX una constante definida como #define MAX 10000, y los siguientes métodos: → masaTotal(): obtiene la masa total estimada como la suma de las masas de todas las estrellas → distanciaPromedio(): media de las distancias entre dos estrellas cualesquiera (la distancia de una estrella a sí misma no debe considerarse) → fuerzaAtraccion (int i, int j): obtiene el valor de la fuerza de atracción entre dos

estrellas aisladas, según la Ley de la Gravitación Universal de Newton dado por F = G

m 1 m 2

con G =6.67x10−^11

Defina la clase cGalaxia e implemente los métodos mencionados usando C++. 2 puntos

Nombre: DNI o pasaporte:

σ=

i = 0 n − 1 ( xi −̄ x ) 2

n )

x =∑ i = 0 n − 1 xi n Programación

10 de Febrero de 2012

CALIFICACIÓN:

//Examen de Programación de Febrero de 2012 #include #include #include #include #define MAX 10000 using namespace std; //Ejercicio 1: Realizar una función que indique la posición del elemento mínimo //Parámetros: vector de reales, número de elementos //Valor devuelto: posición del menor elemento dentro del vector //Versión iterativa int EstrellaMenorNoRec(double masa[], int n) { int i, pmin; //Asumo que el valor mínimo es el del primer elemento pmin=0; for(i=1; i<n; i++) if (masa[i]<masa[pmin]) pmin=i; //Comparo el resto de elementos return pmin; //Devuelvo la posición del mínimo } //Versión recursiva int EstrellaMenorRecursiva(double masa[], int n, int i, int pmin) { if(i==n) return pmin; //Caso base, he recorrido todo el vector else if((masa[i]<masa[pmin])) return EstrellaMenorRecursiva(masa, n, i+1, i); else return EstrellaMenorRecursiva(masa, n, i+1, pmin); Programación

10 de Febrero de 2012

CALIFICACIÓN:

//Ejercicio 3: Ordenar un vector de strings atendiendo a los 5 últimos caracteres //Parámetros: vector de strings y el número de elementos //Valor devuelto: nada, modifica el vector void intercambiaStr(string& a, string& b) { string aux; aux=a; a=b; b=aux; return; } void OrdenaEstrellas(string v[], int n) { int i,j; for(i=1; i<n; i++) for(j=n-1; j>=i; j--) if(v[j].substr(4,5)<v[j-1].substr(4,5)) intercambiaStr(v[j],v[j-1]); return; Programación

10 de Febrero de 2012

CALIFICACIÓN:

//Ejercicio 4: Leer datos de un fichero y mostrarlos en pantalla //Parámetros: nombre del fichero a leer //Valor devuelto: true si todo va bien, false si no puedo abrir el fichero bool ComposicionEstrella (string nombrefich) { ifstream fich; string elemento; float composicion, sumaotros; fich.open(nombrefich.c_str()); //Si no puedo abrir devuelvo false y acabo if(!fich.is_open()) return false; else { //Leo línea a línea, si son el H o el He los escribo en pantalla, si no //los sumo para mostrar al final Otros elementos //En cada lineas leo un string y un real sumaotros=0.0; while(!fich.eof()) { fich >> elemento; //Leo el string fich >> composicion; //Leo el real if((elemento=="Hidrógeno")||(elemento=="Helio")) cout << elemento << ": " << composicion << "%" << endl; else sumaotros=sumaotros+composicion; } cout << "Otros elementos: " << composicion << "%" << endl; fich.close(); return true; } Programación

10 de Febrero de 2012

CALIFICACIÓN: