Arreglos Expresiones y Control de Flujo
Upcoming SlideShare
Loading in...5
×
 

Arreglos Expresiones y Control de Flujo

on

  • 9,308 views

 

Statistics

Views

Total Views
9,308
Views on SlideShare
9,244
Embed Views
64

Actions

Likes
2
Downloads
115
Comments
0

3 Embeds 64

http://www.slideshare.net 59
http://www.linkedin.com 4
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Objetivos Presentar la estructura de datos de arreglo. Entender el empleo de arreglos para almacenar, examinar listas y tablas de valores. Entender la forma de declarar un arreglo, inicializar un arreglo y referirse a los elementos individuales de un arreglo. Poder declarar y manipular arreglos con múltiples subíndices (multidimensionales). Presentar las estructuras fundamentales de Java como lenguaje de Programación. Conocer las características del lenguaje Java para el desarrollo de aplicaciones.
  • Estructuras de Datos Cuando un grupo de datos esta agrupado en una misma unidad, se llama estructura de datos. Un array es un tipo de estructura de datos, es una secuencia de ítems del mismo tipo , cada uno accesible con su índice, que da su posición correspondiente dentro del array. Arreglos Un array esta definido por su longitud n y su tipo. El tipo de un array puede ser cualquiera, pero es el mismo para todos los objetos del array. Por ejemplo, puede ser un int , o un String (como args ), o una Clase ( Persona) . El array es la estructura de datos que se usa más frecuentemente en programación. La gestión de información con el array es eficiente. De hecho, la memoria del ordenador se gestiona como un array en los lenguajes de bajo nivel. Los arrays se utilizan con tanta frecuencia que muchos lenguajes de programación ofrecen algún modo para utilizarlos con facilidad. n-1 n-2 … 1 0
  • Creación de un Arreglo Al declarar e inicializar un arreglo, el valor por defecto de todos sus componentes es null para el caso de Objetos (String, Alumno, etc…), 0 para números enteros (byte, short, int, long), 0.0 para números reales (float y double), ‘’ para caracteres (char) y false para booleanos (boolean). Los elementos de un arreglo son accedidos mediante un índice de base 0; Por ejemplo, sí: int miArreglo[ ] = new int[10] ; Entonces la capacidad del arreglo es de 10 elementos, donde el primer elemento tiene índice 0 y el último índice 9, donde podríamos asignar el valor 5 a la primera posición: miArreglo[ 0 ] = 5 ; Ó recuperar el valor de la segunda posición y almacenarla en otra variable; int miVariable = miArreglo[ 1 ] ; Cada arreglo dentro de un programa tiene una variable length inmutable (que no se puede cambiar), cuyo valor, el tamaño del array, es asignado automáticamente a la ejecución del programa al crear el objeto Arreglo con new o con una lista de inicialización. int capacidad = miArreglo.length ;
  • Arreglos bi-dimensionales Un array de dos dimensiones, también conocido como tabla o matriz, donde cada elemento se asocia con una pareja de índices, es otro array simple. Conceptualizamos un array bi-dimensional como una cuadrícula rectángular de elementos divididos en filas y columnas, y utilizamos la notación ( fila , columna ) para identificar un elemento específico. El siguiente código usa sólo un inicialiador para crear un array bi-dimensional que almacena datos basados en un tipo primitivo: double [][] temperatures = { { 20.5, 30.6, 28.3 } , { -38.7, -18.3, -16.2 } } ; // Celsius temperatures double [][] temperatures declara una variable de array bi-dimensional (temperatures) junto con su tipo de variable (double [][]). El tipo de referencia double [][] signigica que cada elemento debe contener datos del tipo primitivo double. { { 20.5, 30.6, 28.3 }, { -38.7, -18.3, -16.2 } } especifica un array bi-dimensional de dos filas por tres columnas, donde la primera fila contiene los datos 20.5, 30.6, y 28.3, y la segunda fila contitne los datos -38.7, -18.3, y -16.2. Detrás de la escena, se asigna memoria y se inicializan esto datos. El operador igual-a asigna la referencia del array bi-dimensional a temperatures.
  • La siguiente figura ilustra el array bi-dimensional resultante desde un punto de vista conceptual y de memoria. double [][] temperatures = { { 20.5, 30.6, 28.3 } , { -38.7, -18.3, -16.2 } } ; // Celsius temperatures Trabajar con arreglos bi-dimensionales temperatures [0][1] = 18.3; // Remplaza 30.6 with 18.3 System.out.println (temperatures [1][2]); // Escribe en consola: -16.2
  • Arreglos Desiguales Los arrays desiguales son estructuras de datos útiles debido a su capacidad de ahorro de memoria. Por ejemplo, considere una hoja de cálculo con el potencial de 100.000 filas por 20.000 columnas. Si intentamos utilizar una matriz que contenga toda la hoja de calculo, requeriremos una enorme cantidad de memoria. Pero supongamos que la mayoría de la celdas contienen valores por defecto, como un 0 para valores numéricos y null para celdas no numéricas. Si utilizamos un array desigual en lugar de una matriz, almacenaremos sólo las celdas que contienen datos numéricos. (Por supuesto, necesitamos algún tipo de mecanismo de mapeo que mapee las coordenadas de la hoja de cálculo [filas, columnas] a las coordenadas del array desigual [filas], [columnas]).
  • Expresión “ Construcción (combinación de tokens) que se evalúa para devolver un valor” Sentencia “ Representación de una acción o una secuencia de acciones. En Java, todas las sentencias terminan con un punto y coma [;].”
  • Sentencias de Asignación Al ejecutar una sentencia de asignación: 1. Se evalúa la expresión que aparece a la derecha del operador de asignación (=). 2. El valor que se obtiene como resultado de evaluar la expresión se almacena en la variable que aparece a la izquierda del operador de asignación (=). Restricción: El tipo del valor que se obtiene como resultado de evaluar la expresión ha de ser compatible con el tipo de la variable. NOTA: Una sentencia de asignación no es una igualdad matemática.
  • ¿Qué es el flujo de un programa? Es el orden con el cual la computadora decide ejecutar las instrucciones. El orden más simple es en secuencia, sentencia por sentencia. El bloque es él que permite este orden secuencial, esta marcado con llaves: { sentencia1 ; sentencia2 ; sentencia3 ; ... } No hay límete para la creación y anidamiento de bloques Podemos modificar este orden secuencial, controlando el flujo de un programa con estructuras condicionales y de repetición. Escribir un mensaje de saludo distinto según el nombre de la persona. Escribir “Hola Mundo” 10 o 100 o 1000 veces. NOTA: Las variables existen desde su definición hasta el final del bloque donde fueron declaradas y no pueden ser invocadas en el exterior de este ámbito.
  • Bifurcaciones – Sentencias de Control de Saltos (if-else) Diagrama de Flujo Diagrama N/S expresión booleana sentencias sentencias true false Expresion-booleana true false sentencias sentencias
  • Bifurcaciones – Sentencias de Control de Saltos (switch) Diagrama de Flujo Diagrama N/S exp Valor 1 Valor 2 Valor 3 default sentencias sentencias sentencias sentencias exp==Val1 exp==Val2 exp==Val3 default sentencias; sentencias; sentencias; sentencias; true true true true false false false break ? no existe break ? no existe break ? no existe existe existe existe
  • Bucles – Sentencias Repetitivas (for) Diagrama de Flujo Diagrama N/S inicialización Expresión-booleana sentencias iteración false true para inicialización evaluar exp-booleana sentencias iteración
  • Bucles – Sentencias Repetitivas (while) Diagrama de Flujo Diagrama N/S Expresión-booleana sentencias true false Mientras exp-booleana sentencias
  • Bucles – Sentencias Repetitivas (do-while) Diagrama de Flujo Diagrama N/S Expresión-booleana sentencias true false sentencias Mientras exp-booleana hacer
  • Bucles - Sentencias Repetitivas (for In) : Sólo en JDK 1.5 ó Tigger Diagrama de Flujo Diagrama N/S Declaración var Hay Elementos ? var = elemento siguiente sentencias para declaracion var ; Hay elementos sentencias var = elemento siguiente
  • Instrucciones break y continue dentro de un bucle La sentencia break hace que el control pase fuera del bucle (a la siguiente sentencia o bloque) La sentencia continue hace que el flujo no continúe la iteración en proceso dentro del bucle, pero sin salirse de éste. Expresión-booleana Sentencias ; … break; … true false Expresión-booleana Sentencias ; … continue; … … true false
  • Bugs al utilizar Bucles Prácticas recomendadas de programación* Controle los ciclos de conteo con valores enteros. Verifique las condiciones que provocan la terminación de una estructura repetitiva para evitar bucles infinitos. Sangre los enunciados del cuerpo de cada estructura de control. Coloque una línea en blanco antes y después de cada estructura de control importante para destacarla en el programa. Aunque es posible modificar el valor de la variable de control dentro del cuerpo de un ciclo for , evite hacerlo por que esta práctica puede dar lugar a errores difíciles de detectar. En expresiones que usan el operador && , si las condiciones individuales independientes son mutuamente independientes, coloque primero la condición con mayor probabilidad de ser false . En expresiones que usan el operador || , coloque primero la condición con mayor probabilidad de ser true . Esto puede reducir el tiempo de ejecución del programa. *Deitel, “Cómo Programar en Java” , Primera Edición, Prentice-Hall Hispanoamericana, México, 1995.
  • Práctica 3: Escribir programas secuenciales y controlados en Java Objetivo: El objetivo de esta práctica es usar el ambiente de desarrollo integrado (IDE) Netbeans para la construcción de programas Java. Ejercicios Traduzca las siguientes fórmulas a expresiones escritas en Java, declarando para ello las variables que considere necesarias: Diseñe un programa que lea los coeficientes de una ecuación de segundo grado ax 2 +bx+c=0 y calcule sus dos soluciones. Se supone que la ecuación tiene soluciones reales. Ej.: si x 2 -4x+4=0 ; x 1 =2 y x 2 =2 . Sugerencias: Utilizar la siguiente fórmula: Dada una medida de tiempo expresada en horas, minutos y segundos con valores arbitrarios, elabore un programa que transforme dicha medida en una expresión correcta. Por ejemplo, dada la medida 3h 118m 195s , el programa deberá obtener como resultado 5h 1m 15s . Desarrollar un programa que imprima todos los divisores de un número entero dado como argumento del programa (utilice la sentencia while). Desarrollar un programa que calcule e imprima el Máximo Común Divisor (MCD) de dos enteros (utilice la estructura do-while). Encuentre el error en cada uno de los siguientes segmentos de programa y corrija el error. a) Suponga int b[ ] = new int [ 10 ] ; for( int i = 0 ; i <= b.length ; i++ ) b[ i ] = 1 ; b) Suponga int a[ ][ ] = { { 1, 2 }, { 3, 4 } } ; a[ 1 , 1 ] = 5 ; Ordenar los elementos de un arreglo de n enteros. Desarrollar un programa que reciba como argumento un número entero entre 1 al 7 y muestre el nombre al día de semana equivalente. Desarrollar un programa que muestre los elementos de un arreglo utilizando la estructura for-in. Desarrollar un programa que busque que recorra los elementos de un arreglo hasta encontrar el elemento buscado utilizando la estructura for en conjunción con la sentencia break.
  • Resolución de Ejercicios Traduzca las siguientes fórmulas a expresiones escritas en Java, declarando para ello las variables que considere necesarias: int c , f ; Solución f = 9*c / 5 + 32 ; Error común f = 9/5 * c + 32 ; // = = 1 * c + 32 float c , f ; Solución f = 9*c/5 + 32; Error común f = ( 9/5 ) * c + 32; // = = 1 * c + 32 Solución alternativa f = (9.0/5.0)*c + 32; double x , y ; // Tanto x como y double f ; han de ser != 0 f = ( 1 + x*x/y ) / ( x*x*x / (1+y) ) ; // ERROR: Tal como está escrita la expresión, // y debería tener un valor distinto de -1 f = ( 1 + x*x/y ) * (1+y) / ( x*x*x ) ;
  • Diseñe un programa que lea los coeficientes de una ecuación de segundo grado ax 2 +bx+c=0 y calcule sus dos soluciones. Se supone que la ecuación tiene soluciones reales. Ej.: si x 2 -4x+4=0 ; x 1 =2 y x 2 =2 . Solución: Cree una nueva aplicación Java: ( ctrl+shift+N ), categories: General, proyects: Java Application de un click en Next >. En el campo Proyect Name escribir: Ejercicio4_2 En el textfield lateral al checkbox Create Main Clase remplazar el texto ejercicio4_2.Main por epec.Ecuacion. Remplazar el contenido del método main de la siguiente forma: El programa necesita argumentos pasados por línea de comandos, para simular este proceso abrir la venta de propiedades del proyecto, click derecho sobre el proyecto Ejercicio4_2, elegir el menú Properties, luego seleccionar el nodo Run. En la caja de texto Arguments escribir separados por espacios los siguientes números: 1 -4 4, luego click en OK Para ejecutar la aplicación: click derecho en el proyecto, elegir Run Proyect
  • Dada una medida de tiempo expresada en horas, minutos y segundos con valores arbitrarios, elabore un programa que transforme dicha medida en una expresión correcta. Por ejemplo, dada la medida 3h 118m 195s , el programa deberá obtener como resultado 5h 1m 15s . Solución: Cree una nueva aplicación Java: ( ctrl+shift+N ), categories: General, proyects: Java Application de un click en Next >. En el campo Proyect Name escribir: Ejercicio4_3 En el textfield lateral al checkbox Create Main Clase remplazar el texto ejercicio4_3.Main por epec.Tiempo. Remplazar el contenido del método main de la siguiente forma: El programa necesita argumentos pasados por línea de comandos, para simular este proceso abrir la venta de propiedades del proyecto, click derecho sobre el proyecto Ejercicio4_3, elegir el menú Properties, luego seleccionar el nodo Run. En la caja de texto Arguments escribir separados por espacios los siguientes números: 3 118 195, luego click en OK Para ejecutar la aplicación: click derecho en el proyecto, elegir Run Proyect
  • Desarrollar un programa que imprima todos los divisores de un número entero dado como argumento del programa (utilice la sentencia while). Solución: Cree una nueva aplicación Java: ( ctrl+shift+N ), categories: General, proyects: Java Application de un click en Next >. En el campo Proyect Name escribir: Ejercicio4_4 En el textfield lateral al checkbox Create Main Clase remplazar el texto ejercicio4_4.Main por epec.Divisor. Remplazar el contenido del método main de la siguiente forma: El programa necesita argumentos pasados por línea de comandos, para simular este proceso abrir la venta de propiedades del proyecto, click derecho sobre el proyecto Ejercicio4_4, elegir el menú Properties, luego seleccionar el nodo Run. En la caja de texto Arguments escribir el número número: 15, luego click en OK Para ejecutar la aplicación: click derecho en el proyecto, elegir Run Proyect

