ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INDUSTRIAL FUNDAMENTOS DE INFORMÁTICA PARCIAL (FEBRERO 2010) PROBLEMAS (5 puntos ) Apellidos y Nombre: DNI: Grupo: La teoría de los dos universos (una teoría nunca formulada realmente, pues no tiene ni pies ni cabeza) predice la existencia de dos universos: el nuestro, y el de al lado. Según dicha teoría, en el universo de al lado, todo cuerpo está formado o viene determinado por una secuencia no vacía de partículas elementales, las cuales pueden ser sólo de uno de los 5 tipos siguientes: A, B, C, D, E. El peso de cada partícula es: A=10, B=20, C=30, D=40, E=50. A su vez, todo cuerpo se ve afectado por tres tipos de fuerzas: la fuerza individual, la fuerza del entorno, y la fuerza oscura. a) La fuerza individual de un cuerpo X, o findx, es propia de dicho cuerpo, y su valor es la raíz cuadrada del producto de su masa (mx) por su peso (px): find x = mx ⋅ p x donde, px se calcula sumando los pesos de las partículas que integran la secuencia que define a dicho cuerpo. De esta forma, si un cuerpo X está formado por la secuencia de partículas ABADEA, entonces px sería 10+20+10+40+50+10 = 140; si está formado sólo por la partícula C, entonces px sería 30; y para la secuencia: BAD, px sería 20+10+40 = 70. b) La fuerza del entorno de un cuerpo X, o fentx, es aquella que se debe tanto al propio cuerpo como a su entorno, y su valor se obtiene con la siguiente expresión: fent x = (V + W ) / find x cant V = 2 ⋅ ∑ (mi ) i =1 ⎛ 30 W = ∑ ⎜⎜ i ⋅ ∑ i + i =10 ⎝ j =i +13 20 ⎞ j ⎟⎟ ⎠ donde: cant es la cantidad de cuerpos existentes a menos de 1 metro del cuerpo X en estudio, mi es la masa del cuerpo i-ésimo (de los cant existentes), y findx es la fuerza individual del cuerpo X c) Por último, la fuerza oscura, o foscx,y, es aquella que ejerce un cuerpo X sobre otro cuerpo Y situado a más de 1 metro de distancia de X, pero a menos de 10000, calculándose según la siguiente expresión (su valor será nulo si la distancia no está dentro de dicho rango): fosc x , y = p x ⋅ Z ⋅ d x , y donde, si: 1 < dx,y ≤ 10 si: 10 < dx,y ≤ 100 si: 100 < dx,y ≤ 1000 si: 1000 < dx,y ≤ 10000 ⋅ d x, y → Z=V → → → Z=V+W Z = V2 + W Z = W3 siendo: dx,y la distancia, en metros, entre el cuerpo X y el cuerpo Y y: V, W son los valores de V y W usados para calcular fentx Se pide: 1) (1p) Definir una función, llamada fuerza_individual(), que recibiendo como parámetro de entrada la masa de un cuerpo X (mx), devuelva, como parámetro de salida, su peso (px), y como valor de retorno, el valor de su fuerza individual (findx). Para ello, deberá leer por teclado la secuencia de partículas que lo forman (suponer que siempre se introducirá una secuencia correcta, no vacía, y terminada con el carácter ‘\n’). 2) (2p) Definir una función, llamada fuerza_entorno(), que recibiendo como parámetros de entrada el valor de la fuerza individual de un cuerpo X concreto (findx), y el valor de cant (cantidad de cuerpos existentes a menos de 1 metro del cuerpo X), devuelva, como valor de retorno la fuerza del entorno de dicho cuerpo (fentx), y como parámetros de salida, los valores de V y W correspondientes a dicho cuerpo. Como lo necesita, esta función deberá leer por teclado los cant valores correspondientes a las masas de los cuerpos existentes en dicho entorno, es decir, los distintos valores de mi. 3) (1p) Definir otra función, llamada fuerza_oscura(), que devuelva el valor de la fuerza oscura que ejerce un cuerpo X sobre otro cuerpo Y (foscx,y), recibiendo como parámetros de entrada los valores px, dx,y, y los de V y W usados para calcular la fentx del cuerpo X. 4) (1p) Completar el programa con la función main(), cuyo objetivo será, haciendo uso de las funciones anteriores, escribir en pantalla el valor de la fuerza individual y el de la fuerza del entorno de un cuerpo X concreto, así como el valor de la fuerza oscura que ejerce dicho cuerpo X sobre otro cuerpo Y. Para ello, deberá leer por teclado los datos adecuados y necesarios. /* UNA POSIBLE SOLUCION AL EXAMEN PARCIAL DE FEBRERO DE 2010 DE FUNDAMENTOS DE INFORMATICA */ #include #include #include #include <stdio.h> <conio.h> <math.h> <ctype.h> //para //para //para //para las funciones printf () y scanf() la funcion getch() la funcion sqrt() la funcion toupper() unsigned peso_particula(char particula) { return (particula-'A'+1)*10; } float fuerza_individual(float mx, float &px) { char particula; px=0; printf("\nIntroduce secuencia de las particulas que forman el cuerpo X: "); scanf(" %c",&particula); while(particula!='\n') { particula=toupper(particula); //se asegura que la letra sea mayuscula px += peso_particula(particula); scanf("%c",&particula); } return sqrt(mx*px); } float fuerza_entorno(float findx, unsigned cant, float &V, float &W) { unsigned i,j; float sum1, sum2; float mi, masatotal=0.0; printf("\nLectura de las masas de los %u cuerpos a menos de un metro de X\n",cant); for(i=1;i<=cant;i++) { printf("Introduce la masa del cuerpo %u:",i); scanf("%u",&mi); masatotal += mi; } V = 2*masatotal; sum1=0.0; for(i=10;i<=20;i++) { sum2=0.0; for(j=i+13;j<=30;j++) sum2 += sqrt(i+j); sum1 += i*sum2; } W = sum1; return (V+W)/findx; } float fuerza_oscura(float px, float dxy, float V, float W) { float Z; if (1<dxy && dxy<=10 ) Z = V*sqrt(dxy); else if (10<dxy && dxy<=100 ) Z = V + W; else if (100<dxy && dxy<=1000 ) Z = V*V + W; else if (1000<dxy && dxy<=10000 ) Z = W*W*W; else Z = 0; return px*Z*dxy; } int main() { float findx, fentx, foscxy, mx, px, V, W, dxy; unsigned cant; printf("\nIntroduce la masa del cuerpo X: "); scanf("%f",&mx); findx=fuerza_individual(mx,px); printf("\nLa fuerza individual del cuerpo X es de %.2f",findx); printf("\n\nCuantos cuerpos hay a menos de un metro de X?: "); scanf("%u",&cant); fentx=fuerza_entorno(findx, cant, V, W); printf("\nLa fuerza del entorno del cuerpo X es de %.2f",fentx); printf("\n\nA que distancia del cuerpo X esta el cuerpo Y?: "); scanf("%f",&dxy); foscxy=fuerza_oscura(px,dxy,V,W); printf("\nLa fuerza oscura que ejerce X sobre Y es de %.2f",foscxy); getch(); return 0; }