JAva Parte 2
JAva Parte 2
JAva Parte 2
Programa:
import java.util.Scanner;
public class PruebaVector1 {
private Scanner teclado;
private int[] sueldos;
public void cargar()
{
teclado=new Scanner(System.in);
sueldos=new int[5];
for(int f=0;f<5;f++) {
System.out.print("Ingrese valor de la componente:");
sueldos[f]=teclado.nextInt();
}
}
public void imprimir() {
for(int f=0;f<5;f++) {
System.out.println(sueldos[f]);
}
}
public static void main(String[] ar) {
PruebaVector1 pv=new PruebaVector1();
pv.cargar();
pv.imprimir();
}
}
Para la declaración de un vector le antecedemos al nombre los corchetes
abiertos y cerrados:
private int[] sueldos;
Lo definimos como atributo de la clase ya que lo utilizaremos en los dos
métodos.
En el método de cargar lo primero que hacemos es crear el vector (en java los
vectores son objetos por lo que es necesario proceder a su creación mediante
el operador new):
sueldos=new int[5];
Cuando creamos el vector indicamos entre corchetes la cantidad de elementos
que se pueden almacenar posteriormente en el mismo.
Para cargar cada componente debemos indicar entre corchetes que elemento
del vector estamos accediendo:
for(int f=0;f<5;f++) {
System.out.print("Ingrese valor de la componente:");
sueldos[f]=teclado.nextInt();
}
La estructura de programación que más se adapta para cargar en forma
completa las componentes de un vector es un for, ya que sabemos de
antemano la cantidad de valores a cargar.
Cuando f vale cero estamos accediendo a la primer componente del vector (en
nuestro caso sería):
sueldos[0]=teclado.nextInt();
Lo mas común es utilizar una estructura repetitiva for para recorrer cada
componente del vector.
Utilizar el for nos reduce la cantidad de código, si no utilizo un for debería en
forma secuencial implementar el siguiente código:
System.out.print("Ingrese valor de la componente:");
sueldos[0]=teclado.nextInt();
System.out.print("Ingrese valor de la componente:");
sueldos[1]=teclado.nextInt();
System.out.print("Ingrese valor de la componente:");
sueldos[2]=teclado.nextInt();
System.out.print("Ingrese valor de la componente:");
sueldos[3]=teclado.nextInt();
System.out.print("Ingrese valor de la componente:");
sueldos[4]=teclado.nextInt();
La impresión de las componentes del vector lo hacemos en el otro método:
public void imprimir() {
for(int f=0;f<5;f++) {
System.out.println(sueldos[f]);
}
}
Siempre que queremos acceder a una componente del vector debemos indicar
entre corchetes la componente, dicho valor comienza a numerarse en cero y
continua hasta un número menos del tamaño del vector, en nuestro caso
creamos el vector con 5 elementos:
sueldos=new int[5];
Por último en este programa creamos un objeto en la main y llamamos a lo
métodos de cargar e imprimir el vector:
public static void main(String[] ar) {
PruebaVector1 pv=new PruebaVector1();
pv.cargar();
pv.imprimir();
}
Problema 2:
Definir un vector de 5 componentes de tipo float que representen las alturas de
5 personas.
Obtener el promedio de las mismas. Contar cuántas personas son más altas
que el promedio y cuántas más bajas.
Programa:
import java.util.Scanner;
public class PruebaVector2 {
private Scanner teclado;
private float[] alturas;
private float promedio;
Vectores paralelos
Este concepto se da cuando hay una relación entre las componentes de igual
subíndice (misma posición) de un vector y otro.
import java.util.Scanner;
public class PruebaVector12 {
private Scanner teclado;
private int []vec;
private int menor;
Vectores (ordenamiento)
El ordenamiento de un vector se logra intercambiando las componentes de
manera que:
vec[0] <= vec[1] <= vec[2] etc.
El contenido de la componente vec[0] sea menor o igual al contenido de la
componente vec[1] y así sucesivamente.
Si se cumple lo dicho anteriormente decimos que el vector está ordenado de
menor a mayor. Igualmente podemos ordenar un vector de mayor a menor.
Se puede ordenar tanto vectores con componentes de tipo int, float como
String. En este último caso el ordenamiento es alfabético.
Problema 1:
Se debe crear un vector donde almacenar 5 sueldos. Ordenar el vector sueldos
de menor a mayor.
Cuando k = 1
f=0 f=1 f =2 f=3
750 750 750 750
820 550 550 550
550 820 490 490
490 490 820 820
1200 1200 1200 1200
Cuando k = 2
f=0 f=1 f =2 f=3
550 550 550 550
750 490 490 490
490 750 750 750
820 820 820 820
1200 1200 1200 1200
Cuando k = 3
f=0 f=1 f =2 f=3
490 490 490 490
550 550 550 550
750 750 750 750
820 820 820 820
1200 1200 1200 1200
¿Porque repetimos 4 veces el for externo?
Como sabemos cada vez que se repite en forma completa el for interno queda
ordenada una componente del vector. A primera vista diríamos que deberíamos
repetir el for externo la cantidad de componentes del vector, en este ejemplo el
vector sueldos tiene 5 componentes.
Si observamos, cuando quedan dos elementos por ordenar, al ordenar uno de
ellos queda el otro automáticamente ordenado (podemos imaginar que si
tenemos un vector con 2 elementos no se requiere el for externo, porque este
debería repetirse una única vez)
Una última consideración a este ALGORITMO de ordenamiento es que los
elementos que se van ordenando continuamos comparándolos.
Ejemplo: En la primera ejecución del for interno el valor 1200 queda ubicado en
la posición 4 del vector. En la segunda ejecución comparamos si el 820 es
mayor a 1200, lo cual seguramente será falso.
Podemos concluir que la primera vez debemos hacer para este ejemplo 4
comparaciones, en la segunda ejecución del for interno debemos hacer 3
comparaciones y en general debemos ir reduciendo en uno la cantidad de
comparaciones.
Si bien el algoritmo planteado funciona, un algoritmo más eficiente, que se
deriva del anterior es el plantear un for interno con la siguiente estructura: (f=0 ;
f<4-k; f++)
Es decir restarle el valor del contador del for externo.
Programa:
import java.util.Scanner;
public class PruebaVector13 {
private Scanner teclado;
private int[] sueldos;
import java.util.Scanner;
public class Matriz4 {
private Scanner teclado;
private int[][] mat;
Programa:
import java.util.Scanner;
public class Matriz9 {
private Scanner teclado;
private String[] empleados;
private int[][] sueldos;
private int[] sueldostot;
public void cargar() {
teclado=new Scanner(System.in);
empleados=new String[4];
sueldos=new int[4][3];
for(int f=0;f<empleados.length;f++){
System.out.print("Ingrese el nombre del empleado:");
empleados[f]=teclado.next();
for(int c=0;c<sueldos[f].length;c++) {
System.out.print("Ingrese sueldo:");
sueldos[f][c]=teclado.nextInt();
}
}
}
public void calcularSumaSueldos() {
sueldostot=new int[4];
for(int f=0;f<sueldos.length;f++) {
int suma=0;
for(int c=0;c<sueldos[f].length;c++) {
suma=suma+sueldos[f][c];
}
sueldostot[f]=suma;
}
}
public void imprimirTotalPagado() {
System.out.println("Total de sueldos pagados por empleado.");
for(int f=0;f<sueldostot.length;f++) {
System.out.println(empleados[f]+" - "+sueldostot[f]);
}
}
public void empleadoMayorSueldo() {
int may=sueldostot[0];
String nom=empleados[0];
for(int f=0;f<sueldostot.length;f++) {
if (sueldostot[f]>may) {
may=sueldostot[f];
nom=empleados[f];
}
}
System.out.println("El empleado con mayor sueldo es "+ nom + "
que tiene un sueldo de "+may);
}
public static void main(String[] ar){
Matriz9 ma=new Matriz9();
ma.cargar();
ma.calcularSumaSueldos();
ma.imprimirTotalPagado();
ma.empleadoMayorSueldo();
}
}
Para resolver este problema lo primero que hacemos es definir una matriz
donde se almacenarán los sueldos mensuales de cada empleado, un vector de
tipo String donde almacenaremos los nombre de cada empleado y finalmente
definimos un vector paralelo a la matriz donde almacenaremos la suma de
cada fila de la matriz:
private String[] empleados;
private int[][] sueldos;
private int[] sueldostot;
En el método de cargar inicializamos el vector con los nombres de los
empleados y la matriz paralela donde se almacenan los últimos tres sueldos
(previo a cargar procedemos a crear el vector y la matriz):
empleados=new String[4];
sueldos=new int[4][3];
for(int f=0;f<empleados.length;f++){
System.out.print("Ingrese el nombre del empleado:");
empleados[f]=teclado.next();
for(int c=0;c<sueldos[f].length;c++) {
System.out.print("Ingrese sueldo:");
sueldos[f][c]=teclado.nextInt();
}
}
El método sumar sueldos crea el vector donde se almacenará la suma de cada
fila de la matriz. Mediante dos for recorremos toda la matriz y sumamos cada
fila:
sueldostot=new int[4];
for(int f=0;f<sueldos.length;f++) {
int suma=0;
for(int c=0;c<sueldos[f].length;c++) {
suma=suma+sueldos[f][c];
}
sueldostot[f]=suma;
}
El método imprimirTotalPagado tiene por objetivo mostrar los dos vectores (el
de nombre de los empleados y el que almacena la suma de cada fila de la
matriz):
for(int f=0;f<sueldostot.length;f++) {
System.out.println(empleados[f]+" - "+sueldostot[f]);
}
Por último para obtener el nombre del empleado con mayor sueldo acumulado
debemos inicializar dos variables auxiliares con el primer elemento del vector
de empleados y en otra auxiliar guardamos la primer componente del vector
sueldostot:
int may=sueldostot[0];
String nom=empleados[0];
for(int f=0;f<sueldostot.length;f++) {
if (sueldostot[f]>may) {
may=sueldostot[f];
nom=empleados[f];
}
}
System.out.println("El empleado con mayor sueldo es "+ nom + " que tiene un
sueldo de "+may);
Problemas propuestos
1. Se desea saber la temperatura media trimestral de cuatro paises. Para
ello se tiene como dato las temperaturas medias mensuales de dichos
paises.
Se debe ingresar el nombre del país y seguidamente las tres
temperaturas medias mensuales.
Seleccionar las estructuras de datos adecuadas para el almacenamiento
de los datos en memoria.
a - Cargar por teclado los nombres de los paises y las temperaturas
medias mensuales.
b - Imprimir los nombres de las paises y las temperaturas medias
mensuales de las mismas.
c - Calcular la temperatura media trimestral de cada país.
c - Imprimr los nombres de las provincias y las temperaturas medias
trimestrales.
b - Imprimir el nombre de la provincia con la temperatura media
trimestral mayor.
2. import java.util.Scanner;
3. public class Matriz10 {
4. private Scanner teclado;
5. private String[] paises;
6. private int[][] tempmen;
7. private int[] temptri;
8.
9. public void cargar() {
10. teclado=new Scanner(System.in);
11. paises=new String[4];
12. tempmen=new int[4][3];
13. for(int f=0;f<paises.length;f++){
14. System.out.print("Ingrese el nombre del país:");
15. paises[f]=teclado.next();
16. for(int c=0;c<tempmen[f].length;c++) {
17. System.out.print("Ingrese temperatura mensual:");
18. tempmen[f][c]=teclado.nextInt();
19. }
20. }
21. }
22.
23. public void imprimirTempMensuales() {
24. for(int f=0;f<paises.length;f++){
25. System.out.print("Pais:" + paises[f]+":");
26. for(int c=0;c<tempmen[f].length;c++) {
27. System.out.print(tempmen[f][c]+" ");
28. }
29. System.out.println();
30. }
31. }
32.
33. public void calcularTemperaturaTri() {
34. temptri=new int[4];
35. for(int f=0;f<tempmen.length;f++) {
36. int suma=0;
37. for(int c=0;c<tempmen[f].length;c++) {
38. suma=suma+tempmen[f][c];
39. }
40. temptri[f]=suma/3;
41. }
42. }
43.
44. public void imprimirTempTrimestrales() {
45. System.out.println("Temperaturas trimestrales.");
46. for(int f=0;f<paises.length;f++) {
47. System.out.println(paises[f]+" "+temptri[f]);
48. }
49. }
50.
51. public void paisMayorTemperaturaTri() {
52. int may=temptri[0];
53. String nom=paises[0];
54. for(int f=0;f<paises.length;f++) {
55. if (temptri[f]>may) {
56. may=temptri[f];
57. nom=paises[f];
58. }
59. }
60. System.out.println("Pais con temperatura trimestral mayor es "+ nom + "
que tiene una temperatura de "+may);
61. }
62.
63. public static void main(String[] ar){
64. Matriz10 ma=new Matriz10();
65. ma.cargar();
66. ma.imprimirTempMensuales();
67. ma.calcularTemperaturaTri();
68. ma.imprimirTempTrimestrales();
69. ma.paisMayorTemperaturaTri();
70. }
71. }