Ejemplo 4 - Demostración de cálculos básicos utilizando vectores

Objetivo

Comprender el uso de vectores para llevar a cabo cálculos de uso cotidiano

Enunciado

Programe métodos para calcular la sumatoria, promedio, encontrar el valor mínimo y el máximo de un vector de doubles.

Solución

Se diseñaron dos clases con las siguientes características:

 import javax.swing.JOptionPane;
/* La clase vector se utiliza para demostrar la forma de declarar
* inicializar y acceder a las celdas de un vector
* Su diseño y estructura obedece solo a fines de demostración
* Programado por: MSc. Edgar Casasola Murillo (c)2004
*/
public class Vector {
/** Declara una referencia a un vector de enteros como parte de la clase
*/
private double vector[];
/** <pre>
* Constructor
* REQUIERE: Que el atributo vector haya sido inicializado
* EFECTUA: Recorre el vector y presenta en la pantalla de consola el contenido de las celdas desde la posición 0
* hasta la última posición
* MODIFICA: La salida a consola.
* El constructor iniciaciza un vector que contendrá tantos enteros
* como se indique en el parámetro cantidadDeElementos
* @param cantidadDeElementos Determina el tamaño que tendrá el vector de enteros
</PRE> */
public Vector(int cantidadDeElementos){

vector = new double [cantidadDeElementos];
}

/** <pre>
* REQUIERE: Que el atributo vector haya sido inicializado
* EFECTUA: Recorre el vector y presenta en la pantalla de consola el contenido de las celdas desde la posición 0
* hasta la última posición
* MODIFICA: La salida a consola.
</PRE> */
public String toString(){
String resultado = "{";
if(vector.length>0)
resultado+=vector[0];
for(int i=1;i<vector.length; i++){
resultado+=","+vector[i];
}
resultado+= "}";
return resultado;
}
/** <pre>
* REQUIERE: Que el indice sea una posición válida dentro del vector
* EFECTUA: Asigna a la celda "i" el valor recibido como parámetro
* MODIFICA: La celda "i" del vector
* @param indice Indice de la celda donde se guardara el valor
* @param valor Valor que se asignará a la celda "i"
</PRE> */
public void setValor(int indice, double valor){
if((indice>=0)&&(indice<vector.length))
vector[indice]=valor;
}
/** <pre>
* REQUIERE: Que el indice sea una posición válida dentro del vector
* EFECTUA: Retorna el valor de la celda "i"
* MODIFICA: No modifica valores externos
* @return El valor vector[indice]
</PRE> */
public double getValor(int indice){
if((indice>=0)&&(indice<vector.length))
return vector[indice];
else {
System.err.println("Error: posición inválida "+indice+" en vector de tamaño "+vector.length);
return 0;
}
}
/** <pre>
* REQUIERE: Que el vector sea diferente de null
* EFECTUA: Retorna el valor del tamaño del vector
* MODIFICA: No modifica valores externos
* @return El tamaño del vector
</PRE> */
public int length(){
return vector.length;
}
/** <pre>
* REQUIERE: Que el vector sea diferente de null
* EFECTUA: Retorna la sumatoria de todos los elementos del vector
* MODIFICA: No modifica valores externos
* @return La sumatoria de todos los valores del vector
</PRE> */
public double suma(){
double resultado=0;
for(int i=0;i<vector.length; i++){
resultado+=vector[i];
}
return resultado;
}
/** <pre>
* REQUIERE: Que el vector sea diferente de null
* EFECTUA: Retorna el promedio de los valores del vector
* MODIFICA: No modifica valores externos
* @return El promedio de los valores del vector
</PRE> */
public double promedio(){
double resultado=suma();
if(vector.length>0)
resultado/=vector.length;
return resultado;
}
/** <pre>
* REQUIERE: Que el vector sea diferente de null
* EFECTUA: Retorna la posición del elemento con el valor mínimo del vector
* MODIFICA: No modifica valores externos
* @return La posición dentro del vector donde se ubica el valor más bajo
</PRE> */
public int minimo(){
int resultado= -1;
if(vector.length > 0)
resultado =0; for(int i=1;i<vector.length; i++){
if(vector[resultado]>vector[i])
resultado = i;
}

return resultado;
}
/** <pre>
* REQUIERE: Que el vector sea diferente de null
* EFECTUA: Retorna la posición del elemento con el valor máximo del vector
* MODIFICA: No modifica valores externos
* @return La posición de la celda del vector donde se ubica el valor más alto
</PRE> */
public int maximo(){
int resultado= -1;
if(vector.length > 0)
resultado =0;
for(int i=1;i<vector.length; i++){
if(vector[resultado]<vector[i])
resultado = i;
}
return resultado;
}
}

 

El programa de prueba siguiente muestra la forma de utilizar la clase anterior:

 

import javax.swing.JOptionPane;
/* La clase vector se utiliza para demostrar la forma de declarar
* inicializar y acceder a las celdas de un vector
* Su diseño y estructura obedece solo a fines de demostración
* Programado por: MSc. Edgar Casasola Murillo (c)2004
*/
public class PruebaVector {
/** <pre>
* REQUIERE: Que el vector haya sido declarado
* EFECTUA: Este método muestra como inicializar cada celda del vector con valores
* suministrados por el usuario
* MODIFICA: Modifica los valores de las celdas referenciadas por "vector" </pre>
*/
public static void leerVector(Vector datos){
for(int i=0;i<datos.length(); i++){
datos.setValor(i,Double.parseDouble(JOptionPane.showInputDialog("Digite el valor "+(i+1))));
}
}

public static void main(String argv[]){
int cantidadDeElementos =Integer.parseInt(JOptionPane.showInputDialog("Cuántos elementos quiere?"));
Vector datos = new Vector(cantidadDeElementos);
leerVector(datos);
System.out.println(datos);
System.out.println("El máximo esta en la posición "+datos.maximo()+" y vale "+datos.getValor(datos.maximo()));
System.out.println("El mínimo esta en la posición "+datos.minimo()+" y vale "+datos.getValor(datos.minimo()));
System.out.println("El promedio de los valores del vector es "+datos.promedio());
System.out.println("La suma de todos los valores del vector es "+datos.suma());
System.exit(0);
}
}

 

La salida producida en este caso es:

{45.0,21.0,0.0,45.0,-23.0,-100.0,1000.0,90.0,-3.0,0.0}

El máximo esta en la posición 6 y vale 1000.0
El mínimo esta en la posición 5 y vale -100.0
El promedio de los valores del vector es 107.5
La suma de todos los valores del vector es 1075.0

 

Código Fuente

Vector.java

PruebaVector.java