Arreglos en Paralelo v.2012
Arreglos en Paralelo v.2012
Arreglos en Paralelo v.2012
Captulo
PROCESAMIENTO DE DATOS
(PD)
Uso de Arreglos en Paralelo
Temas:
Introduccin.
Estructura de datos arreglos
Conceptos bsicos
Arreglos unidimensionales vectores
Arreglos bidimensionales matrices
Arreglos en paralelo
Arreglos de gran tamao.
Manejo de Datos en Arreglos (Sin Modificar tamao de Arreglo)
Ingreso de Datos: Utilizando Estructura de Repeticin for
Visualizacin de Datos.
Bsqueda de Datos
Bsqueda Secuencial o Lineal
Bsqueda Binaria.
Clasificacin de Datos
Ordenamiento de Datos por Seleccin
Ordenamiento de Datos por Insercin
Ordenamiento de Datos por Intercambio o Burbuja
Ordenamiento Rpido de Datos Quicksort.
Modificacin de Datos
Eliminacin de Datos
Eliminacin Lgica
Eliminacin Fsica.
Manejo de Datos en Arreglos (Modificando tamao de Arreglo)
Ingreso de Datos: Utilizando Estructura de Repeticin
Aumento del Tamao del Arreglo
Insercin de Datos
Reduccin del Tamao del Arreglo
Visualizacin de Datos.
Problemas propuestos
Se presentan 10 problemas propuestos para que usted pueda resolverlos, los
cuales permitirn que analice mejor cada uno de los temas tratados en el
presente captulo.
Proyectos sugeridos
Se sugiere el desarrollo de 15 problemas propuestos planteados como proyectos
finales para que pueda aplicar todos los conceptos tratados.
Intntalo
Finalmente, se propone un problema para que intente desarrollarlo en base a las
soluciones implementadas en el presente captulo.
CAPTULO II
ESTRUCTURA DE DATOS ARREGLOS
INTRODUCCIN
Un algoritmo constituye una lista completa de pasos secuenciales y una descripcin de datos
necesarios para resolver un determinado problema. Dichos datos deben almacenarse en una
estructura de datos.
Los arreglos permiten almacenar varios valores a la vez y constituyen las estructuras de datos
ms sencillas despus de la variable. Cuando se utilizan mltiples arreglos en las soluciones
podemos manejar los datos almacenados utilizando un algoritmo de bsqueda, clasificacin,
modificacin y eliminacin de datos con la finalidad de mantener actualizados los datos.
MARCO DE TRABAJO
ENUNCIADO
DEL
PROBLEMA
Etapa 02
Definicin
Solucin
Diseo
Solucin
Etapa 04
Desarrollo
Solucin
Pg. 92
LISTA DE PASOS
SENTENCIAS
DESCRIPCIN
DE DATOS
DECLARACIN Y
DEFINICIN DE
DATOS
SE DESARROLLAN UTILIZANDO:
Instrucciones de bifucacin.
TAMBIN:
ALMACENADOS EN:
MANEJO DE DATOS:
Bsquedas y Ordenamientos.
Modificacin y Eliminacin.
Pg. 93
CONCEPTOS BSICOS
Definicin:
Los arreglos conocidos tambin como arrays, son estructuras de datos que permiten
almacenar ms de un dato del mismo tipo a la vez. Es decir, un arreglo contiene un conjunto
de datos, todos del mismo tipo. Un arreglo puede almacenar un conjunto limitado de datos.
Cada dato perteneciente al arreglo se almacena en una posicin y puede ser mostrado,
modificado o eliminado.
Ventajas:
Los datos estn almacenados en una sola estructura de datos siendo ms fcil el
acceso a los mismos.
Se utiliza un nico nombre (nombre del arreglo) para referirse al conjunto de datos
almacenados en el arreglo. Esto nos permite reducir el uso de variables y constantes.
Al igual que otras estructuras de datos (como las variables y constantes), los arreglos
tienen un tiempo de vida, por lo que pueden ser considerados como globales o
locales.
Desventajas:
Pg. 94
Definicin:
Los arreglos unidimensionales conocidos tambin como vectores o registros, son
estructuras de datos que permiten almacenar ms de un dato del mismo tipo a la vez. Es
decir, un vector contiene un conjunto de datos, todos del mismo tipo, a los cuales se puede
acceder a travs de un ndice.
Representacin grfica:
A continuacin se muestra la representacin grfica de un arreglo unidimensional llamado
nombre:
nombre
X0
X1
X2
...
X I-1
...
i -1
Donde:
nombre
X0...X i -1
i
=
=
=
Declaracin:
Para declarar un arreglo unidimensional es necesario, en primer lugar, definir un nombre.
Para definir un nombre de un arreglo unidimensional se siguen las mismas reglas utilizadas
para la definicin de nombres de variables y constantes.
En segundo lugar, se debe determinar qu tipo de dato podr almacenar el arreglo
unidimensional. Un arreglo unidimensional slo puede almacenar datos del mismo tipo. Los
tipos de datos vlidos para declarar un arreglo unidimensional son los mismos tipos de datos
vlidos definidos para declarar variables y constantes.
En general, para declarar un arreglo unidimensional se utiliza el siguiente formato :
En Java:
TipoDeDato arreglo[ ] ;
En Pseudocdigo y Diagrama de Flujo:
TipoDeDato[ ] arreglo;
Pg. 95
Donde TipoDeDato debe ser un tipo de arreglo o tipo de dato vlido y arreglo es el
nombre del arreglo unidimensional (puede existir ms de un arreglo, los cuales sern
separados por comas).
Creacin:
Para crear un arreglo unidimensional, es necesario que el arreglo unidimensional
previamente haya sido declarado, tal y como se explic anteriormente.
Antes de crear un arreglo unidimensional se debe determinar cul va ser el tamao del
mismo. Es decir, cul va a ser la cantidad total de datos que se podr almacenar.
Para crear un arreglo unidimensional se utiliza el siguiente formato :
En Java:
arreglo = new TipoDeDato [tamao] ;
En Pseudocodigo y Diagrama de Flujo:
CREAR arreglo[tamao]
Donde TipoDeDato debe ser un tipo de arreglo unidimensional o tipo de dato vlido y
arreglo es el nombre del arreglo.
El operador new nos permite crear un arreglo unidimensional. Cuando se crea un arreglo
unidimensional con el operador new, se debe indicar el tamao, es decir cuntos datos podr
almacenar.
Es importante mencionar que el tipo de dato utilizado para crear un arreglo unidimensional
deber ser el mismo tipo de dato con el cual se declar y que para crearlo es necesario
especificar un ndice.
Pg. 96
para
declarar
crear
arreglos
En Java:
TipoDeDato arreglo[ ] = new TipoDeDato [tamao];
Donde TipoDeDato debe ser un tipo de arreglo unidimensional o tipo de dato vlido y
arreglo es el nombre del arreglo unidimensional.
Utilizando este formato se declara y crea el arreglo unidimensional en forma directa (esto es
conocido como Definicin de un arreglo).
Inicializacin:
Cuando se crea un arreglo unidimensional utilizando el operador new es recomendable,
aunque no necesario, inicializar todas las posiciones del mismo. Inicializar todas las
posiciones de un arreglo unidimensional significa asignar un valor a cada posicin con la
finalidad de evitar que se produzca un error, si se intenta acceder a una posicin del arreglo
unidimensional que todava no contiene un dato.
Generalmente, los arreglos numricos (tipo NUMERO) se inicializan con cero (0), los arreglos
lgicos (tipo LOGICO) o booleanos se inicializan con false, los arreglos de caracteres con 0 y
los arreglos de objetos con null.
Ingreso de datos:
Despus de crear un arreglo unidimensional, inicialice o no el arreglo unidimensional, se
debern ingresar datos.
Es necesario que se ingresen datos a todas las posiciones del arreglo unidimensional. Si no
se ingresan datos a todas las posiciones del arreglo unidimensional deber asegurarse de
inicializarlo o en su defecto de mantener un adecuado control de las posiciones que tienen
datos almacenados y aquellas que no. Recuerde que tratar de acceder a una posicin que no
tiene un dato o que no ha sido inicializada, produce un error que ocasiona que se interrumpa
la ejecucin del programa.
Pg. 97
Definicin:
Los arreglos bidimensionales conocidos tambin como matrices o tablas, son estructuras
de datos que permiten almacenar ms de un dato del mismo tipo a la vez. Es decir, una
matriz contiene un conjunto de datos, todos del mismo tipo, a los cuales se puede acceder a
travs de dos ndices.
Representacin grfica:
A continuacin se muestra la representacin grfica de un arreglo bidimensional llamado
nombre:
nombre
Columnas
Filas
X 0,0
X 0,1
X 0,2
X 1,0
X 2,0
i-1
X i-1,0
j-1
X 0,j -1
X i-1,j -1
(i, j)
Donde:
nombre
X0,0...Xi-1, j -1
i*j
=
=
=
Nombre de la matriz.
Datos almacenados en la matriz.
Tamao de la matriz.
Es importante indicar que para declarar, crear, inicializar e ingresar datos en un arreglo
bidimensional o matriz se siguen las mismas reglas definidas para los arreglos
unidimensionales o vectores. La diferencia radica en el nmero de ndices que se utilizarn.
Pg. 98
ARREGLOS EN PARALELO
Introduccin:
Cuando se plantean soluciones a diversos problemas es necesario utilizar variables, vectores
y matrices en forma simultnea para almacenar los datos. Es decir, en una solucin se puede
utilizar algunas variables, un vector, dos vectores o muchos vectores. Tambin, se puede
utilizar variables, un vector y una matriz, o dos vectores y una matriz. En trminos generales
se puede afirmar que en una solucin se utilizan variables, vectores y matrices en forma
simultnea y en el nmero que se necesiten. Esto va a depender de la complejidad y tipo de
problema que se necesite resolver.
Cuando en una solucin se utiliza ms de un arreglo y el orden en que se disponen los datos
entre los arreglos tiene un significado, se les denomina vectores paralelos.
Ejemplos:
En la siguiente Grfica de Estructura de Datos se utiliza una variable y dos vectores en forma
simultnea (en paralelo). En la variable (numTrab) se almacena el nmero de trabajadores y
con este valor se crean los dos vectores (los arreglos en paralelo deben tener el mismo
tamao). En uno de los vectores (nombre[ ]) se almacenan los nombres de todos los
trabajadores y en el otro vector (sueldo[ ]) se almacenan sus respectivos sueldos. Se puede
observar que un dato almacenado en una posicin de un vector est relacionado con el dato
almacenado en la misma posicin del otro vector.
Dados los vectores:
nombre
sueldo
Danae
1000
.
:
.
:
1
2
3
numTrab - 1
numTrab
(String)
(double)
( int )
La pregunta lgica que se pueden formular sera la siguiente: por qu en vez de crear dos
vectores en paralelo no creamos una matriz con dos columnas?, y la respuesta sera que en
una matriz solo se pueden almacenar datos del mismo tipo, mientras que usando dos
vectores en paralelo se pueden almacenar datos de diferente tipo. En el planteamiento de la
solucin anterior en uno de los vectores se almacenan datos de tipo TEXTO mientras que en
el otro vector se almacenan datos de tipo NUMERO.
Pg. 99
En la siguiente Grfica de Estructura de Datos se utiliza una variable y tres vectores en forma
simultnea (en paralelo). En la variable (numSoc) se almacena el nmero de socios de un
club y con este valor se crean los tres vectores. En uno de los vectores (nombre[ ]) se
almacenan los nombres de los socios, en otro de los vectores (sexo[ ]) se almacena el sexo
de cada uno de los socios y en el tercer vector (edad[ ]) sus respectivas edades. Como
ejemplo, se puede observar, que todos los datos del socio Rodrigo estn almacenados en la
posicin cero de los vectores en paralelo.
nombre
sexo
edad
Rodrigo
12
.
:
.
:
.
:
2
3
numSoc - 1
numSoc
(String)
(char)
( int )
precio
PC (0)
PV (1)
.
:
.
:
0
1
2
3
.
:
numArt - 1
numArt
(String)
Donde:
(double)
( int )
Pg. 100
Un arreglo de gran tamao es aquel que se crea con una capacidad mayor a la cantidad de
datos que va a almacenar. Los arreglos de gran tamao se utilizan cuando no se puede
determinar desde un inicio cul debe ser el tamao con el que se debe crear un arreglo.
Observe la siguiente Grfica de Estructuras de Datos:
Dado el vector:
codigo
0
1
2
3
.
:
9999
numAlu = 0
(long)
( int )
nombre
sueldo
Danae
1000
.
:
.
:
1
2
3
99999
numTrab = 0
(String)
(double)
( int )
Pg. 101
Problema 014
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrolla la codificacin en JAVA de una solucin que permita ingresar y almacenar el
nombre y las notas de los alumnos, calcular y mostrar el promedio de todos los alumnos.
La solucin deber ser desarrollada dentro del mtodo main.
Etapa 03 - Diseo de la lgica.
nombre
notas
:
:
:
:
:
:
(double)
(String)
(double)
0
1
2
3
9999
numAlu = 0
(int)
Donde numAlu permite almacenar el nmero de alumnos cuyos datos se han almacenado.
Pg. 102
package dominioDeLaAplicacion;
import biblioteca.LE;
public class PrgPromedio {
Pg. 103
Problema 015
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrolle la codificacin en JAVA de una solucin que permita ingresar y almacenar el
cdigo, nombre y sueldo de todos los empleados de la universidad, calcular el sueldo
promedio.
La solucin deber ser desarrollada dentro del mtodo main.
Etapa 03 - Diseo de la lgica.
nombre
sueldo
:
:
:
:
:
:
(double)
(String)
(double)
0
1
2
3
9999
numEmp = 0
(int)
Donde numEmp permite almacenar el nmero de alumnos cuyos datos se han almacenado.
Pg. 104
package dominioDeLaAplicacion;
import biblioteca.LE;
public class PrgUniversidad {
public static void main(String[] args) {
int numEmp=LE.leerInt("Ingrese la cantidad de Empleados :");
double codigo[]=new double[numEmp];
double sueldo[]=new double[numEmp];
String nombre[]=new String[numEmp];
for(int r=0;r<numEmp;r++){
codigo[r]=LE.leerDouble("Ingrese Cdigo del "+(r+1)+" :");
nombre[r]=LE.leerString("Ingrese nombre del "+(r+1)+" :");
sueldo[r]=LE.leerDouble("Ingrese el sueldo del "+(r+1)+" :");
}
double prom=0;
for(int i=0;i<numEmp;i++){
prom+=sueldo[i];
}
LE.mostrarInformacion("El promedio de sueldos de todos los empleados es :
"+Math.round(((double)prom/numEmp)*100)/100.0);
}
}
Pg. 105
Problema 016
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrolle la codificacin en JAVA de una solucin que permita ingresar y almacenar el
cdigo, nombre y las tres notas de todos los alumnos, calcular y mostrar el promedio de cada
alumno.
La solucin deber ser desarrollada dentro del mtodo main.
Etapa 03 - Diseo de la lgica.
nombre
notas
N1
N2
N3
0
1
2
3
:
:
:
:
:
:
(Double)
(lint)
(double)
:
:
9999
numAlu = 0
N1 = Es la primera nota.
Donde:
N2 = Es la segunda nota.
N3 = Es la tercera nota.
Donde numAlu permite almacenar el nmero de alumnos cuyos datos se han almacenado.
Pg. 106
(int)
package dominioDeLaAplicacion;
import biblioteca.LE;
public class PrgPromedio2 {
for(int r=0;r<numAlum;r++){
codigo[r]=LE.leerDouble("Ingrese Codigo del "+(r+1)+" alumno :");
nombre[r]=LE.leerString("Ingrese nombre del "+(r+1)+" alumno:");
for(int j=0;j<3;j++){
notas[r][j]=LE.leerDouble("Ingrese la "+(j+1)+" nota del "+(r+1)+
" alumno : ");
}
}
String promedios="El promedio de todos los alumnos es : \n";
for(int i=0;i<numAlum;i++){
double prom=0;
for(int j=0;j<3;j++){
prom+=notas[i][j];
}
promedios+=(i+1)+") "+nombre[i]+" -->
"+Math.round((prom/3)*100)/100.0+"\n";
}
LE.mostrarInformacion(promedios);
}
}
Pg. 107
Problema 017
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrolle la codificacin en JAVA de una solucin que permita ingresar y almacenar el
cdigo, nombre y todas las notas de los alumnos de un saln de clase, calcular y mostrar el
promedio de cada alumno y el promedio general del saln.
La solucin deber ser desarrollada dentro del mtodo main.
Etapa 03 - Diseo de la lgica.
nombre
notas
0
0
1
2
3
:
:
:
:
(Double)
(lint)
:
:
:
:
numNotas - 1
:
:
:
:
:
:
:
:
9999
numAlu = 0
( (double)
Donde:
Donde numAlu permite almacenar el nmero de alumnos cuyos datos se han almacenado.
Donde numNotas permite almacenar el nmero de notas de cada alumno.
Pg. 108
(int)
for(int r=0;r<numAlum;r++){
codigo[r]=LE.leerDouble("Ingrese Codigo del "+(r+1)+" alumno :");
nombre[r]=LE.leerString("Ingrese nombre del "+(r+1)+" alumno:");
for(int j=0;j<numNotas;j++){
notas[r][j]=LE.leerDouble("Ingrese la "+(j+1)+" nota del "+(r+1)+" alumno :
");
}
}
String promedios="El promedio de todos los alumnos es : \n";
for(int i=0;i<numAlum;i++){
double prom=0;
for(int j=0;j<numNotas;j++){
prom+=notas[i][j];
}
promedios+=(i+1)+") "+nombre[i]+" -->
"+Math.round((prom/3)*100)/100.0+"\n";
}
LE.mostrarInformacion(promedios);
}
}
Pg. 109
Introduccin:
El proceso de manejo de datos en arreglos, implica desarrollar operaciones bsicas que son
fundamentales para toda etapa de solucin de un problema. Es por ello que seguidamente
explicaremos los principales procesos que implican el ingreso de datos, la insercin,
eliminacin, modificacin y su visualizacin.
Introduccin:
El ingreso de datos es esencial en todo proceso que implique el registro y manejo de los
datos, ya que mediante dicho proceso podemos realizar el ingreso de todos los datos para su
almacenamiento, ya sea en una estructura de datos interna como en una base de datos.
Definicin:
El ingreso de datos consiste en insertar un determinado elemento en una estructura de
datos especfica para que posteriormente dicho elemento pueda ser utilizado de acuerdo a los
requerimientos del usuario. El ingreso de datos es el primer paso para estructurar soluciones
que posteriormente permitan manejar dichos datos y mostrar informacin adecuada y
oportuna para la toma de decisiones.
Ejemplos:
Pg. 110
Un ejemplo prctico de ingreso de datos en una estructura de tipo arreglo, se realiza a travs
de la siguiente secuencia:
Primero se determina la cantidad de datos que se van a
registrar, esto es importante para crear el tamao del arreglo.
Entonces, sea el vector:
notas
numAlu = 10.
notas
12
0
numAlu = 10.
15
14
17
19
08
13
16
17
13
numAlu = 10.
Pg. 111
nombres
notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
numAlu = 10
(long)
(String)
(double)
(int)
Tenemos que recordar que el arreglo tuvo que ser creado con un tamao del numAlu, que
segn la estructura es de 10 registros.
Pg. 112
Tambin podemos implementar los mtodos que sirven para validar los datos de ingreso,
como se puede ver en la siguiente cuadro.
do{
notas[i]=LE.leerLong ( Ingrese la nota del alumno: + (i+1) );
if (notas[i] < 0 || notas[i] > 20 ){
LE.mostrarError ( Lo sentimos, el nombre ingresado es incorrecto );
}
} while (notas[i] < 0 || notas[i] > 20 );
Existen tambin otras formas para realizar el ingreso de datos. Sin embargo la lgica que
se tiene que desarrollar resulta la misma, es por ello que el usuario puede escoger el tipo
de mtodo que utilizar tomando en cuenta sus principales requerimientos.
Pg. 113
Introduccin:
La visualizacin de datos consiste en mostrar los datos de tal forma que tengan un significado
adecuado para el usuario. Es decir, los datos mostrados adecuadamente se convierten en
informacin que puede ser utilizada por el usuario para la toma de decisiones y el control de
la organizacin de ser el caso. La visualizacin de datos tambin sirve para verificar que los
datos que se estn almacenando sean los correctos.
Definicin:
El proceso de visualizar datos o proceso de mostrar datos consiste en mostrar el resultado
de un conjunto de datos de tal forma que pueda tener un significado para el usuario y pueda
ser utilizado para la toma de decisiones, el control, u otras operaciones.
En el presente captulo se implementarn mtodos de visualizacin utilizando previamente
una variable de tipo String que almacenar los datos ingresados previamente.
Posteriormente, utilizaremos la clase LE para mostrar los datos contenidos en la variable
String utilizada.
Ejemplos:
i=2
i=1
i=0
12
15
14
17
19
08
13
16
17
13
Pg. 114
nombres
notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
numAlu = 10
(long)
(String)
(double)
(int)
Pg. 115
BSQUEDA DE DATOS
Introduccin:
La recuperacin de los datos y su posterior transformacin en informacin constituyen uno de
los procesos ms importantes y comunes que debemos realizar cuando se procesan o
manipulan datos.
Es comn que trabajemos con grandes cantidades de datos almacenados en las Estructuras
de Datos y que generalmente sea necesario determinar si un valor est almacenado. A este
proceso se denomina bsqueda y se realiza para recuperar una pequea cantidad de los
datos almacenados.
Definicin:
La bsqueda de datos consiste en ubicar un determinado elemento, su posicin o ambos,
entre un conjunto de elementos almacenados en una estructura de datos especfica. Se dice
que la bsqueda es exitosa cuando el elemento buscado es encontrado, caso contrario, la
bsqueda es no exitosa o fallida.
En este punto trataremos la bsqueda de datos en arreglos unidimensionales (vectores). Es
importante que comprenda adecuadamente este concepto para que pueda aplicarlo sobre los
arreglos bidimensionales (matrices) y en otros tipos de estructuras de datos.
Ejemplos:
Pg. 116
Tipos:
El proceso de bsqueda de datos se puede realizar utilizando principalmente los siguientes
mtodos:
Existen tambin otros mtodos de bsqueda, entre los cuales podemos mencionar el mtodo de bsqueda por
transformacin de claves (Hashing).
Bsqueda por transformacin de claves (Hashing).
Es tambin conocido con el nombre de HASH o HASHING.
Este es uno de los mtodos de bsqueda ms eficiente y rpida, pero a la vez es el
ms complicado de desarrollar. Este mtodo no ser tratado en el presente texto, pero
se recomienda al lector su investigacin.
Pg. 117
Sea el vector:
Notas
3
10
11
13
15
17
19
numAlu = 10.
Pg. 118
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Pg. 119
PrgBuscarValorSec main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgBuscarValorSec {
public static void main ( String [ ] args ) {
int notas[ ], numAlu, valor, i ;
boolean estado = false ;
String mensaje ;
System.out.print ( "Ingrese el nmero de alumnos: " ) ;
numAlu = Lectura.leerInt ( ) ;
notas = new int[numAlu] ;
for ( i = 0; i < numAlu; i++) {
System.out.print ( "Ingrese la nota del alumno " + (i + 1) + ": " ) ;
notas[i] = Lectura.leerInt ( ) ;
}
System.out.println ( "Ingrese la nota a buscar: " ) ;
valor = Lectura.leerInt ( ) ;
for ( i = 0; i < numAlu; i++) {
if (notas[i] == valor) {
estado = true ;
break ;
}
}
if ( estado )
mensaje = "Valor encontrado" ;
else {
mensaje = "Valor no encontrado" ;
}
System.out.println ( mensaje ) ;
}
}
Pg. 120
Una variacin del ejemplo anterior nos permite buscar una nota y determinar la
posicin donde est almacenada dicha nota, si est es encontrada.
Algoritmo PrgBuscarPosicionSec
ENTRADA: numAlu, notas[ ], valor
SALIDA:
mensaje
INICIO
TEXTO mensaje
NUMERO notas[ ], numAlu, pos = -1, valor, i
LEER numAlu
CREAR notas[numAlu]
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Pg. 121
Observe que al final del algoritmo se muestra el contenido de la variable pos. Dicho
valor puede ser cero o mayor que cero, si el valor buscado fue encontrado
(conteniendo la posicin en la cual fue encontrado) o puede ser -1 si el valor buscado
no fue encontrado.
PrgBuscarPosicionSec main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgBuscarPosicionSec {
public static void main ( String [ ] args ) {
int notas[ ], numAlu = 0, valor, pos = -1, i ;
String mensaje ;
System.out.print ( "Ingrese el nmero de alumnos: ") ;
numAlu = Lectura.leerInt ( ) ;
notas = new int[numAlu] ;
for ( i = 0; i < numAlu; i++ ) {
System.out.print ( "Ingrese la nota del alumno " + (i + 1) + ": ") ;
notas[i] = Lectura.leerInt ( ) ;
}
System.out.println ( "Ingrese la nota a buscar: ") ;
valor = Lectura.leerInt ( ) ;
for ( i = 0; i < numAlu; i++ ) {
if (notas[i] == valor) {
pos = i ;
break ;
}
}
if ( pos >= 0 )
mensaje = "Valor encontrado en la posicin " + pos ;
else {
mensaje = "Valor no encontrado " ;
}
System.out.println (mensaje) ;
}
}
Pg. 122
Otra variacin de este ejemplo nos permite buscar una nota y determinar el nmero
de veces que dicha nota es encontrada.
Algoritmo PrgBuscarCantidadSec
ENTRADA: numAlu, notas[ ], valor
SALIDA:
mensaje
INICIO
TEXTO mensaje
NUMERO notas[ ], numAlu, cantidad = 0, valor, i
LEER numAlu
CREAR notas[numAlu]
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Pg. 123
PrgBuscarCantidadSec main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgBuscarCantidadSec {
public static void main ( String [ ] args ) {
int notas[ ], numAlu = 0, valor, cantidad = 0, i ;
String mensaje ;
System.out.print ( "Ingrese el nmero de alumnos: " ) ;
numAlu = Lectura.leerInt ( ) ;
notas = new int[numAlu] ;
for ( i = 0; i < numAlu; i++ ) {
System.out.print ( "Ingrese la nota del alumno " + (i + 1) + ": " ) ;
notas[i] = Lectura.leerInt ( ) ;
}
System.out.println ( "Ingrese la nota a buscar: " ) ;
valor = Lectura.leerInt ( ) ;
for ( i = 0; i < numAlu; i++ ) {
if ( notas[i] == valor ) {
cantidad ++ ;
}
}
if ( cantidad > 0 )
mensaje = "Valor encontrado " + cantidad + " veces" ;
else {
mensaje = "Valor no encontrado" ;
}
System.out.println (mensaje) ;
}
}
Pg. 124
Pg. 125
Pg. 126
Pg. 127
Pg. 128
Bsqueda Binaria
La Bsqueda Binaria se basa en la frase Divide y Vencers para buscar un determinado
valor en un vector. Este vector deber estar ordenado alfabticamente o numricamente
dependiendo del tipo de dato que contiene.
La Bsqueda Binaria comienza comparando el elemento central del arreglo de datos (vector)
con el valor buscado. Esto permite tener dos sublistas, una lista inferior (o lista izquierda) y
otra lista superior (o lista derecha). Si el elemento central coincide con el valor buscado
entonces la bsqueda termina. En caso contrario, se determina si el valor buscado puede
pertenecer a la lista inferior (lista izquierda) o a la lista superior (lista derecha) y se repite el
proceso utilizando el elemento central de la sublista seleccionada. La bsqueda contina
hasta que el valor buscado sea encontrado o hasta que la sublista consista en un solo
elemento que no sea igual al valor buscado.
La siguiente tabla compara la eficiencia de la bsqueda lineal y binaria para diferentes valores
de n (tamao del arreglo). La ventaja del mtodo de bsqueda binaria aumenta a medida
que el tamao del arreglo es mayor. Esto representa una impresionante mejora en el
rendimiento respecto al mtodo de bsqueda lineal.
Bsqueda Lineal
Bsqueda Binaria
10
10
100
100
1000
1000
10
10000
10000
14
1000000
1000000
20
Pg. 129
Suponga que tenemos el siguiente arreglo de notas con numAlu = 10 (donde numAlu es el
nmero de elementos del arreglo notas):
Sea el vector:
notas
3
10
11
13
15
17
19
numAlu = 10.
bajo = 0.
alto = numAlu - 1 = 9.
central = ( bajo + alto ) / 2 = 4.
Entonces se determina que el nmero central es el 10 y que este nmero es menor que la
nota buscada (nota=15) por lo que la nota puede estar en la sublista superior (sublista
derecha).
Ahora se trabaja con la sublista superior (sublista derecha) y se determina nuevamente sus
lmites y el nuevo punto central:
bajo = central + 1 = 5.
alto = numAlu - 1 = 9.
central = ( bajo + alto ) / 2 = 7.
Y se determina que la nota central es ahora 15 y que es igual al valor buscado (nota=15) por
lo que se finaliza el mtodo y se da como resultado que la bsqueda ha sido exitosa y que el
nmero buscado fue encontrado en la posicin 7 del arreglo notas. En caso de no ser igual se
contina con el mtodo hasta que se encuentre el valor o se tenga una sublista con un solo
elemento y el valor de este elemento sea diferente al valor buscado.
Pg. 130
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
alto = numAlu - 1
central = (bajo+alto) DIVIDIR 2
COMENTARIO Ingresar datos al vector notas
DESDE i = 0 HASTA i = numAlu - 1 INCREMENTA 1
LEER notas[i]
FINDESDE
COMENTARIO Ingreso del valor a buscar
LEER valor
COMENTARIO Bsqueda binaria. Bsqueda de la posicin de un valor en el
vector notas
MIENTRAS ( ( bajo =< alto ) AND ( A[central] <> valor ) )
SI ( valor < notas[central] )
ENTONCES
alto = central -1
SINO
bajo = central + 1
FINSI
central = ( bajo + alto ) DIVIDIR 2
FINMIENTRAS
SI ( valor = notas[central] )
ENTONCES
pos = central
FINSI
SI ( pos >= 0 )
ENTONCES
mensaje = Valor encontrado en la posicin + pos
SINO
mensaje = Valor no encontrado
FINSI
ESCRIBIR mensaje
FIN
Pg. 131
PrgBuscarPosicionBin main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgBuscarPosicionBin {
public static void main ( String [ ] args ) {
int notas[ ], numAlu, pos = -1 ;
int bajo = 0, alto, central, valor = 0 ;
String mensaje ;
System.out.print ( "Ingrese el nmero de alumnos: " ) ;
numAlu = Lectura.leerInt ( ) ;
notas = new int[numAlu] ;
alto = numAlu - 1 ;
central = (bajo + alto) / 2 ;
for ( int i = 0; i < numAlu; i++ ) {
System.out.print ( "Ingrese la nota del alumno " + (i + 1) + ": " ) ;
notas[i] = Lectura.leerInt ( ) ;
}
System.out.println ( "Ingrese la nota a buscar: " ) ;
valor = Lectura.leerInt ( ) ;
while ( ( bajo <= alto && notas[central] != valor ) ) {
if ( valor < notas[central] ) {
alto = central - 1 ;
} else {
bajo = central + 1 ;
}
central = ( bajo + alto ) / 2 ;
}
if ( valor == notas [central] ) {
pos = central ;
}
if ( pos >= 0 ) {
mensaje = "Valor encontrado en la posicin " + pos ;
} else {
mensaje = "Valor no encontrado" ;
}
System.out.print ( mensaje ) ;
}
}
Pg. 132
Pg. 133
Pg. 134
Pg. 135
ORDENAMIENTO DE DATOS
Introduccin:
La ordenacin de los datos y su posterior transformacin en informacin constituyen uno de
los procesos bsicos y necesarios que debemos realizar cuando se procesan o manipulan
datos. Podemos afirmar que los datos se ordenan de diferente manera y utilizando diferentes
mtodos con la finalidad de poder acceder a los datos lo ms rpido posible.
Es comn que trabajemos con grandes cantidades de datos almacenados en las Estructuras
de Datos y que sea necesario ordenar previamente los datos almacenados antes de ejecutar
otros procesos.
Definicin:
La ordenacin o clasificacin de datos es la operacin de organizar un conjunto de datos en
algn orden dado, tal como creciente o decreciente en datos numricos, o bien en orden
alfabtico directo o inverso. Estructuras de datos tpicas que suelen requerir ordenacin son:
lista de nmeros, archivos de clientes de banco, nombres de una agenda telefnica, etc. En
sntesis, la ordenacin significa poner los datos en orden (orden numrico para los nmeros y
alfabtico para los caracteres) ascendente o descendente.
La ordenacin de los datos es una operacin tan frecuente en programas de computadora
que una gran cantidad de algoritmos se han diseado para clasificar listas de elementos con
eficacia y rapidez. La eleccin de un determinado algoritmo depende del tamao de la
estructura de datos a clasificar, el tipo de datos y la cantidad de memoria disponible.
Categoras:
Los mtodos de ordenacin se dividen en dos categoras:
Pg. 136
Los algoritmos de ordenacin interna se explicarn a travs del uso de vectores (arreglos
unidimensionales) y se pueden extender para poder aplicarlos al uso de matrices (arreglos
bidimensionales), considerando la ordenacin respecto a una fila o columna (o ambas de ser
el caso).
Los algoritmos de ordenacin interna ms utilizados y que sern tratados a continuacin son:
Pg. 137
Ejemplo;
Sea el vector:
notas
20
18
13
17
19
numAlu = 5.
El vector notas contiene 5 elementos. Dichos elementos son 20, 18, 13, 17, 19 y estn
almacenados en las posiciones 0, 1, 2, 3 y 4 respectivamente.
Pg. 138
18
13
17
19
13
18
20
17
19
13
18
20
17
19
17
20
18
19
13
17
20
18
19
17
18
20
19
Pg. 139
13
17
18
20
19
17
18
19
20
Pg. 140
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
LEER numAlu
CREAR notas[numAlu]
COMENTARIO Ingresar datos al vector notas
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
LEER notas[i]
FINDESDE
COMENTARIO Ordenacin por seleccin
NUMERO k, j, nota
DESDE i = 0 HASTA i = numAlu - 2 INCREMENTA 1
nota = notas[i]
k=i
DESDE j = i + 1 HASTA j = numAlu - 1 INCREMENTA 1
SI ( notas[j] < nota )
ENTONCES
k=j
nota = notas[k]
FINSI
FINDESDE
notas[k] = notas[i]
notas[i] = nota
FINDESDE
COMENTARIO Mostrar datos ordenados
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
ESCRIBIR notas[i]
FINDESDE
FIN
Pg. 141
PrgOrdenacionSeleccion main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenacionSeleccion {
public static void main ( String [ ] args ) {
int notas[ ], numAlu, i ;
System.out.print ( "Ingrese el nmero de alumnos: " ) ;
numAlu = Lectura.leerInt ( ) ;
notas = new int[numAlu] ;
for ( i = 0; i < numAlu; i++ ) {
System.out.print ( "Ingrese la nota del alumno " + (i + 1) + ": " ) ;
notas[i] = Lectura.leerInt ( ) ;
}
int k, j, nota ;
for ( i = 0; i < numAlu; i++ ) {
nota = notas[i] ;
k=i;
for ( j = i + 1; j < numAlu; j++ ) {
if ( notas[j] < nota ) {
k=j;
nota = notas[k] ;
}
}
notas[k] = notas[i] ;
notas[i] = nota ;
}
for ( i = 0; i < numAlu; i++ ) {
System.out.println ( "La nota " + (i+1) + " es: " + notas[i] ) ;
}
}
}
Pg. 142
Este mtodo de ordenacin es casi tan sencillo como el mtodo de ordenacin por seleccin,
y probablemente ms flexible. Se utiliza con arreglos pequeos y medianos, y funciona de la
siguiente manera:
Primero se toma el segundo elemento del arreglo y se inserta en el
lugar que le corresponde entre los dos primeros elementos; despus,
se toma el tercer elemento del arreglo y se inserta en el lugar que le
corresponde entre los tres primeros elementos, continuando de esta
forma hasta que se tome el ltimo elemento y se inserte en el lugar
que le corresponda entre todos los elementos del arreglo.
Podemos afirmar que este algoritmo funciona tomando cada
elemento del arreglo empezando desde el segundo elemento e
insertndolo en el lugar que le corresponda entre los elementos ya
insertados.
Ejemplo;
Sea el vector:
notas
20
18
13
17
19
numAlu = 5.
El vector notas contiene 5 elementos. Dichos elementos son 20, 18, 13, 17, 19 y estn
almacenados en las posiciones 0, 1, 2, 3 y 4 respectivamente.
Pg. 143
20
18
18
20
18
20
13
13
18
20
13
18
20
17
Pg. 144
13
17
18
20
13
17
18
20
19
13
17
18
19
20
Pg. 145
Algoritmo PrgOrdenacionInsercion
ENTRADA: numAlu, notas[ ]
SALIDA:
notas[ ]
INICIO
NUMERO notas[ ], numAlu, i
LEER numAlu
CREAR notas[numAlu]
COMENTARIO Ingresar datos al vector notas
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
LEER notas[i]
FINDESDE
COMENTARIO Ordenacin por insercin
NUMERO j, nota, sw
DESDE i = 1 HASTA i = numAlu - 1 INCREMENTA 1
sw = 0
nota = notas[i]
j=i
MIENTRAS ( ( j > 0 ) AND ( sw = 0 ) )
SI ( nota < notas[ j -1 ] )
ENTONCES
notas[j] = notas[ j -1 ]
j = j -1
SINO
sw = 1
FINSI
notas[j] = nota
FINMIENTRAS
FINDESDE
COMENTARIO Mostrar datos ordenados
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
ESCRIBIR notas[i]
FINDESDE
FIN
Pg. 146
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Este algoritmo puede ser mejorado eliminando la variable sw, tal y como se muestra
a continuacin:
Algoritmo PrgOrdenacionInsercion
ENTRADA: numAlu, notas[ ]
SALIDA:
notas[ ]
INICIO
NUMERO notas[ ], numAlu, i
LEER numAlu
CREAR notas[numAlu]
COMENTARIO Ingresar datos al vector notas
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
LEER notas[i]
FINDESDE
COMENTARIO Ordenacin por insercin
NUMERO j, nota
DESDE i = 1 HASTA i = numAlu - 1 INCREMENTA 1
nota = notas[i]
j=i
MIENTRAS ( j > 0 )
SI ( nota < notas[ j -1 ] )
ENTONCES
notas[j] = notas[ j -1 ]
j = j -1
SINO
j=0
FINSI
notas[j] = nota
FINMIENTRAS
FINDESDE
COMENTARIO Mostrar datos ordenados
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
ESCRIBIR notas[i]
FINDESDE
FIN
Pg. 147
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Algoritmo PrgOrdenacionInsercion
ENTRADA: numAlu, notas[ ]
SALIDA:
notas[ ]
INICIO
NUMERO notas[ ], numAlu, i
LEER numAlu
CREAR notas[numAlu]
COMENTARIO Ingresar datos al vector notas
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
LEER notas[i]
FINDESDE
COMENTARIO Ordenacin por insercin
NUMERO j, tempNota
DESDE i = 1 HASTA i = numAlu - 1 INCREMENTA 1
tempNota = notas[i]
j = i-1;
MIENTRAS ( j >= 0 && tempNotas < notas[ j] )
notas[j+1] = notas[ j]
notas[j]=tempNotas;
j = j -1
FINMIENTRAS
notas[j+1] = tempNotas
FINDESDE
COMENTARIO Mostrar datos ordenados
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
ESCRIBIR notas[i]
FINDESDE
FIN
Pg. 148
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
PrgOrdenacionInsercion main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenacionInsercion {
public static void main ( String [ ] args ) {
int notas[], numAlu, i ;
numAlu = LE.leerInt( "Ingrese el nmero de alumnos: " ) ;
notas = new int[numAlu] ;
for ( i = 0; i < numAlu; i++ ) {
notas[i] = LE.leerInt( "Ingrese la nota del alumno " + (i + 1) + ": " ) ;
}
int j, tempNotas ;
for ( i = 1; i < numAlu; i++ ) {
tempNotas = notas[i] ;
j=i-1;
while (j>=0 && tempNotas<notas[j] ) {
notas[j+1]=notas[j];
notas[j]=tempNotas;
j--;
}
notas[j+1] = tempNotas ;
}
for ( i = 0; i < numAlu; i++ ) {
System.out.println ( "La nota " + (i+1) + " es: " + notas[i] ) ;
}
}
}
Pg. 149
Pg. 150
Algoritmo PrgOrdenacionIntercambio
ENTRADA: numAlu, notas[ ]
SALIDA:
notas[ ]
INICIO
NUMERO notas[ ], numAlu, i
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
LEER numAlu
CREAR notas[numAlu]
COMENTARIO Ingresar datos al vector notas
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
LEER notas[i]
FINDESDE
COMENTARIO Ordenacin por insercin
NUMERO j, nota
DESDE i = 0 HASTA i = numAlu - 2 INCREMENTA 1
DESDE j = i + 1 HASTA j = numAlu - 1 INCREMENTA 1
SI ( notas[i] > notas[j] )
ENTONCES
nota = notas[i]
notas[i] = notas[j]
notas[j] = nota
FINSI
FINDESDE
FINDESDE
COMENTARIO Mostrar datos ordenados
DESDE i = 0 HASTA numAlu 1 INCREMENTA 1
ESCRIBIR notas[i]
FINDESDE
FIN
Este mtodo ser utilizado en el presente texto para el desarrollo de las soluciones.
Realice sus propias observaciones.
Pg. 151
PrgOrdenacionIntercambio main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenacionIntercambio {
public static void main ( String [ ] args ) {
int notas[ ], numAlu, i ;
System.out.print ( "Ingrese el nmero de alumnos: " ) ;
numAlu = Lectura.leerInt ( ) ;
notas = new int[numAlu] ;
for ( i = 0; i < numAlu; i++ ) {
System.out.print ( "Ingrese la nota del alumno " + (i + 1) + ": " ) ;
notas[i] = Lectura.leerInt ( ) ;
}
int j, nota ;
for ( i = 0; i < numAlu - 1; i++ ) {
for ( j = i+1; j < numAlu; j++ ) {
if ( notas[i] > notas[j] ) {
nota = notas[i] ;
notas[j] = notas[ j-1 ] ;
notas[i] = nota ;
}
}
}
for ( i = 0; i < numAlu; i++ ) {
System.out.println ( "La nota " + (i+1) + " es: " + notas[i] ) ;
}
}
}
Esta clase permite ordenar el arreglo notas de menor a mayor. En caso se necesite
ordenarlo de mayor a menor slo deber modificar la condicin lgica tal y como se
muestra a continuacin:
if ( notas[i] < notas[j] ) {
Pg. 152
PrgOrdenacionIntercambio main ( )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgOrdenacionIntercambio {
public static void main ( String [ ] args ) {
int numAlu, i ;
String nombres[], nombre ;
System.out.print ( "Ingrese el nmero de alumnos: " ) ;
numAlu = Lectura.leerInt ( ) ;
nombres = new String[numAlu] ;
for ( i = 0; i < numAlu; i++ ) {
System.out.print ( "Ingrese el nombre del alumno " + (i + 1) + ": " ) ;
nombres[i] = Lectura.leerString ( ) ;
}
int j ;
for ( i = 0; i < numAlu - 1; i++ ) {
for ( j = i+1; j < numAlu; j++ ) {
if ( nombres[i].compareToIgnoreCase ( nombres[j]) > 0 ) {
nombre = nombres[i] ;
nombres[j] = nombres[ j-1 ] ;
nombres[i] = nombre ;
}
}
}
for ( i = 0; i < numAlu; i++ ) {
System.out.println ( "El nombre " + (i+1) + " es: " + nombres[i] ) ;
}
}
}
Observe el uso del mtodo compareToIgnoreCase ( ) de la clase String de Java.
Esta clase permite ordenar el arreglo nombres alfabticamente en forma ascendente.
En caso se necesite ordenarlo descendentemente slo deber modificar la condicin
lgica tal y como se muestra a continuacin:
if ( nombres[i].compareToIgnoreCase( notas[j] ) < 0 ) {
Pg. 153
Se toma un elemento arbitrario del vector, al que vamos a denominar pivote (p).
Se divide el vector de tal forma que todos los elementos a la izquierda del pivote
sean menores que l, y los elemento de la derecha mayores.
Ejemplo;
Sea el vector:
notas
6
numAlu = 7
El vector notas contiene 7 elementos. Dichos elementos son 6, 4, 8, 7, 3, 2, 5 y estn
almacenados en las posiciones 0, 1, 2, 3, 4, 5, 6 respectivamente. En el ejemplo
vamos a ubicar al pivote y lo identificaremos con la letra p y los ndices con las letras i y
j respectivamente.
Pg. 154
3
4
Pg. 155
3
4
p
j
3
4
3
4
i
2
Pg. 156
Mtodo OrdenarEnQuickSort
..
package dominioDeLaAplicacion;
import biblioteca.*;
public class PrgOrdenamientoQuickSort {
int notas[];
int numAlu;
public PrgOrdenamientoQuickSort ( ) {
numAlu = LE.leerInt("Ingrese la cantidad de alumnos: ");
notas = new int[numAlu];
}
public static void main(String[] args) {
PrgOrdenamientoQuickSort obj = new PrgOrdenamientoQuickSort ( );
obj.IngresarNumeros ( );
obj.Mostrar ( );
obj.OrdenarEnQuickSort(0, ((obj.numAlu)-1));
LE.mostrarInformacion ("La Lista Ordenada es");
obj.Mostrar ( );
}
public void IngresarNumeros ( ) {
for (int i = 0; i < numAlu; i++) {
notas[i] = LE.leerInt("Ingrese la nota del alumno nro: " + (i + 1));
}
}
Pg. 157
Mtodo OrdenarEnQuickSort
..
Pg. 158
RECURSIVIDAD
Definicin:
El trmino recursividad es la forma en la cual se especifica un proceso basado en su propia
definicin.
La recursin permite definir un objeto (problemas, estructuras de datos) en trminos de s
mismo. Casos tpicos de estructuras de datos definidas de manera recursiva son los rboles y
las listas ligadas. Algunos ejemplos de problemas que se definen recursivamente son el
factorial de un nmero, la serie de Fibonacci, etc.
Ejemplos:
Desarrollar un mtodo que retorne el factorial de un nmero utilizando recursividad:
Llamada recursiva al
mtodo factorial
Pg. 159
Problema 018
Etapa 01 - Descripcin del problema.
Enunciado:
Utilizando mtodos y un men de opciones desarrolla la codificacin
solucin que permita :
en JAVA de una
nombre
notas
:
:
:
:
:
:
(double)
(String)
(double)
0
1
2
3
9999
numAlu = 0
(int)
Donde numAlu permite almacenar el nmero de alumnos cuyos datos se han almacenado.
Pg. 160
Pg. 161
Clase PrgAlumnos
case 3:
if ( sw )
buscar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 4:
if ( sw )
ordenar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 5:
if ( sw )
mostrar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 6:
break ;
default:
LE.mostrarError ( " Opcin no vlida Reintente! " ) ;
}
} while ( opc != 6 ) ;
}
public void ingresar () {
int rpta = 0 ;
do {
codigo[numAlu] = LE.leerLong ( " Cdigo del alumno " + ( numAlu + 1)
+":
");
nombre[numAlu] = LE.leerString ( " Nombre del alumno " + ( numAlu +
1) + "
:");
do {
nota[numAlu] = LE.leerDouble ( " Nota del alumno " + ( numAlu + 1 )
+":
");
if ( nota[numAlu] < 0 || nota[numAlu] > 20 ) {
LE.mostrarError ( " Error...Notas ingresada Errnea " ) ;
}
} while ( nota[numAlu] < 0 || nota[numAlu] > 20 ) ;
numAlu++ ;
rpta = LE.mostrarPreguntaOpcion2 ( " Desea continuar ? " ) ;
} while ( rpta == 0 ) ;
}
public void calcular ( ) {
double prom = 0, suma = 0 ;
for ( int i=0; i<numAlu; i++ ) {
suma += nota[i] ;
}
prom = suma / numAlu ;
prom = Math.round ( prom*100 ) / 100.0 ;
Pg. 162
Clase PrgAlumnos
LE.mostrarResultado ( " El promedio del saln es: " + prom ) ;
}
public void buscar ( ) {
long aux = 0 ;
aux = LE.leerLong( " Ingrese el codigo del alumno que desea modificar: " )
;
for( int i=0; i<numAlu; i++ ) {
if (codigo[i] == aux){
LE.mostrarInformacion("Datos del Alumno: "+"codigo:"+ codigo[i]+"
nombre: "+ nombre[i]+" nota: "+ nota[i]);
break;
}
}
LE.mostrarInformacion( " Error...Codigo no Encontrado " );
}
public void ordenar ( ){
for(int i=0;i<numAlu-1;i++)
for(int j=i+1;j<numAlu;j++)
if(nota[i] > nota[j]){
String aux1 = nombre[i];
long aux2 = codigo[i];
double aux3 = nota[i];
nombre[i] = nombre[j];
codigo[i] = codigo[j];
nota[i] = nota[j];
nombre[j]=aux1;
codigo[j]=aux2;
nota[j]=aux3;
}
}
public void mostrar ( ) {
String total = " " ;
for ( int i=0; i<numAlu; i++ ) {
total += "\n" + codigo[i] + "/" + nombre[i] + "/" + nota[i] ;
}
LE.mostrarResultado ( " Los datos de los alumnos son: " + "
}
}
Pg. 163
" + total ) ;
Problema 019
Etapa 01 - Descripcin del problema.
Enunciado:
Utilizando mtodos y un men de opciones desarrolla la codificacin
solucin que permita :
en JAVA de una
nombre
sueldo
:
:
:
:
:
:
(double)
(String)
(double)
0
1
2
3
9999
numEmp = 0
(int)
Donde numEmp permite almacenar el nmero de alumnos cuyos datos se han almacenado.
Pg. 164
Clase PrgUniversidad
package dominioDeLaAplicacion;
import biblioteca.LE ;
Pg. 165
Clase PrgUniversidad
LE.mostrarError ( " Error...Ingrese los datos " ) ;
break ;
case 3:
if ( sw )
buscar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 4:
if ( sw )
ordenar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 5:
if ( sw )
mostrar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 6:
break ;
default:
LE.mostrarError ( " Opcin no vlida Reintente! " ) ;
}
} while ( opc != 6 ) ;
}
public void ingresar () {
int rpta = 0 ;
do {
codigo[numEmp] = LE.leerLong ( " Cdigo del empleado " + ( numEmp
+ 1) + " :
");
nombre[numEmp] = LE.leerString ( " Nombre del empleado " + (
numEmp + 1) + "
:");
sueldo[numEmp] = LE.leerDouble ( " Sueldo del empleado " + (
numEmp + 1 ) + " :
");
numEmp++ ;
rpta = LE.mostrarPreguntaOpcion2 ( " Desea continuar ? " ) ;
} while ( rpta == 0 ) ;
}
public void calcular ( ) {
double prom = 0, suma = 0 ;
for ( int i=0; i<numEmp; i++ ) {
suma += sueldo[i] ;
}
Pg. 166
Clase PrgUniversidad
prom = suma / numEmp ;
prom = Math.round ( prom*100 ) / 100.0 ;
LE.mostrarResultado ( " El promedio del saln es: " + prom ) ;
}
public void buscar ( ) {
long aux = 0 ;
aux = LE.leerLong( " Ingrese el codigo del alumno que desea modificar: "
);
for( int i=0; i<numEmp; i++ ) {
if (codigo[i] == aux){
LE.mostrarInformacion("Datos del Alumno: "+"codigo:"+ codigo[i]+"
nombre: "+ nombre[i]+" sueldo: "+ sueldo[i]);
break;
}
}
LE.mostrarInformacion( " Error...Codigo no Encontrado " );
}
public void ordenar ( ){
for(int i=0;i<numEmp-1;i++)
for(int j=i+1;j<numEmp;j++)
if( nombre[i].compareToIgnoreCase(nombre[j]) > 0 ){
String aux1 = nombre[i];
long aux2 = codigo[i];
double aux3 = sueldo[i];
nombre[i] = nombre[j];
codigo[i] = codigo[j];
sueldo[i] = sueldo[j];
nombre[j]=aux1;
codigo[j]=aux2;
sueldo[j]=aux3;
}
}
public void mostrar ( ) {
String total = " " ;
for ( int i=0; i<numEmp; i++ ) {
total += "\n" + codigo[i] + "/" + nombre[i] + "/" + sueldo[i] ;
}
LE.mostrarResultado ( " Los datos de los alumnos son: " + "
}
}
Pg. 167
" + total ) ;
MODIFICACIN DE DATOS
Introduccin:
La modificacin de los datos constituye otros de los procesos comunes que debemos tener en
cuenta cuando realizamos mantenimiento a los datos almacenados en las Estructuras de
Datos.
Muchas veces sucede que al momento de ingresar los datos, la persona encargada de esta
labor, se equivoca e ingresa datos inexactos o errados. Por otro lado, el valor de los datos
almacenados puede perder vigencia y cambiar. Estas situaciones hacen evidente la
necesidad de modificar los datos cuando estos han sido ingresados en forma inexacta o
errnea, o cuando han perdido vigencia y sus valores han cambiado. A este proceso se
denomina modificacin de datos y se realiza para mantener actualizados los datos. Este
proceso hace uso de la bsqueda con la finalidad de determinar si los datos que se desean
modificar estn almacenados.
Definicin:
La modificacin de datos consiste en cambiar el valor de un dato o de un conjunto de datos
almacenados en una Estructura de Datos.
En el caso de los arreglos, la modificacin de datos es poco usual, pero necesaria para
cambiar el valor de los datos cuando han sido ingresados en forma errnea.
Ejemplos:
Pg. 168
Se obtiene el nuevo dato o los nuevos datos por los cuales se van a
reemplazar los datos a modificar.
Se reemplaza el nuevo dato o los nuevos datos por los datos a modificar.
Para ilustrar la forma en que se pueden modificar los datos, desarrollaremos una explicacin
en base a una solucin que permita almacenar el cdigo, el nombre y la nota final de los
alumnos de un saln de clase. Para esto utilizaremos la Grfica de Estructura de Datos que
se muestra a continuacin:
Dados los vectores:
codigos
nombres
notas
:
:
:
:
:
:
(long)
(String)
(double)
0
1
2
3
9999
numAlu = 0
Donde numAlu permite almacenar el nmero de alumnos.
Pg. 169
(int)
Ahora, supongamos que se han ingresado los datos de 5 alumnos de un saln de clase, lo
cual se podra representar de la siguiente manera:
Dados los vectores:
codigos
nombres
Notas
10
JUAN
19
20
CARMIEN
13
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
(long)
(String)
(double)
9999
numAlu = 5
(int)
Ingresados los datos nos percatamos que el nombre del segundo alumno y su nota no son
correctos, por lo que se necesita modificarlo (por error se ingres el nombre CARMIEN en
lugar de CARMEN y la nota debi ser de 17).
Pg. 170
Cdigo buscado = 20
codigos
nombres
Notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
(long)
(String)
(double)
0
1
9999
numAlu = 5
(int)
Datos reemplazados:
Nueva nota
= 17
Pg. 171
Algoritmo PrgModificarDatos
ENTRADA: numAlu, codigos[ ], nombres[ ], notas[ ], codigo
SALIDA:
mensaje
INICIO
TEXTO nombres[ ], mensaje
NUMERO codigos[ ], notas[ ], numAlu, pos = -1, codigo, i
LEER numAlu
CREAR codigos[numAlu], nombres[numAlu], notas[numAlu]
COMENTARIO Ingresar datos a los vectores
DESDE i = 0 HASTA i = numAlu - 1 INCREMENTA 1
LEER codigos[i]
LEER nombres[i]
LEER notas[i]
FINDESDE
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Pg. 172
Pg. 173
ELIMINACIN DE DATOS
Introduccin:
La eliminacin de los datos constituye otros de los procesos comunes que debemos tener en
cuenta cuando realizamos mantenimiento a los datos almacenados en las Estructuras de
Datos.
Es comn que trabajemos con grandes cantidades de datos almacenados en estructuras de
datos y que sea necesario eliminar peridicamente ciertos datos, los cuales ya no son
necesarios. A este proceso se denomina ELIMINACIN DE DATOS y se realiza para
mantener actualizados los datos. A este proceso se denomina eliminacin de datos y se
realiza para mantener actualizados los datos. Este proceso hace uso de la bsqueda con la
finalidad de determinar si los datos que se desea eliminar estn almacenados.
Definicin:
La eliminacin de datos consiste en eliminar el valor de un dato o de un conjunto de datos
almacenados en una Estructura de Datos.
En el caso de los arreglos, la eliminacin de datos es poco usual, pero necesaria para
mantener actualizados los datos almacenados en el mismo.
Ejemplos:
Tipos:
La eliminacin de datos se puede realizar utilizando principalmente los siguientes mtodos:
Eliminacin Lgica.
Eliminacin Fsica.
Pg. 174
nombres
notas
estado
:
:
:
:
:
:
:
:
(long)
(String)
(double)
0
1
2
3
9999
numAlu = 0
(int)
(boolean)
Ahora, supongamos que se han ingresado los datos de 5 alumnos de un saln de clase, lo
cual se podra representar de la siguiente manera:
Dados los vectores:
codigos
Nombres
notas
estado
10
JUAN
19
true
20
CARMEN
17
true
30
DANAE
15
true
40
RODRIGO
16
true
50
JOS
09
true
:
:
:
:
:
:
:
:
(long)
(String)
(double)
9999
numAlu = 5
(int)
Pg. 175
(boolean)
Cdigo buscado = 20
Dados los vectores:
codigos
nombres
notas
estado
10
JUAN
19
true
20
CARMEN
17
false
30
DANAE
15
true
40
RODRIGO
16
true
50
JOS
09
true
:
:
:
:
:
:
:
:
(long)
(String)
(double)
9999
numAlu = 5
(int)
(boolean)
Datos eliminados.
(marca de eliminacin)
La eliminacin lgica de datos permite que se conserven los datos almacenados en las
estructuras de datos, y es til cuando se necesita guardar informacin histrica como
referencia o para estadsticas. La eliminacin lgica de datos permite que pueda existir un
Pg. 176
nombres
notas
estado
10
JUAN
19
true
20
CARMEN
17
false
30
DANAE
15
false
40
RODRIGO
16
true
50
JOS
09
false
:
:
:
:
:
:
:
:
(long)
(String)
(double)
9999
numAlu = 5
(int)
(boolean)
Pg. 177
nombres
notas
:
:
:
:
:
:
(long)
(String)
(double)
0
1
2
3
9999
numAlu = 0
(int)
Para la eliminacin fsica de datos se necesita en primer lugar ubicar la posicin donde se
tiene almacenado los datos que se desean eliminar. Para ello, utilizaremos alguno de los
algoritmos de bsqueda de datos tratados anteriormente en este mismo captulo. En segundo
lugar, se necesita que se confirme la eliminacin. Esto, se realiza mostrando los datos
encontrados y preguntando si se est seguro de desear eliminar dichos datos. En caso que la
respuesta sea afirmativa se procede a eliminar los datos en forma permanente.
Como ejemplo, ingresamos el cdigo 20. Buscamos el cdigo ingresado en el vector
codigos[]. El cdigo buscado es encontrado en la segunda posicin del vector codigos[], se
solicita la confirmacin de la eliminacin de los datos y si esta es afirmativa se procede a
eliminar los datos en forma permanente.
Pg. 178
Cdigo buscado = 20
Dados los vectores:
codigos
nombres
notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
(long)
(String)
(double)
9999
numAlu = 5
(int)
Confirmacin de la eliminacin de
datos en forma permanente
nombres
notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
(long)
(String)
(double)
0
1
9999
numAlu = 5
(int)
Pg. 179
Es decir, ya que los datos a eliminar estn almacenados en la posicin 1, se deber copiar
los datos almacenados en la posicin 2 a la posicin 1. Luego, los datos almacenados en la
posicin 3 se debern copiar a la posicin 2 y as sucesivamente hasta llegar a los datos
almacenados en la ltima posicin vlida. Finalmente, la variable que almacena la cantidad
de datos almacenados en las estructuras (en nuestro caso numAlu), se deber reducir en una
unidad, ya que se ha eliminado los datos de un alumno. Como resultado los datos
almacenados seran los que se muestran en la siguiente grfica:
Dados los vectores:
codigos
nombres
notas
10
JUAN
19
30
DANAE
15
40
RODRIGO
16
50
JOS
09
50
JOS
09
:
:
:
:
:
:
(long)
(String)
(double)
9999
numAlu = 4
(int)
Es importante indicar, que al analizar la grfica anterior se puede llegar a pensar que los
datos almacenados en las dos ltimas posiciones se repiten. Esto no es tan cierto ya que la
variable numAlu contiene el valor 4, lo que indica que slo se trabajar con los 4 primeros
registros. Todos los dems datos almacenados despus de la tercera posicin se
considerarn como datos no vlidos.
Pg. 180
Conjunto de
instrucciones que
constituyen la parte
central del algoritmo.
Pg. 181
Pg. 182
La modificacin y eliminacin de datos son procesos que necesitan utilizar otros procesos
como el ingreso de datos, la bsqueda de datos y la visualizacin de datos. Al inicio del
algoritmo desarrollado anteriormente se utiliza el ingreso de datos y la bsqueda de datos y
es posible utilizar tambin la visualizacin de datos despus de la modificacin o eliminacin
de datos para poder observar cul fue el efecto despus de ejecutar dichos procesos.
Para poder utilizar adecuadamente los diferentes procesos para el manejo de datos se
recomienda desarrollar soluciones utilizando men de opciones y mtodos para cada uno de
dichos procesos.
Pg. 183
Problema 020
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrollar una solucin en JAVA que permita registrar los nombres, cdigos y la nota final
de los alumnos del curso de Algoritmo y Estructura de Datos I. Utilice un men de opciones,
utilice mtodos y la Grfica de Estructura de Datos mostrada.
1.- Ingresar datos.
2.- Calcular promedio.
3.- Modificar datos.
4.- Eliminacin lgica de datos.
5.- Mostrar datos
6.- Ordenar los datos de los empleados alfabeticamente.
codigo
nota
:
:
:
:
:
:
(String)
(long)
(double)
estado
0
1
2
3
9999
numAlu = 0
(boolean)
(int)
Donde numAlu permite almacenar el nmero de alumnos cuyos datos se han almacenado.
Pg. 184
Pg. 185
Clase PrgAlumnos
case 3:
if ( sw )
modificar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 4:
if ( sw )
eliminar ();
else
LE.mostrarError ( " Error...Ingrese los datos ");
break ;
case 5:
if ( sw )
mostrar ( ) ;
else
LE.mostrarError ( " Error...Ingrese los datos " ) ;
break ;
case 6:
break ;
default:
LE.mostrarError ( " Opcin no vlida Reintente! " ) ;
}
} while ( opc != 6 ) ;
}
public void ingresar () {
int rpta = 0 ;
do {
codigo[numAlu] = LE.leerLong ( " Cdigo del alumno " + ( numAlu + 1)
+":
")
;
nombre[numAlu] = LE.leerString ( " Nombre del alumno " + ( numAlu +
1) + "
:");
do {
nota[numAlu] = LE.leerDouble ( " Nota del alumno " + ( numAlu + 1 )
+":
");
if ( nota[numAlu] < 0 || nota[numAlu] > 20 ) {
LE.mostrarError ( " Error...Notas ingresada Errnea " ) ;
}
} while ( nota[numAlu] < 0 || nota[numAlu] > 20 ) ;
numAlu++ ;
estado[numAlu] =true;
rpta = LE.mostrarPreguntaOpcion2 ( " Desea continuar ? " ) ;
} while ( rpta == 0 ) ;
}
public void calcular ( ) {
double prom = 0, suma = 0 ;
for ( int i=0; i<numAlu; i++ ) {
suma += nota[i] ;
Pg. 186
Clase PrgAlumnos
}
prom = suma / numAlu ;
prom = Math.round ( prom*100 ) / 100.0 ;
Pg. 187
" + total ) ;
Problema 021
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrollar una solucin en JAVA que permita registrar los nombres, cantidades y precios de
los artculos de una bodega. Mostrar los datos y calcular la ganancia total en caso de vender
todos los artculos. Utilice un men de opciones, utilice mtodos y la Grfica de Estructura de
Datos mostrada.
1.- Ingresar datos.
2.- Mostrar datos.
3.- Calcular Ganancia.
4.- Modificar datos.
5.- Eliminacin Fsica de datos.
Se desea registrar los nombres, cantidades y precios de los artculos de una bodega. Mostrar
los datos y calcular la ganancia total en caso de vender todos los artculos. Utilice mtodos y
la Grfica de Estructura de Datos mostrada.
Etapa 03 - Diseo de la lgica.
Defina el nombre del proyecto, desarrolle la definicin de paquetes, el diagrama de paquetes, la
definicin de las clases y el diagrama de secuencia.
cantidad
precio
:
:
:
:
:
:
(String)
(long)
(double)
0
1
2
3
9999
numArt = 0
Donde numArt permite almacenar el nmero de artculos de una bodega.
Pg. 188
(int)
public PrgArticulos ( ) {
nombre = new String [9999] ;
cantidad = new long [9999] ;
precio = new double [9999] ;
numArt = 0 ;
}
public static void main ( String[ ] args ) {
PrgArticulos obj = new PrgArticulos ( ) ;
obj.menu ( ) ;
}
public void menu ( ) {
String menu = " Ingrese una de las siguientes opciones: \n "
+ " 1) Ingresar Datos(Recomendada para iniciar) \n "
+ " 2) Mostrar Datos \n"
+ " 3) Calcular Ganancia \n "
+ " 4) Modificar Datos \n "
+ " 5) Eliminacin Fsica de Datos \n "
+ " 6) Finalizar \n "
+ " -------------------------------------------" ;
int opc;
boolean sw = false ;
do {
opc = LE.leerInt ( menu ) ;
switch ( opc ) {
case 1:
ingresar ( ) ;
sw = true ;
break ;
case 2:
if ( sw )
mostrar ( ) ;
else
LE.mostrarError ( " Error...Ingrese los datos " ) ;
break ;
case 3:
Pg. 189
Clase PrgArticulos
if ( sw )
calcularGanancia ( ) ;
else
LE.mostrarError ( " Error...Ingrese los datos " ) ;
break ;
case 4:
if ( sw )
modificar ( ) ;
else
LE.mostrarError ( " Error...Ingrese los datos " ) ;
break ;
case 5:
if ( sw )
eliminar ( ) ;
else
LE.mostrarError ( " Error...Ingrese los datos " ) ;
break ;
case 6:
finalizar ( ) ;
break ;
default:
LE.mostrarError ( " Opcin no vlida Reintente! " ) ;
}
} while ( opc != 6 ) ;
}
public void ingresar ( ) {
int rpta ;
do {
nombre[numArt] = LE.leerString ( " Nombre del producto " + ( numArt +
1)
+":");
cantidad[numArt] = LE.leerLong ( " Cantidad de productos " + ( numArt
+1)
+":");
precio[numArt] = LE.leerDouble ( " Precio del producto " + ( numArt + 1)
+"
:");
numArt++ ;
rpta = LE.mostrarPreguntaOpcion2 ( " Desea continuar ? " ) ;
} while ( rpta == 0 ) ;
}
Pg. 190
Clase PrgArticulos
prod = cantidad[i] * precio[i] ;
suma += prod ;
}
LE.mostrarResultado ( " La ganancia total al vender todos los productos
es:
" + suma ) ;
}
public void modificar ( ) {
String aux = "" ;
aux = LE.leerString( " Ingrese el nombre del articulo que desea modificar: "
);
for( int i=0; i<numArt; i++ ) {
if ( nombre[i].equalsIgnoreCase(aux) ){
nombre[i] = LE.leerString ( " Nombre del producto " + ( i + 1 )
+":");
cantidad[i] = LE.leerLong ( " Cantidad de productos " + ( i + 1 )
+":");
precio[i] = LE.leerDouble ( " Precio del producto " + ( i + 1) + "
:");
break;
}
}
LE.mostrarInformacion( " Error...Codigo no Encontrado " );
}
public void eliminar ( ) {
String aux = "" ;
aux = LE.leerString( " Ingrese el nombre del articulo que desea modificar:
" );
for( int i=0; i<numArt; i++ ) {
if ( nombre[i].equalsIgnoreCase(aux) ){
nombre[i] = nombre[i+1];
cantidad[i] = cantidad[i+1];
precio[i] = precio[i+1];
numArt --;
}
break;
}
LE.mostrarInformacion( " Error...Codigo no Encontrado " );
}
public void finalizar ( ) {
LE.mostrarInformacion ( " El programa ha finalizado " ) ;
}
}
Pg. 191
Introduccin:
Una deficiencia de la utilizacin de arreglos para almacenar datos es el tamao que se define
al momento de crear el arreglo. La cantidad de datos que se van a ingresar se limita a la
capacidad o tamao del arreglo. Es por ello que ahora explicaremos un mtodo que nos
permitir declarar un arreglo y posteriormente redimensionar su tamao de acuerdo a la
cantidad de datos que vayamos a ingresar en un determinado momento. Y si la cantidad de
datos que almacenan sobrepasan la capacidad del arreglo, esta ser redimensionada para
superar esta limitacin y tener una mejor solucin de un problema.
INGRESO DE DATOS UTILIZANDO DO
Introduccin:
El algoritmo para redimensionar el tamao de un arreglo se encuentra dentro del mtodo
ingresar. Ya que en el momento de realizar el ingreso, procederemos a realizar el algoritmo
que haga una llamada a un mtodo que denominaremos modificarTamaoArreglo() que
realizar el redimensionamiento del arreglo o arreglos.
Recordemos el ejemplo que utilizamos para explicar el mtodo de ingresar datos.
Dados los vectores:
codigos
nombres
notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
10
numAlu = 10
(long)
(String)
(double)
(int)
Pg. 192
Como ahora no sabemos la cantidad exacta de datos que se van a ingresar, eliminamos la
estructura de repeticin del FOR, y lo cambiamos por la estructura de repeticin DO,
dndole la siguiente sintaxis:
Pg. 193
Pg. 194
Introduccin:
Como ya se ha mencionado, el mtodo aumentar tamao del arreglo permitir
cambiar el tamao del arreglo para que se puedan registrar muchos ms datos.
El algoritmo se basa en los siguientes pasos:
1. Crear arreglos temporales, del mismo tipo del arreglo que se va a
redimensionar.
2. Los arreglos temporales deben ser creados con un tamao mayor que al de
los arreglos que van a ser redimensionados.
3. Definir una estructura de repeticin que recorra todas las filas de los
arreglos que sern redimensionados.
4. Pasar los datos de los arreglos que sern redimensionados, a los arreglos
temporales que han sido creados.
5. Pasar los datos de los arreglos temporales, a los arreglos reales igualando
las variables. Y finalmente este nuevo arreglo quedar redimensionado con
ms filas producto del proceso.
Pg. 195
INSERCIN DE DATOS
Introduccin:
La insercin de datos se refiere a ingresar un dato en el lugar correcto. Dicho lugar, se refiere
a la posicin donde le corresponde al dato ser insertado.
A diferencia del mtodo ingresar datos, este mtodo refiere una condicin determinada que
se va a evaluar antes de realizar el ingreso de datos. Esta condicin se establece para
mejorar el orden determinado de ingresos, ordenando automticamente los arreglos
dependiendo del dato a ingresar en la posicin correcta.
Los pasos que se tienen que realizar para utilizar correctamente el mtodo son:
1. Ubicar la posicin donde debera insertar los datos a ingresar.
2. Trasladar todos los datos desde la posicin determinada hacia una posicin abajo.
3. Finalmente insertar los datos.
Del ejemplo que hemos utilizado vamos a proceder a realizar la insercin correspondiente.
Dados los vectores:
codigos
nombres
notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
10
numAlu = 10
(long)
(String)
(double)
(int)
Si por ejemplo tenemos que insertar un nuevo registro donde los datos son:
codigos
nombres
notas
25
LUIS
14
Pg. 196
Entonces podemos seguir los pasos definido los cuales se muestran a continuacin:
1. Ubicar la posicin donde debera insertarse los datos ingresados.
codigos: 25
nombres: Luis
notas:
14
codigos
nombres
notas
10
JUAN
19
20
CARMEN
17
30
DANAE
15
40
RODRIGO
16
50
JOS
09
:
:
:
:
:
:
10
numAlu = 10
(long)
(String)
(double)
(int)
Por ejemplo, si el cdigo a ingresar es 25, entonces deberamos insertar los datos entre los
cdigos 20 y 30, es decir en la posicin 2 teniendo en consideracin que los datos a partir de
esa posicin deben ser trasladados una posicin hacia abajo para no perder datos.
2. Trasladar todos los datos desde la posicin determinada una posicin abajo.
Dados los vectores:
codigos
nombres
notas
10
JUAN
19
20
CARMEN
17
2
.
30
DANAE
15
40
RODRIGO
16
10
50
JOS
09
:
:
:
:
:
:
numAlu = 10
(long)
Pg. 197
(String)
(double)
(int)
Datos ingresados
correctamente.
nombres
notas
10
JUAN
19
20
CARMEN
17
25
LUIS
14
30
DANAE
15
40
RODRIGO
16
50
JOS
09
10
:
:
:
:
:
:
numAlu = 10
(long)
(String)
(double)
(int)
Para que nuestro mtodo funcione correctamente tenemos que desarrollar un mtodo
llamado posicionCodigo() que permita recibir como parmetro el cdigo. De esta forma,
podremos ubicar la posicin en donde se deber realizar la insercin de datos.
Pg. 198
Pg. 199
VISUALIZACIN DE DATOS
Introduccin:
Una alternativa para la visualizacin de datos est referida al uso de clases o componentes
propios de las Interfaz Grfica de Usuario GUI. Aunque este tema ser tratado en captulos
posteriores resulta importante poder tener una opcin a la visualizacin de datos
convencionales.
Analice las siguientes lneas de cdigo Java:
Mtodo visualizar
..
Observe cmo se crean objetos de las clases componentes y cmo estos se van configurando de
modo que se pueda mostrar la informacin de una mejor forma. Esto incluye una barra de
desplazamiento en caso la informacin a mostrar sea de un tamao considerable. Para entender
mejor este punto le sugerimos revisar los siguientes captulos aunque este mtodo se utiliza en
algunos de los siguientes problemas.
Pg. 200
Problema 022
Etapa 01 - Descripcin del problema.
Enunciado:
Se desea registrar los cdigos, nombres y el promedio final de los alumnos del curso de
Algoritmo y Estructura de Datos I, y determinar cul es el porcentaje de alumnos aprobados y
desaprobados. Adicionalmente determinar quin es el alumno que ha obtenido la mayor nota.
Utilice la Grfica de Estructuras de Datos mostrada.
Dados los vectores:
nombre
codigo
promedio
:
:
:
:
:
:
(String)
(long)
(double)
0
1
2
3
9999
numAlu = 0
Donde numAlu permite almacenar el nmero de alumnos.
package dominioDeLaAplicacion ;
import biblioteca.LE ;
public class PrgAlumnos {
String nombre[ ];
long codigo[ ];
double promedio[ ];
int numAlu;
public static void main (String[ ] args) {
PrgAlumnos x = new PrgAlumnos ( );
x.menu ( );
}
public PrgAlumnos ( ) {
nombre = new String[9999];
codigo = new long[9999];
Pg. 201
(int)
Clase PrgAlumnos
promedio = new double[9999];
numAlu = 0;
}
Pg. 202
Clase PrgAlumnos
if (promedio[numAlu] < 0 || promedio[numAlu] > 20) {
LE.mostrarError ("Promedio invlido, reingrese el promedio");
}
} while ( promedio[numAlu] < 0 || promedio[numAlu] > 20 );
numAlu++;
rpta = LE.mostrarPreguntaOpcion2 ( "Desea continuar?" );
}
while (rpta == 0);
}
String da
Pg. 203
Clase PrgAlumnos
porDesapro = (cont * 100) / numAlu;
porDesapro = Math.round(porDesapro * 100) / 100.0;
LE.mostrarResultado("Alumnos desaprobados: " + porDesapro + "%");
}
Es posible ingresar a cualquier opcin del men antes de ingresar los datos de los
alumnos. Si se ingresa a la opcin 3 o a la opcin 4 el programa finaliza. Analice esta
situacin. En el men planteado en la solucin del siguiente problema se resuelve
esta situacin.
Pg. 204
Mtodo alumnosConMayorNota
..
Pg. 205
Problema 023
Etapa 01 - Descripcin del problema.
Enunciado:
La Librera Boligrafito S.A., ubicada cerca de la FIA, vende diversos artculos de oficina.
Desarrolle una aplicacin para determinar la ganancia por cada artculo si se vendiera todo lo
que se tiene en el almacn. Mostrar los artculos ordenados por la cantidad de artculos.
Utilice la Grfica de Estructuras de Datos mostrada.
Dados los arreglos:
nombres
cantidad
precios
PV (0)
PC (1)
0
1
2
3
:
:
:
:
(String)
(lint)
:
:
9999
numArt = 0
Donde:
(double)
(double)
package dominioDeLaAplicacion ;
import biblioteca.LE ;
public class PrgLibreria {
String nombres[ ];
int cantidad[ ], numArt;
double precios[ ][ ];
public static void main(String[] args) {
PrgLibreria x = new PrgLibreria ( );
x.menu ( );
}
public PrgLibreria ( ) {
numArt = 0;
nombres = new String[9999];
cantidad = new int[9999];
Pg. 206
(int)
Clase PrgLibreria
..
Pg. 207
Clase PrgLibreria
..
Pg. 208
Clase PrgLibreria
..
}
}
}
}
Pg. 209
Problema 024
Etapa 01 - Descripcin del problema.
Enunciado:
Cinco estudiantes del curso se fueron de paseo a Paracas. Ah se alojaron en la posada Don
Alfonso que se encuentra cerca de Pisco. El administrador de la posada al enterarse que los
estudiantes eran alumnos de la FIA les solicit que le desarrollen un programa de
computadora que le ayudara a controlar si las habitaciones estaban ocupadas o no, y cunto
era su ganancia por el alquiler de las habitaciones. A cambio del programa el administrador
les realizara un excelente descuento. La delegada del curso sugiri desarrollar una aplicacin
que manejar los datos de la posada, utilizando la Grfica de Estructuras de Datos mostrada.
Dada la matriz:
datosHotel
NH (0)
VA (1)
:
:
:
:
EH (2)
NA (3)
0
1
2
3
:
:
9999
numHab = 0
(int)
Donde:
(int)
Clase PrgPosada
..
package dominioDeLaAplicacion ;
import biblioteca.LE ;
public class PrgPosada {
int datosPosada[ ][ ], numHab ;
public PrgPosada ( ) {
datosPosada = new int[9999][4] ;
numHab = 0 ;
Pg. 210
Clase PrgPosada
..
""
Pg. 211
Clase PrgPosada
..
if(pos==-1){
LE.mostrarInformacion ("El nmero de habitacin no existe, vuelta a
xxxxxxxxxxxx
xingresar!!!");
}
}while(pos==-1);
indicarEstado(pos);
break;
""
""
case 4:
if(sw ==1){
LE.mostrarError ("Ingrese los datos");
break;
}
numCuarto = LE.leerInt("Ingrese el nmero de habitacin que desea
alquilar");
pos = buscar (numCuarto);
alquilar(pos);
break;
case 5:
if(sw ==1){
LE.mostrarError ("Ingrese los datos");
break;
}
numCuarto = LE.leerInt ("Ingrese el nmero de habitacin que desea
desocupar");
pos = buscar (numCuarto);
desocupar(pos);
break;
case 6:
if(sw ==1){
LE.mostrarError ("Ingrese los datos");
break;
}
calcularGanancia ( );
break;
case 7 :
if(sw ==1){
LE.mostrarError ("Ingrese los datos");
break;
}
ordenar ( );
break;
case 8 :
if(sw ==1){
LE.mostrarError ("Ingrese los datos");
break;
}
numCuarto = LE.leerInt ("Ingrese el nmero de la habitacin");
pos = buscar (numCuarto);
modificar(pos);
break;
case 9 :
if(sw ==1){
Pg. 212
Clase PrgPosada
..
""
""
}
LE.mostrarInformacion (texto);
}
Pg. 213
Clase PrgPosada
..
Pg. 214
Clase PrgPosada
..
temp3 = datosPosada[i][3];
datosPosada[i][3] = datosPosada[j][3];
datosPosada[j][3] = temp3;
}
}
}
}
Pg. 215
Pg. 216
Problema 025
Etapa 01 - Descripcin del problema.
Enunciado:
El alumno Torres tiene ms de 1000 cintas de video con pelculas de accin, drama,
suspenso y comedia. Torres decide alquilar sus cintas de video a un bajo costo. Para ello,
copi las mejores cintas de video que posea y desarroll un programa de computadora para
mantener un adecuado control del alquiler de las cintas de video y sus respectivas copias.
Para el desarrollo del programa de computadora determin que era necesario utilizar la
Grfica de Estructuras de Datos mostrada. Desarrolle una solucin utilizando un men de
opciones.
Dadas las matrices:
peliculas
nom (0)
alquileres
cod (1)
cos (0)
sto (1)
alq (2)
tot (3)
:
:
:
:
:
:
:
:
:
:
:
:
9
(String)
Donde:
(int)
(double)
package dominioDeLaAplicacion ;
import biblioteca.LE ;
public class PrgVideos {
String peliculas[ ][ ] ;
Pg. 217
numPel = 0
Clase PrgVideos
..
int alquileres[ ][ ] ;
int numPel ;
public PrgVideos ( ) {
peliculas = new String[10][2];
alquileres = new int[10][4];
numPel = 0;
}
Pg. 218
Clase PrgVideos
..
}else{
utilidadTotal ( );
}
break;
case 6:
if (sw == 1) {
LE.mostrarError ("Error... Ingrese primero los datos");
}else{
masPedida ( );
}
break;
case 0:
finalizar ( );
break;
}
} while (opc != 0);
}
public void ingresar ( ) {
String texto;
int rpta;
do {
if (numPel == peliculas.length) {
aumentar ( );
}
peliculas[numPel][0] = LE.leerString ("Ingrese nombre de la pelcula "
+ (numPel + 1));
peliculas[numPel][1] = LE.leerString ("Ingrese el cdigo de la pelcula "
+ peliculas[numPel][0]);
texto = "Cdigo de la pelcula: " + peliculas[numPel][0] + "\n";
texto += "Nombre de la pelcula: " + peliculas[numPel][1] + "\n";
alquileres[numPel][0] = LE.leerInt (texto + "Ingrese el costo de alquileres" ) ;
alquileres[numPel][1] = LE.leerInt (texto + "Ingrese la cantidad de copias" ) ;
alquileres[numPel][2] = 0;
alquileres[numPel][3] = 0;
numPel++;
rpta = LE.mostrarPreguntaOpcion2 ("Desea ingresar datos de otro video?" ) ;
} while (rpta == 0);
}
Pg. 219
Clase PrgVideos
..
Pg. 220
Clase PrgVideos
..
}
}
return -1;
}
Pg. 221
El mtodo alquiler ( ) ha sido trabajado de tal forma que se informa al usuario todo lo
relacionado con el progreso de alquiler de una pelcula. En soluciones adecuadas
se debe informar permanentemente al usuario de todos los acontecimientos.
2.
3.
Pg. 222
Problema 026
Etapa 01 - Descripcin del problema.
Enunciado:
Durante el partido de ftbol entre la seleccin de Per contra Argentina, los alumnos Pian y
Adrianzen discutan cmo podan programar la tabla de posicin con los resultados de los
partidos del mundial de ftbol. Luego de un gran debate propusieron la siguiente Grfica de
Estructuras de Datos para almacenar y controlar los datos de los resultados de los partidos.
Desarrolle una solucin utilizando un men de opciones y mtodos para el manejo de los
datos.
equipos
datos
Nom
0
PJ (0)
PG (0)
PE (0)
GF (1)
GC (2)
PA (3)
:
:
:
:
:
:
:
:
:
:
:
:
:
:
9999
9999
(int)
( String )
Donde:
numEqu = 0
( int )
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgFutbol {
int tabla[ ][ ], fechas ;
String equipos[ ] ;
Pg. 223
Clase Futbol
..
public PrgFutbol ( ) {
equipos = new String[0];
tabla = new int[0][6];
fechas=1;
}
Pg. 224
Clase Futbol
..
Pg. 225
Clase Futbol
..
""
if (numEquipo != 0) {
numEquipo--;
System.out.print ("Seguro que desea eliminar el equipo " + equipos[numEquipo]
+ "(s/n) = ");
opc = Lectura.leerChar ( );
opc = Character.toLowerCase(opc);
if (opc == 's') {
tmpEquipos = new String[equipos.length - 1];
tmpDatos = new int[equipos.length - 1][6];
aux = 0;
for (int i = 0; i < equipos.length; i++) {
if (i != numEquipo) {
tmpEquipos[aux] = equipos[i];
tmpDatos[aux++] = tabla[i];
}
}
equipos = tmpEquipos;
tabla = tmpDatos;
}
Pg. 226
Clase Futbol
..
}
}
Pg. 227
Clase Futbol
..
Pg. 228
Clase Futbol
..
Pg. 229
Problema 027
[2]
[3]
Ordenar datos (ordenar los datos por nombre y apellido en forma ascendente).
[4]
Modificar los datos utilizando el cdigo del alumno (no se podr modificar los
cdigos).
[5]
[6]
[7]
Finalizar.
notas
datos
nom (0)
ape (1)
cod (2)
:
:
:
:
:
:
:
:
9999
9999
(double)
Donde:
(int)
(String)
Pg. 230
numAlu = 0
Clase PrgAlumnos
..
package dominioDeLaAplicacion ;
import biblioteca.LE ;
import javax.swing.* ;
public class PrgAlumnos {
double notas[ ] ;
String datos[ ][ ] ;
int numAlu ;
public PrgAlumnos ( ) {
notas = new double[10] ;
datos = new String[10][3] ;
numAlu = 0 ;
}
Pg. 231
Clase PrgAlumnos
..
}
break ;
case 3:
if (sw == 1) {
ordenar ( ) ;
} else {
LE.mostrarError ("Error...Ingrese la primera opcin") ;
}
break ;
case 4:
if (sw == 1) {
cod = LE.leerString ("Ingrese el cdigo del alumno del que desea
modificar qqqqqqqq
qdatos") ;
pos = buscar (cod) ;
if (pos != -1) {
rpta = LE.mostrarPreguntaOpcion2("Desea modificar los datos del
""
alumno " + datos[pos][0] + " " +
""
datos[pos][1] + " ?") ;
if (rpta == 0) {
modificar(pos) ;
}
} else {
LE.mostrarInformacion ("Cdigo no encontrado") ;
}
} else {
LE.mostrarError ("Error...Ingrese la primera opcin") ;
}
break ;
case 5:
if (sw == 1) {
cod = LE.leerString ("Ingrese el cdigo del alumno del que desea eliminar
qqqqqqqqq
datos") ;
pos = buscar (cod) ;
if (pos != -1) {
rpta = LE.mostrarPreguntaOpcion2("Desea eliminar los datos del
""
alumno " + datos[pos][0] + " " +
""
datos[pos][1] + " ?") ;
if (rpta == 0) {
eliminar(pos) ;
}
} else {
LE.mostrarInformacion ("Cdigo no encontrado") ;
}
} else {
LE.mostrarError ("Error...Ingrese la primera opcin") ;
}
break ;
case 6:
if (sw == 1) {
calcularNotas ( ) ;
} else {
Pg. 232
Clase PrgAlumnos
..
Pg. 233
Clase PrgAlumnos
..
""
""
}
Pg. 234
Clase PrgAlumnos
..
datos[i][0] = datos[j][0] ;
datos[j][0] = temp1 ;
temp2 = datos[i][1] ;
datos[i][1] = datos[j][1] ;
datos[j][1] = temp2 ;
temp3 = datos[i][2] ;
datos[i][2] = datos[j][2] ;
datos[j][2] = temp3 ;
temp4 = notas[i] ;
notas[i] = notas[j] ;
notas[j] = temp4 ;
}
}
}
}
}
Pg. 235
Clase PrgAlumnos
..
String mensaje = "La nota mayor es: " + mayor + "\n" + "La nota menor es: " +
menor ;
LE.mostrarInformacion (mensaje) ;
""
}
Pg. 236
Mtodo visualizar
..
Observe cmo se utilizan los componentes de Java para mejorar la visualizacin de los
datos.
Pg. 237
Problema 028
Etapa 01 - Descripcin del problema.
Enunciado:
Un grupo de estudiantes visitaron diversos colegios del cono norte de Lima apoyando a los
docentes en el dictado de diversas charlas. En total visitaron aproximadamente 15 colegios y
observaron que todos los colegios posean computadoras donadas por instituciones privadas.
El alumno Gutirrez coment a sus compaeros que podan desarrollar una aplicacin que
permita controlar las vacantes a cada una de las charlas programadas. El alumno Castro
propuso un vector unidimensional para almacenar el tema de la charla a dictar y un vector
bidimensional para almacenar datos adicionales sobre cada uno de las charlas, tal y como se
muestra en la figura. Tener en cuenta que los invitados a la charla cuentan con el descuento
establecido.
charlas
asistentes
vac (0)
cos (0)
des (0)
ins (1)
inv (2)
:
:
:
:
:
:
:
:
:
:
:
:
9
numChar = 0
(int)
(String)
(double)
Donde:
Pg. 238
package dominioDeLaAplicacion ;
import biblioteca. * ;
public class PrgCharlas {
String charlas[ ] ;
double asistentes[ ][ ] ;
int numChar ;
public PrgCharlas ( ) {
charlas = new String[10] ;
asistentes = new double[10][5] ;
numChar = 0 ;
}
Pg. 239
Clase PrgCharlas
..
opciones = opciones2;
break;
case 2:
if (acceso) {
mostrarDatos ( ) ;
} else {
LE.mostrarError ( "Opcin no vlida" ) ;
}
break;
case 3:
if (acceso) {
String charla = LE.leerString ("Ingrese el nombre de la charla en que desea
qqqqqqqqq
inscribirse:") ;
int poschar = buscar (charla) ;
if ( poschar !=- 1) {
if ( ( asistentes[poschar][3] + asistentes[poschar][4] ) < qqqqqq
""
qqq qqasistentes[poschar][0] ) {
int rptachar=LE.mostrarPreguntaOpcion2("Desea registrarse a esta
""
charla?");
if ( rptachar == 0 ) {
inscribirseCharla(poschar) ;
} else {
LE.mostrarAdvertencia ( "La operacin fue cancelada ") ;
}
} else {
LE.mostrarError ("Lo sentimos, no hay vacantes para la charla
qqqqqqqqqqqqq
seleccionada");
}
} else {
LE.mostrarError ("El nombre de la charla ingresada no es vlido");
}
} else {
LE.mostrarError ("La opcin ingresada es incorrecta");
}
break;
case 4:
if (acceso) {
gananciaTotal ( );
} else {
LE.mostrarError ("La opcin ingresada es incorrecta");
}
break;
case 5:
if (acceso) {
ordenarDatos ( );
} else {
LE.mostrarError ("La opcin ingresada es incorrecta");
}
break;
case 6:
Pg. 240
Clase PrgCharlas
..
if (acceso) {
String nom1 = LE.leerString ("Ingrese el nombre de la charla que desea
qqqqqqq
qmodificar:") ;
int rpta2 ;
int pos1 = -1 ;
pos1 = buscar (nom1) ;
if (pos1 != -1) {
rpta2 = LE.mostrarPreguntaOpcion2("Desea modificar la charla de: "+
qqqqqqqqq
qqcharlas[pos1]) ;
if (rpta2 == 0) {
modificarDatos(pos1) ;
} else {
LE.mostrarAdvertencia ("La operacin a sido cancelada");
}
} else {
LE.mostrarError ("El nombre de la charla ingresada no es vlido");
}
} else {
LE.mostrarError ("La opcin ingresada es incorrecta");
}
break;
case 7:
if (acceso) {
String nom = LE.leerString ("Ingrese el nombre de la charla que desea
""
eliminar:" ;
int pos = -1;
pos = buscar (nom);
if (pos != -1) {
int rpta = LE.mostrarPreguntaOpcion2 ("Desea eliminar la charla de:" +
qqqqqqqqqqq
charlas[pos] ) ;
if (rpta == 0) {
eliminarDatos(pos);
} else {
LE.mostrarAdvertencia ("La operacin fue cancelada") ;
}
}else{
LE.mostrarError ("El nombre de la charla ingresada no es vlido");
}
if (numChar == 0) {
acceso = false;
opciones = opciones1;
}
} else {
LE.mostrarError ( "La opcin ingresada es incorrecta" ) ;
}
break;
case 0:
LE.mostrarAdvertencia ( "La operacin ha sido finalizada" ) ;
break;
default:
LE.mostrarError ( "La opcin ingresada es incorrecta" ) ;
}
} while (opc != 0) ;
Pg. 241
Clase PrgCharlas
..
""
""
""
""
do {
asistentes[numChar][2] = LE.leerDouble ("Ingrese el descuento de la charla");
if (asistentes[numChar][2] > asistentes[numChar][1]) {
LE.mostrarError ("El descuento de la charla ingresada no es vlido;
reintente") ;
}
} while ( asistentes[numChar][2] > asistentes[numChar][1] ) ;
asistentes[numChar][3] = 0 ;
asistentes[numChar][4] = 0 ;
numChar++ ;
Pg. 242
Clase PrgCharlas
..
""
}
Pg. 243
Clase PrgCharlas
..
Pg. 244
Clase PrgCharlas
..
}
}
}
LE.mostrarAdvertencia ( "La operacin fue realizada con xito" ) ;
}
Pg. 245
Clase PrgCharlas
..
Pg. 246
Clase PrgCharlas
..
Pg. 247
Mtodo OrdenarDatos
..
Observe que cuando se tienen matrices en una solucin, se puede utilizar tambin una
tercera estructura de repeticin DESDE que permita intercambiar los datos almacenados
en dicha matrices.
Pg. 248
Problema 029
Etapa 01 - Descripcin del problema.
Enunciado:
Un grupo de alumnos asistieron a un evento en un conocido restaurante de nuestra ciudad.
En dicho restaurante existan tantas mesas que los alumnos empezaron a discutir cmo
podan controlar el consumo de cada una de las mesas. El alumno Yarlequ propuso la
Grfica de Estructuras de Datos mostrada. Desarrolle una solucin utilizando un men de
opciones y mtodos para el manejo de los datos.
clientes
datos
nom
0
num (0)
cac (1)
cat (2)
:
:
:
:
:
:
:
:
9999
numMes = 0
9999
(String)
Donde:
(int)
(String)
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgRestaurante {
String clientes[ ] ;
String datos[ ][ ] ;
int numMesa ;
Pg. 249
Clase PrgRestaurante
..
public PrgRestaurante ( ) {
clientes = new String[10000] ;
datos = new String[10000][3] ;
numMesa = 0 ;
} // Fin PrgRestaurante
Pg. 250
Clase PrgRestaurante
..
""
""
""
Pg. 251
Clase PrgRestaurante
..
menuModificar ( pos ) ;
} else {
LE.mostrarAdvertencia ( "La operacin fue cancelada" ) ;
}
} else {
LE.mostrarError ( "Error, el Nro de la mesa es incorrecto; reintente") ;
}
} else {
LE.mostrarError ("Error, La opcin ingresada es incorrecta; reintente");
}
break ;
""
Pg. 252
Clase PrgRestaurante
..
""
""
""
do {
do {
do {
datos[numMesa][0] = LE.leerString ( "Ingrese el Nro de Mesa del cliente "
);
if ( !datos[numMesa][0].matches( "[0-9]+" ) ) {
LE.mostrarError ( "Error, el tipo de dato ingresado es incorrecto;
reintente" ) ;
}
} while ( !datos[numMesa][0].matches( "[0-9]+" ) ) ;
mesa = Integer.parseInt( datos[numMesa][0] ) ;
if ( mesa < 1 ) {
LE.mostrarError ( "Error, el Nro de mesa ingresado es incorrecto;
reintente" ) ;
}
} while ( mesa < 1 ) ;
if ( buscarMesa (datos[numMesa][0]) != -1 ) {
LE.mostrarError ( "Error, el Nro de mesa ingresado ya existe; reintente" );
}
} while ( buscarMesa(datos[numMesa][0]) != -1 ) ;
datos[numMesa][1] = "0" ;
datos[numMesa][2] = "0" ;
numMesa++ ;
rpta = LE.mostrarPreguntaOpcion2 ( "Desea agregar ms mesas?" ) ;
} while ( rpta == 0 ) ;
} // Fin ingresarDatos
Pg. 253
Clase PrgRestaurante
..
clientes = clien ;
datos = dat ;
} // Fin aumentarTamaoArreglo
Pg. 254
Clase PrgRestaurante
..
}
} while ( subOpc != 3 && subOpc != 2 && subOpc != 1 ) ;
}// Fin menuModificar
Pg. 255
Clase PrgRestaurante
..
break ;
case 2 :
ordenarPorMesa ( ) ;
break ;
case 3 :
LE.mostrarAdvertencia ( "Regresando al men principal" ) ;
break ;
default :
LE.mostrarError ( "Error, la opcin ingresada es incorrecta" ) ;
}
} while ( subOpc != 3 ) ;
} // Fin menuOrdenar
Pg. 256
Clase PrgRestaurante
..
}
}
LE.mostrarAdvertencia ( "La operacin fue realizada con xito" ) ;
mostrarDatosGenerales ( ) ;
} // Fin ordenarPorMesa
""
Pg. 257
Clase PrgRestaurante
..
clientes[pos] = clientes[pos].toUpperCase ( ) ;
if (!clientes[pos].matches ( "[A-Z]+" ) ) {
LE.mostrarError ("Error, el tipo de dato ingresado es incorrecto; reintente") ;
}
} while ( !clientes[pos].matches ( "[A-Z]+" ) ) ;
String letra, resto ;
letra = clientes[pos].substring (0, 1) ;
letra = letra.toUpperCase ( ) ;
resto = clientes[pos].substring(1) ;
resto = resto.toLowerCase ( ) ;
clientes[pos] = letra + resto ;
if (clientes[pos].length ( ) < 3) {
LE.mostrarError ( "Error, el nombre ingresado es incorrecto; reintente" ) ;
}
} while ( clientes[pos].length ( ) < 3 ) ;
double costoAcu = Double.parseDouble ( datos[pos][2] ) ;
double suma = 0 ;
double costo ;
do {
costo = LE.leerDouble ( "Ingrese el monto a pagar " ) ;
if ( costo < 0 ) {
LE.mostrarError ( "Error, el monto ingresado es incorrecto, reintente" ) ;
}
} while ( costo < 0 ) ;
suma = costoAcu + costo ;
datos[pos][1] = String.valueOf ( costo ) ;
datos[pos][2] = String.valueOf ( suma ) ;
menuMesa ( pos ) ;
} // Fin utilizarMesa
Pg. 258
Clase PrgRestaurante
..
Pg. 259
Clase PrgRestaurante
..
Pg. 260
Clase PrgRestaurante
..
Pg. 261
Problema 030
Etapa 01 - Descripcin del problema.
Enunciado:
La empresa La Moderna SA, se dedica a la venta de equipos de todo tipo. Hace unos das
han detectado algunos problemas en su inventario y desean realizar una aplicacin que les
permita mantenerlo actualizado. El sobrino del gerente de la empresa, estudiante de la FIA,
le ha recomendado que utilice el lenguaje de programacin Java y sugiera se desarrolle la
aplicacin utilizando las siguientes estructuras de datos:
Dados los arreglos:
nombres
datos
nom
0
CA (0)
PC (1)
PV (2)
:
:
:
:
:
:
:
:
9999
9999
(String)
Donde:
numEqu = 0
(int)
(String)
package dominioDeLaAplicacion ;
import biblioteca.* ;
public class PrgInventario {
int numEqu ;
String nombres[ ] ;
String datos[ ][ ] ;
Pg. 262
Clase PrgInventario
..
public PrgInventario ( ) {
numEqu = 0 ;
nombres = new String[10000] ;
datos = new String[10000][3] ;
} // Fin PrgInventario
Pg. 263
Clase PrgInventario
..
Pg. 264
Clase PrgInventario
..
Pg. 265
Clase PrgInventario
..
break ;
}
}
return pos ;
} // Fin buscar
Pg. 266
Clase PrgInventario
..
dato = datos[i][k] ;
datos[i][k] = datos[j][k] ;
datos[j][k] = dato ;
}
}
}
}
LE.mostrarAdvertencia ( "La operacin fue realizada con xito" ) ;
} // Fin ordenarPorNombre
Pg. 267
Clase PrgInventario
..
Pg. 268
Clase PrgInventario
..
ordenarPorNombre ( ) ;
mostrarDatosGenerales ( ) ;
break ;
case 2 :
ordenarPorCantidad ( ) ;
mostrarDatosGenerales ( ) ;
break ;
case 3 :
ordenarPorPrecioCompra ( ) ;
mostrarDatosGenerales ( ) ;
break ;
case 4 :
ordenarPorPrecioVenta ( ) ;
mostrarDatosGenerales ( ) ;
break ;
case 5 :
LE.mostrarAdvertencia ( " Regresando al men principal " ) ;
break ;
default :
LE.mostrarError ( "Error, la opcin ingresada es incorrecta, reintente" ) ;
}
} while ( subOpc != 5 ) ;
} // Fin menuOrdenar
Pg. 269
Clase PrgInventario
..
case 2 :
utilidadTotal ( ) ;
break ;
case 3 :
utilidadAlta ( ) ;
break ;
case 4 :
utilidadBaja ( ) ;
break ;
case 5 :
LE.mostrarAdvertencia ( " Regresando al men principal " ) ;
break ;
default :
LE.mostrarError ( "Error, la opcin ingresada es incorrecta; reintente" ) ;
}
} while ( subOpc != 5 ) ;
} // Fin menuUtilidades
Pg. 270
Clase PrgInventario
..
case 2 :
modificarDatosComplementarios ( pos ) ;
break ;
case 3 :
LE.mostrarAdvertencia ( " Regresando al men principal " ) ;
break ;
default :
LE.mostrarError ( "Error, la opcin ingresada es incorrecta; reintente" ) ;
}
} while ( subOpc != 3 && subOpc != 2 && subOpc != 1 ) ;
} // Fin menuMmodificar
Pg. 271
Clase PrgInventario
..
""
""
""
do {
do {
datos[numEqu][0] = LE.leerString ( "Ingrese la cantidad de equipos de: " +
+ nombres[numEqu] ) ;
if ( !datos[numEqu][0].matches ( "[0-9]+" ) ) {
LE.mostrarError ( " Error, el tipo de dato ingresado es incorrecto;
reintente" ) ;
}
} while ( !datos[numEqu][0].matches ( "[0-9]+" ) ) ;
cantidad = Integer.parseInt ( datos[numEqu][0] ) ;
if ( cantidad < 1 ) {
LE.mostrarError ( "Error, la cantidad ingresada es incorrecta; reintente" ) ;
}
} while ( cantidad < 1 ) ;
do {
do {
datos[numEqu][1] = LE.leerString ( "Ingrese el precio de compra de equipos
de:" + nombres[numEqu] ) ;
if ( !datos[numEqu][1].matches ( "[0-9]+" ) ) {
LE.mostrarError ( " Error, el tipo de dato ingresado es incorrecto;
Pg. 272
Clase PrgInventario
..
""
""
""
""
""
reintente " ) ;
}
} while ( !datos[numEqu][1].matches ( "[0-9]+" ) ) ;
precioCompra = Integer.parseInt ( datos[numEqu][1] ) ;
if ( precioCompra < 1 ) {
LE.mostrarError ( " Error, el precio de compra ingresado es incorrecto;
reintente " ) ;
}
} while ( precioCompra < 1 ) ;
do {
do {
datos[numEqu][2] = LE.leerString ( "Ingrese el precio de venta de equipos
de: " + nombres[numEqu]);
if ( !datos[numEqu][2].matches ( "[0-9]+" ) ) {
LE.mostrarError ( " Error, el tipo de dato ingresado es incorrecto;
reintente " ) ;
}
} while ( !datos[numEqu][2].matches ( "[0-9]+" ) ) ;
precioVenta = Integer.parseInt ( datos[numEqu][2] ) ;
if ( precioVenta <= precioCompra ) {
LE.mostrarError ( "Error, el precio de venta ingresado es incorrecto;
reintente " ) ;
}
} while ( precioVenta <= precioCompra ) ;
numEqu++ ;
rpta = LE.mostrarPreguntaOpcion2 ( " Desea agregar ms datos? " ) ;
} while ( rpta == 0 ) ;
} // Fin de ingreso
Pg. 273
Clase PrgInventario
..
Pg. 274
Clase PrgInventario
..
Pg. 275
Problema 031
Etapa 01 - Descripcin del problema.
Enunciado:
En las siguientes estructuras se tienen almacenados los nombres, las direcciones y distritos
de los domicilios, los DNI, y los sueldos de los trabajadores de una empresa. Desarrollar una
aplicacin utilizando mtodos y un men de opciones que permita manejar los datos
almacenados.
Dados los arreglos:
datos
nom (0)
dir (1)
dis (2)
:
:
:
:
:
:
DNI
sueldos
:
:
:
:
:
:
(long)
(double)
0
1
2
numEmp = 0
:
:
:
9999
(String)
Donde:
(int)
package dominioDeLaAplicacion ;
import javax.swing.* ;
import biblioteca.* ;
public class PrgEmpresa
int numEmp ;
String datos[ ][ ] ;
long dni[ ] ;
double sueldos[ ] ;
Pg. 276
Clase PrgEmpresa
..
public PrgEmpresa ( ) {
numEmp = 0 ;
dni = new long[10000] ;
sueldos = new double[10000] ;
datos = new String[10000][3] ;
}
Pg. 277
Clase PrgEmpresa
..
""
Pg. 278
Clase PrgEmpresa
..
break ;
case 4 : /* Clculos generales */
if (acceso) {
menuCalculosGenerales ( ) ;
} else {
LE.mostrarError ( "Error, la opcin ingresada es incorrecta; reintente " ) ;
}
break ;
case 5 : /* Ordenar Datos */
if ( acceso ) {
menuOrdenar ( ) ;
} else {
LE.mostrarError ( "Error, la opcin ingresada es incorrecta; reintente " ) ;
}
break ;
case 0 : /* Finalizar operacin */
LE.mostrarAdvertencia ( " La operacin ha finalizado " ) ;
break ;
default :
LE.mostrarError ( " Error, la opcin ingresada es incorrecta; reintente " ) ;
}
} while ( opc != 0 ) ;
} // Fin menu usuario
Pg. 279
Clase PrgEmpresa
..
""
""
""
""
""
""
""
q
""
Pg. 280
Clase PrgEmpresa
..
""
""
if ( rpta3 == 0 ) {
eliminarDatos ( pos3 ) ;
} else {
LE.mostrarAdvertencia ( " La operacin fue cancelada " ) ;
}
} else {
LE.mostrarError ( "Error, el nombre del empleado es incorrecto;
reintente " ) ;
}
if ( numEmp == 0 ) {
opc = 0 ;
}
break ;
case 0 : /* Regresar men principal */
LE.mostrarAdvertencia ( " Regresando al men principal " ) ;
break ;
default :
LE.mostrarError ( " La opcin ingresada es incorrecta; reintente " ) ;
}
} while ( opc != 0 ) ;
break ;
} else {
LE.mostrarError ( "Error, el password ingresado es incorrecto " ) ;
}
intento++ ;
if ( intento == 3 ) {
LE.mostrarAdvertencia ( "Usted ha superado el mximo de intentos
permitidos" ) ;
}
} while ( intento != 3 ) ;
} // Fin menu administrador
Pg. 281
Clase PrgEmpresa
..
if ( buscarDni ( dni[numEmp] ) != -1 ) {
LE.mostrarError ( "Error, el DNI ingresado ya pertenece a un empleado
registrado; reintente " ) ;
}
} while ( buscarDni ( dni[numEmp] ) != -1 ) ;
// Ingreso del sueldo
do {
sueldos[numEmp] = LE.leerDouble ( " Ingrese el sueldo del empleado: " + (
datos[numEmp][0] ) ) ;
if (sueldos[numEmp] < 1 ) {
LE.mostrarError ( " Error, el sueldo ingresado es incorrecto; reintente " ) ;
}
} while ( sueldos[numEmp] < 1 ) ;
numEmp++ ;
Pg. 282
Clase PrgEmpresa
..
Pg. 283
Clase PrgEmpresa
..
+ "----------------------------------------------------------\n"
+ "Elija opcin deseada:\n" ;
int subopc ;
do {
subopc = LE.leerInt (submenu) ;
switch (subopc) {
case 1 :
ordenarporNombre ( ) ;
mostrarDatosGenerales ( ) ;
break ;
case 2 :
ordenarporDistrito ( ) ;
mostrarDatosGenerales ( ) ;
break ;
case 3 :
ordenarporSueldos ( ) ;
mostrarDatosGenerales ( ) ;
break ;
case 4 :
LE.mostrarAdvertencia ( " Regresando al men principal " ) ;
break ;
default :
LE.mostrarError ( " Error, la opcin ingresada es incorrecta, reintente " ) ;
}
} while ( subopc != 4 ) ;
} // Fin menu ordenar
Pg. 284
Clase PrgEmpresa
..
} // Fin ordenarporNombre
// Fin ordenarporDistrito
Pg. 285
Clase PrgEmpresa
..
} // Fin ordenarporSueldos
Pg. 286
Clase PrgEmpresa
..
modificarDatosComplementarios(pos) ;
break ;
case 3 :
LE.mostrarAdvertencia ( " Regresando al men principal " ) ;
break ;
default :
LE.mostrarError ( " Error, la opcin ingresada es incorrecta; reintente " ) ;
}
} while ( subopc != 3 && subopc != 2 && subopc != 1 ) ;
} // Fin menu modificar
do {
sueldos[pos] = LE.leerDouble ( " Ingrese el nuevo sueldo del empleado: " +
datos[pos][0] ) ;
if ( sueldos[pos] < 1 ) {
LE.mostrarError ( " Error, el sueldo ingresado es incorrecto; reintente " ) ;
}
} while ( sueldos[pos] < 1 ) ;
Pg. 287
Clase PrgEmpresa
..
""
""
""
""
""
String listado ;
listado = "Nombres
||
Direccin
||
Distrito
||
DNI
||
Sueldo\n + ----------------------------------------------------------------------------------------------------------------------\n" ;
listado = listado + "\n" ;
for ( int i = 0; i < numEmp; i++ ) {
for ( int j = 0; j < 3; j++ ) {
listado = listado + completarConBlancosXDer( datos[i][j], 25 ) ;
}
listado = listado + completarConBlancosXDer( "" + dni[i], 30 ) +
completarConBlancosXDer( "S/. " + sueldos[i], 30 ) ;
listado = listado + "\n" ;
}
listado = listado + "\n" + "----------------------------------------------------------------------------------------------------------------------\n" + "\n" + " || El total de empleados
registrados son " + (numEmp) ;
muestraInformacion.append( listado ) ;
JOptionPane.showMessageDialog (null, desplazaInformacion, "LISTA DE
""
EMPLEADOS",
""
JOptionPane.INFORMATION_MESSAGE ) ;
} // Fin mostrarDatosGenerales
Pg. 288
Clase PrgEmpresa
..
""
""
""
""
""
String listado ;
listado = "Nombres
||
Direccin
||
Distrito
||
DNI
||
Sueldo \n"+ "--------------------------------------------------------------------------------------------------------------------\n" ;
listado = listado + completarConBlancosXDer( datos[pos][0], 25 )
+ completarConBlancosXDer( datos[pos][1], 25 )
+ completarConBlancosXDer( datos[pos][2], 25 )
+ completarConBlancosXDer( "" + dni[pos], 30 )
+ completarConBlancosXDer( "S/. " + sueldos[pos], 30 ) ;
listado = listado + "\n"
+ "----------------------------------------------------------------------------------------------------------------------\n"
+ "\n"
+ " || El empleado se encuentra en la ""
posicin "
+ pos ;
muestraInformacion.append( listado ) ;
JOptionPane.showMessageDialog (null, desplazaInformacion, "LISTA DE
EMPLEADOS",
JOptionPane.INFORMATION_MESSAGE) ;
} // Fin mostrarDatosIndividuales
Pg. 289
Clase PrgEmpresa
..
case 4 :
LE.mostrarAdvertencia ( " Regresando al men principal " ) ;
break ;
default :
LE.mostrarError ( " Error, la opcin ingresada es incorrecta, reintente " ) ;
}
} while ( subopc != 4 ) ;
} // Fin menu calculos generales
Pg. 290
Clase PrgEmpresa
..
Pg. 291
Problema 032
datos
codigo
Nombre
sexo
edad
puntaje
situacion
:
:
numPos = 0
(int)
99999
99999
(int)
99999
(String)
Donde:
99999
(int)
(String)
Pg. 292
Clase PrgPostulantes
package dominioDeLaAplicacion;
import biblioteca.LE;
public class PrgPostulantes {
String datos[][];
String situacion[];
int puntaje[];
int codigo[];
int conta;
public PrgPostulantes ( ){
datos= new String[1000][3];
situacion=new String[1000];
puntaje=new int[1000];
codigo=new int [1000];
conta=0;
}
Pg. 293
Clase PrgPostulantes
break;
case '3': Ordenar ( );
break;
case '4': Modificar ( );
break;
case '5': Eliminar ( );
break;
case '6': MostrarIngresantes ( );
break;
case '7': MayorMenor ( );
break;
default: LE.mostrarError ("Lo sentimos, la opcin ingresada es incorrecta");
}
}while(opc!='S' && fin!='F');
}
""
""
""
do {
opc = LE.leerChar(menu);
switch (opc) {
case '1':
int cod;
do{
cod = LE.leerInt ("Ingrese el cdigo del postulante que desea modificar :");
if((cod<1000 || cod>9999)){
LE.mostrarAdvertencia ("Lo sentimos, los cdigos de postulante estan
entre 1000 y 9999");
}
}while((cod<1000 || cod>9999));
int pos = buscarXCodigo(cod);
if (pos!=-1){
int resp = LE.mostrarPreguntaOpcion2("Desea modificar los datos del
postulante: " + datos[pos][0]);
if (resp==0){
do{
datos[pos][0]=LE.leerString ("Ingrese el nuevo nombre y apellidos del
postulante con cdigo:" +
Pg. 294
Clase PrgPostulantes
""
""
""
""
""
""
""
""
codigo[pos]).toUpperCase ( );
if(!datos[pos][0].matches("[A-Z][A-Z]+[ ][A-Z][A-Z]+([ ][A-Z][AZ]+){0,1}")){
LE.mostrarAdvertencia ("Lo sentimos, los datos ingresados son
incorrectos!");
}
}while(!datos[pos][0].matches("[A-Z][A-Z]+[ ][A-Z][A-Z]+([ ][A-Z][AZ]+){0,1}"));
do{
datos[pos][1]=LE.leerString ("Ingrese el sexo del postulante: \n [F]:
Femenino \n [M]:
Masculino").toUpperCase ( );
if(!datos[pos][1].matches("[FM]")){
LE.mostrarAdvertencia ("Lo sentimos, el caracter ingresado es
incorrecto!");
}
}while(!datos[pos][1].matches("[FM]"));
do{
datos[pos][2]=LE.leerString ("Ingrese la nueva edad del postulante:");
if(!datos[pos][2].matches("[0123456789][0123456789]")){
LE.mostrarAdvertencia ("Lo sentimos, la edad que ha ingresado es
incorrecta!") ;
}
}while(!datos[pos][2].matches("[0123456789][0123456789]"));
}else{
LE.mostrarAdvertencia ("Usted cancel la operacin");
}
}else{
LE.mostrarInformacion ("Lo sentimos, el cdigo ingresado no existe!");
}
break;
""
""
case '2':
do{
cod = LE.leerInt ("Ingrese codigo del postulante que desea modificar :");
if((cod<1000 || cod>9999)){
LE.mostrarAdvertencia ("Lo sentimos, los cdigos de postulante estan
entre 1000 y 9999");
}
}while((cod<1000 || cod>9999));
pos = buscarXCodigo(cod);
if (pos!=-1){
int resp = LE.mostrarPreguntaOpcion2("Desea modificar el puntaje del
postulante: " + datos[pos][0]);
if (resp==0){
puntaje[pos]=LE.leerInt ("Ingrese el nuevo puntaje del postulante: ");
if(puntaje[pos]>=700){
situacion[pos]="Ingreso";
}else{
situacion[pos]="No ingreso";
}
}else{
LE.mostrarAdvertencia ("Usted cancel la operacin");
}
Pg. 295
Clase PrgPostulantes
}else{
LE.mostrarInformacion ("Lo sentimos, el cdigo ingresado no existe!");
}
break;
default:
LE.mostrarAdvertencia ("Lo sentimos, la opcin ingresada es incorrecta!");
break;
}
}while(opc!='R' && fin!='F');
}//Fin de Mtodo Modificar
Pg. 296
Clase PrgPostulantes
codigo[conta]=LE.leerInt ("Ingrese el codigo del Postulante: ");
if(codigo[conta]<1000 || codigo[conta]>9999){
LE.mostrarAdvertencia ("Lo sentimos, los cdigos de postulante estan entre
1000 y 9999");
}
if(buscarXCodigo(codigo[conta])!=-1){
LE.mostrarAdvertencia ("Lo sentimos, el cdigo ingresado ya existe en
nuestra base de datos!");
}
}while((codigo[conta]<1000 || codigo[conta]>9999) ||
buscarXCodigo(codigo[conta])!=-1);
""
""
""
do{
datos[conta][0]=LE.leerString ("Ingrese el nombre y apellidos del postulante con
cdigo:" + codigo[conta]).toUpperCase ( );
if(!datos[conta][0].matches("[A-Z][A-Z]+[ ][A-Z][A-Z]+([ ][A-Z][AZ]+){0,1}")){
LE.mostrarAdvertencia ("Lo sentimos, los datos ingresados son
incorrectos!");
}
}while(!datos[conta][0].matches("[A-Z][A-Z]+[ ][A-Z][A-Z]+([ ][A-Z][AZ]+){0,1}"));
""
""
""
""
do{
datos[conta][1]=LE.leerString ("Ingrese el sexo del postulante: \n [F]: Femenino
\n [M]:Masculino").toUpperCase ( );
if(!datos[conta][1].matches("[FM]")){
LE.mostrarAdvertencia ("Lo sentimos, el caracter ingresado es incorrecto!");
}
}while(!datos[conta][1].matches("[FM]"));
""
do{
datos[conta][2]=LE.leerString ("Ingrese la edad del postulante:");
if(!datos[conta][2].matches("[0123456789][0123456789]")){
LE.mostrarAdvertencia ("Lo sentimos, la edad que ha ingresado es
incorrecta!");
}
}while(!datos[conta][2].matches("[0123456789][0123456789]"));
LE.mostrarAdvertencia ("Los datos del estudiante: "+ datos[conta][0] + " fueron
registrados de forma exitosa!");
conta++;
resp = LE.mostrarPreguntaOpcion2("Desea aadir otro postulante?");
""
""
}while(resp==0);
generarPuntaje ( );
leerPuntaje ( );
}
public void OrdenarCodigos ( ){
for (int i=0;i<conta-1;i++){
for (int j=i+1;j<conta;j++){
if (codigo[i]>codigo[j]){
int aux = codigo[i];
codigo[i] = codigo[j];
codigo[j] = aux;
Pg. 297
Clase PrgPostulantes
String aux2 = datos[i][0];
datos[i][0] = datos[j][0];
datos[j][0] = aux2;
String aux3 = datos[i][1];
datos[i][1] = datos[j][1];
datos[j][1] = aux3;
String aux4 = datos[i][2];
datos[i][2] = datos[j][2];
datos[j][2] = aux4;
int aux5 = puntaje[i];
puntaje[i]=puntaje[j];
puntaje[j]=aux5;
String aux6 = situacion[i];
situacion[i]=situacion[j];
situacion[j]=aux6;
}
}
}
String lis = "Listado de alumnos Ordenados Por Codigos\n\n";
for (int i =0;i<conta;i++){
lis += (i+1)+") "+codigo[i]+"-->"+datos[i][0]+" "+"("+datos[i][1]+") "+datos[i][2]+"
Resultado--> "+puntaje[i]+"-->"+situacion[i]+"\n";
}
LE.mostrarResultado(lis);
""
Pg. 298
Clase PrgPostulantes
String aux6 = situacion[i];
situacion[i]=situacion[j];
situacion[j]=aux6;
}
}
}
String lis = "Listado de alumnos Ordenados Por Codigos\n\n";
for (int i =0;i<conta;i++){
lis += (i+1)+") "+codigo[i]+"-->"+datos[i][0]+" "+"("+datos[i][1]+") "+datos[i][2]+"
Resultado--> "+puntaje[i]+"-->"+situacion[i]+"\n";
}
LE.mostrarResultado(lis);
""
Pg. 299
Clase PrgPostulantes
menu += "-----------------------------\n";
menu += "[1] Por codigos\n";
menu += "[2] Por Nombres\n";
menu += "[3] Los que no ingresaron\n";
menu += "[R] Regresar\n";
menu += "-----------------------------\n";
menu += "Seleccione la opcin deseada:";
do{
opc = Character.toUpperCase(LE.leerChar(menu));
switch(opc){
case '1':EliminarCodigo ( );
break;
case '2':EliminarNombre ( );
break;
case '3':ElminarNoingresantes ( );
break;
}
}while(opc!='R' && fin!='F');
}
""
if (pos!=-1){
int resp = LE.mostrarPreguntaOpcion2("Esta seguro que desea eliminar:\n"+
"\tCodigo :"+codigo[pos]+"\n"+
"\tNombre :"+datos[pos][0]+"\n");
if (resp==0){
eliminarGen(pos);
}
}else{
LE.mostrarInformacion ("Lo sentimos, el cdigo ingresado no existe!");
}
}
Pg. 300
Clase PrgPostulantes
LE.mostrarAdvertencia ("Lo sentimos, los cdigos de postulantes estn entre
1000 y 9999");
""
}
}while((cod<1000 || cod>9999));
int pos = buscarXCodigo(cod);
if (pos!=-1){
int resp = LE.mostrarPreguntaOpcion2("Esta seguro que desea eliminar:\n"+
"\tCodigo :"+codigo[pos]+"\n"+
"\tNombre :"+datos[pos][0]+"\n");
if (resp==0){
eliminarGen(pos);
}
}else{
LE.mostrarInformacion ("Codigo Inexistente !");
}
}
Pg. 301
Clase PrgPostulantes
public void MayorMenor ( ){
int may=0,men=1000;
String resultados="";
for(int i=0;i<conta;i++){
may=Math.max(may,puntaje[i]);
men=Math.min(men,puntaje[i]);
}
String lis = "El puntaje ms alto es:\n"+
"--------------------------\n"+
"Cdigo:\t\t Nombres y Apellidos:\t\t Sexo:\t\t Edad:\t\t Puntaje\t\t
""
Situacion: \n";
String lis2 = "El puntaje ms bajo es:\n"+
"--------------------------\n"+
"Cdigo:\t\t Nombres y Apellidos:\t\t Sexo:\t\t Edad:\t\t Puntaje\t\t
""
Situacion: \n";
for(int i=0;i<conta;i++){
if(puntaje[i]==may){
lis +=+codigo[i]+"\t\t\t "+datos[i][0]+"\t\t\t "+datos[i][1]+" \t\t\t"+datos[i][2]+" \t\t\t
""
"+puntaje[i]+"\t\t\t "+situacion[i]+"\n";
}
if(puntaje[i]==men){
lis2 +=+codigo[i]+"\t\t\t "+datos[i][0]+"\t\t\t "+datos[i][1]+" \t\t\t"+datos[i][2]+"
""
\t\t\t "+puntaje[i]+"\t\t\t "+situacion[i]+"\n";
}
}
resultados=lis+lis2;
LE.mostrarResultado(resultados);
}
}
Pg. 302
Problema 033
RUTAS PARCIALES
COSTO
Lima Trujillo
S/. 10.00
Lima Chiclayo
S/. 15.00
Trujillo Chiclayo
S/. 5.00
Chiclayo Trujillo
S/. 5.00
Chiclayo Lima
S/. 15.00
Trujillo Lima
S/. 10.00
nombre
1
0
4
:
numPas = 0
99999
:
99999
(String)
Donde:
ruta
(int)
Pg. 303
(int)
public PrgNorteito ( ) {
datos = new String[10][2];
ruta = new int[10];
numPas = 0;
contaMen = 1000;
}// Fin Mtodo Constructor
public void menu ( ) {
String menu1 = " NORTEITO S.R.L. \n"
+ "------------------------------------ \n"
+ "[1] Ingresar Datos del Pasajero \n" + "[0] Finalizar \n"
+ "------------------------------------ \n"
+ "Seleccione su opcin \n";
String menu2 = " NORTEITO S.R.L. \n"
+ "------------------------------------ \n"
+ "[1] Ingresar Datos del Pasajero \n" + "[2] Mostrar Datos \n"
+ "[3] Modificar Datos \n" + "[4] Eliminar Datos \n"
+ "[5] Ordenar Datos \n"
+ "[6] Obtener Cantidad de Pasajeros por Ruta \n"
+ "[7] Obtener Ganancias totales \n" + "[0] Finalizar \n"
+ "------------------------------------ \n"
+ "Seleccione su opcin \n";
int opc;
String menu = menu1;
boolean sw = false;
do {
opc = LE.leerInt (menu);
switch (opc) {
case 1:
Pg. 304
Clase PrgNorteito
ingresar ( );
menu = menu2;
sw = true;
break;
case 2:
if (sw) {
mostrar ( );
} else {
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada.");
}
break;
case 3:
if (sw) {
modificar ( );
} else {
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada.");
}
break;
case 4:
if (sw) {
eliminar ( );
if (numPas == 0) {
sw = false;
menu = menu1;
}
} else {
LE .mostrarError("Lo sentimos, su solicitud no puede ser procesada.");
}
break;
case 5:
if (sw) {
ordenar ( );
} else {
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada.");
}
break;
case 6:
if (sw) {
calcularPasajeroPorRuta ( );
} else {
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada.");
}
break;
case 7:
if (sw) {
calcularGananciaPorRuta ( );
} else {
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada.");
}
break;
Pg. 305
Clase PrgNorteito
case 0:
finalizar ( );
break;
default:
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada");
break;
}// Fin de Switch
} while (opc != 0);
}// Fin menu
""
""
do {
do {
datos[numPas][0] = LE .leerString("Ingrese su nmero de DNI");
pos = buscar (datos[numPas][0]);
if (pos != -1) {
LE.mostrarError ("Lo sentimos, el nmero de DNI ya existe en
nuestra base de datos");
}
} while (pos != -1);
if (!datos[numPas][0].matches("[0-9]{8}")) {
LE.mostrarError ("Lo sentimos, el nmero de DNI debe contener 8
caracteres");
}
} while (!datos[numPas][0].matches("[0-9]{8}"));
} else {
datos[numPas][0] = String.valueOf(contaMen);
}// Fin de ingreso de dni
do {
datos[numPas][1] = LE.leerString ("Ingrese su nombre");
datos[numPas][1] = datos[numPas][1].trim ( );
""
if (datos[numPas][1].length ( ) < 2) {
LE.mostrarError ("Lo sentimos, el nombre tiene que contener ms de 2
caracteres");
}
} while (datos[numPas][1].length ( ) < 2);
Pg. 306
Clase PrgNorteito
do {
ruta[numPas] = LE.leerInt ("NORTEITO S.R.L \n"
+ "[1] Lima - Huacho \n" + "[2] Lima - Barranca \n"
+ "[3] Huacho -Barranca \n"
+ "[4] Barranca - Huacho \n" + "[5] Barranca - Lima \n"
+ "[6] Huacho - Lima \n"
+ "---------------------------- \n"
+ "Seleccione su Ruta");
if (1 > ruta[numPas] || ruta[numPas] > 6) {
LE.mostrarError ("Lo sentimos, la ruta que eligi no existe");
}
} while (1 > ruta[numPas] || ruta[numPas] > 6); // Fin de Ingreso de
// Ruta
numPas++;
contaMen++;
rpta = LE.mostrarPreguntaOpcion2("Desea ingresar otro pasajero?");
} while (rpta == 0);
}// Fin mtodo Ingresar
public void aumentarArreglo ( ) {
String dat[][] = new String[ruta.length + 5][2];
int rut[] = new int[ruta.length + 5];
for (int i = 0; i < rut.length; i++) {
dat[i][0] = datos[i][0];
dat[i][1] = datos[i][1];
rut[i] = ruta[i];
}
datos = dat;
ruta = rut;
}// Fin mtodo aumentarArreglo
public void modificar ( ) {
""
""
if (pos != -1) {
rpta = LE.mostrarPreguntaOpcion2("Esta seguro que desea modificafr los
datos del pasajero :" + datos[pos][1]
+ " Cuyo DNI es: " + datos[pos][0]);
if (rpta == 0) {
menuModificar(pos);
} else {
LE.mostrarAdvertencia ("usted ha cancelado la modificacin");
Pg. 307
Clase PrgNorteito
}
} else {
LE .mostrarAdvertencia("Lo sentimos, el pasajero que usted ha ingresado no
existe");
}
""
} else {
// Modificacion de pasajero menor de edad
nombre = LE.leerString ("Ingrese el nombre del pasajero");
pos = buscarNombre(nombre);
if (pos != -1) {
rpta = LE.mostrarPreguntaOpcion2("Esta seguro que desea modificar los
datos del pasajero :" + datos[pos][1]
+ "Cuyo cdigo asignado es: "
+ datos[pos][0]);
if (rpta == 0) {
menuModificar2(pos);
} else {
LE.mostrarAdvertencia ("Usted ha cancelado la modificacin");
}
} else {
LE.mostrarAdvertencia ("Lo sentimos, el pasajero que usted ha ingresado no
existe");
}
""
""
}
}
""
do {
opc = LE.leerInt (menu);
switch (opc) {
case 1:
do {
datos[pos][0] = LE.leerString ("Ingrese el nuevo nmero de DNI");
if (!datos[pos][0].matches("[0-9]{8}")) {
LE.mostrarError ("Lo sentimos, el nmero de DNI debe contener 8
caracteres");
}
} while (!datos[pos][0].matches("[0-9]{8}"));
LE.mostrarAdvertencia ("La operacin fu realizada con xito");
break;
case 2:
do {
datos[pos][1] = LE.leerString ("Ingrese el nuevo nombre");
datos[pos][1] = datos[pos][1].trim ( );
Pg. 308
Clase PrgNorteito
""
if (datos[pos][1].length ( ) < 2) {
LE.mostrarError ("Lo sentimos, el nombre tiene que contener ms de 2
caracteres");
}
} while (datos[pos][1].length ( ) < 2);
LE.mostrarAdvertencia ("La operacin fu realizada con xito");
break;
case 3:
do {
ruta[pos] = LE.leerInt ("BARRANQUITA S.R.L \n"
+ "[1] Lima - Huacho \n" + "[2] Lima - Barranca \n"
+ "[3] Huacho -Barranca \n"
+ "[4] Barranca - Huacho \n"
+ "[5] Barranca - Lima \n" + "[6] Huacho - Lima \n"
+ "----------------------------\n"
+ "Seleccione su Ruta");
if (1 > ruta[pos] || ruta[pos] > 6) {
LE.mostrarError ("Lo sentimos, la ruta que eligi no existe");
}
} while (1 > ruta[pos] || ruta[pos] > 6); // Fin de Ingreso de
// Ruta
LE.mostrarAdvertencia ("La operacin fu realizada con xito");
break;
case 4:
LE.mostrarAdvertencia ("Regresando al men anterior");
break;
default:
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada");
break;
}
} while (opc != 4);
}// Fin mtodo menuModificar
public void menuModificar2(int pos) {
String menu = "-*-*-*-Menu Modificar-*-*-*-*-*-\n"
+ "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n"
+ "[1] Modificar Nombre\n" + "[2] Modificar Ruta\n"
+ "[3] Retroceder\n" + "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n"
+ "Seleccione su opcin";
int opc;
do {
opc = LE.leerInt (menu);
switch (opc) {
case 1:
do {
datos[pos][1] = LE.leerString ("Ingrese el nuevo nombre");
datos[pos][1] = datos[pos][1].trim ( );
""
if (datos[pos][1].length ( ) < 2) {
LE.mostrarError ("Lo sentimos, el nombre tiene que contener ms de 2
caracteres");
Pg. 309
Clase PrgNorteito
}
} while (datos[pos][1].length ( ) < 2);
LE.mostrarAdvertencia ("La operacin fu realizada con xito");
break;
case 2:
do {
ruta[pos] = LE.leerInt ("NORTEITO S.R.L \n"
+ "[1] Lima - Huacho \n" + "[2] Lima - Barranca \n"
+ "[3] Huacho -Barranca \n"
+ "[4] Barranca - Huacho \n"
+ "[5] Barranca - Lima \n" + "[6] Huacho - Lima \n"
+ "----------------------------"
+ "Seleccione su Ruta");
if (1 > ruta[pos] || ruta[pos] > 6) {
LE.mostrarError ("Lo sentimos, la ruta que eligi no existe");
}
} while (1 > ruta[pos] || ruta[pos] > 6);
LE.mostrarAdvertencia ("La operacin fu realizada con xito");
break;
case 3:
LE.mostrarAdvertencia ("Regresando al men anterior");
break;
default:
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada");
break;
}
} while (opc != 3);
}// Fin mtodo menuModificar2
public void mostrar ( ) {
String informacion = "Datos de todos los pasajeros \n \n ", rut = "";
for (int i = 0; i < numPas; i++) {
switch (ruta[i]) {
case 1:
rut = " [1] Lima - Huacho";
break;
case 2:
rut = " [2] Lima - Barranca";
break;
case 3:
rut = " [3] Huacho - Barranca";
break;
case 4:
rut = " [4] Barranca - Huacho";
break;
case 5:
Pg. 310
Clase PrgNorteito
rut = " [5] Barranca - Lima";
break;
case 6:
rut = " [6] Huacho - Lima";
break;
""
""
Pg. 311
Clase PrgNorteito
""
""
""
if (pos != -1) {
rpta = LEmostrarPreguntaOpcion2("Esta seguro que desea eliminar los datos
del pasajero :" + datos[pos][1] + " Cuyo
DNI es: " + datos[pos][0]);
if (rpta == 0) {
for (int i = 0; i < numPas - 1; i++) {
datos[i][0] = datos[i + 1][0];
datos[i][1] = datos[i + 1][1];
ruta[i] = ruta[i + 1];
}
numPas--;
LE.mostrarInformacion ("Los datos fueron eliminados de forma exitosa");
} else {
LE.mostrarAdvertencia ("Usted ha cancelado la operacin");
}
} else {
LE.mostrarAdvertencia ("Lo sentimos, el pasajero que usted ha ingresado no
existe");
}
} else {
// Eliminacin de pasajero menor de edad
nombre = LE.leerString ("Ingrese el nombre del pasajero que desea eliminar");
pos = buscarNombre(nombre);
""
""
""
if (pos != -1) {
rpta = LE.mostrarPreguntaOpcion2("Esta seguro que desea eliminar los
datos del pasajero :" + datos[pos][1]
+ "Cuyo cdigo asignado es: " +
datos[pos][0]);
if (rpta == 0) {
for (int i = 0; i < numPas - 1; i++) {
datos[i][0] = datos[i + 1][0];
datos[i][1] = datos[i + 1][0];
ruta[i] = ruta[i + 1];
}
numPas--;
LE.mostrarInformacion ("Los datos fueron eliminados de forma exitosa");
} else {
LE.mostrarAdvertencia ("Usted ha cancelado la modificacin");
}
} else {
LE.mostrarAdvertencia ("Lo sentimos, el pasajero que usted ha ingresado no
existe");
}
}
}// Fin mtodo eliminar
public void calcularGananciaPorRuta ( ) {
double rut, r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0;
for (int i = 0; i < numPas; i++) {
Pg. 312
Clase PrgNorteito
switch (ruta[i]) {
case 1:
r1 += 10;
break;
case 2:
r2 += 15;
break;
case 3:
r3 += 5;
break;
case 4:
r4 += 5;
break;
case 5:
r5 += 15;
break;
case 6:
r6 += 10;
break;
}// Fin de switch
}// Fin de for
rut = r1 + r2 + r3 + r4 + r5 + r6;
LE.mostrarInformacion ("NORTEITO S.R.L \n" + "Ganancia por Ruta\n"
+ "----------------------------\n" + "[1] Lima - Huacho: $ "
+ r1 + "\n" + "[2] Lima - Barranca: $ " + r2 + "\n"
+ "[3] Huacho - Barranca : $ " + r3 + "\n"
+ "[4] Barranca - Huacho: $ " + r4 + "\n"
+ "[5] Barranca - Lima: $ " + r5 + "\n"
+ "[6] Huacho - Lima: $ " + r6 + "\n"
+ "----------------------------\n"
+ "El total de ganancia es: $ " + rut);
}// Fin mtodo Calcular Ganancia por Ruta
public void calcularPasajeroPorRuta ( ) {
double rut, r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0;
for (int i = 0; i < numPas; i++) {
switch (ruta[i]) {
case 1:
r1++;
break;
case 2:
r2++;
break;
case 3:
r3++;
break;
Pg. 313
Clase PrgNorteito
case 4:
r4++;
break;
case 5:
r5++;
break;
case 6:
r6++;
break;
}
}
rut = r1 + r2 + r3 + r4 + r5 + r6;
LE.mostrarInformacion ("NORTEITO S.R.L \n"
+ "Cantidad de Pasajeros por Ruta\n"
+ "----------------------------------------\n"
+ "[1] Lima - Huacho: " + r1 + "\n"
+ "[2] Lima - Barranca: " + r2 + "\n"
+ "[3] Huacho - Barranca : " + r3 + "\n"
+ "[4] Barranca - Huacho: " + r4 + "\n"
+ "[5] Barranca - Lima: " + r5 + "\n" + "[6] Huacho - Lima: "
+ r6 + "\n" + "----------------------------------------\n"
+ "El total de pasajeros es: " + rut);
}// Fin mtodo Calcular Pasajero por Ruta
public void ordenar ( ) {
String menu = "-*-*-*-Menu Ordenar-*-*-*-*-*-\n"
+ "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n"
+ "[1] Ordenar por Documento\n" + "[2] Ordenar por Nombre \n"
+ "[3] Ordenar por Ruta\n" + "[4] Retroceder\n"
+ "/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n" + "Seleccione su opcin";
int opc;
do {
opc = LE.leerInt (menu);
switch (opc) {
case 1:
OrdenarPorSeleccion ( );
mostrar ( );
break;
case 2:
OrdenarEnBurbuja ( );
mostrar ( );
break;
case 3:
OrdenarEnQuickSort(0, numPas - 1);
mostrar ( );
break;
case 4:
LE.mostrarAdvertencia ("Regresando al men anterior");
break;
Pg. 314
Clase PrgNorteito
default:
LE.mostrarError ("Lo sentimos, su solicitud no puede ser procesada");
break;
}
} while (opc != 4);
}// Fin mtodo ordenar
public void OrdenarEnBurbuja ( ) {
int tempRuta;
String tempDatos;
for (int i = 0; i < numPas - 1; i++) {
for (int j = i + 1; j < numPas; j++) {
if (datos[i][1].compareToIgnoreCase(datos[j][1]) > 0) {
tempRuta = ruta[i];
ruta[i] = ruta[j];
ruta[j] = tempRuta;
for (int k = 0; k < 2; k++) {
tempDatos = datos[i][k];
datos[i][k] = datos[j][k];
datos[j][k] = tempDatos;
}
}
}
}
LE.mostrarAdvertencia ("Los datos fueron ordenados correctamente");
}// Fin ordenar en Burbuja
Pg. 315
Clase PrgNorteito
}
i++;
j--;
}
} while (i <= j);
if (primero < j) {
OrdenarEnQuickSort(primero, j);
}
if (ultimo > i) {
OrdenarEnQuickSort(i, ultimo);
}
}// Fin ordenar en QuickSort
public void OrdenarPorSeleccion ( ){
int dniTemp, k, j;
int tempRuta=0;
String tempNombres="";
for (int i=0;i<numPas;i++) {
dniTemp = Integer.parseInt(datos[i][0]);
k=i;
for (j=i+1;j<numPas;j++){
if ((Integer.parseInt(datos[j][0]))<dniTemp)
k=j;
dniTemp = Integer.parseInt(datos[k][0]);
tempRuta=ruta[k];
tempNombres=datos[k][1];
}
}
datos[k][0] = datos[i][0] ;
datos[i][0]=""+dniTemp;
datos[k][1] = datos[i][1] ;
datos[i][1]=tempNombres;
ruta[k]=ruta[i];
ruta[i]=tempRuta;
}
}
public void finalizar ( ) {
LE.mostrarAdvertencia ("Usted ha finalizado el programa");
}
}// Fin PrgNorteito
Pg. 316
Mtodo ordenar
..
Pg. 317
Mtodo OrdenarEnQuickSort
..
Llamada recursiva al
mtodo
OrdenarEnQuickSort ( );
}
} while (i <= j);
if (primero < j) {
OrdenarEnQuickSort(primero, j);
}
if (ultimo > i) {
OrdenarEnQuickSort(i, ultimo);
}
}// Fin ordenar en QuickSort
Pg. 318
Validacin de datos
..
do {
do {
datos[numPas][0] = LE.leerString ("Ingrese su nmero de DNI");
pos = buscar (datos[numPas][0]);
if (pos != -1) {
LE .mostrarError("Lo sentimos, el nmero de DNI ya existe en nuestra
base de datos");
}
} while (pos != -1);
if (!datos[numPas][0].matches("[0-9]{8}")) {
LE.mostrarError ("Lo sentimos, el nmero de DNI debe contener 8
caracteres");
}
} while (!datos[numPas][0].matches("[0-9]{8 }"));
Como vemos en el anterior recuadro. Se realizan dos validaciones para el ingreso del
DNI de un pasajero.
El primero con un mtodo de buscar para evitar que no existan dos documentos iguales
dentro del vector DNI.
El segundo con el mtodo matches para que permita slo el ingreso de datos que estn
comprendidos entre el 0 y el 9. Y que slo pueda permitir el ingreso de 8 caracteres. De
este modo asegurando la legitimidad de los datos ingresados.
Pg. 319
PROBLEMAS PROPUESTOS
1. Desarrollar una solucin que permita registrar los nombres y las edades de todas las
personas que estn inscritas para una conferencia en la FIA. Mostrar el nombre de las
personas que tienen ms de 18 aos. Utilice la Grfica de Estructura de Datos mostrada.
Dados los vectores:
nombre
edad
:
:
:
:
(String)
(int)
0
1
2
3
9999
numPer = 0
(int)
2. Se desea registrar los cdigos, nombres y el promedio final de los alumnos del curso de
Algoritmo y Estructura de datos I, y determinar cul es el porcentaje de alumnos
aprobados y desaprobados. Adicionalmente determinar quin es el alumno que ha
obtenido la mayor nota. Utilice la Grfica de Estructura de Datos mostrada.
Dados los vectores:
nombre
codigo
promedio
:
:
:
:
:
:
(String)
(long)
(double)
0
1
2
3
numAlu - 1
numAlu
Donde numAlu permite almacenar el nmero de alumnos.
Pg. 320
(int)
3. Desarrollar una solucin que permita ingresar y almacenar el nombre, el cdigo y las
notas de las prcticas de todos los alumnos de un saln de clase. Determinar el
porcentaje de alumnos aprobados y desaprobados.
codigo
nota
0
numPra-1
0
1
2
.
:
.
:
.
:
(String)
(long)
.
:
.
:
numAlu
( int )
numAlu - 1
numPra
(double)
( int )
Donde:
4. La Librera Boligrafito S.A., ubicada cerca de la FIA, vende diversos artculos de oficina.
Desarrolle una aplicacin para determinar la ganancia por cada artculo si se vendiera
todo lo que se tiene en el almacn. Mostrar los artculos ordenados por la cantidad de
artculos. Utilice la Grfica de Estructura de Datos mostrada.
Dados los arreglos:
nombre
cantidad
precio
PV (0)
PC (1)
0
1
2
3
:
:
:
:
(String)
(lint)
:
:
9999
numArt = 0
Donde:
double)
(double)
Pg. 321
(int)
datosHotel
NH (0)
VA (1)
:
:
:
:
EH (2)
NA (3)
0
1
2
3
:
:
numHab - 1
numHab
(int)
Donde:
(int)
6. El alumno Torres tiene ms de 1000 cintas de video con pelculas de accin, drama,
suspenso y comedia. Torres decide alquilar sus cintas de video a un costo bajo. Para ello,
copi las mejores cintas de video que posea y desarroll un programa de computadora
para mantener un adecuado control del alquiler de las cintas de video y sus respectivas
copias. Para el desarrollo del programa de computadora determin que era necesario
utilizar la Grfica de Estructuras de Datos mostrada. Desarrolle una solucin utilizando
un men de opciones.
Dadas las matrices:
pelicula
nom (0)
alquiler
cod (1)
cos (0)
sto (1)
alq (2)
tot (3)
:
:
:
:
:
:
:
:
:
:
:
:
9
(String)
(int)
(long)
Pg. 322
numPel = 0
Donde:
cliente
datos
nom
0
num (0)
cac (1)
cat (2)
:
:
:
:
:
:
:
:
9999
numMes = 0
9999
(String)
Donde:
(int)
(double)
Pg. 323
Equipo
datos
Nom
0
PJ (0)
PG (0)
PE (0)
GF (1)
GC (2)
PA (3)
:
:
:
:
:
:
:
:
:
:
:
:
:
:
numEqu -1
numEqu
numEqu - 1
(int)
( String )
( int )
Donde:
9. La empresa La Moderna SA, se dedica a la venta de equipos de todo tipo. Hace unos
das han detectado algunos problemas en su inventario y desean realizar una aplicacin
que les permita obtener la utilidad al realizar la venta de equipos. El sobrino del gerente
de la empresa, estudiante de la FIA, ha recomendado que se utilice el lenguaje de
programacin Java y que se desarrolle la aplicacin utilizando un men de opciones y la
Grfica de Estructuras de Datos mostrada.
Dados los arreglos:
nombre
datos
CA (0)
PC (1)
PV (2)
:
:
:
:
:
:
:
:
9999
9999
(String)
(int)
(double)
Pg. 324
numEqu = 0
Donde:
10. Un grupo de estudiantes visitaron diversos colegios del cono norte de Lima apoyando a
los docentes en el dictado de diversas charlas. En total visitaron aproximadamente 15
colegios y observaron que todos los colegios posean computadoras donadas por
instituciones privadas. El alumno Gutirrez coment a sus compaeros que podan
desarrollar una aplicacin que permita controlar las vacantes a cada una de las charlas
programadas. Desarrollar una solucin utilizando mtodos y arreglos en paralelo, que
permita ingresar, almacenar y manejar los datos en base a la Grfica de Estructuras de
Datos mostrada. Se deber desarrollar un men.
charlas
asistentes
vac (0)
cos (0)
des (0)
ins (1)
inv (2)
:
:
:
:
:
:
:
:
:
:
:
:
9
(int)
(String)
(double)
Donde:
numCha = 0
Pg. 325
PROYECTOS SUGERIDOS
10. Desarrollar una aplicacin utilizando mtodos, arreglos y un men de opciones que
permita manejar y controlar la venta de productos en una farmacia.
Pg. 326
area
Rosa
Frank
Jos
Luis
Mara
:
0
1
2
3
4
:
99999
900
800
850
800
900
:
0
1
2
3
4
:
99999
99999
(String)
Donde:
sueldo
Aulas Virtuales
Second Life
Web Docente
Second Life
Aulas Virtuales
:
(String)
(Double)
codigo
nombre
99999
Donde:
PC
PV
99999
(String)
CA
99999
(String)
(int)
(Double)
Pg. 327
13. En las siguientes estructuras se tienen almacenados los nombres, las direcciones,
distritos, los DNI y los sueldos de los trabajadores de una empresa. Se busca una
desarrollar una solucin en el lenguaje de programacin Java que permita obtener el
total de sueldos que paga la empresa y que permita organizar adecuadamente los
datos de los trabajadores de la empresa,
datos
nombres
direcciones
distrito
dni
sueldo
99999
99999
numEmp = 0
(int)
99999
(Double)
Donde:
(long)
(Double)
codigo
nombre
99999
EXP
EXF
99999
(long)
PTR
99999
(String)
Pg. 328
(int)
(Double)
Donde:
RUTAS PARCIALES
COSTO
Lima Huacho
S/. 8.00
Lima Barranca
S/. 8.00
Huacho Barranca
S/. 8.00
Barranca Huacho
S/. 8.00
Barranca Lima
S/. 8.00
Huacho Lima
S/. 8.00
nombre
direccion
ruta
costo
99999
99999
(Double)
Donde:
99999
(long)
Pg. 329
(Double)
numPas = 0
(int)
[1]
[2]
[3]
Finalizar.
Considerar que las opciones pueden tener submens para manejar adecuadamente la
informacin que se requiera. Plantee el Diagrama de Estructuras de Datos en base a las
necesidades de almacenamiento de datos del usuario. Recuerde que la participacin del
usuario o cliente en el desarrollo de la aplicacin es sumamente importante.
Incorpore Interfaz Grfica en sus aplicaciones (GUI). Los conceptos de las GUIs sern
tratados en captulos posteriores.
Pg. 330
INTNTALO
1. Desarrollar una solucin que permita ingresar, almacenar y manejar los datos de un
ranking de msica en base a la Grfica de Estructuras de Datos mostrada.
codigo
datos1
nom (0)
datos2
aut (1)
:
:
9
Donde:
exp (1)
:
:
:
:
:
:
:
:
9
(long)
sol (0)
numTem = 0
9
(String)
(int)
(int)
Se deber desarrollar un men con dos opciones generales y cada opcin con un
submen:
[1]
[2]
Pg. 331
[2.2] Modificar datos por codigo (no se podr modificar los cdigos ni el nmero
de veces que un tema ha sido solicitado).
[2.3] Eliminar datos por cdigo.
[2.4] Salir.
[3]
Finalizar.
Consideraciones:
Es importante indicar que la solucin a desarrollar deber permitir el manejo de los
datos de un ranking de temas musicales. Por este motivo, en la solucin se incluyen
opciones para ingresar, mostrar, buscar, ordenar, eliminar y modificar datos, con
algunas restricciones, de tal forma que nos permita un adecuado control y
mantenimiento de los datos almacenados en las estructuras de datos utilizadas.
Adicionalmente, se tienen opciones especficas para manejar el ranking de temas
musicales tales como registro de votacin, registro de la opinin del experto y
establecimiento y visualizacin del ranking. A travs de la opcin de registro de
votacin, se podr agregar un voto a un determinado tema musical y a travs de la
opcin de establecimiento y visualizacin del ranking, se podr obtener el ranking,
donde el tema musical que tenga ms votos se ubicar en el primer lugar del ranking.
Tambin, se ha incluido la opcin registro de la opinin del experto, la cual permitir
manipular las posiciones del ranking en caso que exista un empate en las votaciones
entre los diferentes temas musicales.
Pg. 332