P4I2_2010.doc

Anuncio
Facultad de Ciencias Exactas, Ingeniería y Agrimensura
Departamento de Sistemas e Informática
Escuela de Electrónica
Informática II
Práctica Nº 4 – Entrada / Salida
Problema 1:
Escriba un programa que se invoque desde la línea de comandos con un argumento.
Dicho argumento deberá ser numérico y validado convenientemente. El programa
deberá pedir el ingreso de tantas cadenas de texto (Strings) como indique el citado
argumento y luego listar por pantalla las mismas.
Problema 2: (*)
Diseñar una “base de datos” de los empleados de una compañía y un sistema que
permita ingresar los datos por teclado, visualizarlos por pantalla, obtener el valor de
los datos miembros y cambiar los mismos según los siguientes lineamientos:
 Crear un arreglo del tipo usado para representar a un empleado y llenarlo
luego con los datos correspondientes a 10 empleados ingresados por teclado.
 Hacer un menú que tenga las siguientes opciones:
a) Calcular el sueldo mínimo (del arreglo de empleados) y la cantidad de
veces que ocurre dicho sueldo en el arreglo
b) Dado un sueldo (que el usuario ingresará por teclado) retornar la primera
ocurrencia del mismo en el arreglo (su índice) o en el caso de que ningún
empleado del arreglo tenga un sueldo igual al ingresado, mostrar un -1
c) Calcular el sueldo promedio de los empleados, mostrar en pantalla este
valor y los datos del empleado cuyo sueldo esté más cerca de este
promedio
d) Salir
Problema 3:
Grabar los empleados del ejercicio anterior en un archivo ingresando el nombre del
mismo por teclado. Debe mostrarse en pantalla nombre y apellido de cada empleado
a medida que se va grabando.
Problema 4:
Dada la siguiente clase abstracta:
Informática II – Laboratorio: entrada/salida
1
abstract class Figura{
double area();
int esMenorQue(Figura obj);
}
a) Definir las clases Rectángulo, Círculo y Triángulo que extiendan Figura.
Implementar en estas clases todos los métodos y variables necesarios para
ello, siempre al nivel más alto posible de la jerarquía de clases. Es posible
modificar la clase Figura, siempre que siga siendo abstracta.
b) El método esMenorQue(Figura obj) permite ordenar Rectángulos,
Círculos y Triángulos por su área.
c) Definir una clase Test que tenga un método main() que realice lo siguiente:
 Permita que el usuario cree una cantidad arbitraria de objetos círculos,
