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