Professional Documents
Culture Documents
Ejemplo 1.
En una empresa que brinda mantenimiento a PC’s se han clasificado a las maquinas de
acuerdo al numero de desperfectos que estas presentan. Si la PC no tiene ninguna falla
es tipo A, si la PC tiene 3 fallas se le considera tipo B y si la PC tiene más de 3 fallas es
tipo C.
Escribir un algoritmo para implementar este proceso, No se sabe cuantas PC’s se
evaluaran en un día, el algoritmo debe preguntar si se desea continuar y terminar el
ingreso “N”. Asimismo al finalizar se debe mostrar por pantalla las estadísticas
porcentuales correspondientes a la evaluación de ese día.
Clase Inspector
Atributos:
NumFallas
Métodos:
LeeProcesaNumFallas()
MuestraEstadisticas()
1
Implementación en Pseudocodigo:
CLASE INSPECTOR {
// Atributos
entero NumFallas
entero TipoA
entero TipoB
entero TipoC
//Métodos
Publico Inspector() {
NumFallas = 0
TipoA = 0 , TipoB = 0 , TipoC = 0
}
Fin_Mientras
}
Método Principal ( ){
2
Oscar. LeeProcesaNumFallas()
Oscar.MuestraEstadisticas()
}
} // Fin de la clase
Ejemplo 2.
Una financiera tiene 3000 clientes, ha decidido premiar a su staff de 30 vendedores.
Escribir una solución que permita, saber quien es el ejecutivo con el mayor número de
contratos conseguidos pues recibirá un Bono especial de $ 500 dólares como premio.
Además se otorgara otros premios al resto del personal según la siguiente tabla:
Clase BonosFinanciera
Atributos:
NomVendedorGanador
NumContratosGanador
TotalEnBonos
Métodos:
ProcesaDatos()
MuestraResultados()
Implementación en Pseudocodigo:
CLASE BonosFinanciera {
// Atributos
Cadena NomVendedorGanador
Entero NumContratosGanador
Real TotalEnBonos
//Métodos
3
Publico BonosFinanciera( ) {
NumContratosGanador ← 0
TotalEnBonos ← 0
Método Principal ( ) {
BonosFinanciera Financiera ← nuevo BonosFinanciera ()
Financiera.ProcesaDatos()
Financiera .MuestraResultados()
}
} //Fin de la clase.
4
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
Ejemplo 1
import java.io.*;
public class Leer {
public static void main(java.lang.String[] args) {
// Inserte aquí código para iniciar la aplicación.
int dato_int=0;
System.out.print("Ingrese un dato entero : ");
dato_int=Leer.datoInt();
System.out.println("El numero ingresado fue : "+dato_int);
}
//Método datoInt :
public static int datoInt() {
return Integer.parseInt(dato());
}
//Método dato:
public static String dato() {
String sdato="";
try
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader flujoE = new BufferedReader(isr);
sdato=flujoE.readLine();
}
catch (IOException e)
{
System.err.println("ERROR:"+e.getMessage());
}
return sdato;
}
}
5
System.out.print("Segundo numero: ");
n2=entrada.nextInt();
suma=n1+n2;
System.out.printf("La suma es %d \n",suma);
}
**********************************************************************
//import java.util.Scanner;
import javax.swing.JOptionPane;
public class lectura_suma_iG {
//private static String String;
Ejemplo 3
Construir una clase llamada Luz que simule una luz de semáforo. El atributo color de la
clase debe cambiar de Verde a Amarillo y a Rojo y de nuevo regresar a Verde mediante
la función Cambio. Cuando se crea un objeto Luz, su color inicial será Rojo.
import java.io.*;
public class cLuz {
//Atributo
String color;
//Métodos
cLuz(){
color="Rojo";
}
public void Cambio(){
color="Verde";
System.out.println(color);
color="Amarillo";
System.out.println(color);
color="Rojo";
6
System.out.println(color);
}
public static void main(String[] args) {
char rpta='s';
cLuz oLuz=new cLuz();
while(rpta=='s'){
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader flujoE=new BufferedReader(isr);
PrintStream flujoS=System.out;
try{
oLuz.Cambio();
flujoS.print("Desea continuar<s/n>: ");
rpta=(char)flujoE.read();
}
catch(IOException e){
System.out.println("Error:"+e.getMessage());
}
}
}
}
7
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
import javax.swing.JOptionPane;
import java.util.*;
public class cPersona {
//privados:
String nombre;
int edad;
private int dia,mes,año;
//publicos:
public void AsignarNombre(String nom){
nombre=nom;
}
public void AsignarEdad(int e){
edad=e;
}
8
public static void main(String[] args) {
9
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
Dada la clase Alumno, con los datos: código, nombre, promedio final; definir un arreglo
de alumnos, para permitir: ingresar y agregar por código cuando éste no existe, luego
mostrar los alumnos ingresados. Al ingresar se debe buscar si el código del alumno
existe o no en el arreglo, para poder agregar o no al arreglo. Al añadir un elemento, se
actualiza la longitud del arreglo de objetos, y luego se añade el objeto al final.
Pedir el número de alumnos para procesar.
Análisis:
Existen métodos para ingresar, agregar por código, mostrar, buscar alumno por código,
actualizar longitud del arreglo, añadir un objeto.
Clase(s) solución:
Método Principal:
************************************************************
10
public Alumno(String cod,String nom,int pf){
codigo=cod;
nombre=nom;
promediofinal=pf;
}
public void setCodigo(String cod){
codigo=cod;
}
public void setNombre(String nom){
nombre=nom;
}
public void setPromediofinal(int pf){
promediofinal=pf;
}
public String getCodigo() {
return codigo;
}
public String getNombre() {
return nombre;
}
public int getPromediofinal() {
return promediofinal;
}
}
11
ca[i]=objeto;
else
System.out.println("Indice fuera de limites");
}
public void agregarporcodigo(Alumno obj){
unElementoMas(ca);
ponerValorEn(nElementos -1,obj);
}
public void ingresar() {
String codigo_i,nombre_i;
int promediofinal_i;
Alumno at=new Alumno();
System.out.print("Codigo: ");
codigo_i=PromedioAlumnos.dato();
System.out.println("codigo ingresado: "+codigo_i);
if(!buscarAlumno(codigo_i)){
at.setCodigo(codigo_i);
System.out.print("Nombre: ");
nombre_i=PromedioAlumnos.dato();
at.setNombre(nombre_i);
System.out.print("Promedio final(entero): ");
promediofinal_i=PromedioAlumnos.datoInt();
agregarporcodigo(new Alumno(codigo_i,nombre_i,promediofinal_i));
}
}
public void visualizar(){
System.out.println("DATOS INGRESADOS");
for(int i=0;i< nElementos;i++){
System.out.print(ca[i].getCodigo()+" "+ca[i].getNombre()+"
"+ca[i].getPromediofinal());
System.out.println();
}
}
}
import java.io.*;
public class PromedioAlumnos {
public static int datoInt(){
return Integer.parseInt(dato());
}
public static String dato(){
String sdato="";
try{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader flujoE=new BufferedReader(isr);
sdato=flujoE.readLine();
}
catch(IOException e){
System.err.println("ERROR"+e.getMessage());
12
}
return sdato;
}
}
}
EJERCICIO
1. Generar una lista de teléfonos. La lista debe ser un objeto que encapsula la matriz de
objetos persona, la clase CPersona define los atributos privados nombre, dirección,
teléfono relativos a una persona, métodos respectivos que en un menú de opciones
permita: añadir, eliminar y buscar en una lista.
13
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
PRACTICA 4: Agregación
Dadas la clase Banco, con los atributos nombre, dirección, lista de clientes; y los
métodos para asignar y mostrar los atributos respectivos. La clase Clientes con los
atributos nombre, dni, fecha de nacimiento, los métodos para asignar y mostrar atributos
de la clase. Permitir añadir clientes a la clase Banco, considerando que un cliente puede
serlo de un banco o más de un banco; además si un objeto banco deja de existir, los
clientes persisten.
Mostrar los clientes asignados.
import java.util.GregorianCalendar;
public class Cliente {
String nombre=null;
String dni=null;
GregorianCalendar fechaNacimiento=null;
public Cliente(String nom, String doc_i, GregorianCalendar fn){
nombre=nom;
dni=doc_i;
fechaNacimiento=fn;
}
public String getNombre(){
return nombre;
}
public void setNombre(String nombre){
this.nombre=nombre;
}
public String getDni(){
return dni;
}
public void setDni(String dni){
this.dni=dni;
}
public GregorianCalendar getFechaNacimiento(){
return fechaNacimiento;
}
public void setFechaNacimiento(GregorianCalendar fechaNacimiento){
this.fechaNacimiento=fechaNacimiento;
}
@Override
public String toString(){
return this.getNombre()+"\t"+this.getDni()
+"\t"+this.getFechaNacimiento().getTime();
}
}
14
import java.util.ArrayList;
public class Banco {
String nombre=null;
String direccion=null;
ArrayList<Cliente> clientes= null;//Objeto clientes del tipo Cliente
// ArrayList: clase que contendra
// lista de objetos Cliente
public Banco(String nom, String direc){
nombre=nom;
direccion=direc;
this.clientes=new ArrayList<Cliente>();
}
public String getNombre(){
return nombre;
}
public void setNombre(String nombre){
this.nombre=nombre;
}
public void agregarCliente(Cliente cliente){
this.clientes.add(cliente);
}
public ArrayList<Cliente> ObtenerClientes(){
return this.clientes;
}
}
import java.util.GregorianCalendar;
import java.util.Iterator;
public class Prueba {
15
}
System.out.println("Banco: "+banco2.getNombre());
it=banco2.ObtenerClientes().iterator();
while(it.hasNext()){ // seguidamente uno/otro del mismo iterador(it)
Cliente obj= (Cliente) it.next();
System.out.println(obj.toString());
}
}
}
16
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
Sea la clase CalculadoraBase una clase base con los métodos suma y resta para dos
números enteros y reales, además la clase Calculadora1 subclase o clase derivada que
hereda los métodos de CalculadoraBase. Calculadora1 implementa los métodos
factorial y esPrimo. Considerar métodos sobrecargados.
Para una instancia de la clase Calculadora1, hallar la suma dados dos números enteros,
la resta, factorial de cada uno de ellos, y decir si cada uno de los números dados es
primo o no.
CalculadoraBase
Calculadora1
17
int rpta=n1-n2;
return rpta;
}
public float resta(float n1,float n2){
float rpta=n1-n2;
return rpta;
}
}
18
public class Pruebacalculadora {
19
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
EmpleadoPorComision
nombre
ventasBrutas
tarifaporComision
EmpleadoBaseMasComision
salarioBase
}
protected double obtenerVentasBrutas(){
return ventasBrutas;
}
protected double obtenerTarifaPorComision(){
return tarifaporComision;
}
}
20
salariobase=salario;
}
public double obtenerSalarioBase(){
return salariobase;
}
}
21
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
Dada la clase Figura con atributos: x, y, referente a un punto, y, las clases Círculo,
Rectángulo, hallar la figura de mayor área, independiente de su forma, y los valores de
sus parámetros.
Crear un arreglo de la clase figura para cuatro elementos, y guardar en sus elementos los
valores devueltos por new al crear objetos de las clases derivadas.
Figura
int x iFigura
int y
main()
abstract double area()
figuraMayor()
Rectangulo
Circulo
double largo
double radio
double ancho
double area()
double area()
22
public class Rectangulo extends Figura{
protected double largo,ancho;
public Rectangulo(int x,int y, double largo, double ancho){
super(x,y);
this.largo=largo;
this.ancho=ancho;
}
public double area(){
return largo*ancho;
}
}
23
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
PRACTICA 8: Polimorfismo
Dada una clase base Empleado, y sus clases derivadas: EmpleadoPorComision,
EmpleadopoHoras, donde cada subclase proporciona implementación del método:
calcularPago().
EmpleadoPorHora, calcula multiplicando las horas trabajadas por el precio por hora.
EmpleadoPorComision, se calcula, con un salario base más un bono por cada unidad
vendida.
Cada subclase agrega algunos métodos propios.
24
//this.unidades=unidades;
this.unidades=this.unidades+unidades;
}
public int getVentas(){
return unidades;
}
public double calcularPago(){
return getSalario()+(comision*unidades);
}
}
25
// Crear un sistema de nomina
Nomina nomina=new Nomina();
Los métodos:
registrarInfoEmpleado(EmpleadoPorComision emp)
registrarInfoEmpleado(EmpleadoPorHoras emp)
**********************************************************
EJERCICIO
Dada un clase Banco que define una matriz de referencias a objetos de tipo cuenta bancaria
(clase Cuenta). Cuenta una clase abstracta con los atributos: nombre, cuenta, saldo, tipo de
interés; y los métodos: estado, que devuelve el saldo de la cuenta, comisiones, método abstracto
sin parámetros que será redefinido en las subclases, que incluye a dos clases derivadas:
CCuentaAhorro con el atributo cuota de mantenimiento; y la clase CCuentaCorriente con los
26
atributos: transacciones, importe por transacciones, transacciones exentas; y, a la vez
CCuentaCorriente es clase base de CCuentaCorrienteConIn (Cuenta corriente con
intereses).
En una clase Test definir un menú de opciones que permita:
1. Saldo
2. Buscar siguiente
3. Ingreso
4. Reintegro // Ingreso
5. Añadir
6. Eliminar
7. Mantenimiento
8. Salir
Seleccione opción:
27
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
import java.io.*;
import javax.swing.JOptionPane;
public class Prueba {
28
try{
flujoS.print("Primer caracter<letra>: ");
ca=(char)flujoE.read();
flujoE.readLine(); //Limpiar caracteres: \r\n
flujoS.print("Segundo caracter<letra>: ");
cb=(char)flujoE.read();
flujoE.readLine(); //Limpiar caracteres: \r\n
}
catch(IOException e){
System.out.println("Error:"+e.getMessage());
}
}
}
Ejercicios:
1. Programa utilizando clase genérica, para hallar el menor, intermedio y mayor de tres
números enteros, a su vez de tres letras.
2. Programa utilizando clase genérica para ordenar cinco números y ordenar cinco
letras, ascendente y/o descendente.
29
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
FACULTAD DE INGENIERIA DE SISTEMAS
E.A.P. INGENIERIA DE SISTEMAS
ALGORITMICA II
Dados dos números enteros , hallar el cociente de dichos números. De ocurrir algún error
aritmético, como por ejemplo división por cero, o, que las entradas no sean del mismo tipo es
decir no sean números los datos de entrada, se debe en ambos casos atrapar y manejar la
excepción, y permitir que el usuario ingrese los datos otra vez.
import java.util.InputMismatchException;
import java.util.Scanner;
public class DivEntreCeroConME {
30
Excepciones propias – Ejemplo
Se conoce la longitud de los tres lados enteros de un triángulo, el área puede calcularse
de la siguiente manera:
area = Math.sqrt(s*(s-a)*(s-b)*(s-c));
donde: s=(a+b+c)/2
En un programa elabore un método para calcular y devolver el área; permita que lance
una excepción cuando las tres longitudes no puedan formar un triángulo. Desarrolle un
método invocador que atrape la excepción.
import java.util.InputMismatchException;
import java.util.Scanner;
class Cuando3LnofT extends Exception{}
public class ExcepcionCuando3LnofT {
public static double area(double l1,double l2, double l3) throws Exception,
InputMismatchException{
double s,carea;
if(l1<l2+l3 && l2<l1+l3 && l3<l1+l2){
s=(l1+l2+l3)/2;
carea=Math.sqrt(s*(s-l1)*(s-l2)*(s-l3));
return carea;
}
else
throw new Cuando3LnofT();
}
public static void main(String[] args) throws Exception{
Scanner lado=new Scanner(System.in);
double resultado=0;
try{
System.out.println("Tres lados enteros de un triangulo para hallar area:");
System.out.println("\n 1er lado: ");
double lado1=lado.nextDouble();
System.out.println("\n 2do lado: ");
double lado2=lado.nextDouble();
System.out.println("\n 3er lado: ");
double lado3=lado.nextDouble();
resultado = area(lado1, lado2, lado3);
System.out.println("El area es:"+resultado);
}
catch(Cuando3LnofT e){
System.err.println("ERROR: los tres lados no forman un triangulo");
}
catch(InputMismatchException inputMismatchException){
System.err.printf("\n Excepcion: %s\n",inputMismatchException);
System.out.println("Debe ingresar numeros enteros. Intente de nuevo\n");
}
}
}
31
Ejercicios:
2. Usar herencia para crear una superclase de excepción (lamada ExcepcionA) y las
subclases de excepción ExcepcionB y ExcepcionC, en donde ExcepcionB hereda de
ExcepcionA y ExcepcionC hereda de ExcepcionB. Programa para demostrar que el
bloque catch para el tipo ExcepcionA atrapa excepciones de los tipos ExcepcionB y
ExcepcionC.
32
PRACTICA 10: Interfaz Gráfica de Usuario (Graphical User Interface - GUI)
Ejemplo:
Vaca, cerdo son animales que tienen peso y no hablan pero si dicen algo o rumian es el
caso de la vaca (muu), o gruñe, caso del cerdo (oinc). Crear una instancia de vaca por
ejemplo daisy, una instancia de cerdo por ejemplo porky. Usando polimorfismo
redefinir un método para que al seleccionar un animal de los indicados se diga algo de
uno de ellos
package paquete1;
public abstract class Animal {
public abstract String dice();
}
package paquete1;
public class Vaca {
public String dice(){
return "Vaca dice: Muu";
}
}
import paquete1.Vaca;
33
public polimorfismouGUI() {
initComponents();
}
**********************************************************************
Construir una clase llamada Luz que simule una luz de semáforo. El atributo color de la
clase debe cambiar de Verde a Amarillo y a Rojo y de nuevo regresar a Verde mediante
la función Cambio. Cuando se crea un objeto Luz, su color inicial será Rojo.
import java.io.*;
public class cLuz {
34
//Atributo
String color;
//Métodos
cLuz(){
color="Rojo";
}
public void Cambio(){
color="Verde";
System.out.println(color);
color="Amarillo";
System.out.println(color);
color="Rojo";
System.out.println(color);
}
public static void main(String[] args) {
char rpta='s';
cLuz oLuz=new cLuz();
while(rpta=='s'){
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader flujoE=new BufferedReader(isr);
PrintStream flujoS=System.out;
try{
oLuz.Cambio();
flujoS.print("Desea continuar<s/n>: ");
rpta=(char)flujoE.read();
}
catch(IOException e){
System.out.println("Error:"+e.getMessage());
}
}
}
}
35
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
Figura
int x iFigura
int y
main()
abstract double area()
figuraMayor()
Rectangulo
Circulo
double largo
double radio
double ancho
double area()
double area()
36
INDICE
Pág.
5. Agregación …………...……………………………………………………. 14
8. Polimorfismo …………………..…………………………………….……… 24
37
REFERENCIAS
2. Deitel & Deitel. Java como programar. 2008. Edit. Pearson Prentice Hall.
México.
4. Douglas Bell, Mike Parr. Java para estudiantes. 2003. Edit. Pearson.
7. García-Bermejo, José Rafael. Java SE6 & Swing. 2007. Edit. Pearson. España.
9. Vásquez Paragulla, Julio. Java SE for Windows with NetBeans IDE. 2008.
Lima.
38