INDICE. 1. Introducción a las estructuras de almacenamiento Cadenas de caracteres... 5

Tamaño: px
Comenzar la demostración a partir de la página:

Download "INDICE. 1. Introducción a las estructuras de almacenamiento... 4 2. Cadenas de caracteres... 5"

Transcripción

1 TEMA 8 INDICE 1. Introducción a las estructuras de almacenamiento Cadenas de caracteres Operaciones avanzadas con cadenas de caracteres. (I) Operaciones avanzadas con cadenas de caracteres. (II) Operaciones avanzadas con cadenas de caracteres. (III)... 8 Sintaxis de las cadenas de formato y uso del método format Operaciones avanzadas con cadenas de caracteres. (III) Operaciones avanzadas con cadenas de caracteres. (IV) Expresiones regulares. (I) Expresiones regulares. (II) Expresiones regulares. (III) Creación de arrays Uso de arrays unidimensionales Inicialización Arrays multidimensionales Uso de arrays multidimensionales Inicialización de arrays multidimensionales Clases y métodos genéricos. (I) Clases y métodos genéricos. (II) Introducción a las colecciones. (I) Conjuntos. (I) Conjuntos. (II) Ejercicio resuelto Conjuntos. (III) Conjuntos. (IV) Conjuntos. (V) Ejercicio resuelto Listas. (I) Listas. (II) Listas. (III) Listas. (IV) Conjuntos de pares clave/valor Iteradores. (I) Iteradores. (II) Algoritmos. (I) Algoritmos. (II) Algoritmos. (III) Tratamiento de documentos estructurados XML Qué es un documento XML? Librerías para procesar documentos XML. (I) Librerías para procesar documentos XML. (II) Manipulación de documentos XML.(I) Manipulación de documentos XML.(II) Obtener la lista de hijos de un elemento y procesarla Añadir un nuevo elemento hijo a otro elemento Manipulación de documentos XML.(III) Eliminar un elemento hijo de otro elemento Cambiar el contenido de un elemento cuando solo es texto Manipulación de documentos XML.(IV) Atributos de un elemento

2 Aplicación de las estructuras de almacenamiento DAW 2

3 Desarrollo de Aplicaciones Web Tema 8 APLICACIÓN DE LAS ESTRUCTURAS DE ALMACENAMIENTO. CASO PRÁCTICO. Ana ha recibido un pequeño encargo de parte de su tutora, María. Se trata de que realice un pequeño programita, muy sencillo pero fundamental. -Hola Ana -dice María-, hoy tengo una tarea especial para ti. - Si? -responde Ana-. Estoy deseando, últimamente no hay nada que se me resista, llevo dos semanas en racha. -Bueno, quizás esto se te resista un poco más, es fácil, pero tiene cierta complicación. Un cliente para el que hicimos una aplicación, nos ha dicho si podemos ayudarle. El cliente tiene una aplicación para gestionar los pedidos que recibe de sus clientes. Normalmente, recibe por correo electrónico los pedidos en un formato concreto que todos sus clientes llevan tiempo usando. El cliente suele transcribir el pedido desde el correo electrónico a la aplicación, copiando dato a dato, pero nos ha preguntado si es posible que copie todo el pedido de golpe, y que la aplicación lo procese, detectando posibles errores en el pedido. - Qué? -dice María con cierta perplejidad. -Me alegra que te guste -dice María esbozando una sonrisa picara-, se que te gustan los retos. -Pero, eso como se hace? Cómo compruebo yo si el pedido es válido? Y si el cliente ha puesto un producto que no existe? -No mujer, se trata de comprobar si el pedido tiene el formato correcto, y transformarlo de forma que se genere un documento XML con los datos del pedido. Un documento XML luego se puede incorporar fácilmente a los otros pedidos que tenga el cliente en su base de datos. De la verificación de si hay algún producto que no existe, o de si hay alguna incoherencia en el pedido se encarga otra parte del software, que ya he realizado yo. -Bueno -dice María justo después de resoplar tres veces seguidas-, empieza por contarme que es el formato XML. Cuando el volumen de datos a manejar por una aplicación es elevado, no basta con utilizar variables. Manejar los datos de un único pedido en una aplicación puede ser relativamente sencillo, pues un pedido está compuesto por una serie de datos y eso simplemente se traduce en varias variables. Pero, qué ocurre cuando en una aplicación tenemos que gestionar varios pedidos a la vez? Lo mismo ocurre en otros casos. Para poder realizar ciertas aplicaciones se necesita poder manejar datos que van más allá de meros datos simples (números y letras). A veces, los datos que tiene que manejar la aplicación son datos compuestos, es decir, datos que están compuestos a su vez de varios datos más simples. Por ejemplo, un pedido está compuesto por varios datos, los datos podrían ser el cliente que hace el pedido, la dirección de entrega, la fecha requerida de entrega y los artículos del pedido. Los datos compuestos son un tipo de estructura de datos, y en realidad ya los has manejado. Las clases son un ejemplo de estructuras de datos que permiten almacenar datos compuestos, y el objeto en sí, la instancia de una clase, sería el dato compuesto. Pero, a veces, los datos tienen estructuras aún más complejas, y son necesarias soluciones adicionales. Aquí podrás aprender esas soluciones adicionales. Esas soluciones consisten básicamente en la capacidad de poder manejar varios datos del mismo o diferente tipo de forma dinámica y flexible. 3

4 Aplicación de las estructuras de almacenamiento DAW 1. Introducción a las estructuras de almacenamiento. Cómo almacenarías en memoria un listado de números del que tienes que extraer el valor máximo? Seguro que te resultaría fácil. Pero, y si el listado de números no tiene un tamaño fijo, sino que puede variar en tamaño de forma dinámica? Entonces la cosa se complica. Un listado de números que aumenta o decrece en tamaño es una de las cosas que aprenderás a utilizar aquí, utilizando estructuras de datos. Pasaremos por alto las clases y los objetos, pues ya los has visto con anterioridad, pero debes saber que las clases en sí mismas son la evolución de un tipo de estructuras de datos conocidas como datos compuestos (también llamadas registros). Las clases, además de aportar la ventaja de agrupar datos relacionados entre sí en una misma estructura (característica aportada por los datos compuestos), permiten agregar métodos que manejen dichos datos, ofreciendo una herramienta de programación sin igual. Pero todo esto ya lo sabías. Las estructuras de almacenamiento, en general, se pueden clasificar de varias formas. Por ejemplo, atendiendo a si pueden almacenar datos de diferente tipo, o si solo pueden almacenar datos de un solo tipo, se pueden distinguir: Estructuras con capacidad de almacenar varios datos del mismo tipo: varios números, varios caracteres, etc. Ejemplos de estas estructuras son los arrays, las cadenas de caracteres, las listas y los conjuntos. Estructuras con capacidad de almacenar varios datos de distinto tipo: números, fechas, cadenas de caracteres, etc., todo junto dentro de una misma estructura. Ejemplos de este tipo de estructuras son las clases. Otra forma de clasificar las estructuras de almacenamiento va en función de si pueden o no cambiar de tamaño de forma dinámica: Estructuras cuyo tamaño se establece en el momento de la creación o definición y su tamaño no puede variar después. Ejemplos de estas estructuras son los arrays y las matrices (arrays multimensionales). Estructuras cuyo tamaño es variable (conocidas como estructuras dinámicas). Su tamaño crece o decrece según las necesidades de forma dinámica. Es el caso de las listas, árboles, conjuntos y, como veremos también, el caso de algunos tipos de cadenas de caracteres. Por último, atendiendo a la forma en la que los datos se ordenan dentro de la estructura, podemos diferenciar varios tipos de estructuras: Estructuras que no se ordenan de por sí, y debe ser el programador el encargado de ordenar los datos si fuera necesario. Un ejemplo de estas estructuras son los arrays. Estructuras ordenadas. Se trata de estructuras que al incorporar un dato nuevo a todos los datos existentes, este se almacena en una posición concreta que irá en función del orden. El orden establecido en la estructura puede variar dependiendo de las necesidades del programa: alfabético, orden numérico de mayor a menor, momento de inserción, etc. Todavía no conoces mucho de las estructuras, y probablemente todo te suena raro y extraño. No te preocupes, poco a poco irás descubriéndolas. Verás que son sencillas de utilizar y muy cómodas. El tamaño de las estructuras de almacenamiento siempre se determina en el momento de la creación. Verdadero Falso 4

5 Desarrollo de Aplicaciones Web Tema 8 2. Cadenas de caracteres. CASO PRÁCTICO Ana está asustada, le acaban de asignar una nueva tarea y le acaban de enviar por correo el formato del archivo que tiene que procesar. El archivo tiene un formato concreto, un tanto extraño. Primero tiene una cabecera con información general del pedido, y luego tiene los artículos del pedido, cada uno en una línea diferente. Podrá realizar la tarea encomendada? Seguro que sí. La empresa recibe los pedidos siguiendo un modelo normalizado. En realidad se trata de una pequeña aplicación web que al rellenar un formulario, envía un correo electrónico con la información siguiendo una estructura fija. A continuación puedes ver un ejemplo: ## PEDIDO ## Número de pedido: { Cliente: { Muebles Bonitos S.A. Código del cliente: { Dirección de factura: { C/ De en frente, 11 Dirección de entrega: { C/ De al lado, 22 Nombre del contacto: { Elias Teléfono del contacto: { Correo electrónico del contacto: { mail@mail1234.com Fecha preferente de entrega: { 19/11/2012 Forma de pago: { Transferencia ## ARTICULOS ## { Código Artículo Descripción Cantidad { Tuercas tipo { Tornillos tipo { Arandelas tipo ## FIN ARTICULOS ## ## FIN PEDIDO ## Como puedes observar, el pedido tiene una estructura fija, y solamente cambian los datos que están entre llaves. El resto del texto es fijo, dado que como se ha dicho antes, el pedido lo genera una aplicación web, y lo envía por correo electrónico al cliente. Cuando un cliente solicita un pedido a esta empresa, no puede poner en ningún campo los símbolos "{", "", ni " ", porque entonces entraría en conflicto con el formato enviado por correo y daría problemas, así que se optó por impedir que el cliente pudiera poner dichos caracteres extraños. Esto garantiza que cada campo del pedido se va a poder leer adecuadamente. Lo más conflictivo, es la sección de artículos del pedido, en su primera parte, tiene una especie de cabecera que ayuda a identificar que es cada una de las columnas. Y después, tiene tantas líneas como artículos tenga el pedido, si tiene 100 artículos, tendrán 100 líneas que incluirán: código del artículo, descripción del artículo y la cantidad. Probablemente, una de las cosas que más utilizarás cuando estés programando en cualquier lenguaje de programación son las cadenas de caracteres. Las cadenas de caracteres son estructuras de almacenamiento que permiten almacenar una secuencia de caracteres de casi cualquier longitud. Y la pregunta ahora es, qué es un carácter? En Java y en todo lenguaje de programación, y por ende, en todo sistema informático, los caracteres se codifican como secuencias de bits que representan a los símbolos usados en la comunicación humana. Estos símbolos pueden ser letras, números, símbolos matemáticos e incluso ideogramas y pictogramas. Si quieres puedes profundizar en la codificación de caracteres leyendo el siguiente artículo de la Wikipedia. La forma más habitual de ver escrita una cadena de caracteres es como un literal de cadena. Consiste simplemente en una secuencia de caracteres entre comillas dobles, por ejemplo: "Ejemplo de cadena de caracteres". En Java, los literales de cadena son en realidad instancias de la clase String, lo cual quiere decir que, por el mero hecho de escribir un literal, se creará una instancia de dicha clase. Esto da mucha flexibilidad, puesto que permite crear cadenas de muchas formas diferentes, pero obviamente consume mucha memoria. La forma más habitual es crear una cadena partiendo de un literal: 5

