CC1001 Control Nº 3: Pregunta 1

Anuncio
Apellido:_______________________Nombre:__________________Firma:___________
CC1001 Control Nº 3: Pregunta 1 (ponderación: 2/3) – miércoles 29 de octubre de 2008 - Tpo: 1 hr 45 minutos
Con apuntes individuales – Sin consultas - Contestar en esta hoja (no use el reverso)
a) (1.5 ptos) Escriba una función recursiva que entregue la suma de los elementos en el arreglo X entre los
índices I y J, ambos inclusive. Ej, si a={10,20,30,40,50}, suma(a,1,3) entrega 90.
static public int suma(int[]X,int I, int J){
if(I>J) return 0;
//0.5
return X[I] + suma(X,I+1,J);
//1.0
}
Nota. Si no se escribe recursiva, tendrá 0.25 ptos
b) (4.5 ptos) Use la función suma en un programa que determine el número de concejales elegidos por cada
lista en las recientes elecciones de la comuna de Santiago. Para determinar los elegidos de cada lista:
1º se calcula la “cifra repartidaora” como el total de votos dividido por 8 (la cantidad de concejales en Stgo)
2º se divide el total de votos de cada lista por la “cifra repartidora”
Notas.
- El total de votos que obtuvo cada candidato está contenido en una línea del archivo “votos.txt”.
- Los primeros 8 candidatos corresponden a la 1ª lista, los sgtes 6 a la 2ª, 8 a la 3ª, 8 a la 4ª y 8 a la 5ª.
- El resultado se muestra con 5 números reales correspondientes a los elegidos de la 1ª, 2ª, 3ª, 4ª y 5ª lista.
//obtener y guardar votos de candidatos: 2 puntos
final int N=40;
int[]votos=new int[N];
//0.5
BR a=new BR(new FR(“votos.txt”));
//0.2
for(int i=0; i<N; ++i)
//0.5
votos[i]=Integer.parseInt(a.readLine());//0.8
//calcular cifra repartidora: 1 punto
double cifra=suma(votos,0,N-1)/8.0;
//determinar concejales de cada lista: 1.5 punto
for(int i=0; i<N; i+=8)
//0.5
U.println(suma(votos,i,i+7)/cifra);//1.0
Apellido:_______________________Nombre:__________________Firma:___________
CC1001 Control Nº 3: Pregunta 2 (ponderación: 1/3)– miércoles 29 de octubre de 2008 - Tpo: 1 hr 45 minutos
Con apuntes individuales – Sin consultas - Contestar en esta hoja (no use el reverso)
a) (1 punto) Escriba en Matlab (y “a la Matlab”) el promedio ponderado de dos vectores es:
(x1y1+x2y2+…+xnyn)/n
function r=promedioPonderado(X,Y)
r=sum(x.*y)/length(x)
b) (3 puntos) Use la función anterior en un programa en Matlab que muestre la nota de control de cada
alumno, considerando que las tres primeras notas se ponderan 0.2 y la cuarta (el examen) por 0.4. Los datos
están guardados en una matriz que fue grabada con el comando store notas. Cada fila contiene las 4 notas de
un alumno.
load notas %0.5
[filas cols]=size(notas);%0.5
pond=[0.2 0.2 0.2 0.4];%0.5
for i=1..filas %0.5
disp( promedioPonderado(notas(I,:),pond) ); %1.0
end
c) (2 ptos) Escriba en Java el equivalente a la función que en Matlab se se invoca en la forma
rand(filas,columnas).
static public double[][] rand(int filas, int columnas){
double[][]a=new double[filas][columnas]; //0.5
for(int i=0; i<filas; ++i)
//0.3
for(int j=0; j<columnas; ++j)//0.3
a[i][j] = Math.random();
//0.5
return a;//0.4
}
Descargar