You are on page 1of 11

Laboratorio N1: Degustador de Quesos

Santiago de Chile
1 - 2014
UNIVERSIDAD DE SANTIAGO DE CHILE
FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA EN INFORMTICA

Integrantes: Cristian Felipe JeldesJeldes
Nombre Profesora: Mnica Villanueva
Nombre Ayudante: Marcial Hernndez
Fecha de Entrega: 28 de abril de 2014
Nombre del enunciado: Degustador de
quesos
Lenguaje Utilizado: Java

ii

CAPTULO 1. MAIN.JAVA
import java.util.*;
import java.io.*;
public class Main{
public static void main(String []args){
//Inicializacin de variables
Utilidades ut = new Utilidades();
//Se carga el archivo en un arreglo de quesos
ArrayList<Queso> quesos = ut.cargarArchivo();
//Se ordenan los quesos segn un puntaje determinado
//de mayor a menor
quesos = ut.quicksort(quesos);
String acum="";
try{
//Se escribe en el archivo de salida con el formato pedido
//linea a linea los quesos que se encuentren en quesos
//Se inicia la escritura en el archivo "salida.out"
FileWriter fw = new FileWriter("salida.out");
for (Queso q1: quesos){
acum+=q1.nombre+" ";
for(int i=0;i<3;i++){
if(i==2){
acum+=q1.denominaciones[i];
}
else{
acum+=q1.denominaciones[i]+" ";
}
}
acum+=System.getProperty("line.separator");

iii

fw.write(acum);
acum="";
}
//Se cierra la escritura de archivo
fw.close();
System.out.println("La lista de quesos fue ordenada
exitosamente.\nEn total fueron ordenados "+quesos.size()+" quesos.");
}
catch(Exception ex){
System.out.println(ex);
}
}
}


iv

CAPTULO 2. UTILIDADES.JAVA
import java.io.*;
import java.util.*;
class Utilidades{
//Funcin que carga directamente el archivo "entrada.in"
//en un arreglo de Quesos llamado quesos, no agregando a este
//los datos que no sean correctos.
//Posteriormente se retorna el arreglo quesos.
public ArrayList<Queso> cargarArchivo(){
//Inicializacin de variables
ArrayList<Queso> quesos = new ArrayList<>();
ArrayList<String> copias = new ArrayList<>();
String linea ="";
String[] param;
try{
//Apertura de archivo
FileReader fr = new FileReader("entrada.in");
BufferedReader bf = new BufferedReader(fr);
//Lectura de archivo
while(bf.ready()){
linea = bf.readLine();
param = linea.split(" ");
//Si algn parmetro que debe ser numrico no lo es, entonces se sigue a la
siguiente linea
//Si el nombre del queso ingreso no existe dentro de los que Florentino conoce
//no se toma en cuenta la linea completa
if(!(existe(param[0])) || !(esNumero(param[1]) && esNumero(param[2]) &&
esNumero(param[3]) && esNumero(param[4]))){
continue;

v

}
//Si una linea que posee exactamente el mismo contenido ya fue
procesada
//no se vuelve a procesar
else if(copias.indexOf(linea)!=-1){
continue;
}
copias.add(linea);
//Se agrega al arreglo de quesos la linea ingresada
con sus parmetros correspondientes
quesos.add(new
Queso(param[0],Integer.parseInt(param[1]),Integer.parseInt(param[2]),Integer.parseInt(
param[3]),Integer.parseInt(param[4])));
}
//Se cierra la lectura
bf.close();
}
catch(Exception ex){
System.out.println(ex);
}
//Se retorna lo pedido
return quesos;
}
//Funcin que identifica si un String solo posee caracteres numricos 0-9
public boolean esNumero(String linea){
for(int i=0;i<linea.length();i++){
if(Character.isLetter(linea.charAt(i))){
return false;
}

vi

}
return true;
}
//Funcin que realiza un ordenamiento de mayor a menor
//a los quesos, en funcin de un puntaje que tambin
//es determinado en esta funcin
public ArrayList<Queso> quicksort(ArrayList<Queso> quesos){
//Calculamos las ponderaciones que se ocuparn para determinar el
puntaje
double[] ponderaciones = ponderaciones(quesos);
//Determinamos los puntajes
for(int i=0;i<quesos.size();i++){
quesos.get(i).ponderar(ponderaciones);
}
//Ordenamos la lista de quesos
Collections.sort(quesos,new Comparator<Queso>() {
@Override
public int compare(Queso o1, Queso o2)
{return (int)(-1*(o1.puntaje)+(o2.puntaje));}
});
//Retornamos la lista ordenada de quesos
return quesos;
}
//Funcin que para una lista de quesos
//determina ponderaciones apropiadas para
//cada unas las categorias a considerar
public double[] ponderaciones(ArrayList<Queso> quesos){
double[] ponderaciones = new double[4];
for(Queso q: quesos){

vii

//Para cada categoras suma todas las calificaciones de los
quesos
//en esa categora en particular
ponderaciones[0]+=q.sabor;
ponderaciones[1]+=q.materiaGrasa;
ponderaciones[2]+=q.consistencia;
ponderaciones[3]+=q.maduracion;
}
//determina las ponderaciones a partir de la muestra total
//de la poblacin de quesos a la que hay que determinarles un
puntaje
double suma =
ponderaciones[0]+ponderaciones[1]+ponderaciones[2]+ponderaciones[3];
ponderaciones[0]/=suma;
ponderaciones[1]/=suma;
ponderaciones[2]/=suma;
ponderaciones[3]/=suma;
//Se retornar las ponderaciones encontradas
return ponderaciones;
}
//Funcin que determina si el nombre de un queso determinado
//existe dentro de la lista de quesos que Florentino a comido
public boolean existe(String nombre){
nombre = Character.toUpperCase(nombre.charAt(0)) +
nombre.substring(1);
if((nombre.equals("Alpe") ||nombre.equals("Brie")
||nombre.equals("Cabra") ||nombre.equals("Cabrales") || nombre.equals("Camembert")
||nombre.equals("Chaumes") ||nombre.equals("Cheddar") ||nombre.equals("Chevrottin")
||nombre.equals("Fresco") ||nombre.equals("Cottage") ||nombre.equals("Crottin")

viii

||nombre.equals("Cuartirolo") ||nombre.equals("Emmenthal") ||nombre.equals("Griego")
||nombre.equals("Frontina") ||nombre.equals("Gorgonzola") ||nombre.equals("Gouda") ||
nombre.equals("Gruyre") || nombre.equals("Idizbal") || nombre.equals("Kefolotyri") ||
nombre.equals("Mahn") || nombre.equals("Manchego") || nombre.equals("Mat") ||
nombre.equals("Morbier") || nombre.equals("Parmesano") || nombre.equals("Petit-suisse") ||
nombre.equals("Pepato") || nombre.equals("Provolone") || nombre.equals("Reblochn") ||
nombre.equals("Roquefort") || nombre.equals("Suizo") || nombre.equals("Taleggio") ||
nombre.equals("Tofu") || nombre.equals("Tomme"))){
return true;
}
return false;
}
}


ix

CAPTULO 3. QUESO.JAVA
import java.io.*;
import java.util.*;
//Estructura de datos "Queso"
class Queso{
public static int cant = 0;
public int id;
public double puntaje = 0;
public int materiaGrasa;
public int consistencia;
public int sabor;
public int maduracion;
public String nombre;
public int[] calificaciones = new int[4];
public String[] denominaciones = new String[4];
//Constructor de la clase Queso
public Queso(String nombre,int grasa, int consistencia, int sabor, int
maduracion){
this.materiaGrasa = grasa;
this.consistencia = consistencia;
this.sabor = sabor;
this.maduracion = maduracion;
this.nombre = nombre;
//Se determinan las calificaciones y clasificaciones del queso en particular
this.sabor();
this.materiaGrasa();
this.consistencia();
this.maduracion();
this.id = cant++;

x

}
//Pondera las calificaciones existentes con una serie de ponderaciones de entrada
//las suma y determina el puntaje del queso
public double ponderar(double[] ponderaciones){
this.puntaje =
this.sabor*ponderaciones[0]+this.materiaGrasa*ponderaciones[1]+this.consistencia*ponderacio
nes[2]+this.maduracion*ponderaciones[3];
return puntaje;
}
//Se clasifica y califica un queso segn sus caractersticas
public void sabor(){
int sabor = this.sabor;
if(sabor==1){calificaciones[0]= 6;denominaciones[2]= "Fresco-Dulce";}
else if(sabor==2){calificaciones[0]= 7;denominaciones[2] = "Poco
Pronunciada";}
else if(sabor==3){calificaciones[0]= 3;denominaciones[2] = "Pronunciada";}
else if(sabor==4){calificaciones[0]= 4;denominaciones[2] = "Fuerte";}
else if(sabor==5){calificaciones[0]= 5;denominaciones[2] = "Muy fuerte";}
else{calificaciones[0]= 0;denominaciones[2] = "EX";}
}
public void materiaGrasa(){
int grasa = this.materiaGrasa;
if(grasa>60){calificaciones[1]= 3;denominaciones[0] = "Extra-Graso";}
else if(grasa>=45){calificaciones[1]= 5;denominaciones[0] = "Graso";}
else if(grasa>=26){calificaciones[1]= 7;denominaciones[0] = "Semi-graso";}
else if(grasa>=10){calificaciones[1]= 6;denominaciones[0] = "Bajo Contenido
de Grasa";}
else{calificaciones[1]= 4;denominaciones[0] = "Desnatado";}
}

xi

public void consistencia(){
int consistencia = this.consistencia;
if(consistencia>70){calificaciones[2]= 5;denominaciones[1] = "Blando";}
else if(consistencia>=61){calificaciones[2]= 7;denominaciones[1] =
"Semi-blando";}
else if(consistencia>=54){calificaciones[2]= 3;denominaciones[1] =
"Semiduro";}
else if(consistencia>=45){calificaciones[2]= 6;denominaciones[1] =
"Duro";}
else{calificaciones[2]= 4;denominaciones[1] = "Extra-duro";}
}
public void maduracion(){
int maduracion = this.maduracion;
if(maduracion>180){calificaciones[3]= 6;denominaciones[3] = "Aejo";}
else if(maduracion>105){calificaciones[3]= 3;denominaciones[3] =
"Viejo";}
else if(maduracion>35){calificaciones[3]= 7;denominaciones[3] =
"Curado";}
else if(maduracion>7){calificaciones[3]= 4;denominaciones[3] = "Semi-
curado";}
else{calificaciones[3]= 5;denominaciones[3] = "Tierno";}
}
}

You might also like