6 Aplicación de las estructuras de almacenamiento DAW String cad="ejemplo de cadena"; En este caso, el literal de cadena situado a la derecha del igual es en realidad una instancia de la clase String. Al realizar esta asignación hacemos que la variable cad se convierta en una referencia al objeto ya creado. Otra forma de crear una cadena es usando el operador new y un constructor, como por ejemplo: String cad=new String ("Ejemplo de cadena"); Cuando se crean las cadenas de esta forma, se realiza una copia en memoria de la cadena pasada por parámetro. La nueva instancia de la clase String hará referencia por tanto a la copia de la cadena, y no al original. Fijate en el siguiente línea de código, cuántas instancias de la clase String ves? String cad="ejemplo de cadena 1"; cad="ejemplo de cadena 2"; cad=new String("Ejemplo de cadena 3"); Pues en realidad hay 4 instancias. La primera instancia es la que se crea con el literal de cadena "Ejemplo de cadena 1". El segundo literal, "Ejemplo de cadena 2", da lugar a otra instancia diferente a la anterior. El tercer literal, "Ejemplo de cadena 3", es también nuevamente otra instancia de String diferente. Y por último, al crear una nueva instancia de la clase String a través del operador new, se crea un nuevo objeto String copiando para ello el contenido de la cadena que se le pasa por parámetro, con lo que aquí tenemos la cuarta instancia del objeto String en solo una línea Operaciones avanzadas con cadenas de caracteres. (I) Qué operaciones puedes hacer con una cadena? Muchas más de las que te imaginas. Empezaremos con la operación más sencilla: la concatenación. La concatenación es la unión de dos cadenas, para formar una sola. En Java es muy sencillo, pues sólo tienes que utilizar el operador de concatenación (signo de suma): String cad = " Bien"+"venido!"; System.out.println(cad); En la operación anterior se está creando una nueva cadena, resultado de unir dos cadenas: una cadena con el texto " Bien", y otra cadena con el texto "venido!". La segunda línea de código muestra por la salida estándar el resultado de la concatenación. El resultado de su ejecución será que aparecerá el texto " Bienvenido!" por la pantalla. Otra forma de usar la concatenación, que ilustra que cada literal de cadena es a su vez una instancia de la clase String, es usando el método concat del objeto String: String cad=" Bien".concat("venido!"); System.out.printf(cad); Fíjate bien en la expresión anterior, pues genera el mismo resultado que la primera opción y en ambas participan tres instancias de la clase String. Una instancia que contiene el texto " Bien", otra instancia que contiene el texto "venido!", y otra que contiene el texto " Bienvenido!". La tercera cadena se crea nueva al realizar la operación de concatenación, sin que las otras dos hayan desaparecido. Pero no te preocupes por las otras dos cadenas, pues se borrarán de memoria cuando el recolector de basura detecte que ya no se usan. Fíjate además, que se puede invocar directamente un método de la clase String, posponiendo el método al literal de cadena. Esto es una señal de que al escribir un literal de cadena, se crea una instancia del objeto inmutable (aquellos que no se pueden modificar una vez creados. Es el caso de los String de Java, así como las clases envoltorio Integer, Float, Double, etc.) String. Pero no solo podemos concatenar una cadena a otra cadena. Gracias al método tostring() podemos concatenar cadenas con literales numéricos e instancias de otros objetos sin problemas. El método tostring() es un método disponible en todas las clases de Java. Su objetivo es simple, permitir la conversión de una instancia de clase en cadena de texto, de forma que se pueda convertir a texto el contenido de la instancia. Lo de convertir, no siempre es posible, hay clases fácilmente convertibles a texto, como es la clase Integer, por ejemplo, y otras que no se pueden convertir, y que el resultado de invocar el método tostring() es información relativa a la instancia. 6

7 Desarrollo de Aplicaciones Web Tema 8 La gran ventaja de la concatenación es que el método tostring() se invocará automáticamente, sin que tengamos que especificarlo, por ejemplo: Integer i1=new Integer (1223); // La instancia i1 de la clase Integer contiene el número System.out.println("Número: " + i1); // Se mostrará por pantalla el texto "Número: 1223" En el ejemplo anterior, se ha invocado automáticamente i1.tostring(), para convertir el número a cadena. Esto se realizará para cualquier instancia de clase concatenada, pero cuidado, como se ha dicho antes, no todas las clases se pueden convertir a cadenas. Qué se mostrará como resultado de ejecutar el siguiente código System.out.println(4+1+"-"+4+1);? Mostrará la cadena "5 41" Mostrará la cadena "41 14" Esa operación dará error Operaciones avanzadas con cadenas de caracteres. (II) Vamos a continuar revisando las operaciones que se pueden realizar con cadenas. Como verás las operaciones a realizar se complican un poco a partir de ahora. En todos los ejemplos la variable cad contiene la cadena " Bienvenido!", como se muestra en las imágenes. int length(). Retorna un número entero que contiene la longitud de una cadena, String cad= B e n v e n d o! resultado de contar el número de caracteres por la que está compuesta. Recuerda que un Longitud = 12 espacio es también un carácter. char charat(int pos). Retorna el carácter ubicado en la posición pasada por parámetro. El carácter obtenido de dicha posición será almacenado en un tipo de dato char. Las posiciones se empiezan a contar desde el 0 (y no desde el 1), y van desde 0 hasta longitud 1.Por ejemplo, el código siguiente mostraría por pantalla el carácter "v": char t = cad.charat(5); System.out.println(t); String cad= B e n v e n d o Posición cad.charat(0) cad.charat(4) cad.charat(11) String substring(int beginindex, int endindex). Este método permite extraer una subcadena de otra de mayor tamaño. Una cadena compuesta por todos los caracteres Posición existentes entre la posición beginindex String cad= B e n v e n d o! y la posición endindex 1. Por ejemplo, substring(0,5) substring(5,11) si pusiéramos cad.substring(0,5) en nuestro programa, sobre la variable cad Posición anterior, dicho método devolvería la String cad= B e n v e n d o! subcadena " Bien" tal y como se substring(2) muestra en la imagen. String substring (int beginindex). Cuando al método substring solo le proporcionamos un parámetro, extraerá una cadena que comenzará en el carácter con posición beginindex e irá hasta el final de la cadena. En el siguiente ejemplo se mostraría por pantalla la cadena ienvenido! : String subcad = cad.substring(2); System.out.println(subcad); Otra operación muy habitual es la conversión de número a cadena y de cadena a número. Imagínate que un usuario introduce su edad. Al recoger la edad desde la interfaz de usuario, capturarás! 7