triángulos y rectángulos, solicitando la entrada por teclado de los
valores necesarios para crear estas instancias.
 Muestre un mensaje por pantalla indicando cuál es la figura (tipo y
área) de menor área.
Problema 5:
Escriba un programa que busque en un archivo de texto, la primera ocurrencia de un
carácter particular e imprima por pantalla el número de línea y posición dentro de la
misma de dicha ocurrencia. El programa debe tomar dos argumentos de la línea de
comando, el primero de ellos es el nombre del archivo de texto y el segundo de ellos
es el carácter buscado.
El programa deberá mostrar por pantalla un mensaje de error en caso que se
introduzca un número incorrecto de argumentos por línea de comando o si el
segundo argumento es un String de longitud mayor a un carácter.
Problema 6:
Similar al problema anterior pero buscando ahora una cadena e indicando la
cantidad de veces que esta cadena aparece en el archivo y las posición de cada
ocurrencia.
Problema 7:
Hacer un programa que permita administrar los datos de aseguramiento de vehículos
de una compañía de seguros. El programa debe permitir:
Informática II – Laboratorio: entrada/salida
2
a) Dar de alta un asegurado, incluyendo nombre y apellido, número de póliza (debe
ser único), fechas de vigencia de la póliza (inicio y final de la cobertura), tipo de
póliza(terceros, todo riesgo, responsabilidad civil), tipo de vehículo (automóvil,
camión, etc.), patente.
b) Guardar en un archivo “polizas.dat” los datos
c) Dado el número de póliza, recuperar del archivo el objeto que lo representa y
mostrar sus datos en pantalla.
Problema 8:
Dado el siguiente programa, analizarlo, correrlo y realizar un programa para leer el
archivo que produjo:
import java.io.*;
class prome {
public static void main(String args[]) throws IOException {
InputStream in=System.in;
DataInputStream inputStream=new DataInputStream(in);
DataOutputStream miarchivo = new DataOutputStream (new
FileOutputStream("promedio.txt"));
double
promedio = 0.0;
int
numero1, numero2, numero3;
System.out.println("Enter the first number:");
numero1 =
Integer.valueOf(inputStream.readLine().trim()).intValue();
System.out.println("Enter the second number:");
numero2 =
Integer.valueOf(inputStream.readLine().trim()).intValue();
System.out.println("Enter the third number:");
numero3 =
Integer.valueOf(inputStream.readLine().trim()).intValue();
miarchivo.writeUTF("El promedio de ");
miarchivo.writeInt(numero1);
miarchivo.writeUTF(", ");
miarchivo.writeInt(numero2);
miarchivo.writeUTF(" y ");
miarchivo.writeInt(numero3);
miarchivo.writeUTF(" es ");
promedio = (numero1 + numero2 + numero3) / 3;
miarchivo.writeDouble(promedio);
miarchivo.close();
String line=inputStream.readLine();
}
Informática II – Laboratorio: entrada/salida
3
}
Problema 9:
Reescribir el programa anterior reemplazando los metodos obsoletos por actuales.
¿Porqué no deberían utilizarse estos métodos obsoletos?
Problema 10:
Se pretende crear una aplicación Java para procesar información acerca de una lista
de libros. De cada libro interesa almacenar información acerca de su título y nombre
del autor.
a) Escriba una clase Libro que pueda ser usada para crear objetos que
representen libros. La clase debe tener un constructor que tome dos
argumentos de tipo String para inicializar el título y autor del libro. Debe
incluir métodos de acceso y actualización para título y autor y un método
toString() para mostrar información sobre el libro en forma textual.
b) Escriba el código de una clase ListaLibros que use un array para
almacenar una lista de objetos Libro. La clase debe tener un constructor
que inicialice una lista de libros vacía, un método para añadir un nuevo
objeto Libro a la lista y un método toString() que produzca
información de la lista (cada libro debe listarse en una línea separada).
Puede suponer que el número máximo de libros es 100.
c) Se requiere poder leer información sobre libros que se encuentra en un
archivo texto. En tal archivo cada libro está representado por dos líneas de
texto, la primera donde figura el título y la segunda donde figura el autor
del mismo. La primera línea del archivo contiene un entero que representa
el número de libros listados en el archivo, por ejemplo:
2
Lord of the Rings
Tolkien, J R R
Java in a Nutshell
Flanagan, David
Escriba en la clase ListaLibros un método cargarDe() que tome
como argumento un String que representa el nombre del archivo desde
donde leerá datos de libros y los añadirá en ListaLibros.
d) Escriba en la clase ListaLibros un métod grabarA(). Este método debe tomar
como argumento un String que será el nombre de un archivo donde escribirá todos los
datos de los libros de ListaLibros. El archivo tendrá el formato indicado más arriba.
Informática II – Laboratorio: entrada/salida
4
Problema 11:
Agregar un menú de opciones al ejercicio 5 de la práctica 2 con las siguientes
opciones:
-
Seleccionar un ítem de CheckBox.
Deseleccionar un ítem de CheckBox.
Modificar la selección de RadioButton.
Mostrar el estado actual de los Boxes.
Salir
Problema 12:
Resolver el problema 10 haciendo que métodos grabarA() y cargarDe() trabajen
ahora
exclusivamente
con
las
clases
ObjectInputStream
y
ObjectOutputStream.
Problema 13:
Dadas las clases e interface a implementar suministradas, completarlas con lo
MINIMO necesario a fin de darle funcionalidad, sin agregar ni cambiar propiedades
(campos).
Luego completar la clase "prueba" para leer el archivo "personas.dat" (que
contiene 2 hombres y 2 mujeres como objetos), cargar los datos en un arreglo y
luego mostrar en pantalla nombre, peso real y estado según la OMS de cada
persona del arreglo.
interface estado{
double peso_teorico();
double IMC();
String estado_segun_OMS();
}
class persona {
private String nombre;
protected double estatura;
protected double peso;
persona(String nom, double altura, double p){
nombre=nom;
estatura=altura;
peso=p;
}
public double IMC(){return ...
;}
public String nombre(){return nombre;}
Informática II – Laboratorio: entrada/salida
5
...
}
class mujer{
private int cantidad_de_hijos;
mujer(String nom, double alto, double peso, int hijos){
...
}
...
}
class hombre{
boolean corpulento;
...
}
class prueba {
public static void main (String [] z)throws IOException,
ClassNotFoundException {
…
}
}
Debe tenerse en cuenta que:
a) El peso teórico se calcula como:
 Mujeres: 50 kg para los primeros 1.5 m de altura más 2.5 kg
por cada 2.5 cm adicionales,
mas 0.65 Kg por un hijo
ó 1.3 Kg por 2 hijos o mas.
 Hombres: 53 kg para los primeros 1.5 m de altura más 3 kg
para cada 2.5 cm adicionales, mas 10% si el hombre es
corpulento.
b) El Indice de Masa Corporal (IMC) se calcula dividiendo los kilogramos
de peso por el cuadrado de la estatura en metros y da origen a la
siguiente clasificación acorde a la OMS:
 < 18,5: Peso Bajo (Indica delgadez, desnutricion o algún
problema de salud)
 hasta 24,9 (hombres) o 23,9 (mujeres). Peso normal (Está
catalogado como saludable)
 hasta 29.9 hombres ó 28.9 mujeres: Sobrepeso (u Obesidad
leve)
 hasta 40 hombres ó 37 mujeres: Obesidad grado 2.
 > 40 hombres ó > 37 mujeres: Obesidad severa o grado 3.
