Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso de Computacin
Objetivos
Manipular una coleccin de datos usando vectores Declarar y utilizar un vector de tipos de datos primitivos en la implementacin de un programa Inicializar vectores mediante lazos y en la declaracin Utilizar lazos para realzar operaciones con vectores. Ordenar un vector Leer datos desde un archivo y almacenarlos en un vector
Definicin de vector
Un vector es una coleccin del mismo tipo de datos. Declaracin de un vector: Tipo[] identificador;
lluvia[0] lluvia[1] lluvia[2] lluvia[3] lluvia[4] lluvia[5] lluvia[6] lluvia[7] lluvia[8] lluvia[9] lluvia[10] lluvia[11]
0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
O
Tipo identificador[]; Un vector es un objeto en java Un vector se construye con el operador new double lluvia[]; lluvia = new double[12]; O double lluvia[] = new double[12]; Se crea un vector de 12 componentes
Ejemplo
Leer 12 valores de lluvia mensual y calcular el promedio
double lluvia[] = new double[12]; double mediaAnual, suma = 0.0; for( int i = 0; i < 12; i++) { lluvia[i] = entrada.getDouble( lluvia para el mes + (i+1)+:); suma += lluvia[i]; } mediaAnual = suma/12; System.out.println(Media anual = +mediaAnual);
Calcular diferencias
Calcula la diferencia entre la lluvia del mes y la media anual
double diferencia;
for( int i = 0; i < 12; i++) { System.out.println(formato.rightAlign (17,1,lluvia[i])); diferencia = Math.abs(lluvia[i]mediaAnual); System.out.println(formato.rightAlign (17,2,diferencia)); }
Tamao de un vector
El tamao de un vector se obtiene por medio de la constante pblica length. Los lazos anteriores pueden escribirse como: for( int i = 0; i < lluvia.length; i++) { }
Iniciacin de vectores
Otra forma de iniciar un vector al declararlo es como sigue:
String[] nombreMes = {enero,febrero,marzo,abril,mayo, junio,julio,agosto,septiembre,octub re,noviembre,diciembre};
Preguntas rpidas
1. Cules de las siguientes sentencias son vlidas? a. float numeros[13]; b. float numeros = {1.0f, 2.0f, 3.0f}; c. int numeros; numeros = new Vector[23]; d. int[] numeros = {1, 2, 3, 4}; 2. Escriba un programa que lea con un SimpleInput las componentes y calcule el producto punto de dos vectores de 2 dimensiones declarados como: float x[] = new double[2]; float y[] = new double[2];
Preguntas rpidas
3. Escriba un programa que lea los milmetros de lluvia de cada mes e imprime el nombre del mes con mayor nivel de lluvia y el nombre del mes con menor nivel de lluvia.
Criba de Eratstenes
Se van tachando los mltiplos de los primos que se van siendo encontrados hasta los mltiplos de sqrt(n) (sqrt(20)~4).
4 x 14 x 6 x 16 x 8 x 18 x 9 10 x
Mltiplos de 2
Mltiplos de 3
11 12 13 x
5 15
7 17
19 20 x
11 12 13 x
4 6 x 5 x 14 15 16 x x x
7 17
8 9 x x x 10 18 19 20 x x
Los nmeros no tachados son nmeros primos, i.e. : 2, 3, 5, 7, 11, 13, 17 y 19.
Programa en Java
//Implementa la criba de Eratstenes public class Criba{ public static void main(String []args){ boolean primo[] = new boolean[100]; int i,j; //iniciar arreglo for(i = 0; i<primo.length; i++) primo[i] = true; for (i = 2; i<Math.sqrt(100); i++){ //marca los mltiplos de i del 2o en adelante for (j = 2; i*j<(100); j++) primo[i*j]=false; } for(i = 0; i<primo.length; i++) if(primo[i]) System.out.print(i+" "); } }
Actividad
Escriba una aplicacin que calcule la desviacin estndar de N nmeros reales. La desviacin estndar se calcula con:
x x
i 1 i
N 1
promedio
promedio
Algoritmo
Se utilizar un vector x de 100 elementos. 1. Leer los elementos del vector 2. Calcular el promedio 3. Calcular la desviacin estndar
4. Desplegar resultados
//Esqueleto de programa class Desviacion{ static public void main(String[] args){ //declaracin de variables //leer elementos del vector //calcular el promedio //calcular desviacin estndar //desplegar resultados } }
Primer refinamiento
Se requieren variables de tipo double para los valores (x), la suma (suma), el promedio (prom) y la desviacin estndar (des). Tambin variables de tipo int para el nmero de valores (n) y el control de los lazos (i).
class Desviacion{ static public void main(String[] args){ //declaracin de variables double x[] = new double[100], suma = 0, prom, des; int n,i; //leer elementos del vector //calcular el promedio //calcular desviacin estndar //desplegar resultados } }
Lectura de valores
Puede leerse primero el valor de n y despus en un lazo leer cada elemento de x, o bien, puede leerse con un centinela los valores de x, el centinela podra ser un valor <0. Optaremos por la segunda opcin.
import javabook.*; class Desviacion{ static public void main(String[] args){ //declaracin de variables double x[] = new double[100], suma, prom, des, v; int n,i; SimpleInput entrada = new SimpleInput(); //leer elementos del vector i = 0; do{ v = SimpleInput.getDouble(Tecle valor para x+i+:); if(v>0){x[i] = v; i++;} }while(v>0 && i<x.length); n = i; //calcular el promedio //calcular desviacin estndar //desplegar resultados } }
Calcular promedio
Calculamos mediante un lazo for.
import javabook.*; class Desviacion{ static public void main(String[] args){ //declaracin de variables double x[] = new double[100], suma, prom, des, v; int n,i; SimpleInput entrada = new SimpleInput(); //leer elementos del vector i = 0; do{ v = SimpleInput.getDouble(Tecle valor para x+i+:); if(v>0){x[i] = v; i++;} }while(v>0 && i<x.length); n = i; //calcular el promedio suma = 0; for(i = 0; i<n; i++) suma += x[i]; prom = suma/n; //calcular desviacin estndar //desplegar resultados } }
Calcular desviacin
Calculamos mediante un lazo for.
import javabook.*; class Desviacion{ static public void main(String[] args){ //declaracin de variables double x[] = new double[100], suma, prom, des; int n,i; SimpleInput entrada = new SimpleInput(); //leer elementos del vector i = 0; do{ v = SimpleInput.getDouble(Tecle valor para x+i+:); if(v>0){x[i] = v; i++;} }while(v>0 && i<x.length); n = i - 1; //calcular el promedio suma = 0; for(i = 0; i<n; i++) suma += x[i]; prom = suma/n; //calcular desviacin estndar suma =0; for(i = 0; i<n; i++) suma += (x[i]-prom)*(x[i]-prom); des = Math.sqrt(suma/(n-1)); //desplegar resultados } }
Despliegue
Desplegar con formato.
import javabook.*; class Desviacion{ static public void main(String[] args){ //declaracin de variables double x[] = new double[100], suma, prom, des; int n,i; SimpleInput entrada = new SimpleInput(); //leer elementos del vector i = 0; do{ v = SimpleInput.getDouble(Tecle valor para x+i+:); if(v>0){x[i] = v; i++;} }while(v>0 && i<x.length); n = i - 1; //calcular el promedio suma = 0; for(i = 0; i<n; i++) suma += x[i]; prom = suma/n; //calcular desviacin estndar suma =0; for(i = 0; i<n; i++) suma += (x[i]-prom)*(x[i]-prom); des = Math.sqrt(suma/(n-1)); //desplegar resultados System.out.println(total de valores ledos: +n); System.out.println(el promedio es: +Format.leftAlign(8,3,prom)); System.out.println(la desviacin es: +Format.leftAlign(8,3,des)); } }
2
3
4.4
4.8
Actividad
Agregue cdigo al programa de ejemplo para calcular lo siguiente:
Desviacin media
1 N N
x x
i 1 i
1 x
i 1 i
1 N
xi2
i 1
}
catch (Excepcin x){ instrucciones si hay error; }
Ejemplo
import java.io.*; public class Ejemplo1TextIO { public static void main(String args[]) { // Vamos a leer el archivo prueba.txt // input es el objeto para leer desde el archivo BufferedReader entrada = null; try { FileReader arch = new FileReader("prueba.txt"); // Abre el archivo. entrada = new BufferedReader(arch); // Ata 'input' a este archivo. } catch(FileNotFoundException x) { // El archivo puede no existir System.err.println("Archivo no encontrado: prueba.txt"); System.exit(2);// Termina el programa con cdigo 2 } // Ahora lee el archivo y despliega cada lnea try { String linea; while( (linea = entrada.readLine()) != null ) { System.out.println(linea); } } catch(IOException x) { x.printStackTrace();//Esto se ejecuta si hay error al leer } } }
Actividad
Haga un programa que lea una lista de nombres y los muestre ordenados en la pantalla.
Algoritmo
1. Leer los nombres desde un archivo y almacenarlos en un vector. 2. Ordenar los nombres alfabticamente 3. Desplegar los nombres ordenados
Lectura de datos
import java.io.*; public class Ejemplo4TextIO { public static void main(String args[]) { // Vamos a leer el archivo nombres.txt BufferedReader entrada = null; try { FileReader arch = new FileReader("nombres.txt"); // Abre el archivo. entrada = new BufferedReader(arch); // Ata 'input' a este archivo. } catch(FileNotFoundException x) { // El archivo puede no existir. System.err.println("Archivo no encontrado: nombres.txt"); System.exit(2);// Termina el programa con cdigo 2 } int n = 0, i, j; String d[] = new String[100]; // Ahora lee el archivo y despliega cada valor try { String linea; while( (linea = entrada.readLine()) != null ) { d[n++] = linea; } } catch(IOException x) { x.printStackTrace();//Esto se ejecuta si hay error al leer }
Mtodo de ordenacin
El mtodo consiste en comparar el primer elemento con el segundo, luego el segundo, el tercero, etc., si es necesario se intercambian los elementos. Al final de este proceso se tendr el ms pequeo al inicio.
El proceso se repite con el segundo elemento comparndolo con los dems y luego el tercero, etc.
Algoritmo en Java
for(i = 0; i<n-1; i++) for(j = i+1; j<n; j++) if(d[i]>d[j]){ intercambiar d[i] y d[j]; }
Ordenacin y despliegue
Usaremos el mtodo ms sencillo (la burbuja)
//Despliega lista desordenada System.out.println("Desordenados\n"); for(i = 0; i<n; i++) System.out.println(d[i]); System.out.println("\nOrdenados\n"); //ordena el vector for(i = 0; i<n-1; i++) for(j = i; j<n; j++) if(d[i].compareToIgnoreCase(d[j])>0){ String temp = d[i]; d[i] = d[j]; d[j] = temp; } //Despliega lista ordenada for(i = 0; i<n; i++) System.out.println(d[i]); } }
Intercambia cadenas Compara cadenas 0 iguales >0 la primera mayor <0 la primera menor
Escritura en archivos
La clase BufferedWriter (Escritor con buffer) escribe texto en un flujo de caracteres. Debe construirse sobre un escritor de flujos o de archivos.
BufferedWriter in = new BufferedWriter(new FileWriter("foo.out")); El mtodo write(s,off,len) escribe una parte de una cadena de caracteres empezando en off y con longitud len. La escritura debe hacerse manejando los posibles errores que se puedan producir en un bloque try. try{ instrucciones si no hay error; } catch (Excepcin x){ instrucciones si hay error; }
Ejemplo
import java.io.*; public class Ejemplo5TextIO { public static void main(String args[]) { // Vamos a escribir el archivo salida.txt BufferedWriter salida = null; try { FileWriter arch = new FileWriter("salida.txt"); // Crea el archivo. salida = new BufferedWriter(arch); // Ata 'salida' a este archivo. } catch(IOException x) { // El archivo puede no ser creado. System.err.println("Archivo no se creo: salida.txt"); System.exit(2);// Termina el programa con cdigo 2 } int i; String d[] = {"hola","que","tal"}; // Ahora escribe el archivo try { for(i=0; i< d.length; i++ ) { salida.write(d[i],0,d[i].length());//Escribe cadena salida.newLine(); //Escribe nueva lnea } salida.close();//Es necesario cerrar el archivo } catch(IOException x) { x.printStackTrace();//Esto se ejecuta si hay error al escribir } } }
Escritura de nmeros
import java.io.*; public class Ejemplo6TextIO { public static void main(String args[]) { // Vamos a escribir el archivo salidanum.txt BufferedWriter salida = null; try { FileWriter arch = new FileWriter("salidanum.txt"); // Crea el archivo. salida = new BufferedWriter(arch); // Ata 'salida' a este archivo. } catch(IOException x) { // El archivo puede no ser creado. System.err.println("Archivo no se creo: salidanum.txt"); System.exit(2);// Termina el programa con cdigo 2 } int i; double a; // Ahora escribe el archivo try { for(i=0; i< 20; i++ ) { a = i*i; String s = ""+i+" "+a; salida.write(s,0,s.length());//Escribe cadena salida.newLine(); //Escribe nueva lnea } salida.close();//Es necesario cerrar el archivo } catch(IOException x) { x.printStackTrace();//Esto se ejecuta si hay error al escribir } } }