8 Aplicación de las estructuras de almacenamiento DAW generalmente una cadena, pero, cómo compruebas que la edad es mayor que 0? Para poder realizar esa comprobación tienes que pasar la cadena a número. Empezaremos por ver como se convierte un número a cadena. Los números generalmente se almacenan en memoria como números binarios, es decir, secuencias de unos y ceros con los que se puede operar (sumar, restar, etc.). No debes confundir los tipos de datos que contienen números (int, short, long, float y double) con las secuencias de caracteres que representan un número. No es lo mismo 123 que "123", el primero es un número y el segundo es una cadena formada por tres caracteres: '1', '2' y '3'. Convertir un número a cadena es fácil desde que existe, para todas las clases Java, el método tostring(). Gracias a ese método podemos hacer cosas como las siguientes: String cad2="número cinco: " + 5; System.out.println(cad2); El resultado del código anterior es que se mostrará por pantalla "Número cinco: 5", y no dará ningún error. Esto es posible gracias a que Java convierte el número 5 a su clase envoltorio (wrapper class) correspondiente (Integer, Float, Double, etc.), y después ejecuta automáticamente el método tostring() de dicha clase. Cuál crees que será el resultado de poner System.out.println( A +5f)? Pruébalo y recuerda: no olvides indicar el tipo de literal (f para lo literales de números flotantes, y d para los literales de números dobles), así obtendrás el resultado esperado y no algo diferente Operaciones avanzadas con cadenas de caracteres. (III) Cómo comprobarías que la cadena "3" es mayor que 0? No puedes comparar directamente una cadena con un número, así que necesitarás aprender cómo convertir cadenas que contienen números a tipos de datos numéricos (int, short, long, float o double). Esta es una operación habitual en todos los lenguajes de programación, y Java, para este propósito, ofrece los métodos valueof, existentes en todas las clases envoltorio descendientes de la clase Number: Integer, Long, Short, Float y Double. Veamos un ejemplo de su uso para un número de doble precisión, para el resto de las clases es similar: String c=" "; double n; try { n=double.valueof(c).doublevalue(); catch (NumberFormatException e) { /* Código a ejecutar si no se puede convertir Fijate en el código anterior, en él puedes comprobar cómo la cadena c contiene en su interior un número, pero escrito con dígitos numéricos (caracteres). El código escrito esta destinado a transformar la cadena en número, usando el método valueof. Este método lanzará la excepción NumberFormatException si no consigue convertir el texto a número. En el siguiente archivo, tienes un ejemplo más completo, donde aparecen también ejemplos para las otros tipos numéricos: import javax.swing.joptionpane; /** * Ejemplo en el que se muestra la conversión de varias cadenas de texto, que * contienen números, a números. Salvador Romero Villegas public class EjemplosConversionStringANumero { boolean operacioncancelada; /** * Constructor de la clase. public EjemplosConversionStringANumero() { 8

9 Desarrollo de Aplicaciones Web Tema 8 setoperacioncancelada(false); /** * Método que permite comprobar si la última operación tipo Pedir ha sido * cancelada. true si la última operación realizada ha sido cancelada, false * en otro caso. public boolean isoperacioncancelada() { return operacioncancelada; /** * Método que permite cambiar el estado de la variable privada * operacioncancelada. Este método es privado y solo debe usarse desde * un método propio de esta clase. operacioncancelada True o false, el nuevo estado para la variable. private void setoperacioncancelada(boolean operacioncancelada) { this.operacioncancelada = operacioncancelada; /** * Clase que pide al usuario que introduzca un número. El número esperado * es un número de doble precisión, en cualquiera de sus formatos. Admitirá * números como: 2E10 (2*10^10); 2,45; etc. titulo mensaje public double PedirNumeroDouble(String titulo, String mensaje) { double d = 0; setoperacioncancelada(false); boolean NumeroValido = false; do { String s = (String) JOptionPane.showInputDialog(null, mensaje, titulo, JOptionPane.PLAIN_MESSAGE, null, null, ""); if (s!= null) { try { d = Double.valueOf(s).doubleValue(); NumeroValido = true; catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "El número introducido no es válido.", "Error", JOptionPane.ERROR_MESSAGE); else { NumeroValido=true; // Cancelado setoperacioncancelada(true); while (!NumeroValido); return d; /** * Clase que pide al usuario que introduzca un número. El número esperado * es un número de precisión sencilla, en cualquiera de sus formatos. titulo mensaje public float PedirNumeroFloat (String titulo, String mensaje) { float d = 0; setoperacioncancelada(false); boolean NumeroValido = false; do { String s = (String) JOptionPane.showInputDialog(null, mensaje, titulo, JOptionPane.PLAIN_MESSAGE, null, null, ""); if (s!= null) { try { d = Float.valueOf(s).floatValue(); NumeroValido = true; catch (NumberFormatException e) { 9

10 Aplicación de las estructuras de almacenamiento DAW JOptionPane.showMessageDialog(null, "El número introducido no es válido.", "Error", JOptionPane.ERROR_MESSAGE); else { NumeroValido=true; // Cancelado setoperacioncancelada(true); while (!NumeroValido); return d; /** * Clase que pide al usuario que introduzca un número. El número esperado * es un número entero. titulo mensaje public int PedirNumeroInteger (String titulo, String mensaje) { int d = 0; setoperacioncancelada(false); boolean NumeroValido = false; do { String s = (String) JOptionPane.showInputDialog(null, mensaje, titulo, JOptionPane.PLAIN_MESSAGE, null, null, ""); if (s!= null) { try { d = Integer.valueOf(s).intValue(); NumeroValido = true; catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "El número introducido no es válido.", "Error", JOptionPane.ERROR_MESSAGE); else { NumeroValido=true; // Cancelado setoperacioncancelada(true); while (!NumeroValido); return d; /** * Clase que pide al usuario que introduzca un número. El número esperado * es un número entero. titulo mensaje public long PedirNumeroLong (String titulo, String mensaje) { long d = 0; setoperacioncancelada(false); boolean NumeroValido = false; do { String s = (String) JOptionPane.showInputDialog(null, mensaje, titulo, JOptionPane.PLAIN_MESSAGE, null, null, ""); if (s!= null) { try { d = Long.valueOf(s).longValue(); NumeroValido = true; catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "El número introducido no es válido.", "Error", JOptionPane.ERROR_MESSAGE); else { NumeroValido=true; // Cancelado setoperacioncancelada(true); while (!NumeroValido); return d; /** * Clase que pide al usuario que introduzca un número. El número esperado 10

11 Desarrollo de Aplicaciones Web Tema 8 * es un número entero corto. titulo mensaje public short PedirNumeroShort (String titulo, String mensaje) { short d = 0; setoperacioncancelada(false); boolean NumeroValido = false; do { String s = (String) JOptionPane.showInputDialog(null, mensaje, titulo, JOptionPane.PLAIN_MESSAGE, null, null, ""); if (s!= null) { try { d = Short.valueOf(s).shortValue(); NumeroValido = true; catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "El número introducido no es válido.", "Error", JOptionPane.ERROR_MESSAGE); else { NumeroValido=true; // Cancelado setoperacioncancelada(true); while (!NumeroValido); return d; Seguro que ya te vas familiarizando con este embrollo y encontrarás interesante todas estas operaciones. Ahora te planteamos otro reto: imagina que tienes que mostrar el precio de un producto por pantalla. Generalmente, si un producto vale, por ejemplo 3,3 euros, el precio se debe mostrar como "3,30 ", es decir, se le añade un cero extra al final para mostrar las centésimas. Con lo que sabemos hasta ahora, usando la concatenación en Java, podemos conseguir que una cadena se concatene a un número flotante, pero el resultado no será el esperado. Prueba el siguiente código: float precio=3.3f; System.out.println("El precio es: "+precio+" "); Si has probado el código anterior, habrás comprobado que el resultado no muestra "3,30 " sino que muestra "3,3 ". Cómo lo solucionamos? Podríamos dedicar bastantes líneas de código hasta conseguir algo que realmente funcione, pero no es necesario, dado que Java y otros lenguajes de programación (como C), disponen de lo que se denomina formateado de cadenas. En Java podemos formatear cadenas a través del método estático format disponible en el objeto String. Este método permite crear una cadena proyectando los argumentos en un formato específico de salida. Lo mejor es verlo con un ejemplo, veamos cuál sería la solución al problema planteado antes: float precio=3.3f; String salida=string.format ("El precio es: %.2f ", precio)); System.out.println(salida); El formato de salida, también denominado cadena de formato, es el primer argumento del método format. La variable precio, situada como segundo argumento, es la variable que se proyectará en la salida siguiendo un formato concreto. Seguro que te preguntarás, qué es %.2f? Pues es un especificador de formato, e indica cómo se deben formatear o proyectar los argumentos que hay después de la cadena de formato en el método format. Es necesario que conozcas bien el método format y los especificadores de formato. Por ese motivo, te pedimos que leas atentamente el siguiente documento: Sintaxis de las cadenas de formato y uso del método format. En Java, el método estático format de la clase String permite formatear los datos que se muestran al usuario o la usuaria de la aplicación. El método format tiene los siguientes argumentos: 11

12 Aplicación de las estructuras de almacenamiento DAW Cadena de formato. Cadena que especifica cómo será el formato de salida, en ella se mezclará texto normal con especificadores de formato, que indicarán cómo se debe formatear los datos. Lista de argumentos. Variables que contienen los datos cuyos datos se formatearán. Tiene que haber tantos argumentos como especificadores de formato haya en la cadena de formato. Los especificadores de formato comienzan siempre por "%", es lo que se denomina un carácter de escape (carácter que sirve para indicar que lo que hay a continuación no es texto normal, sino algo especial). El especificador de formato debe llevar como mínimo el símbolo "%" y un carácter que indica la conversión a realizar, por ejemplo "%d". La conversión se indica con un simple carácter, y señala al método format cómo debe ser formateado el argumento. Dependiendo del tipo de dato podemos usar unas conversiones u otras. Veamos las conversiones más utilizadas: Listado de conversiones más utilizada y ejemplos. Conversión Formato Tipos de datos Ejemplo Resultado Boolean (cuando se boolean b=true; usan otros tipos de String d= Valor lógico o "%b" o datos siempre lo String.format("Resultado: booleano. "%B" formateará escribiendo %b", b); true). System.out.println (d); Cualquiera, se String cad="hola mundo"; convertirá el objeto a String d= Cadena de "%s" o cadena si es posible String.format("Resultado: caracteres. "%S" (invocando el método %s", cad); tostring). System.out.println (d); int i=10; String d= Entero decimal "%d" Un tipo de dato entero. String.format("Resultado: %d", i); System.out.println (d); double i=10.5; Número en String d= "%e" o Flotantes simples o notación String.format("Resultado: "%E" dobles. científica %E", i); System.out.println (d); Número decimal Número en notación científica o decimal (lo más corto) "%f" "%g" o "%G" Flotantes simples o dobles. Flotantes simples o dobles. El número se mostrará como decimal o en notación científica dependiendo de lo que sea mas corto. float i=10.5f; String d= String.format("Resultado: %f", i); System.out.println (d); double i=10.5; String d= String.format("Resultado: %g", i); System.out.println (d); Resultado: true Resultado: hola mundo Resultado: 10 Resultado: E+01 Resultado: 10, Resultado: Ahora que ya hemos visto alguna de las conversiones existentes (las más importantes), veamos algunos modificadores que se le pueden aplicar a las conversiones, para ajustar como queremos que sea la salida. Los modificadores se sitúan entre el carácter de escape ("%") y la letra que indica el tipo de conversión (d, f, g, etc.). 12

13 Desarrollo de Aplicaciones Web Tema 8 Podemos especificar, por ejemplo, el número de caracteres que tendrá como mínimo la salida de una conversión. Si el dato mostrado no llega a ese ancho en caracteres, se rellenará con espacios (salvo que se especifique lo contrario): %[Ancho]Conversión El hecho de que esté entre corchetes significa que es opcional. Si queremos por ejemplo que la salida genere al menos 5 caracteres (poniendo espacios delante) podríamos ponerlo así: String.format ("%5d",10); Se mostrará el "10" pero también se añadirán 3 espacios delante para rellenar. Este tipo de modificador se puede usar con cualquier conversión. Cuando se trata de conversiones de tipo numéricas con decimales, solo para tipos de datos que admitan decimales, podemos indicar también la precisión, que será el número de decimales mínimos que se mostrarán: %[Ancho][.Precisión]Conversión Como puedes ver, tanto el ancho como la precisión van entre corchetes, los corchetes no hay que ponerlos, solo indican que son modificaciones opcionales. Si queremos, por ejemplo, que la salida genere 3 decimales como mínimo, podremos ponerlo así: String.format ("%.3f",4.2f); Como el número indicado como parámetro solo tiene un decimal, el resultado se completará con ceros por la derecha, generando una cadena como la siguiente: "4,200". Una cadena de formato puede contener varios especificadores de formato y varios argumentos. Veamos un ejemplo de una cadena con varios especificadores de formato: String np="lavadora"; int u=10; float ppu = 302.4f; float p=u*ppu; String output=string.format("producto: %s; Unidades: %d; Precio por unidad: %.2f ; Total: %.2f ", np, u, ppu, p); System.out.println(output); Cuando el orden de los argumentos es un poco complicado, porque se reutilizan varias veces en la cadena de formato los mismos argumentos, se puede recurrir a los índices de argumento. Se trata de especificar la posición del argumento a utilizar, indicando la posición del argumento (el primer argumento sería el 1 y no el 0) seguido por el símbolo del dólar ("$"). El índice se ubicaría al comienzo del especificador de formato, después del porcentaje, por ejemplo: int i=10; int j=20; String d=string.format("%1$d multiplicado por %2$d (%1$dx%2$d) es %3$d",i,j,i*j); System.out.println(d); El ejemplo anterior mostraría por pantalla la cadena "10 multiplicado por 20 (10x20) es 200". Los índices de argumento se pueden usar con todas las conversiones, y es compatible con otros modificadores de formato (incluida la precisión) Operaciones avanzadas con cadenas de caracteres. (III) Cómo puedo comprobar si dos cadenas son iguales? Qué más operaciones ofrece Java sobre las cadenas? Java ofrece un montón de operaciones más sobre cadena. En la siguiente tabla puedes ver las operaciones más importantes. En todos los ejemplos expuestos, las variables cad1, cad2 y cad3 son cadenas ya existentes, y la variable num es un número entero mayor o igual a cero. Método. Descripción Permite comparar dos cadenas entre sí lexicográficamente. Retornará 0 si son iguales, un número menor que cero si la cad1.compareto(cad2) cadena (cad1) es anterior en orden alfabético a la que se pasa por argumento (cad2), y un número mayor que cero si la cadena es posterior en orden alfabético. Cuando se comparan si dos cadenas son iguales, no se debe cad1.equals(cad2) usar el operador de comparación "==", sino el método equals. Retornará true si son iguales, y false si no lo son. 13

14 Aplicación de las estructuras de almacenamiento DAW cad1.comparetoignorecase(cad2) cad1.equalsignorecase(cad2) cad1.trim() cad1.tolowercase() cad1.touppercase() cad1.indexof(cad2) cad1.indexof(cad2,num) cad1.contains(cad2) cad1.startswith(cad2) cad1.endswith(cad2) cad1.replace(cad2,cad3) El método comparetoignorecase funciona igual que el método compareto, pero ignora las mayúsculas y las minúsculas a la hora de hacer la comparación. Las mayúsculas van antes en orden alfabético que las minúsculas, por lo que hay que tenerlo en cuenta. El método equalsignorescase es igual que el método equals pero sin tener en cuenta las minúsculas. Genera una copia de la cadena eliminando los espacios en blanco anteriores y posteriores de la cadena. Genera una copia de la cadena con todos los caracteres a minúscula. Genera una copia de la cadena con todos los caracteres a mayúsculas. Si la cadena o carácter pasado por argumento está contenida en la cadena invocante, retorna su posición, en caso contrario retornará 1. Opcionalmente se le puede indicar la posición a partir de la cual buscar, lo cual es útil para buscar varias apariciones de una cadena dentro de otra. Retornará true si la cadena pasada por argumento está contenida dentro de la cadena. En caso contrario retornará false. Retornará true si la cadena comienza por la cadena pasada como argumento. En caso contrario retornará false. Retornará true si la cadena acaba por la cadena pasada como argumento. En caso contrario retornará false. Generará una copia de la cadena cad1, en la que se reemplazarán todas las apariciones de cad2 por cad3. El reemplazo se hará de izquierda a derecha, por ejemplo: reemplazar "zzz" por "xx" en la cadena "zzzzz" generará "xxzz" y no "zzxx". Cuál será el resultado de ejecut cadena "hojalata"? ar cad1.repl ace("l","j").indexof("ja") si cad1 contiene la Operaciones avanzadas con cadenas de caracteres. (IV) Sabes cuál es el principal problema de las cadenas de caracteres? Su alto consumo de memoria. Cuando realizamos un programa que realiza muchísimas operaciones con cadenas, es necesario optimizar el uso de memoria. En Java, String es un objeto inmutable, lo cual significa, entre otras cosas, que cada vez que creamos un String, o un literal de String, se crea un nuevo objeto que no es modificable. Java proporciona la clase StringBuilder, la cual es un mutable (objetos que una vez creados se pueden modificar sin problemas), y permite una mayor optimización de la memoria. También existe la clase StringBuffer, pero consume mayores recursos al estar pensada para aplicaciones multi hilo (aplicaciones que ejecutan varias líneas de ejecución simultáneamente y que necesitan acceder a datos compartidos. Cuando varias líneas de ejecución, cada una a su ritmo, necesitan acceder a datos compartidos hay que tener mucho cuidado, para que los datos que manejan no sean incoherentes), por lo que en nuestro caso nos centraremos en la primera. 14

15 Desarrollo de Aplicaciones Web Tema 8 Pero, en qué se diferencian StringBuilder de la clase String? Pues básicamente en que la clase StringBuilder permite modificar la cadena que contiene, mientras que la clase String no. Como ya se dijo antes, al realizar operaciones complejas se crea una nueva instancia de la clase String. Veamos un pequeño ejemplo de uso de esta clase. En el ejemplo que vas a ver, se parte de una cadena con errores, que modificaremos para ir haciéndola legible. Lo primero que tenemos que hacer es crear la instancia de esta clase. Se puede inicializar de muchas formas, por ejemplo, partiendo de un literal de cadena: StringBuilder strb=new StringBuilder ("Hoal Muuundo"); Y ahora, usando los métodos append (insertar al final), insert (insertar una cadena o carácter en una posición específica), delete (eliminar los caracteres que hay entre dos posiciones) y replace (reemplazar los caracteres que hay entre dos posiciones por otros diferentes), rectificaremos la cadena anterior y la haremos correcta: 1. strb.delete(6,8); Eliminamos las 'uu' que sobran en la cadena. La primera 'u' que sobra está en la posición 6 (no olvides contar el espacio), y la última 'u' a eliminar está en la posición 7. Para eliminar dichos caracteres de forma correcta hay que pasar como primer argumento la posición 6 (posición inicial) y como segundo argumento la posición 8 (posición contigua al último carácter a eliminar), dado que la posición final no indica el último carácter a eliminar, sino el carácter justo posterior al último que hay que eliminar (igual que ocurría con el método substring). 2. strb.append ("!"); Añadimos al final de la cadena el símbolo de cierre de exclamación. 3. strb.insert (0," "); Insertamos en la posición 0, el símbolo de apertura de exclamación. 4. strb.replace (3,5,"la"); Reemplazamos los caracteres 'al' situados entre la posición inicial 3 y la posición final 4, por la cadena 'la'. En este método ocurre igual que en los métodos delete y substring, en vez de indicar como posición final la posición 4, se debe indicar justo la posición contigua, es decir 5. StringBuilder contiene muchos métodos de la clase String (charat, indexof, lenght, substring, replace, etc.), pero no todos, pues son clases diferentes con funcionalidades realmente diferentes. En la siguiente página puedes encontrar más información (en inglés) sobre cómo utilizar la clase StringBuilder. Rotar una cadena es poner simplemente el primer carácter al final, y retroceder el resto una posición. Después de unas cuantas rotaciones la cadena queda igual. Cuál de las siguientes expresiones serviría para hacer una rotación (rotar solo una posición)? stb.delete (0,1); strb.append(stb.charat(0)); strb.append(strb.charat(0));strb.delete(0, 1); strb.append(strb.charat(0));strb.delete(0); strb.append(strb.charat(1));strb.delete(1,2); 2.2. Expresiones regulares. (I) Tienen algo en común todos los números de DNI y de NIE? Podrías hacer un programa que verificara si un DNI o un NIE es correcto? Seguro que sí. Si te fijas, los números de DNI y los de NIE tienen una estructura fija: X Z (en el caso del NIE) y Z (en el caso del DNI). Ambos siguen un patrón (Modelo con el que encaja la información que estamos analizando o que simplemente se ha utilizado para construir dicha información. Un patrón, en el caso de la informática, está constituido por una serie de reglas fijas que deben cumplirse o ser seguidas para formar la información. Las direcciones de correo electrónico, por ejemplo, todas tienen la misma forma, y eso es porque todas siguen el mismo patrón para ser construidas) que podría describirse como: una letra inicial opcional (solo presente en los NIE), seguida de una secuencia numérica y finalizando con otra letra. Fácil no? 15

16 Aplicación de las estructuras de almacenamiento DAW Pues esta es la función de las expresiones regulares: permitir comprobar si una cadena sigue o no un patrón preestablecido. Las expresiones regulares son un mecanismo para describir esos patrones, y se construyen de una forma relativamente sencilla. Existen muchas librerías diferentes para trabajar con expresiones regulares, y casi todas siguen, más o menos, una sintaxis similar, con ligeras variaciones. Dicha sintaxis nos permite indicar el patrón de forma cómoda, como si de una cadena de texto se tratase, en la que determinados símbolos tienen un significado especial. Por ejemplo "[01]+" es una expresión regular que permite comprobar si una cadena conforma un número binario. Veamos cuáles son las reglas generales para construir una expresión regular: Podemos indicar que una cadena contiene un conjunto de símbolos fijo, simplemente poniendo dichos símbolos en el patrón, excepto para algunos símbolos especiales que necesitarán un carácter de escape como veremos más adelante. Por ejemplo, el patrón "aaa" admitirá cadenas que contengan tres aes. "[xyz]". Entre corchetes podemos indicar opcionalidad. Solo uno de los símbolos que hay entre los corchetes podrá aparecer en el lugar donde están los corchetes. Por ejemplo, la expresión regular "aaa[xy]" admitirá como válidas las cadenas "aaax" y la cadena "aaay". Los corchetes representan una posición de la cadena que puede tomar uno de varios valores posibles. "[a-z]" "[A-Z]" "[a-za-z]". Usando el guión y los corchetes podemos indicar que el patrón admite cualquier carácter entre la letra inicial y la final. Es importante que sepas que se diferencia entre letras mayúsculas y minúsculas, no son iguales de cara a las expresiones regulares. "[0-9]". Y nuevamente, usando un guión, podemos indicar que se permite la presencia de un dígito numérico entre 0 y 9, cualquiera de ellos, pero solo uno. Con las reglas anteriores podemos indicar el conjunto de símbolos que admite el patrón y el orden que deben tener. Si una cadena no contiene los símbolos especificados en el patrón, en el mismo orden, entonces la cadena no encajará con el patrón. Veamos ahora como indicar repeticiones: "a?". Usaremos el interrogante para indicar que un símbolo puede aparecer una vez o ninguna. De esta forma la letra "a" podrá aparecer una vez o simplemente no aparecer. "a*". Usaremos el asterisco para indicar que un símbolo puede aparecer una vez o muchas veces, pero también ninguna. Cadenas válidas para esta expresión regular serían "aa", "aaa" o "aaaaaaaa". "a+". Usaremos el símbolo de suma para indicar que otro símbolo debe aparecer al menos una vez, pudiendo repetirse cuantas veces quiera. "a{1,4". Usando las llaves, podemos indicar el número mínimo y máximo de veces que un símbolo podrá repetirse. El primer número del ejemplo es el número 1, y quiere decir que la letra "a" debe aparecer al menos una vez. El segundo número, 4, indica que como máximo puede repetirse cuatro veces. "a{2,". También es posible indicar solo el número mínimo de veces que un carácter debe aparecer (sin determinar el máximo), haciendo uso de las llaves, indicando el primer número y poniendo la coma (no la olvides). "a{5". A diferencia de la forma anterior, si solo escribimos un número entre llaves, sin poner la coma detrás, significará que el símbolo debe aparecer un número exacto de veces. En este caso, la "a" debe aparecer exactamente 5 veces. "[a-z]{1,4[0-9]+". Los indicadores de repetición se pueden usar también con corchetes, dado que los corchetes representan, básicamente, un símbolo. En el ejemplo anterior se permitiría de una a cuatro letras minúsculas, seguidas de al menos un dígito numérico. Con lo visto hasta ahora ya es posible construir una expresión regular capaz de verificar si una cadena contiene un DNI o un NIE, serías capaz de averiguar cuál es dicha expresión regular? La expresión regular que permite verificar si una cadena contiene un DNI o un NIE es la siguiente: "[XYxy]?[0-9]{1,9[A-Za-z]"; aunque no es la única solución. 16

17 Desarrollo de Aplicaciones Web Tema Expresiones regulares. (II) Y cómo uso las expresiones regulares en un programa? Pues de una forma sencilla. Para su uso, Java ofrece las clases Pattern y Matcher contenidas en el paquete java.util.regex.*. La clase Pattern se utiliza para procesar la expresión regular y compilarla, lo cual significa verificar que es correcta y dejarla lista para su utilización. La clase Matcher sirve para comprobar si una cadena cualquiera sigue o no un patrón. Veamoslo con un ejemplo: Pattern p=pattern.compile("[01]+"); Matcher m=p.matcher(" "); if (m.matches()) System.out.println("Si, contiene el patrón"); else System.out.println("No, no contiene el patrón"); En el ejemplo, el método estático compile de la clase Pattern permite crear un patrón, dicho método compila la expresión regular pasada por parámetro y genera una instancia de Pattern (p en el ejemplo). El patrón p podrá ser usado múltiples veces para verificar si una cadena coincide o no con el patrón, dicha comprobación se hace invocando el método matcher, el cual combina el patrón con la cadena de entrada y genera una instancia de la clase Matcher (m en el ejemplo). La clase Matcher contiene el resultado de la comprobación y ofrece varios métodos para analizar la forma en la que la cadena ha encajado con un patrón: m.matches(). Devolverá true si toda la cadena (de principio a fin) encaja con el patrón o false en caso contrario. m.lookingat(). Devolverá true si el patrón se ha encontrado al principio de la cadena. A diferencia del método matches(), la cadena podrá contener al final caracteres adicionales a los indicados por el patrón, sin que ello suponga un problema. m.find(). Devolverá true si el patrón existe en algún lugar la cadena (no necesariamente toda la cadena debe coincidir con el patrón) y false en caso contrario, pudiendo tener más de una coincidencia. Para obtener la posición exacta donde se ha producido la coincidencia con el patrón podemos usar los métodos m.start() y m.end(), para saber la posición inicial y final donde se ha encontrado. Una segunda invocación del método find() irá a la segunda coincidencia (si existe), y así sucesivamente. Podemos reiniciar el método find(), para que vuelva a comenzar por la primera coincidencia, invocando el método m.reset(). Veamos algunas construcciones adicionales que pueden ayudarnos a especificar expresiones regulares más complejas: "[^abc]". El símbolo "^", cuando se pone justo detrás del corchete de apertura, significa negación. La expresión regular admitirá cualquier símbolo diferente a los puestos entre corchetes. En este caso, cualquier símbolo diferente de a, b o c. "^[01]+$". Cuando el símbolo "^" aparece al comienzo de la expresión regular, permite indicar comienzo de línea o de entrada. El símbolo "$" permite indicar fin de línea o fin de entrada. Usándolos podemos verificar que una línea completa (de principio a fin) encaje con la expresión regular, es muy útil cuando se trabaja en modo multilínea (cadenas que contienen en su interior más de un salto de línea a veces no se procesan bien con las expresiones regulares, dado que estas se limitan a verificar generalmente solo la primera línea. El modo multilínea permite buscar líneas completas que encajan con un patrón dentro de una cadena que contiene varias líneas) y con el método find(). ".". El punto simboliza cualquier carácter. "\\d". Un dígito numérico. Equivale a "[0-9]". "\\D". Cualquier cosa excepto un dígito numérico. Equivale a "[^0-9]. "\\s". Un espacio en blanco (incluye tabulaciones, saltos de línea y otras formas de espacio). "\\S". Cualquier cosa excepto un espacio en blanco. "\\w". Cualquier carácter que podrías encontrar en una palabra. Equivale a "[a za Z_0 9]". 17

18 Aplicación de las estructuras de almacenamiento DAW En cuales de las siguientes opciones se cumple el patrón "A.\\d+"? "GA 99" si utilizamos el método find "GAX99" si utilizamos el método lookingat "AX99 " si utilizamos el método matches "A99" si utilizamos el método matches Expresiones regulares. (III) Te resultan difíciles las expresiones regulares? Al principio siempre lo son... pero no te preocupes. Hasta ahora has visto como las expresiones regulares permiten verificar datos de entrada, permitiendo comprobar si un dato indicado sigue el formato esperado: que un DNI tenga el formato esperado, que un e mail sea un e mail y no otra cosa, etc. Pero ahora vamos a dar una vuelta de tuerca adicional. Los paréntesis, de los cuales no hemos hablado hasta ahora, tienen un significado especial, permiten indicar repeticiones para un conjunto de símbolos, por ejemplo: "(#[01]){2,3". En el ejemplo anterior, la expresión "#[01]" admitiría cadenas como "#0" o "#1", pero al ponerlo entre paréntesis e indicar los contadores de repetición, lo que estamos diciendo es que la misma secuencia se tiene que repetir entre dos y tres veces, con lo que las cadenas que admitiría serían del estilo a: "#0#1" o "#0#1#0". Pero los paréntesis tienen una función adicional, y es la de permitir definir grupos. Un grupo comienza cuando se abre un paréntesis y termina cuando se cierra el paréntesis. Los grupos permiten acceder de forma cómoda a las diferentes partes de una cadena cuando esta coincide con una expresión regular. Lo mejor es verlo con un ejemplo (seguro que te resultará familiar): Pattern p=pattern.compile("([xy]?)([0-9]{1,9)([a-za-z])"); Matcher m=p.matcher("x z Y M T"); while (m.find()) { System.out.println("Letra inicial (opcional):"+m.group(1)); System.out.println("Número:"+m.group(2)); System.out.println("Letra NIF:"+m.group(3)); Usando los grupos, podemos obtener por separado el texto contenido en cada uno de los grupos. En el ejemplo anterior, en el patrón hay tres grupos: uno para la letra inicial (grupo 1), otro para el número del DNI o NIE (grupo 2), y otro para la letra final o letra NIF (grupo 3). Al ponerlo en grupos, usando el método group(), podemos extraer la información de cada grupo y usarla a nuestra conveniencia. Ten en cuenta que el primer grupo es el 1, y no el 0. Si pones m.group(0) obtendrás una cadena con toda la ocurrencia o coincidencia del patrón en la cadena, es decir, obtendrás la secuencia entera de símbolos que coincide con el patrón. En el ejemplo anterior se usa el método find, éste buscará una a una, cada una de las ocurrencias del patrón en la cadena. Cada vez que se invoca, busca la siguiente ocurrencia del patrón y devolverá true si ha encontrado una ocurrencia. Si no encuentra en una iteración ninguna ocurrencia es porque no existen más, y retornará false, saliendo del bucle. Esta construcción while es muy típica para este tipo de métodos y para las iteraciones, que veremos más adelante. Lo último importante de las expresiones regulares que debes conocer son las secuencias de escape. Cuando en una expresión regular necesitamos especificar que lo que tiene que haber en la cadena es un paréntesis, una llave, o un corchete, tenemos que usar una secuencia de escape, dado que esos símbolos tienen un significado especial en los patrones. Para ello, simplemente antepondremos "\\" al símbolo. Por ejemplo, "\\(" significará que debe haber un paréntesis en la cadena y se omitirá el significado especial del paréntesis. Lo mismo ocurre con "\\[", "\\]", "\\)", etc. Lo mismo para el 18

19 Desarrollo de Aplicaciones Web Tema 8 significado especial del punto, éste, tiene un significado especial ( Lo recuerdas del apartado anterior?) salvo que se ponga "\\.", que pasará a significar un punto en vez de cualquier carácter. La excepción son las comillas, que se pondrían con una sola barra: "\"". Con lo estudiado hasta ahora, ya puedes utilizar las expresiones regulares y sacarles partido casi que al máximo. Pero las expresiones regulares son un campo muy amplio, por lo que es muy aconsejable que amplíes tus conocimientos con el siguiente enlace: 19

20 Aplicación de las estructuras de almacenamiento DAW 3. Creación de arrays. Caso práctico. Después del susto inicial, al recibir el archivo con el formato de pedido, Ana se puso a pensar. Vio que lo más adecuado era procesar el archivo de pedido línea a línea, viendo con que corresponde cada línea a través de expresiones regulares. Para identificar si hay un inicio o fin de sección dentro del pedido, así como el inicio o fin del listado de artículos, ha decidido usar la siguiente expresión regular: "^##[]*(FIN){0,1[]*(PEDIDO ARTICULOS)[ ]*##$". Y para identificar cada dato del pedido (nombre, dirección, etc.) va a utilizar la siguiente expresión regular: "^(.+):.*\\{(.*)\\$" Que al usar grupos le permitirá separar el nombre del campo (dirección por ejemplo) de su valor (dirección concreta). La expresión regular le ha costado mucho trabajo y ha tenido que pedir ayuda, pero después, una vez que la ha conseguido, se ha dado cuenta de que ha sido relativamente fácil. De momento solo está haciendo pruebas, pero le están saliendo muy bien, mira como lo lleva: import java.io.bufferedreader; import java.io.filenotfoundexception; import java.io.filereader; import java.io.ioexception; import java.util.scanner; import java.util.logging.level; import java.util.logging.logger; import java.util.regex.matcher; import java.util.regex.pattern; /* Clase que se encarga de procesar un pedido. * El archivo con el pedido debe estar en codificación UTF8, sino no funciona bien. * Tu sistema debe soportar de forma nativa la coficación UTF8, sino no * funcionará del todo bien. public class ProcesarArchivo1 { /* Entrada contendrá una instancia de la clase Scanner que permitirá leer las teclas pulsadas desde teclado static Scanner entrada = new Scanner(System.in); /* Definimos las expresiones regulares que usaremos una y otra vez para cada línea del pedido. La expresión regular "seccion" permite detectar si hay un comienzo o fin de pedido, y la expresión campo, permite detectar si hay un campo con información del pedido. static Pattern seccion = Pattern.compile("^##[ ]*(FIN)?[ ]*(PEDIDO ARTICULOS)[ ]*##$"); static Pattern campo = Pattern.compile("^(.+):.*\\{(.*)\\$"); public static void main(string[] args) { BufferedReader lector; /* 1er paso: cargamos el archivo para poder procesarlo línea a línea * para ello nos apoyamos en la clase BufferedReader, que con el método * readline nos permite recorrer todo el archivo línea a línea. if (args.length > 0) { lector = cargararchivo(args[0]); else { lector = cargararchivo(); if (lector == null) { /* Si no se ha podido cargar el archivo, no continúa con el * procesado, simplemente termina la ejecución. System.out.println("No se ha podido cargar el archivo."); else { /* Si ha podido cargar el archivo, continúa el procesado de línea * a línea. String linea; try { linea = lector.readline(); while (linea!= null) { procesarlinea(linea); linea = lector.readline(); 20

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

UNIDAD 1. LOS NÚMEROS ENTEROS.

UNIDAD 1. LOS NÚMEROS ENTEROS. UNIDAD 1. LOS NÚMEROS ENTEROS. Al final deberás haber aprendido... Interpretar y expresar números enteros. Representar números enteros en la recta numérica. Comparar y ordenar números enteros. Realizar

Más detalles

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda: Apuntes de ACCESS Campos de Búsqueda: Los campos de búsqueda permiten seleccionar el valor de un campo de una lista desplegable en lugar de tener que escribirlos. El usuario sólo tiene que elegir un valor

Más detalles

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B) APRENDERAPROGRAMAR.COM TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B) Sección: Cursos Categoría: Tutorial básico del programador web:

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse. TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.

Más detalles

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos

Más detalles

Programa diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L.

Programa diseñado y creado por 2014 - Art-Tronic Promotora Audiovisual, S.L. Manual de Usuario Programa diseñado y creado por Contenido 1. Acceso al programa... 3 2. Opciones del programa... 3 3. Inicio... 4 4. Empresa... 4 4.2. Impuestos... 5 4.3. Series de facturación... 5 4.4.

Más detalles

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007 MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007 Servicio de Informática y Comunicaciones Para poder diseñar un formulario y que éste nos envíe los resultados a nuestro correo electrónico, necesitamos

Más detalles

Base de datos en Excel

Base de datos en Excel Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de

Más detalles

SISTEMAS DE NUMERACIÓN. Sistema decimal

SISTEMAS DE NUMERACIÓN. Sistema decimal SISTEMAS DE NUMERACIÓN Sistema decimal Desde antiguo el Hombre ha ideado sistemas para numerar objetos, algunos sistemas primitivos han llegado hasta nuestros días, tal es el caso de los "números romanos",

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la

Más detalles

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION CHIQUINQUIRA (BOYACA) 2015 1 CONTENIDO Pág. QUE ES UN SISTEMA BINARIO. 3 CORTA HISTORIA DE LOS

Más detalles

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016! INFORMÁTICA Práctica4. ProgramaciónbásicaenC. GradoenIngenieríaenElectrónicayAutomáticaIndustrial Curso2015H2016 v2.1(18.09.2015) A continuación figuran una serie de ejercicios propuestos, agrupados por

Más detalles

Curso Excel Básico - Intermedio

Curso Excel Básico - Intermedio Curso Excel Básico - Intermedio Clase 4 Relator: Miguel Rivera Adonis Introducción Base de Datos: Definición de Base de Datos Ordenar datos Formulario Filtros Trabajar con Sub-Totales Validación de Datos

Más detalles

Capítulo 0. Introducción.

Capítulo 0. Introducción. Capítulo 0. Introducción. Bueno, por fin está aquí el esperado (espero!!) Capítulo Cero del Tutorial de Assembler. En él estableceremos algunos conceptos que nos serán de utilidad a lo largo del Tutorial.

Más detalles

UNIDADES DE ALMACENAMIENTO DE DATOS

UNIDADES DE ALMACENAMIENTO DE DATOS 1.2 MATÉMATICAS DE REDES 1.2.1 REPRESENTACIÓN BINARIA DE DATOS Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS. Los computadores sólo

Más detalles

La ventana de Microsoft Excel

La ventana de Microsoft Excel Actividad N 1 Conceptos básicos de Planilla de Cálculo La ventana del Microsoft Excel y sus partes. Movimiento del cursor. Tipos de datos. Metodología de trabajo con planillas. La ventana de Microsoft

Más detalles

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid MANUAL DE EMPRESA Modo de entrar en ÍCARO Para comenzar a subir una oferta de empleo, el acceso es a través del siguiente enlace: http://icaro.uam.es A continuación, aparecerá la página de inicio de la

Más detalles

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true I. FUNDAMENTOS 3. Representación de la información Introducción a la Informática Curso de Acceso a la Universidad

Más detalles

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso 2013-2014. v1.0 (05.03.

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso 2013-2014. v1.0 (05.03. INFORMÁTICA Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial Curso 2013-2014 v1.0 (05.03.14) A continuación figuran una serie de ejercicios propuestos, agrupados

Más detalles

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS Por Andrés Raúl Bruno Saravia Entrega Nº 5. Cómo declaramos una variable en Lenguaje C? En C siempre se deben declarar las variables.

Más detalles

Ejemplos de conversión de reales a enteros

Ejemplos de conversión de reales a enteros Ejemplos de conversión de reales a enteros Con el siguiente programa se pueden apreciar las diferencias entre las cuatro funciones para convertir de reales a enteros: program convertir_real_a_entero print

Más detalles

Datos del autor. Nombres y apellido: Germán Andrés Paz. Lugar de nacimiento: Rosario (Código Postal 2000), Santa Fe, Argentina

Datos del autor. Nombres y apellido: Germán Andrés Paz. Lugar de nacimiento: Rosario (Código Postal 2000), Santa Fe, Argentina Datos del autor Nombres y apellido: Germán Andrés Paz Lugar de nacimiento: Rosario (Código Postal 2000), Santa Fe, Argentina Correo electrónico: germanpaz_ar@hotmail.com =========0========= Introducción

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES CASO PRÁCTICO DISTRIBUCIÓN DE COSTES Nuestra empresa tiene centros de distribución en tres ciudades europeas: Zaragoza, Milán y Burdeos. Hemos solicitado a los responsables de cada uno de los centros que

Más detalles

Bases de datos en Excel

Bases de datos en Excel Universidad Complutense de Madrid CURSOS DE FORMACIÓN EN INFORMÁTICA Bases de datos en Excel Hojas de cálculo Tema 5 Bases de datos en Excel Hasta ahora hemos usado Excel básicamente para realizar cálculos

Más detalles

Tema 2: La clase string

Tema 2: La clase string : string Programación 2 Curso 2013-2014 Índice 1 Cadenas de caracteres en C 2 Entrada / salida 3 entre vectores de caracteres y string 4 5 Cadenas de caracteres en C En C, las cadenas de caracteres tienen

Más detalles

TALLER #5 ACCESS CONSULTAS. objeto Consulta en la vista lateral izquierda de la ventana Base de datos. Aparece esta ventana.

TALLER #5 ACCESS CONSULTAS. objeto Consulta en la vista lateral izquierda de la ventana Base de datos. Aparece esta ventana. TALLER #5 ACCESS CONSULTAS Las consultas son los objetos de una base de datos que permiten recuperar datos de una tabla, modificarlos e incluso almacenar el resultado en otra tabla. TIPOS DE CONSULTAS

Más detalles

MANUAL DE AYUDA MODULO TALLAS Y COLORES

MANUAL DE AYUDA MODULO TALLAS Y COLORES MANUAL DE AYUDA MODULO TALLAS Y COLORES Fecha última revisión: Enero 2010 Índice TALLAS Y COLORES... 3 1. Introducción... 3 CONFIGURACIÓN PARÁMETROS TC (Tallas y Colores)... 3 2. Módulos Visibles... 3

Más detalles

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS 1.- PLANTILLA DE PUBLICACIONES En este maestro crearemos la publicación base sobre la cual el programa generará

Más detalles

Introducción a la plataforma Moodle Aníbal de la Torre 2006. Plataforma Moodle. Accediendo a los contenidos

Introducción a la plataforma Moodle Aníbal de la Torre 2006. Plataforma Moodle. Accediendo a los contenidos Plataforma Moodle Accediendo a los contenidos Formatos ----------------------------------------------------------------------- 2 Glosarios -----------------------------------------------------------------------

Más detalles

Tema 2 : Códigos Binarios

Tema 2 : Códigos Binarios Tema 2 : Códigos Binarios Objetivo: Conocer diferentes códigos binarios Conocer algunos códigos de detección y corrección de errores. Códigos alfanuméricos 1 Códigos Binarios A la representación de cifras,

Más detalles

Matemática de redes Representación binaria de datos Bits y bytes

Matemática de redes Representación binaria de datos Bits y bytes Matemática de redes Representación binaria de datos Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS. Los computadores sólo pueden entender

Más detalles

Tutorial Básico de vbscript

Tutorial Básico de vbscript Tutorial Básico de vbscript Bueno, primero aclarar que este tutorial, pretende explicar de manera básica las distintas instrucciones aplicadas en visual basic script (vbs de aquí en más), para que así

Más detalles

Pruebas de unidad con JUnit

Pruebas de unidad con JUnit Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro

Más detalles

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO Fecha última revisión: Junio 2011 INDICE DE CONTENIDOS HERRAMIENTA DE APROVISIONAMIENTO... 3 1. QUÉ ES LA HERRAMIENTA DE APROVISIONAMIENTO... 3 HERRAMIENTA

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE ÍNDICE ACCESO A LA APLICACIÓN... 2 1.- HOMOLOGACIÓN DE CURSOS... 4 1.1.- INICIAR EXPEDIENTE... 4 1.2.- CONSULTA DE EXPEDIENTES... 13 1.3.- RENUNCIA A LA HOMOLOGACIÓN... 16 2.- MECÁNICA DE CURSOS... 19

Más detalles

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico Acceso al correo electrónico Pasamos ahora a lo que sería usar la cuenta de correo que nos hicimos en la clase anterior. Lo primero que hacemos es entrar en la página web de Yahoo y localizar el icono

Más detalles

ICARO MANUAL DE LA EMPRESA

ICARO MANUAL DE LA EMPRESA ICARO MANUAL DE LA EMPRESA 1. ENTRANDO EN ICARO Para acceder al Programa ICARO tendremos que entrar en http://icaro.ual.es Figura 1 A continuación os aparecerá la página de Inicio del aplicativo ICARO.

Más detalles

Agradecimiento: A Javier Lomelín Urrea por su dedicación y esmero en este proyecto. Manuel Fernando Guzmán Muñoz Presidente OMIJal

Agradecimiento: A Javier Lomelín Urrea por su dedicación y esmero en este proyecto. Manuel Fernando Guzmán Muñoz Presidente OMIJal Karel para todos! 1 Estás interesado en aprender a programar en lenguaje de Karel? Te interesa la Olimpiada Mexicana de Informática? Esta es tu oportunidad de unirte al equipo OMI y ser parte de la mejor

Más detalles

Centro de Capacitación en Informática

Centro de Capacitación en Informática Fórmulas y Funciones Las fórmulas constituyen el núcleo de cualquier hoja de cálculo, y por tanto de Excel. Mediante fórmulas, se llevan a cabo todos los cálculos que se necesitan en una hoja de cálculo.

Más detalles

Divisibilidad y números primos

Divisibilidad y números primos Divisibilidad y números primos Divisibilidad En muchos problemas es necesario saber si el reparto de varios elementos en diferentes grupos se puede hacer equitativamente, es decir, si el número de elementos

Más detalles

1 ELEMENTOS BASICOS DEL LENGUAJE

1 ELEMENTOS BASICOS DEL LENGUAJE 1 ELEMENTOS SICOS DEL LENGUJE Contenido: Variables su declaracion y asignacion Caracteres en java Secuencias de escape y comentarios Tipos de datos Operadores aritméticos, relacionales y lógicos Entrada

Más detalles

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO I. SISTEMAS NUMÉRICOS DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO LIC. LEYDY ROXANA ZEPEDA RUIZ SEPTIEMBRE DICIEMBRE 2011 Ocosingo, Chis. 1.1Sistemas numéricos. Los números son los mismos en todos

Más detalles

LAS CONSULTAS ACCESS 2007. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

LAS CONSULTAS ACCESS 2007. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE LAS CONSULTAS ACCESS 2007 Manual de Referencia para usuarios Salomón Ccance CCANCE WEBSITE LAS CONSULTAS En esta unidad veremos cómo crear consultas y manejarlas para la edición de registros de tablas

Más detalles

Curso Completo de Electrónica Digital

Curso Completo de Electrónica Digital CURSO Curso Completo de Electrónica Digital Este curso de larga duración tiene la intención de introducir a los lectores más jovenes o con poca experiencia a la Electrónica Digital, base para otras ramas

Más detalles

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A)

Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) aprenderaprogramar.com Tipos de variables en Visual Basic (integer, single, double, string, object, etc.). Ejemplos. (CU00308A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029

Más detalles

1 1 0 1 x 1 0 1 1 1 1 0 1 + 1 1 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1

1 1 0 1 x 1 0 1 1 1 1 0 1 + 1 1 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 5.1.3 Multiplicación de números enteros. El algoritmo de la multiplicación tal y como se realizaría manualmente con operandos positivos de cuatro bits es el siguiente: 1 1 0 1 x 1 0 1 1 1 1 0 1 + 1 1 0

Más detalles

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo. CONSULTAS CON SQL 1. Qué es SQL? Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de comunicar entre unos y otras sería realmente complicada a gestionar de no ser por la existencia

Más detalles

15 CORREO WEB CORREO WEB

15 CORREO WEB CORREO WEB CORREO WEB Anteriormente Hemos visto cómo funciona el correo electrónico, y cómo necesitábamos tener un programa cliente (Outlook Express) para gestionar los mensajes de correo electrónico. Sin embargo,

Más detalles

Capítulo 9. Archivos de sintaxis

Capítulo 9. Archivos de sintaxis Capítulo 9 Archivos de sintaxis El SPSS permite generar y editar archivos de texto con sintaxis SPSS, es decir, archivos de texto con instrucciones de programación en un lenguaje propio del SPSS. Esta

Más detalles

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie. Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Segmentación de redes. CCNA 1: módulo 10.

Segmentación de redes. CCNA 1: módulo 10. CURSO A DISTANCIA CCNA: Técnico experto en redes e Internet. MATERIAL DIDÁCTICO COMPLEMENTARIO: Segmentación de redes. CCNA 1: módulo 10. RUBÉN MUÑOZ HERNÁNDEZ. 1.- INTRODUCCIÓN. Aunque los materiales

Más detalles

Análisis de los datos

Análisis de los datos Universidad Complutense de Madrid CURSOS DE FORMACIÓN EN INFORMÁTICA Análisis de los datos Hojas de cálculo Tema 6 Análisis de los datos Una de las capacidades más interesantes de Excel es la actualización

Más detalles

Creación de Funciones de Conducción

Creación de Funciones de Conducción Creación de Funciones de Conducción Requerimientos Para el desarrollo de esta actividad se requiere que: Contemos con un robot BoeBot armado con placa Arduino. Repetición En estos momentos habremos notado

Más detalles

MICROSOFT EXCEL 2007. Introducción: Qué es y para qué sirve Excel2007? TECNOLOGIA/ INFORMATICA: MS-EXCEL

MICROSOFT EXCEL 2007. Introducción: Qué es y para qué sirve Excel2007? TECNOLOGIA/ INFORMATICA: MS-EXCEL MICROSOFT EXCEL 2007 Qué es y para qué sirve Excel2007? Excel 2007 es una hoja de cálculo integrada en Microsoft Office. Esto quiere decir que si ya conoces otro programa de Office, como Word, Access,

Más detalles

Tutorial Diario Dı a 6

Tutorial Diario Dı a 6 Tutorial Diario Dı a 6 Introducción Hola! Bienvenido al sexto día del taller Programa Tus Ideas :) Hoy aprenderás a desarrollar aplicaciones tipo cuestionario o trivia donde el usuario va avanzando a través

Más detalles

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1

Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 Examen Septiembre Curso 2001-2002 -- Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1.1 Ejercicio 1: Convertidor Dec->Hex y Hex->Dec (5.0 ptos.)... 1 1.1.1 Apartado A (4.0 ptos.)... 1 1.1.2 Apartado B (1.0

Más detalles

EJERCICIOS DEL TEMA 1

EJERCICIOS DEL TEMA 1 EJERCICIOS DEL TEMA 1 Introducción a los ordenadores 1) Averigua y escribe el código ASCII correspondiente, tanto en decimal como en binario, a las letras de tu nombre y apellidos. Distinguir entre mayúsculas/minúsculas,

Más detalles

El e-commerce de Grupo JAB es una herramienta que permite a los clientes del Grupo, realizar un amplio conjunto de servicios de consulta, petición y

El e-commerce de Grupo JAB es una herramienta que permite a los clientes del Grupo, realizar un amplio conjunto de servicios de consulta, petición y El de Grupo JAB es una herramienta que permite a los clientes del Grupo, realizar un amplio conjunto de servicios de consulta, petición y compra en los diversos almacenes del Grupo JAB. En concreto podremos:

Más detalles

Para crear una lista como la anterior, primero escribe la información, y después selecciona el texto y aplícale el formato de viñetas.

Para crear una lista como la anterior, primero escribe la información, y después selecciona el texto y aplícale el formato de viñetas. Módulo 3 Herramientas de Cómputo Listas, tabulaciones, columnas y cuadros de texto Listas En muchas ocasiones es necesario que enumeres diferentes elementos en tus documentos. Word no sólo reconoce números

Más detalles

SISTEMAS DE NUMERACIÓN. Sistema de numeración decimal: 5 10 2 2 10 1 8 10 0 =528 8 10 3 2 10 2 4 10 1 5 10 0 9 10 1 7 10 2 =8245,97

SISTEMAS DE NUMERACIÓN. Sistema de numeración decimal: 5 10 2 2 10 1 8 10 0 =528 8 10 3 2 10 2 4 10 1 5 10 0 9 10 1 7 10 2 =8245,97 SISTEMAS DE NUMERACIÓN Un sistema de numeración es un conjunto de símbolos y reglas que permiten representar datos numéricos. La norma principal en un sistema de numeración posicional es que un mismo símbolo

Más detalles

Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte)

Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte) Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte) Unidad de trabajo 2: INFORMÁTICA BÁSICA... 1 1. Representación interna de datos.... 1 1.2. Sistemas de numeración.... 2 1.3. Aritmética binaria...

Más detalles

Gobierno del Estado de México

Gobierno del Estado de México Gobierno del Estado de México Escuela Preparatoria Oficial No. 82 José Revueltas Hay que alcanzar la exaltación verdadera, para lograrlo, hay que ser serenos, sin prisas, estudiar, trabajar y disciplinarse

Más detalles

1.- INTRODUCCIÓN 2.- PARÁMETROS

1.- INTRODUCCIÓN 2.- PARÁMETROS 1.- INTRODUCCIÓN Hemos diseñado una aplicación que facilite el envío a las entidades bancarias de las de cobro por domiciliación. La entrada de esta aplicación pueden ser, tanto ficheros cuyos formatos

Más detalles

CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS

CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS Nuestra empresa es una pequeña editorial que maneja habitualmente su lista de ventas en una hoja de cálculo y desea poder realizar un análisis de sus

Más detalles

GMAIL (avanzado) 1. Accede a la web de Gmail, www.gmail.com. Te destacamos las funcionalidades que vamos a enseñarte a. 2. Vamos a enseñarte a:

GMAIL (avanzado) 1. Accede a la web de Gmail, www.gmail.com. Te destacamos las funcionalidades que vamos a enseñarte a. 2. Vamos a enseñarte a: Sabes que puedes hacer muchas más cosas que enviar y recibir correo con Gmail? Puedes organizarlo, crear reglas de correo, filtrar correo, organizar contactos Adriana va a enseñar a su padre cómo aprovechar

Más detalles

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) APRENDERAPROGRAMAR.COM GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I

Más detalles

Resumen. Funcionamiento. Advertencia

Resumen. Funcionamiento. Advertencia Resumen Módulo: Librería: IMPEXP.DLL Acoplable a: FactuCont 5, versiones monopuesto y red Descripción: Permite exportar datos de documentos, clientes, proveedores y artículos en un solo fichero para poder

Más detalles

Ejercicios - Persistencia en Android: ficheros y SQLite

Ejercicios - Persistencia en Android: ficheros y SQLite Ejercicios - Persistencia en Android: ficheros y SQLite Índice 1 Uso de ficheros (0.5 puntos)...2 2 Persistencia con ficheros (0.5 puntos)...3 3 Base de datos: SQLiteOpenHelper (0.5 puntos)... 3 4 Base

Más detalles

Clases y Objetos. Informática II Ingeniería Electrónica

Clases y Objetos. Informática II Ingeniería Electrónica Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),

Más detalles

Uso del Programa Gantt Project

Uso del Programa Gantt Project Uso del Programa Gantt Project Presentación En esta práctica guiada aprenderás varias cosas relacionadas con el uso de Gantt Project, que es una aplicación de ayuda a la gestión de proyectos: Especificar

Más detalles

CURSO 2010-2011 TECNOLOGÍA TECNOLOGÍA 4º ESO TEMA 5: Lógica binaria. Tecnología 4º ESO Tema 5: Lógica binaria Página 1

CURSO 2010-2011 TECNOLOGÍA TECNOLOGÍA 4º ESO TEMA 5: Lógica binaria. Tecnología 4º ESO Tema 5: Lógica binaria Página 1 Tecnología 4º ESO Tema 5: Lógica binaria Página 1 4º ESO TEMA 5: Lógica binaria Tecnología 4º ESO Tema 5: Lógica binaria Página 2 Índice de contenido 1. Señales analógicas y digitales...3 2. Código binario,

Más detalles

Aproximación local. Plano tangente. Derivadas parciales.

Aproximación local. Plano tangente. Derivadas parciales. Univ. de Alcalá de Henares Ingeniería de Telecomunicación Cálculo. Segundo parcial. Curso 004-005 Aproximación local. Plano tangente. Derivadas parciales. 1. Plano tangente 1.1. El problema de la aproximación

Más detalles

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA ARREGLOS EN JAVA I I N T R O D U C C I Ó N En las sesiones anteriores, los datos manejados en los programas han sido datos simples (carácter, entero, reales) En un gran número de problemas es necesario

Más detalles

Unidad Didáctica. Códigos Binarios

Unidad Didáctica. Códigos Binarios Unidad Didáctica Códigos Binarios Programa de Formación Abierta y Flexible Obra colectiva de FONDO FORMACION Coordinación Diseño y maquetación Servicio de Producción Didáctica de FONDO FORMACION (Dirección

Más detalles

Universidad de Zaragoza Manual de Usuario EXPEDIENTES-Sigm@

Universidad de Zaragoza Manual de Usuario EXPEDIENTES-Sigm@ Universidad de Zaragoza Manual de Usuario EXPEDIENTES-Sigm@ Unidad Sigma/Vicegerencia Académica MANUAL DE USUARIO EXPEDIENTES SIGM@... 1 1. ÍNDICE... 2 2. ENTRADA EN LA APLICACIÓN... 3 3. CONSULTA DE EXPEDIENTES...4

Más detalles

Operación de Microsoft Word

Operación de Microsoft Word Generalidades y conceptos Combinar correspondencia Word, a través de la herramienta combinar correspondencia, permite combinar un documento el que puede ser una carta con el texto que se pretende hacer

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

... Formas alternativas de escribir un texto. Columnas. anfora CAPÍTULO 4

... Formas alternativas de escribir un texto. Columnas. anfora CAPÍTULO 4 CAPÍTULO 4. Formas alternativas de escribir un texto........ Columnas Para fijar columnas se posiciona el Punto de Inserción donde se desee que comiencen las columnas, o bien se selecciona el texto que

Más detalles

Internet como herramientas de comunicación: El correo electrónico

Internet como herramientas de comunicación: El correo electrónico Internet como herramientas de comunicación: El correo electrónico 1. El correo electrónico Objetivo del tema: Aprender a manejar el correo electrónico y los medios de comunicación existentes en Internet.

Más detalles

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Sintaxis y Convenciones de Java. M. en C. Erika Vilches Sintaxis y Convenciones de Java M. en C. Erika Vilches Estructura del Código en Java Hay una clase en un archivo fuente Hay métodos en una clase Hay enunciados en un método Anatomía de una Clase Cuando

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

Práctica 2: Simón dice

Práctica 2: Simón dice Práctica 2: Simón dice Fecha de entrega: 31 de enero de 2016 0.- Descripción del juego (Wikipedia.org) Simon dice es un juego electrónico, creado por Ralph Baer, que consiste en reproducir una secuencia

Más detalles

GUÍA DE USUARIO: GOOGLE DRIVE

GUÍA DE USUARIO: GOOGLE DRIVE GUÍA DE USUARIO: GOOGLE DRIVE Google Drive es una herramienta telemática de la web 2.0 que permite el trabajo virtual de forma colaborativa. En Google Drive podemos encontrar una barra de navegación en

Más detalles

TUTORIAL PRÁCTICO DE BASES DE DATOS EN ACCESS CREAR UNA AGENDA

TUTORIAL PRÁCTICO DE BASES DE DATOS EN ACCESS CREAR UNA AGENDA TUTORIAL PRÁCTICO DE BASES DE DATOS EN ACCESS CREAR UNA AGENDA Antes de iniciar con nuestro tutorial, conozcamos algunos conceptos que vamos a utilizar en este tutorial: Que es una base de datos: Una base

Más detalles

Conciliación bancaria en CheqPAQ Cargado de estado de cuenta

Conciliación bancaria en CheqPAQ Cargado de estado de cuenta Conciliación bancaria en CheqPAQ Cargado de estado de cuenta Introducción Con la finalidad de mantenerte informado respecto a todos los cambios y mejoras de los productos de CONTPAQ i, ponemos a tu disposición

Más detalles

Manual CMS Mobincube

Manual CMS Mobincube Manual CMS Mobincube CMS Mobincube Qué es? El CMS (Sistema de Gestión de Contenidos) es un completo website que permite la creación y actualización de contenido remoto. De esta forma, una vez creada una

Más detalles

Sistemas de numeración

Sistemas de numeración Sistemas de numeración Un sistema de numeración es un conjunto de símbolos y reglas que permiten representar datos numéricos. Los sistemas de numeración actuales son sistemas posicionales, que se caracterizan

Más detalles

Curso de PHP con MySQL Gratis

Curso de PHP con MySQL Gratis Curso de PHP con MySQL Gratis Introducción Este mini curso o mini tutorial de PHP le ayudará a realizar cualquier sistema para que pueda insertar uno o varios registros a una base de datos con MySQL, este

Más detalles

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas. 1 de 18 Inicio Qué es un foro En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas. En el campus virtual, el foro es una herramienta

Más detalles

A continuación se describen cuáles son los elementos principales de las tablas, cómo crear una y cómo modificarla.

A continuación se describen cuáles son los elementos principales de las tablas, cómo crear una y cómo modificarla. 4. TABLAS A continuación se describen cuáles son los elementos principales de las tablas, cómo crear una y cómo modificarla. 4.1. Principales Elementos Al momento de generar y diseñar una tabla es importante

Más detalles

Para trabajar este tema vamos a situarlo un poco más en el lenguaje común:

Para trabajar este tema vamos a situarlo un poco más en el lenguaje común: Curso de Internet a distancia para sacerdotes, religiosos y religiosas Material de apoyo para las teleclases - Viernes,18 de noviembre2011 Vea los vídeos resúmenes en: www.medioscan.es y www.teleiglesia.es

Más detalles

Guía de uso del sistema CV-Online

Guía de uso del sistema CV-Online Guía de uso del sistema CV-Online 1.- Registro. a.- Pasos para completar el formulario. 2.- Ingreso al sistema. a.- Olvidó su Usuario o contraseña? b.- Consulta. c.- Crear nueva cuenta. 3.- Administrador

Más detalles