Nota: Para grabar archivos como el que debe leer este programa puede hacer otro
programa utilizando el siguiente código (incompleto):
ObjectOutputStream salida= new ObjectOutputStream(new
FileOutputStream("personas.dat"));
arreglo[0]= new hombre("Javier",1.75,83.0,false);
arreglo[1]= new mujer("Marisa",1.80,72.0,0);
Informática II – Laboratorio: entrada/salida
6
arreglo[2]= new hombre("Juan",1.70,92.0,false);
arreglo[3]= new hombre("Pedro",1.95,110.0,true);
for (int i=0;i<=3;i++) salida.writeObject(arreglo[i]);
Problema 14:
Escribir una clase que posea un método que muestre por pantalla los resultados de
examinar un archivo que contiene objetos de diferentes clases, que cuente el
número de objetos Integer que contiene el mismo y que ignore objetos de otras
clases.
Problema 15:
En cada linea de un archivo de nombre “datos.txt” se encuentran los datos de una
función evaluada en los puntos dados en forma de pares x;f(x). Por ejemplo:
0,25 ;12,0
0,45 ; 24,5
0,75 ; 30,0
1,05 ; 40,3
2,00 ; 55,0
3 ; 83,0
...
Leer el archivo y calcular el polinomio de interpolación de Lagrange evaluándolo en
puntos ingresados por teclado.
Informática II – Laboratorio: entrada/salida
7
Solución del problema 2:
import java.io.*;
class empleado {
private String nombre;
private int leg;
private int edad;
private int seccion;
private float sueldo;
private static int nro=100;
empleado(){leg=nro++;}
empleado(String n,int e,int sec, float s) {
this();
nombre = n;
edad = e;
seccion = sec;
sueldo = s;
}
void setNombre(String n){nombre=n;}
void setedad(int e){edad=e;}
void setseccion(int d){seccion=d;}
void setsalario(float s){sueldo=s;}
String devnombre(){return nombre;}
int devedad(){return edad;}
int devseccion(){return seccion;}
int devleg(){return leg;}
float devsueldo(){return sueldo;}
public String toString(){
String d="\n NRO.LEGAJO: " + leg + "\nNOMBRE: " + nombre +
"\nEDAD: " + edad;
d += "\nSECCION:" + seccion + "\nSUELDO: " + sueldo;
return d;
}
}
class prueba_empleado {
static String scanf() {
BufferedReader d = new BufferedReader(new InputStreamReader
(System.in));
try {
return d.readLine();
}
catch (Exception e){
return "error";
}
}
public static void main(String []args) {
empleado e[]= new empleado [5];
for (int i=0; i<=4;i++){
System.out.println("\nIngrese nombre del empleado ");
String nom=scanf();
System.out.println("\nIngrese edad del empleado ");
String ed=scanf();
int edn=Integer.valueOf(ed).intValue();
Informática II – Laboratorio: entrada/salida
8
System.out.println("\nIngrese sección en la que trabaja
");
String se=scanf();
int nse=Integer.valueOf(se).intValue();
System.out.println("\nIngrese sueldo del empleado ");
String su=scanf();
float sl=Float.valueOf(su).floatValue();
e[i]=new empleado(nom, edn, nse, sl);
}
int opcion=0;
while (opcion!=4) {
// IMPRIME MENU DE OPCIONES
System.out.println("\n1.- SUELDO MINIMO");
System.out.println("\n2.- BUSCAR");
System.out.println("\n3.- SUELDO PROMEDIO");
System.out.println("\n4.- SALIR");
String op=scanf();
opcion =Integer.valueOf(op).intValue();
int i;
switch (opcion) {
case 4:break;
case 1:
//BUSCA EL SUELDO MINIMO
float smin;
smin= e[0].devsueldo();
for(i=0;i<=4;i++) {
if (e[i].devsueldo()<smin)
smin=e[i].devsueldo();
}
// CUENTA LA CANTIDAD DE SUELDOS MINIMOS
int cant=0;
for(i=0;i<=4;i++) {
if (e[i].devsueldo()==smin) cant++;
}
//
MUESTRA RESULTADOS
System.out.println("\nEl sueldo mínimo es:"+ smin);
System.out.println (" y se repite " + cant +
"veces");
String x=scanf();
break;
case 2:
System.out.println("\nIngrese sueldo a buscar");
String su=scanf();
float sue=Float.valueOf(su).floatValue();
for(i=0; i<=4 && e[i].devsueldo()!= sue;i++);
if (i==5) System.out.println("-1");
else System.out.println (i);
break;
case 3:
float promedio=0;
for (i=0;i<=4;i++) promedio += e[i].devsueldo();
promedio/=5;
float dif,menordif=e[0].devsueldo();
int imenor=0;
for (i=1;i<=4;i++) {
Informática II – Laboratorio: entrada/salida
9
dif = Math.abs(e[i].devsueldo() - promedio);
if (dif < menordif) {
menordif = dif;
imenor = i;}
}
System.out.println ("\nSueldo promedio: " +
promedio);
System.out.println ("\nEl empleado que difieremenos
del promedio es: \n");
System.out.println(e[imenor]); // SE USA toString
} // cierra el switch
} //cierra el while
} //cierra el main
} // cierra la clase
Informática II – Laboratorio: entrada/salida
10
Documentos relacionados
Descargar