prueba 2 - 2014-1 - pauta - Tongoy

Anuncio
PRUEBA 2
INTRODUCCIÓN A LA PROGRAMACIÓN
UNIVERSIDAD CATÓLICA DEL NORTE
ESCUELA DE INGENIERÍA
Coquimbo
Asignatura
Código
Duración
Introducción a la Programación
II-473
2.5 horas
Profesor Cátedra
Nombre
Carrera
Firma
Objetivos
•
Que el alumno utilice las facilidades de vectores y matrices para el procesamiento de datos y
organización de la información
Problema 1: Resta el Menor (30%)
Dado un archivo llamado matriz.txt que almacena el contenido de una matriz de 120 filas por 100 columnas:
•
•
•
Calcular y desplegar el valor del menor elemento de la matriz
Restar a cada elemento de la matriz el menor valor obtenido.
Almacenar la matriz en el mismo formato que la original en un nuevo archivo llamado normal.txt
El formato del archivo corresponde a un primer registro con dos números enteros que indican la cantidad de n
filas y m columnas respectivamente, seguido de una cantidad n registros donde cada uno posee m elementos
correspondientes a los elementos de las columnas.
Ejemplo minimizado (sólo para ejemplificar el proceso, no corresponde en tamaño):
Ejemplo de archivo matriz.txt
2
1
5
4
3
10
20
7
Se calcula el menor: 1
Original
1
10
5
20
4
7
Normal
0
9
4
19
3
6
1
Posible solución problema 1
import ucn.*;
public class Pauta1 {
public static void main(String[] args) {
int[][] m = new int[120][100];
int menor=Integer.MAX_VALUE;
In in = new In("matriz.txt");
int nn = in.readInt();
int mm = in.readInt();
for (int i=0;i<nn;i++){
for (int j=0;j<mm;j++) {
m[i][j] = in.readInt();
if (menor > m[i][j])
menor = m[i][j];
}
}
in.close();
StdOut.println("menor." + menor);
Out out = new Out("normal.txt");
for (int i=0;i<nn;i++){
for (int j=0;j<mm;j++) {
m[i][j] = m[i][j] - menor;
out.print(m[i][j] + " ");
}
out.println();
}
}
}
Problema 2: SISTEMA DE NOTAS
Nuestra universidad necesita obtener el promedio y varianza de las notas para cada alumno. Cada alumno
posee una cantidad variable de notas (mínimo 1 y máximo 10 notas), además de la carrera y edad. La
información a procesar está almacenada en un archivo que posee varias líneas o registros con el siguiente
formato:
17363521 YICENIA LEYTON MEDICINA 22 4 2.33 4.54 0 1.56
Donde
•
•
•
•
•
•
•
•
•
•
17363521 es el rut
YICENIA el nombre
LEYTON el apellido
MEDICINA la carrera
22 la edad
4 la cantidad de notas del alumno
2.33 la primera nota
4.54 la segunda nota
3.86 la tercera nota
1.56 la cuarta nota
Lo solicitado:
1.
Dibujar un esquema de las estructuras utilizadas para almacenar la información (esto es para ayudar
la revisión del profesor).
2
2.
3.
Desarrollar un programa en Java que permita:
a. Leer el archivo entrada.txt y almacenar toda la información en las estructuras definidas
b. Desplegar el promedio de edad por cada carrera
c. Desplegar el promedio total de todos los alumnos para la PRIMERA nota solamente.
d. Calcular y almacenar el promedio de las notas por cada alumno
e. Calcular y almacenar la varianza de las notas por cada alumno
f. NOTA: Existe un registro por alumno
Almacenar en un archivo llamado salida.txt y ordenado en forma descendente por el promedio de
las cuatro notas de cada alumno la siguiente información:
RUT NOMBRE APELLIDO CARRERA PROMEDIO VARIANZA
Varianza =
Posible Solución
import ucn.*;
public class Pauta2 {
public static void main(String[] args) {
int[] rut = new int[100000];
String[] nombre = new String[10000];
String[] apellido = new String[10000];
String[] carrera = new String[10000];
int[] edad = new int[10000];
int[] c_notas = new int[10000];
double[][] notas = new double[100000][10];
String[] listcarreras = new String[7];
listcarreras[0] = "INDUSTRIAL";
listcarreras[1] = "COMPUTACION";
listcarreras[2] = "COMERCIAL";
listcarreras[3] = "TEOLOGIA";
listcarreras[4] = "MEDICINA";
listcarreras[5] = "CIENCIASDELMAR";
listcarreras[6] = "PREVENCION";
double[] prom_edad_carrera = new double[7];
double[] cant_edad_carrera = new double[7];
double[] prom_nota = new double[10000];
double[] varianza = new double[100000];
double prom_total=0;
int idx=0;
In in = new In("entrada.txt");
while (in.hasNextLine()) {
rut[idx] = in.readInt();
nombre[idx] = in.readString();
apellido[idx] = in.readString();
carrera[idx] = in.readString();
edad[idx] = in.readInt();
c_notas[idx] = in.readInt();
prom_nota[idx]=0;
for (int i=0; i<c_notas[idx]; i++) {
notas[idx][i] = in.readDouble();
prom_nota[idx] += notas[idx][i];
}
prom_nota[idx] /= c_notas[idx];
for (int i=0; i<c_notas[idx]; i++) {
varianza[idx] += Math.pow(notas[idx][i] - prom_nota[idx], 2);
3
}
varianza[idx] /= c_notas[idx];
prom_total += notas[idx][0];
for (int x=0; x<7; x++)
if (listcarreras[x].equals(carrera[idx])) {
prom_edad_carrera[x] += edad[idx];
cant_edad_carrera[x] ++;
}
idx++;
}
in.close();
int cant = idx;
StdOut.println("Promedio edad por carrera:");
for (int i=0;i<7;i++)
if (cant_edad_carrera[i]>0)
StdOut.println(listcarreras[i]+":" + (prom_edad_carrera[i]/cant_edad_carrera[i]));
else
StdOut.println(listcarreras[i] + " : 0");
StdOut.println("Promedio total de las primeras notas:" + (prom_total/cant));
for (int i=0; i<cant-1; i++) {
for (int j=i; j<cant; j++) {
if (prom_nota[i] < prom_nota[j]) {
int aux = rut[i];
rut[i] = rut[j];
rut[j] = aux;
String auxnom = nombre[i];
nombre[i] = nombre[j];
nombre[j] = auxnom;
String auxap = apellido[i];
apellido[i] = apellido[j];
apellido[j] = auxap;
double prom = prom_nota[i];
prom_nota[i] = prom_nota[j];
prom_nota[j] = prom;
double var = varianza[i];
varianza[i] = varianza[j];
varianza[j] = var;
}
}
}
Out out = new Out ("salida.txt");
for (int i=0; i<cant; i++){
out.println(rut[i]+" "+nombre[i]+" "+apellido[i] + " "+prom_nota[i]+" "+varianza[i]);
}
out.close();
}
}
4
Descargar