Arreglos Expresiones y Control de Flujo Arreglos Expresiones y Control de Flujo Presentation Transcript

  • Arreglos, expresiones y control de flujo Ing. Rolando Steep Quezada Martínez [email_address] Programación Básica en Java y Programación Orientada a Objetos
  • Arreglos
    • En Java, un Array es un tipo de objeto. Este objeto puede contener objetos (por ejemplo, un array de String o de int ).
    • Se declara una variable de tipo Array mediante [ ]:
    • tipo_basico[] nombre_variable ;
    • Por ejemplo: int[] values;
    • Como un Array es una clase dinámica, se tiene que construir un objeto de este tipo mediante el operador new :
    • nombre_variable = new tipo_basico[numero_de_elementos];
  • Declaración y asignación de un arreglo
    • Primera Posibilidad (Declarar y luego Asignar)
      • int miArreglo[ ] ;
      • miArreglo = new int[100] ;
    • Segunda Posibilidad (Declarar y Asignar)
      • int miArreglo[ ] = new int[100];
    • Tercera Posibilidad (Declarar e Inicializar con Valores)
      • int miArreglo[ ] = {1,2,5,6,7,3,4} ;
    • Cuarta Posibilidad (Declaración de múltiples arreglos en una línea)
      • Int [ ] miArreglo1, miarreglo2 ;
  • Arreglos bi-dimensionales
    • Un arreglo puede contener otro arreglo, ej. Si se desea almacenar la información en forma de una tabla (filas x columnas):
      • int tabla[ ][ ] = new int[ 3 ][ 3 ] ;
  •  
  • Arreglos desiguales
    • Al contrario que otros lenguajes, Java no le fuerza a especificar el mismo número de columnas por cada fila
      • int [ ][ ] x = new int [ 5 ][ ];
      • x [0] = new int [3];
      • x [1] = new int [2];
      • x [2] = new int [3];
      • x [3] = new int [5];
      • x [4] = new int [1];
  • Algunas consideraciones
    • Mientras la manipulación de un arreglo es muy sencilla, tiene ciertas limitaciones:
      • Su tamaño no puede cambiar. No podemos reducirlo si ya no queremos un elemento o aumentarlo si queremos más elementos.
      • Tenemos que recordar nosotros mismos el numero de elementos que tenemos en el array (que puede ser <= length), por ejemplo con un contador.
      • Los elementos son del mismo tipo.
      • Error Común:
      • Intentar manipular un elemento con un índice no válido, ej. Si índice es negativo o si índice >= length, se lanzará la excepción ArrayIndexOutOfBoundsException
  • Expresiones
    • Literales y variables son expresiones primarias:
    • 1.7 // Literal real de tipo double
    • sum // Variable
    • Los literales se evalúan a sí mismos.
    • Las variables se evalúan a su valor.
    • Los operadores nos permiten combinar expresiones primarias y otras expresiones formadas con operadores:
    • 1 + 2 + 3*1.2 + (4 +8)/3.0
  • Sentencias de asignación
    • Las sentencias de asignación constituyen el ingrediente básico en la construcción de programas con lenguajes imperativos.
    • Sintaxis:
    • <variable> = <expresión> ;
    • Ejemplos
    • x = x + 1 ;
    • int miVariable = 20 ;
    • otraVariable = miVariable ;
  • ¿Qué es el flujo de un programa?
    • Secuencia de Sentencias con un inicio y un final.
    • Los delimitadores usados en Java son “{” para el inicio y “}” para el fin del bloque
    Sentencia1 ; Sentencia2 ; Sentencia3 ; Bloque
  • Bifurcaciones – Sentencia de control de saltos (if-else) Flujo de Eventos Al evaluar el algoritmo, si se encuentra una sentencia if - else , se evalúa la expresión booleana, si el resultado es “ true ” o verdadero, se ejecuta las sentencias siguientes al término de la expresión; en caso contrario, el resultado será “ false ” o falso y se ejecuta las sentencias que siguen a la palabra reservada else . if ( expresión-booleana ) { sentencias; } [ else { sentencias; }] Sintanxis
  • Bifurcaciones - Sentencias de control de saltos (switch) switch (expresión) { case valor1: sentencias; break ; case valor2: sentencias; break ; [ default : sentencias;] } Flujo de Eventos Sintaxis Al evaluar el algoritmo si entra en una bifurcación switch el valor de la expresión se va comparando con cada uno de los casos “ case ” válidos hasta encontrar su identidad, si un caso coincide con el valor de la expresión se ejecutan las sentencias seguidas a éste hasta encontrar un break . Se puede definir un caso opcional “ default ” el cual evalúa todos los casos no válidos o los valores no coincidente con la expresión.
  • Bucles - Sentencias repetitivas (for) for ( inicialización ; exp-booleana ; iteración ) { sentencias ; } Flujo de Eventos Cuando se evalúa el algoritmo al entrar a una sentencia for , se ejecuta por única vez la sección de inicialización, luego se evalúa la expresión booleana; si el resultado es verdadero o “ true ” se ejecutan las sentencias contenidas en el cuerpo de la instrucción, por último se ejecuta el bloque de iteración y se evalúa nuevamente la expresión booleana hasta que el resultado sea falso o “ false ”. Sintáxis
  • Bucles - Sentencias repetitivas (while) while ( expresión-booleana ) { sentencias; } Cuando se evalúa el algoritmo al entrar a una sentencia while , se evalúa la expresión booleana, si el resultado es verdadero o true , se ejecutan las sentencias contenidas en el cuerpo del bloque while y se evalúa nuevamente la expresión booleana “mientras” que el resultado no sea falso o false . Flujo de Eventos Sintáxis
  • Bucles - Sentencias repetitivas (do-while) do { sentencias; } while (expresión-booleana ); Flujo de Eventos Sintáxis Cuando se evalúa el algoritmo al entrar a una sentencia do , se ejecuta las sentencias contenidas en el bloque, luego se evalúa la expresión booleana que sigue a la instrucción while , si el resultado es verdadero o true , se ejecutan nuevamente las sentencias contenidas en el cuerpo del bloque “mientras” que el resultado no sea falso o false .
  • Bucles - Sentencias repetitivas (for In) : Sólo en JDK 1.5 ó Tigger for ( declaración var : expresión ){ sentencias; } Flujo de Eventos Sintáxis Cuando se evalúa el algoritmo al entrar a una sentencia for-in , se ejecuta el bloque de declaración por única vez el cuál establece una variable que tomará el valor de un elemento de la expresión (arreglo o colección) en cada iteración del ciclo hasta recorrer todos los elementos; Por cada iteración se evalúan las sentencias contenidas en el cuerpo del bloque.
  • Instrucciones break y continue dentro de un bucle
    • Break: se utiliza para forzar una terminación anormal de un bucle.
    • Continue: hace que la ejecución prosiga con la siguiente iteración saltando las sentencias que están a continuación.
    • Break/Continue son instrucciones que hay que utilizar con mucho cuidado, pues, cambian el flujo normal de un bucle.
  • Bugs al utilizar bucles
      • Bucles Infinitos cuando la condición para continuar el ciclo es una estructura while, for, do/while nunca deja de cumplirse o cuando existe un punto y coma “;” después de la cabecera de la estructura while.
      • Olvidar el enunciado break cuando se usa una estructura switch
      • Falta de agrupación en expresiones condicionales
      • Uso de valores de punto flotante para controlar ciclos de conteo
      • Colocar un punto y coma “;” inmediatamente después del paréntesis derecho de una cabecara for.
  • Resumen
    • Los arreglos son construcciones de objetos del mismo tipo de datos que tiene una dimensión fija.
    • La sentencias if/else y switch permiten adicionar control condicional en nuestra aplicación.
    • Los bucles permite crear aplicaciones iterativas
    • La sentencia break detiene la ejecución de un bucle.
    • El bucle for/In sólo esta disponible en el JDK 1.5 o superior
  • Práctica 3
    • Objetivos:
      • Escribir aplicaciones secuenciales simples en Java.
      • Entender las estructuras de control de flujo if, if/else, while, do/while, for y for/in.
      • Entender la repetición controlada por contador y la repetición controlada por centinela.
  •  
  •  
  •  
  •  
  •