Академический Документы
Профессиональный Документы
Культура Документы
Lenguaje de
Programación
Semestre 2
Lenguaje de programación
Lenguaje de
programación Semestre 2
Lenguaje de programación
Introducción 1
Conceptos previos 1
Mapa conceptual Fascículo 5 2
Logros 3
Arrays de Una Dimensión. Utilizar sólo un Inicializador 3
Utilizar la palabra clave "new" y un Inicializador 8
Trabajar con un array uni-dimensional 10
Algoritmos de búsqueda de datos en vectores y métodos de
Ordenamiento 12
Resumen 24
Bibliografía recomendada 24
Nexo 25
Seguimiento al autoaprendizaje 27
Anexo 5 28
Créditos: 3
Tipo de asignatura: Teórica – Práctico
Semestre 2
Lenguaje de programación
Lenguaje de
programación Semestre 2
Lenguaje de programación 1
Introducción
Uno de los grandes problemas en la computación moderna, lo constituye
la organización de la información y las capacidades que se deben tener en
cuenta para acceder no sólo a este proceso, sino al desarrollo de una serie
de tareas complementarias a esta, que permitan a los desarrolladores de
aplicaciones hacer que el acceso a los datos sea limpio, transparente y
eficiente. En este contexto, es donde la algoritmia y los métodos tradicio-
nales de optimización entran a jugar un papel fundamental en la definición
de nuevas tareas operativas para la construcción de funcionalidades de
búsqueda y organización de datos que ayuden a que la información
relevante para los usuarios sea manejada con propiedad y cumpla sus
objetivos.
Conceptos previos
Es fundamental para el desarrollo de los temas de este fascículo, realizar
un repaso del manejo de las clases, los métodos y el diseño de estos
últimos. Igualmente, es clave tener claridad frente a los conceptos de
herencia, retorno de métodos e instanciación de objetos.
Fascículo No. 5
Lenguajede
programación
2 Semestre 2
Lenguaje de programación
Logros
Fascículo No. 5
Semestre 2 3 Lenguaje de
programación
Lenguaje de programación
Figura 5.1
Ilustración de un arreglo simple de datos (en este caso datos de tipo entero (int)).
Fascículo No. 5
Lenguajede
programación
4 Semestre 2
Lenguaje de programación
a. Cargar de datos el arreglo (es decir, poblar todas sus posiciones con
datos del tipo de la declaración de la cual fue hecho el arreglo).
b. Navegar el arreglo de arriba hacia abajo y como sea necesario hacerlo
para poder ubicar sus datos y hacer algún proceso algorítmico espe-
cífico con ellos.
c. Finalmente, si es necesario y conveniente, acceder al arreglo y sacar
sus datos ya sea para imprimirlos o para usarlos en algún proceso
complejo de cálculo que involucre su uso.
Fascículo No. 5
Semestre 2 5 Lenguaje de
programación
Lenguaje de programación
Figura 5.2
Lectura de datos para la creación de un nuevo arreglo en tiempo de ejecución.
Fascículo No. 5
Lenguajede
programación
6 Semestre 2
Lenguaje de programación
decir que siempre tengan que leerse los datos manualmente. Si datos
se leen de un archivo plano, dicho archivo debe abrirse y utilizar el ciclo
for leer línea a línea del archivo hasta que ya no hayan más líneas que
leer en éste. El punto es que gracias al ciclo repetitivo, se automatiza la
lectura y se garantiza que todos los elementos del arreglo queden
debidamente almacenados en las posiciones.
Figura 5.3
Solicitud por parte del programa dentro
de un ciclo de repetición de todos los
elementos que forman el arreglo.
Figura 5.4
Proceso manejado con el arreglo. En
este caso, el proceso hace alusión a la
impresión los datos en él contenidos.
Fascículo No. 5
Semestre 2 7 Lenguaje de
programación
Lenguaje de programación
5.1
1. Cree una clase Java para leer un arreglo de datos booleanos (valores
true y false) y que imprima el arreglo, pero que en vez de que salgan
los datos true y false en la impresión, aparezcan las letras V por cada
valor true y F por cada valor false.
2. Construya una clase Java que cree un arreglo de caracteres (chars) y
lo pueble con las letras del alfabeto de manera automática.
Recuerde utilizar el concepto del código ASCII, el uso de casting y el
manejo de la sentencia repeticional for o while para poblar el arreglo
mediante el uso de un método, para que el usuario no tenga que
digitar las 27 letras del alfabeto (recuerde que se debe incluir la Ñ
junto las con las 26 letras estándar del alfabeto occidental latino).
Fascículo No. 5
Lenguajede
programación
8 Semestre 2
Lenguaje de programación
5.2
Fascículo No. 5
Semestre 2 9 Lenguaje de
programación
Lenguaje de programación
4. Desarrolle una clase Java que lea dos arreglos de números reales y
calcule el producto entre las posiciones equivalentes de cada
arreglo, permitiendo almacenar dicho valor en un tercer y nuevo
arreglo, tal como lo ilustra la siguiente figura:
Fascículo No. 5
Lenguajede
programación
10 Semestre 2
Lenguaje de programación
Observe su funcionamiento:
Figura 5.5
Configuración de la cantidad de datos del arreglo.
Figura 5.6
Despliegue del arreglo usando un ciclo while (ejecute mientras).
Figura 5.7
Despliegue del arreglo usando un ciclo do-while (repita mientras).
Fascículo No. 5
Semestre 2 11 Lenguaje de
programación
Lenguaje de programación
Figura 5.8
Despliegue del arreglo usando un ciclo for (para).
Fascículo No. 5
Lenguajede
programación
12 Semestre 2
Lenguaje de programación
Fascículo No. 5
Semestre 2 13 Lenguaje de
programación
Lenguaje de programación
//Variables
vector []: Arreglo de datos (independientes del tipo)
longitud: Entero; //Tamaño del arreglo
dato: Cualquier tipo de dato; //Elemento a localizar
posicion: Entero; //Contador para recorrer el arreglo (indizador)
Inicio
posición = 0;
Mientras (posicion < longitud)
Inicio mientras
Si (vector[posicion] == dato)
Inicio Si
Devolver Verdadero o la posición
Parar el ciclo;
Fin Si;
Fin mientras;
Fin algoritmo.
try
{
for (i = 0; i < datos.length; i++)
{
//Recorremos el arreglo y preguntamos si
//está en el elemento
//en alguna de sus posiciones
if (datos[i] == elementoABuscar)
{
estaEnElArreglo = true;
//Si lo encontró paramos el ciclo
break;
}
}//Fin del for
}
Fascículo No. 5
Lenguajede
programación
14 Semestre 2
Lenguaje de programación
return (estaEnElArreglo);
}
Fascículo No. 5
Semestre 2 15 Lenguaje de
programación
Lenguaje de programación
//Variables
vector []: Cualquier tipo de dato; //Arreglo en el que se desea buscar el
elemento
longitud: Entero; //Tamaño del arreglo
dato: Cualquier tipo de dato; //Elemento que se va a buscar
rangoInferior: Entero; //Límite inferior del intervalo
rangoSuperior: Entero;//Límite superior del intervalo
rangoCentral: Entero; //Posición central del intervalo
Inicio
rangoInferior = 0;
rangoSuperior = longitud;
Si (vector[rangoCentral] == dato)
Inicio Si
Devolver verdadero o la posición
Parar el ciclo;
Fin Si
DLC
Si (dato < vector[rangoCentral])
Inicio Si
rangoSuperior = rangoCentral - 1;
Fin Si
DLC
Inicio DLC
rangoInferior = rangoCentral + 1;
Fin DLC
Fascículo No. 5
Lenguajede
programación
16 Semestre 2
Lenguaje de programación
try
{
rangoInferior = 0;
rangoSuperior = datos.length;
if (datos[rangoCentral] ==
elementoABuscar)
{
estaEnElArreglo = true;
break;
}
else
if (elementoABuscar < datos[rangoCentral])
{
//Si el elemento a buscar está bajo el
//rango inferior
//entonces el rango superior se
//vuelve el rango central
//mas 1, para buscar en rango del
//otro lado
rangoSuperior = rangoCentral - 1;
}
else
{
//Buscamos en el otro lado del
//arreglo
rangoInferior = rangoCentral + 1;
}
}//Fin del while
}//fin del try
return (estaEnElArreglo);
}
Fascículo No. 5
Semestre 2 17 Lenguaje de
programación
Lenguaje de programación
Figura 5.9
Funcionamiento del algoritmo de búsqueda binaria.
Fascículo No. 5
Lenguajede
programación
18 Semestre 2
Lenguaje de programación
permiten realizar este proceso con base en ciertos criterios, tales como la
cercanía de los elementos dentro del arreglo o el uso de un recurso como
podría ser un pivote central que permita intercambiar los datos, disminu-
yendo significativamente el tiempo de ejecución del programa de ordena-
ción.
Hay métodos muy simples de implementar que son útiles en los casos en
donde el número de elementos a ordenar no es muy grande. Por otro lado
hay métodos sofisticados, más difíciles de implementar pero que son más
eficientes en cuestión de tiempo de ejecución. La eficiencia de los
algoritmos se mide por el número de comparaciones e intercambios que
tienen que hacer, tomándose a n como el número de elementos que tiene
el arreglo a ordenar.
Fascículo No. 5
Semestre 2 19 Lenguaje de
programación
Lenguaje de programación
Veamos su implementación:
//Método de ordenamiento por burbuja
public int [] ordenarArregloPorBurbuja (int [] datos)
{
int i = 0;
int j = 0;
int temporal = 0;
try
{
arregloNumeros = datos;
//Recorremos la totalidad de elementos del arreglo
for (i = 0; i < arregloNumeros.length; i++)
{
//Por cada elemento evaluado, recorremos el
arreglo nuevamente
//comparando cada elemento con el actual,
con el fin de buscar el más
//grande y montarlo en una burbuja para que
suba a la siguiente
//posición, de manera que podamos bajar el
encontrado
Fascículo No. 5
Lenguajede
programación
20 Semestre 2
Lenguaje de programación
//Hacemos el intercambio o
//swapping
arregloNumeros[j] =
arregloNumeros[j+1];
return (arregloOrdenado);
}
Fascículo No. 5
Semestre 2 21 Lenguaje de
programación
Lenguaje de programación
Esto quiere decir que cada vez que se encuentra un elemento menor
comparado con el elemento actual, los demás elementos a la derecha
deben ser desplazados hasta que quede el espacio para insertar el
elemento comparado que era más grande que él. De esta manera se
reducen la cantidad de intercambios que consumen más tiempo de
computación que el proceso de desplazamiento, el cual es solo una
asignación y por lo tanto no requiere del uso de la conmutación de tres
variables como si ocurre en el algoritmo de ordenamiento por burbuja.
Fascículo No. 5
Lenguajede
programación
22 Semestre 2
Lenguaje de programación
int j = 0;
int temporal = 0;
try
{
arregloNumeros = datos;
//Recorremos la totalidad de elementos del arreglo
//Empezando por 1
for (i = 1; i < arregloNumeros.length; i++)
{
//Obtenemos el elemento i+1
temporal = arregloNumeros[i];
return (arregloOrdenado);
}
5.3
Fascículo No. 5
Semestre 2 23 Lenguaje de
programación
Lenguaje de programación
Fascículo No. 5
Lenguajede
programación
24 Semestre 2
Lenguaje de programación
Fascículo No. 5
Semestre 2 25 Lenguaje de
programación
Lenguaje de programación
Fascículo No. 5
Lenguajede
programación
26 Semestre 2
Lenguaje de programación
Seguimientoal autoaprendizaje
2. Desarrolle una aplicación Java que lea un arreglo de números enteros y solicite
un número adicional. El programa con base en ese número adicional solici-
tado, debe decir cuántas veces se encuentra el número adicional en el interior
del arreglo:
4. Desarrolle una aplicación Java que lea dos arreglos de números reales. El
programa debe sumar todos los elementos pares del arreglo y todos los
impares y finalmente ambos resultados debe multiplicarlos. Sobre el producto
de dichos números se debe indicar si es un número también par o impar.
Recuerde desarrollar un método para cada proceso, tal como se ha visto en
los ejemplos expuestos en los fascículos.
Fascículo No. 5
Semestre 2 27 Lenguaje de
programación
Lenguaje de programación
Anexo 5
IMPLEMENTACIÓN DE MÉTODOS PARA LA LECTURA E IMPRESIÓN DE ARREGLOS DE
DATOS PRIMITIVOS
package arreglosbasicos;
import javax.swing.JOptionPane;
/**
* @author Ingeniero Jaime Alberto Gutiérrez Mejía
* Fundación Universitaria San Martín
* Programa de Ingeniería de Sistemas
* Facultad de Universidad Abierta y a Distancia
*
* UNIDAD V: ORGANIZACIÓN DE DATOS EN ARREGLOS
* Y VECTORES.
* ALGORITMOS DE BÚSQUEDA Y ORDENAMIENTO.
*
* Clase Java para declarar un arreglo de números enteros,
* de números reales y de cadenas de caracteres, con sus
* correspondientes procesos de poblamiento y recorrido
* para obtener nuevamente los datos en ellos almacenados
*/
public class ArregloDatos
{
/*******************************************/
/*******************************************/
/*******************************************/
//Atributos de la clase
private int [] arregloEnteros;
private double [] arregloReales;
private String [] arregloCadenas;
//Constructor de la clase
public ArregloDatos()
{
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método constructor para instanciar los tres arreglos al tiempo
public ArregloDatos (int totalElementos)
{
//En este constructor instanciamos los arreglos
arregloEnteros = new int[totalElementos];
arregloReales = new double[totalElementos];
arregloCadenas = new String[totalElementos];
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para cargar de datos el arreglo de enteros
public int [] leerDatosArregloEnteros (int totalelementos)
{
JOptionPane.showMessageDialog(null,"Lectura de un arreglo
de enteros");
//Contador del ciclo de lectura
int i = 0;
Fascículo No. 5
Lenguajede
programación
28 Semestre 2
Lenguaje de programación
try
{
for (i = 0; i < totalelementos; i++)
{
arregloEnteros[i] =
Integer.parseInt(JOptionPane.showInputDialog(null,
"Ingrese el valor para la posición [" + i + "]: "));
}
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para leer un arreglo de números reales
public double [] leerDatosArregloReales (int totalelementos)
{
JOptionPane.showMessageDialog(null,"Lectura de un arreglo
de reales");
//Contador del ciclo de lectura
int i = 0;
try
{
for (i = 0; i < totalelementos; i++)
{
arregloReales[i] =
Double.parseDouble(JOptionPane.showInputDialog(null
,"Ingrese el valor para la posición [" + i + "]: "));
}
}
return (arregloReales);
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para leer un arreglo de números reales
public String [] leerArregloCadenasCaracteres (int totalelementos)
{
JOptionPane.showMessageDialog(null,"Lectura de un arreglo
de cadenas de caracteres");
//Contador del ciclo de lectura
int i = 0;
Fascículo No. 5
Semestre 2 29 Lenguaje de
programación
Lenguaje de programación
try
{
for (i = 0; i < totalelementos; i++)
{
arregloCadenas[i] =
JOptionPane.showInputDialog(null,"Ingrese el valor
para la posición [" + i + "]: ");
}
}
return (arregloCadenas);
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para imprimir los elementos del arreglo de enteros
public void imprimirArregloEnteros (int [] datos)
{
JOptionPane.showMessageDialog(null,"Impresión de un
arreglo de enteros");
int i = 0;
try
{
for (i = 0; i < datos.length; i++)
{
JOptionPane.showMessageDialog(null,"Dato de la
posición [" + i + "]: " + datos[i]);
}
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para imprimir los elementos del arreglo de reales
public void imprimirArregloReales (double [] datos)
{
JOptionPane.showMessageDialog(null,"Impresión de un
arreglo de reales");
int i = 0;
try
{
for (i = 0; i < datos.length; i++)
{
Fascículo No. 5
Lenguajede
programación
30 Semestre 2
Lenguaje de programación
JOptionPane.showMessageDialog(null,"Dato
de la posición [" + i + "]: " + datos[i]);
}
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para imprimir los elementos del arreglo de cadenas
public void imprimirArregloCadenas (String [] datos)
{
JOptionPane.showMessageDialog(null,"Impresión de un
arreglo de cadenas de caracteres");
int i = 0;
try
{
for (i = 0; i < datos.length; i++)
{
JOptionPane.showMessageDialog(null,"Dato
de la posición [" + i + "]: " + datos[i]);
}
}
/*******************************************/
/*******************************************/
/*******************************************/
/**
* @param args
* Programa principal
* Se solicita un número específico de elementos
* y acto seguido se solicitan los tres arreglos de datos
*
* Luego se imprimen para ver que se almacenó en
* cada arreglo
*/
public static void main(String[] args)
{
/*******************************************/
/*******************************************/
/*******************************************/
// TODO Auto-generated method stub
int totalElementos = 0;
totalElementos =
Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese el total de elementos para
Fascículo No. 5
Semestre 2 31 Lenguaje de
programación
Lenguaje de programación
/********************************************/
/********************************************/
public RecorridoArreglos(int numeroElementos)
{
// TODO Auto-generated constructor stub
datos = new int[numeroElementos];
}
/********************************************/
/********************************************/
//Método para poblar el arreglo automáticamente de datos
Fascículo No. 5
Lenguajede
programación
32 Semestre 2
Lenguaje de programación
try
{
for (i = 0; i < numeroDatos; i++)
{
//Poblamos el arreglo con datos aleatorios
datos[i] = (int)(Math.random()*10000);
}
}
}
/********************************************/
/********************************************/
//Método para recorrer el arreglo con un While
public void recorrerArregloConWhile ()
{
JOptionPane.showMessageDialog(null,"Recorrido de un arreglo
con un while");
int i = 0;
int dato = 0;
String arreglo = "";
try
{
i = 0;
while (i < datos.length)
{
dato = datos[i];
arreglo += String.valueOf(dato);
arreglo += " ";
i++;
}//Fin del while
//Imprimimos el arreglo
JOptionPane.showMessageDialog(null,arreglo);
/********************************************/
/********************************************/
//Método para recorrer el arreglo con un do-while
public void recorrerArregloConDoWhile ()
Fascículo No. 5
Semestre 2 33 Lenguaje de
programación
Lenguaje de programación
{
JOptionPane.showMessageDialog(null,"Recorrido de un arreglo
con un do-while");
int i = 0;
int dato = 0;
String arreglo = "";
try
{
i = 0;
do
{
dato = datos[i];
arreglo += String.valueOf(dato);
arreglo += " ";
i++;
} while (i < datos.length);
//Imprimimos el arreglo
JOptionPane.showMessageDialog(null,arreglo);
/********************************************/
/********************************************/
//Método para recorrer el arreglo con un for
public void recorrerArregloConFor ()
{
JOptionPane.showMessageDialog(null,"Recorrido de un arreglo
con un ciclo for");
int i = 0;
int dato = 0;
String arreglo = "";
try
{
for (i = 0; i < datos.length; i++)
{
dato = datos[i];
arreglo += String.valueOf(dato);
arreglo += " ";
}
//Imprimimos el arreglo
JOptionPane.showMessageDialog(null,arreglo);
Fascículo No. 5
Lenguajede
programación
34 Semestre 2
Lenguaje de programación
errorDesbordamiento.getLocalizedMessage());
errorDesbordamiento.printStackTrace();
}
}
/********************************************/
/********************************************/
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
int numeroDatos = 0;
numeroDatos =
Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese el
número de elementos del arreglo: "));
//Creamos el arreglo
RecorridoArreglos recorredorArreglos = new
RecorridoArreglos(numeroDatos);
/**
* @author Ingeniero Jaime Alberto Gutiérrez Mejía
* Fundación Universitaria San Martín
* Programa de Ingeniería de Sistemas
* Facultad de Universidad Abierta y a Distancia
*
* UNIDAD V: ORGANIZACIÓN DE DATOS EN ARREGLOS
* Y VECTORES.
* ALGORITMOS DE BÚSQUEDA Y ORDENAMIENTO.
*
Fascículo No. 5
Semestre 2 35 Lenguaje de
programación
Lenguaje de programación
try
{
for (i = 0; i < totalelementos; i++)
{
arregloDatos[i] =
Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese el valor para la
posición [" + i + "]: "));
}
}
Fascículo No. 5
Lenguajede
programación
36 Semestre 2
Lenguaje de programación
JOptionPane.showMessageDialog(null,"Error en la
carga de datos: " +
errorLecturaArregloReales.toString());
errorLecturaArregloReales.printStackTrace();
}
return (arregloDatos);
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para calcular la suma de los elementos
//del arreglo. Recibe como parámetro el arreglo
//y retorna la suma de los elementos de cada una
//de sus posiciones
public double calcularSumaElementosArreglo (double [] datos)
{
sumatoria = 0.0;
int i = 0;
try
{
for (i = 0; i < datos.length; i++)
{
sumatoria = sumatoria + datos[i];
}
}
return (sumatoria);
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para calcular la suma de los elementos
//del arreglo. Recibe como parámetro el arreglo
//y retorna la productoria los elementos de cada una
//de sus posiciones
public long calcularProductoriaElementosArreglo (double [] datos)
{
productoria = 1;
int i = 0;
try
{
for (i = 0; i < datos.length; i++)
{
productoria = productoria * (long)datos[i];
}
}
Fascículo No. 5
Semestre 2 37 Lenguaje de
programación
Lenguaje de programación
{
JOptionPane.showMessageDialog(null,"Error en la
suma de los elementos del arreglo: " +
errorCalculoProductoria.toString());
errorCalculoProductoria.printStackTrace();
return (0L);
}
return (productoria);
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para calcular la suma de los elementos
//del arreglo. Recibe como parámetro el arreglo
//y retorna el promedio aritmético de los elementos
//de sus posiciones
public double calcularPromedioDatosArreglo (double [] datos)
{
promedio = 0.0;
int i = 0;
try
{
for (i = 0; i < datos.length; i++)
{
promedio = promedio + datos[i];
}
return (promedio);
}
/*******************************************/
/*******************************************/
/*******************************************/
//Método para determinar cuál es el número más grande
//de los elementos presentes en el arreglo
public double obtenerElementoMasGrandeArreglo (double []
datos)
{
int i = 0;
datoMayor = 0.0;
try
{
datoMayor = datos[0];
for (i = 1; i < datos.length; i++)
{
if (datos[i] > datoMayor)
Fascículo No. 5
Lenguajede
programación
38 Semestre 2
Lenguaje de programación
{
datoMayor = datos[i];
}
}
}
return (datoMayor);
}
/*******************************************/
/*******************************************/
/*******************************************/
/**
* @param args
* Programa principal
*
* Lee el número de elementos del arreglo
* Luego lee el arreglo y calcula la suma, la productoria,
* el promedio y busca el dato más grande
*/
public static void main(String[] args)
{
/*******************************************/
/*******************************************/
/*******************************************/
int numeroElementos = 0;
double suma = 0.0;
double promedio = 0.0;
double masgrande = 0.0;
long productoria = 0L;
double [] datos = null;
numeroElementos =
Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese el
número de elementos del arreglo: "));
//Leemos el arreglo
datos =
manejadorArreglos.leerDatosArregloReales(numeroElementos);
//El promedio
promedio =
manejadorArreglos.calcularPromedioDatosArreglo(datos);
JOptionPane.showMessageDialog(null, "El promedio de los elementos del arreglo es: "
Fascículo No. 5
Semestre 2 39 Lenguaje de
programación
Lenguaje de programación
+ promedio);
//La productoria
productoria =
manejadorArreglos.calcularProductoriaElementosArreglo(datos);
JOptionPane.showMessageDialog(null,"La productoria de los datos del arreglo es: " +
productoria);
Fascículo No. 5
Lenguajede
programación
40 Semestre 2