Talleres de introducción a la programación

download Talleres de introducción a la programación

of 40

Transcript of Talleres de introducción a la programación

1 TALLERES DE INTRODUCCIN A LA PROGRAMACIN CON JAVA El siguiente taller sintetiza los conceptos bsicos sobre estructuras de control: estructura secuencial, estructura de decisin si, estructura iterativa mientras que, y estructura iterativa para Herramientas necesarias FreeDFD JDK versin 6.0 preferiblemente (puede ser superior) Netbeans 5.5 preferiblemente (puede ser superior) Keyboard.java, Autor: Lewis & Loftus

Taller 1.Cmo traducir un diagrama de flujo a instrucciones de Java La figura siguiente expone en la parte izquierda, un diagrama de flujo secuencial que representa un algoritmo para calcular el pago de un empleado, dado el nmero de horas y el valor de la hora. En cadalneadelapartederechasemuestralainstruccinequivalenteenJava,acadafiguradela parte izquierda. Observe: { // Entrada de los datos horas y valorHora System.out.println("Ingrese el nmero de horas "); int horas = Keyboard.readInt(); System.out.println("Ingrese el valor de la hora "); double valorHora = Keyboard.readDouble(); // Clculo: double sueldo = horas * valorHora; System.out.println("El pago es: " + sueldo); } La figura anterior indica que un bloque de instrucciones inicia en Java con el smbolo ({) y finaliza con el smbolo (}). Para mostrar informacin en pantalla se utiliza la instruccin System.out.println();incluyendo entre parntesis aquello que se quiere desplegar. 2 Java no define instrucciones para ingresar datos directamente desde el teclado, sin embargo el algoritmo indica que se debe permitir al usuario ingresar las horas trabajadas y el valorHora. Lo cual se ha hecho de la siguiente manera: int horas = Keyboard.readInt(); double valorHora = Keyboard.readDouble(); Comopuedeobservar,parapermitiralusuarioingresarlosdatossolicitadossehanutilizadodela clase Keyboard los mtodos readInt() y readDouble(), los cuales retornan a las variables horas y valorHora, los datos introducidos por el usuario. El algoritmo descrito se puede construir en una estructura llamada mtodo, en la que al bloque de cdigo se le antepone una cabecera que lo identifica. Observe: public static void calcularPago() { // Entrada de los datos horas y valorHora System.out.println("Ingrese el nmero de horas "); int horas = Keyboard.readInt(); System.out.println("Ingrese el valor de la hora "); double valorHora = Keyboard.readDouble(); // Clculo: double sueldo = horas * valorHora; System.out.println("El pago es: " + sueldo); } Compruebeahorasuhabilidadparaconstruiralgoritmosdeestructurasecuencial.Paraello elaboreel diagrama de flujo y el correspondiente mtodo de cdigo para las formulacionesque se dan a continuacin, teniendo en cuenta eso s que la cabecera de un mtodo incluye un nombre de mtodoqueloidentificademaneranica,queempiezaconunaletraminsculaynopuedellevar espacios. Calcular la definitiva de un estudiante cuyos parciales valen 30%, 30% y 40%. Dado por el usuario un valor A y un valor B, intercambiar dichos valores y mostrar los nuevos contenidos de A y B. Permitir introducir el precio de un artculo y un nmero de artculos facturados, calcular el valor a pagar teniendo en cuenta que por compra se hace un descuento del 5% y que el IVA del producto es del 16%. Ejemplodetraduccindeestructurasdedecisinsimple.Unalgoritmopermiteestructurar unaovariasdecisiones,dependiendodecondicionesqueserepresentanmedianterombos.La siguiente es una representacin de un algoritmo que, dado un nmero x informa si dicho nmero es par o impar. 3 { System.out.println("Ingrese un valor "); int x = Keyboard.readInt(); if ((x % 2) == 0) { System.out.println(x + " es par"); } else { System.out.println(x + " es impar"); } } Observe que Java cuenta con la instruccin if que tiene la siguiente sintaxis: if (condicion) { Instrucciones para cuando la condicin se cumple } [ else { Instrucciones para cuando la condicin no se cumple } ] La parte que se ha encerrado entre corchetes ([ ]), es opcional y servir para aquellos casos en que lacondicinnorequieredeinstruccionescuandonosecumpla.Comoejemplosepuedemodificar uno de los algoritmos ya propuestos para permitir introducir el precio de un artculo y un nmero de artculos, y calcular el valor a pagar teniendo en cuenta que por compra se hace un descuento del 5% si la venta tiene un monto superior a 50000 pesos. El algoritmo de la figura anterior tambin se puede construir en una estructura llamada mtodo, en la que al bloque de cdigo se identifica con una cabecera. Observe: public static void esParEsImpar() { System.out.println("Ingrese un valor entero "); int x = Keyboard.readInt(); if ((x % 2) == 0) { System.out.println(x + " es par"); } else { System.out.println(x + " es impar"); } } Ensaye a elaborar el siguiente algoritmo que utiliza estructura condicional: Calcularladefinitivadeunestudiantecuyosparcialesvalen30%,30%y40%ymostrarun mensaje perdi la asignatura cuando la nota sea inferior a 3.0 o gan la asignatura en caso contrario. 4 EjemplodetraduccindelaestructuramientrasUnalgoritmotambinpuederepetirun bloque de instrucciones mientras se cumpla cierta condicin. En el ejemplo siguiente, un valor xse inicia en cero y un valor y en 10. Luego mientras x sea menor que y se imprime el valor de x y se incrementa la variable xen 2. { int x = 0; int y = 10;

while (x punto del plano complejo que se va obteniendo 44 float x2, y2; // punto del plano candidato a ser del conjunto de Mandelbrot 45 float xx, yy; // complejo auxiliar 46 int px; 47 int py; // punto de pantalla que se corresponde al (x,y) 48 float s; // factor de escala para convertir de (px,py) a (x,y) 49 int iaux; // entero auxiliar 50 51 s = calcularFactoresEscala(x0, y0, x1, y1, xMax, yMax); 52 53 for (px=0; px < xMax; px++) {// para cada columna de pantalla 54 for (py = 0; py < yMax; py++) {// para cada fila de pantalla 55 // Conversion del pixel (px, py) al punto complejo (x2, y2). 56 x2 = x0 + px * s; 57 y2 = y0 + py * s; 58 59 xx = 0.0f; 60 yy = 0.0f; // estudiamos la orbita de cero 61 62 for(iaux = 0; iaux < nIter; iaux++) { // comprobar si tiende a infinito 63 // Iterar: (x, y) = (xx, yy) y + (x2, y2) 64 x = xx * xx - yy * yy + x2; 65 y = 2 * xx * yy + y2; 66 67 // hacer que (x,y) sea el proximo punto iterado 68 xx = x; 69 yy = y; 70 71 if (x * x + y * y > 10000) { //si el modulo es mayor que 100, tiende a infinito 72 switch (iaux) { 73 case0: 74 color = new Color(255, 255, 255);// Blanco 75 break; 76 case1: 77 color = new Color(000, 000, 000);// Negro 78 break; 79 case2: 80 color = new Color(192, 192, 192);// Gris claro 81 break; 82 case3: 83 color = new Color(128, 128, 128);// Gris 84 break; 85 case4: 86 color = new Color(064, 064, 064);// Gris oscuro 87 break; 88 case5: 89 color = new Color(255, 000, 000);// Rojo 90 break; 91 case6: 92 color = new Color(000, 255, 000);// Verde 93 break; 94 case7: 95 color = new Color(000, 000, 255);// Azul 96 break; 97 case8: 98 color = new Color(255, 255, 000);// Amarillo 99 break; 34 100 case9: 101 color = new Color(255, 000, 255);// Magenta 102 break; 103 case 10: 104 color = new Color(000, 255, 255);// Cian 105 break; 106 case 11: 107 color = new Color(255, 175, 175);// Rosado 108 break; 109 case 12: 110 color = new Color(255, 200, 000);// Naranja 111 break; 112 default: 113 color = new Color((int)(Math.random()*256),114 (int)(Math.random()*256),115 (int)(Math.random()*256)); 116 break;// Aleatorio 117 } 118 g.setColor(color); 119 g.drawLine(px, yMax - 1 - py, px, yMax - 1 - py); 120 break; // fin del ciclo iaux, no hace falta seguir 121 } 122 } 123 } 124 } 125 } 126 } Nota:Sesugierequedeacuerdoalasnuevasversionespresentadashastaaqu,elestudiante avance hasta el final del captulo 13, teniendo en cuenta la comprensin terica y la elaboracin de las aplicaciones de ejemplo y de los ejercicios propuestos por los autores; eso s, teniendo en cuenta la implementacin utilizando componentes swing y no awt. Taller 7.Formaciones o arreglos A partir del captulo 13 del libro gua se introduce al estudiante en la manipulacin de estructuras de datosenformadetabladeunovariascolumnas.Aqucomosiempre,lonicoquesehacees fomentarelusodecomponentesswingparalaelaboracindelosejemplos.Comosiemprese recalca que la lectura del libro es fundamental para la comprensin de los temas tratados hasta aqu. 1.La demostracin de las pginas de la 234 a la 236 se recomienda que la pruebe de la siguiente manera: a.Se supone que las clases se implementarn en el paquete cap13. b.Agregue a dicho paquete la siguiente versin de la clase Tabla: 1 package cap13; 2 3 import java.awt.Graphics; 4 5 public class Tabla { 6 7 private final int tablaTamao = 7; 8 private int[] lluvia = new int[tablaTamao]; 9 private int indice; 10 private int nuevoValor; 11 private int suma = 0; 1213 private final int xInicial = 20; 14 private final int yInicial = 60; 35 15 private final int cuadroAltura = 20; 16 private final int cuadroAncho = 60; 1718 public void display(Graphics g) { 19 int y = yInicial; 20 for(int s = 0; s < lluvia.length; s++) { 21 g.drawRect(xInicial, y, cuadroAncho, cuadroAltura); 22 g.drawString(Integer.toString(lluvia[s]), 23 xInicial, y + cuadroAltura * 3 / 4); 24 y = y + cuadroAltura; 25 } 26 sumarValores(); 27 g.drawString("La cada pluvial total es " + suma, 100, 100); 28 } 2930 public void seleccionarComponente(int y) { 31 indice = (y - yInicial) / cuadroAltura; 32 lluvia[indice] = nuevoValor; 33 } 3435 public void establecerValor(int valor) { 36 nuevoValor = valor; 37 } 3839 private void sumarValores() { 40 suma = 0; 41 for (int s=0; s < lluvia.length; s++) 42 suma = suma + lluvia[s]; 43 } 44 } c.Agregue a dicho paquete la siguiente versin de la clase CaidaPluvial: 1 package cap13; 2 3 import java.awt.FlowLayout; 4 import java.awt.Graphics; 5 import java.awt.event.ActionEvent; 6 import java.awt.event.ActionListener; 7 import java.awt.event.MouseAdapter; 8 import java.awt.event.MouseEvent; 9 import javax.swing.JApplet; 10 import javax.swing.JLabel; 11 import javax.swing.JTextField; 1213 public class CaidaPluvial extends JApplet { 1415 private Tabla lluviaDatos; 16 private JTextField jtfValor; 1718 public void init() { 19 getContentPane().setLayout(new FlowLayout()); 20 lluviaDatos = new Tabla(); 21 getContentPane().add(new JLabel("Ingrese un nmero y d clic en el formulario")); 2223 jtfValor = new JTextField(10); 24 getContentPane().add(jtfValor); 2526 // >> 27 addMouseListener(new MouseAdapter() { 28 public void mouseClicked(MouseEvent evt) { 29 formularioMouseClicked(evt); 30 } 31 }); 32 setVisible(true); 33 } 36 3435 public void paint(Graphics g) { 36 g.clearRect(0, 50, 10000, 10000); 37 lluviaDatos.display(g); 38 } 3940 public void formularioMouseClicked(MouseEvent event){ 41 int nuevoValor = Integer.parseInt(jtfValor.getText()); 42 lluviaDatos.establecerValor(nuevoValor); 4344 int yCoord = event.getY(); 45 lluviaDatos.seleccionarComponente(yCoord); 46 repaint(); 47 } 48 } d.Pruebelaimplementacindandoclicderechosobreelcdigofuentedelaclase CaidaPluvial y luego eligiendo la opcin Run File. 2.La demostracin de las pginas de la 245 a la 248 se recomienda que la pruebe de la siguiente manera: a.Se supone que las clases se implementarn en el paquete cap13. b.Agregue a dicho paquete la siguiente versin de la clase Artista: 1 package cap13; 2 3 import java.awt.Color; 4 import java.awt.Graphics; 5 6 public class Artista { 7 8 private int altura = 25, anchura = 75; 9 private String nombre; 1011 public Artista(String nombre) { 12 this.nombre = nombre; 13 } 1415 public void mostrar(Graphics g, int x, int y, boolean seleccionado) { 16 if (seleccionado) { 17 g.setColor(Color.lightGray); 18 g.fillRect(x, y, anchura, altura); 19 g.setColor(Color.black); 20 } else 21 g.drawRect(x, y, anchura, altura); 22 g.drawString(nombre, x + 5, y + 20); 23 } 24 } c.Agregue a dicho paquete la siguiente versin de la clase ListaHits. Tenga en cuenta que laadaptacinpresentadaaquhacecambiosesencialessobrelaversinoriginaldelos autores, toda vez que la versin presentada en el libro no incluye conceptos relacionados conel manejo de clases parametrizadas que aparecen a partir de Java 2 y cuya omisin generara advertencias de error a la hora de compilar. 1 package cap13; 23 import java.awt.FlowLayout; 4 import java.awt.Graphics; 5 import java.awt.event.ActionEvent; 6 import java.awt.event.ActionListener; 37 7 import java.awt.event.MouseAdapter; 8 import java.awt.event.MouseEvent; 9 import java.util.ArrayList; 10 import javax.swing.JApplet; 11 import javax.swing.JButton; 12 import javax.swing.JTextField; 13 14 public class ListaHits extends JApplet { 15 16 private ArrayList artistas = new ArrayList(); 17 private String texto; 18 private boolean elementoSeleccionado = false; 19 private int indiceSeleccionado = -1; 20 private JButton jbtnAnexar, jbtnEliminar, jbtnInsertar, jbtnDerecha; 21 private JTextField jtfArtista; 22 private Artista artista; 23 private int tamaoIncremento = 40; 24 private int yInicial = 60; 25 26 public void init() { 27 getContentPane().setLayout(new FlowLayout()); 28 jbtnAnexar = new JButton("Anexar al final"); 29 getContentPane().add(jbtnAnexar); 30 jbtnAnexar.addActionListener(new ActionListener() { 31 public void actionPerformed(ActionEvent evt) { 32 jbtnAnexarActionPerformed(evt); 33 } 34 }); 35 36 jbtnEliminar = new JButton("Eliminar"); 37 getContentPane().add(jbtnEliminar); 38 jbtnEliminar.addActionListener(new ActionListener() { 39 public void actionPerformed(ActionEvent evt) { 40 jbtnEliminarActionPerformed(evt); 41 } 42 }); 43 44 jbtnInsertar = new JButton("Insertar"); 45 getContentPane().add(jbtnInsertar); 46 jbtnInsertar.addActionListener(new ActionListener() { 47 public void actionPerformed(ActionEvent evt) { 48 jbtnInsertarActionPerformed(evt); 49 } 50 }); 51 52 jtfArtista = new JTextField("", 10); 53 getContentPane().add(jtfArtista); 54 55 artista = new Artista("Elvis"); 56 boolean resultado = artistas.add(artista); 57 58 addMouseListener(new MouseAdapter() { 59 public void mouseClicked(MouseEvent evt) { 60 formularioMouseClicked(evt); 61 } 62 }); 63 setVisible(true); 64 } 65 66 public void jbtnAnexarActionPerformed(ActionEvent event) { 67 texto = jtfArtista.getText(); 68 artista = new Artista(texto); 69 artistas.add(artista); 70 elementoSeleccionado = false; 71 repaint(); 72 } 38 74 public void jbtnEliminarActionPerformed(ActionEvent event) { 75 texto = jtfArtista.getText(); 76 if (elementoSeleccionado) 77 artistas.remove(indiceSeleccionado); 78 elementoSeleccionado = false; 79 repaint(); 80 } 81 82 public void jbtnInsertarActionPerformed(ActionEvent event) { 83 // Observe lo que se puede hacer para evitar escribir tanto... 84 artista = new Artista(jtfArtista.getText()); 85 if (elementoSeleccionado) 86 artistas.add(indiceSeleccionado, artista); 87 elementoSeleccionado = false; 88 repaint(); 89 } 90 91 public void formularioMouseClicked(MouseEvent event) { 92 int yCoord = event.getY(); 93 indiceSeleccionado = (yCoord - yInicial) / tamaoIncremento; 94 elementoSeleccionado = true; 95 repaint(); 96 } 97 98 public void paint(Graphics g) { 99 g.clearRect(0, 60, 100000, 100000); 100101 for (int i = 0; i < artistas.size(); i++) { 102 artista = (Artista) artistas.get(i); 103 int x = 20; 104 int y = tamaoIncremento * i + yInicial; 105106 if (i == indiceSeleccionado && elementoSeleccionado) 107 artista.mostrar(g, x, y, true); 108 else 109 artista.mostrar(g, x, y, false); 110 } 111 } 112 } d.Pruebe la implementacin dando clic derecho sobre el cdigo fuente de la clase ListaHits y luego eligiendo la opcin Run File. Importante:Sesugierequeavancehastaelfinaldelcaptulo13comprendiendocadanuevo concepto y realizando todos los ejercicios propuestos. 3.La demostracin de las pginas de la 234 a la 236 se recomienda que la pruebe de la siguiente manera: a.Se supone que las clases se implementarn en el paquete cap14. b.Agregue a dicho paquete la siguiente nueva versin de la clase Tabla: 1 package cap14; 2 3 import java.awt.Graphics; 4 5 public class Tabla { 6 7 private int[][] datos; 8 private intrenglonIndice; 9 private int colIndice; 10 private int nuevoValor; 11 private int suma; 39 1213 private final int xInicial = 20; 14 private final int yInicial = 60; 15 private final int cuadroAltura = 20; 16 private final int cuadroAnchura = 40; 1718 public Tabla(intrenglones, int columnas) { 19 datos = new int[ renglones][columnas]; 2021 for(intrenglon = 0;renglon