apo1 - presentacion nivel 6

49
ALGORÍTMICA Y PROGRAMACIÓN 1 (APO 1) NIVEL 6 Mario José Villamizar Cano [email protected] Oficina ML-637 http://sistemas.uniandes.edu.co/~mj.villamizar24/dokuwiki/doku.php Grupo de Tecnologías de Información y Comunicación (COMIT) Departamento de Ingeniería de Sistemas y Computación Universidad de los Andes, Bogotá D.C., Colombia

Upload: mario-jose-villamizar-cano

Post on 16-Jul-2015

3.477 views

Category:

Education


2 download

TRANSCRIPT

Page 1: APO1 - Presentacion nivel 6

ALGORÍTMICA Y PROGRAMACIÓN 1 (APO 1)

NIVEL 6

Mario José Villamizar Cano

[email protected]

Oficina ML-637

http://sistemas.uniandes.edu.co/~mj.villamizar24/dokuwiki/doku.php

Grupo de Tecnologías de Información y Comunicación (COMIT)

Departamento de Ingeniería de Sistemas y Computación

Universidad de los Andes, Bogotá D.C., Colombia

Page 2: APO1 - Presentacion nivel 6

[email protected]

http://twitter.com/mariocloud

http://linkedin.com/in/mariojosevillamizarcano

REDES SOCIALES

NIVEL 6

Page 3: APO1 - Presentacion nivel 6

NIVEL 6 – TEMAS PRINCIPALES

El concepto de matriz como elemento de modelado para

agrupar los elementos del mundo en una contenedora de

dos dimensiones de tamaño fijo.

Patrones y uso de algoritmos para el manejo de

matrices.

Uso de un esquema simple de persistencia para

manejar el estado inicial de un programa.

Desarrollar un programa completo, siguiendo las

etapas del proceso que se debe seguir para resolver un

problema usando un computador.

NIVEL 6

Page 4: APO1 - Presentacion nivel 6

NIVEL 6

Introducción (Matrices y Persistencia)

Contenedoras de dos dimensiones

Caso de estudio: Visor de Imágenes

Declaración de una matriz

Inicialización de una matriz

Acceso a los elementos de una matriz

Comparar los elementos de una matriz

Patrones de algoritmos para recorridos de matrices

Patrón de recorrido total

Patrón de recorrido parcial

Otros algoritmos de recorridos

NIVEL 6

Page 5: APO1 - Presentacion nivel 6

Matrices

NIVEL 6

Las matrices son una herramienta de modelado que permite

almacenar elementos en una contenedora de dos dimensiones

compuesta de filas y columnas.

Ejemplos de uso:

Elaborar un tablero de ajedrez, de damas chinas, etc.

Manipulación de imágenes fotográficas para el manejo de pixeles.

Manejo de tablas que contienen información. Por ejemplo: la tabla de

posiciones de un campeonato de fútbol, manejo de matrices

matemáticas, etc.

Page 6: APO1 - Presentacion nivel 6

Matrices

Fila 0

Fila 2

Columna 0 Columna 3

Posición(X,Y)

X=fila

Y=columa

Matriz(2,4)

NIVEL 6

Page 7: APO1 - Presentacion nivel 6

CASOS DE ESTUDIO

Caso de estudio 1: Visor de Imágenes

NIVEL 6

Page 8: APO1 - Presentacion nivel 6

CASOS DE ESTUDIO

Caso de estudio 2: Campeonato de Fútbol

NIVEL 6

Page 9: APO1 - Presentacion nivel 6

HOJAS DE TRABAJO

Hoja de trabajo 1: Sopa de Letras

NIVEL 6

Page 10: APO1 - Presentacion nivel 6

HOJAS DE TRABAJO

Hoja de trabajo 2: Asignación de Tareas

NIVEL 6

Page 11: APO1 - Presentacion nivel 6

Caso de estudio 1: Visor de Imágenes

Aplicación para la visualización de imágenes en formato BMP

(BitMaP).

Máxima dimensión de la imagen: 300 x 400

NIVEL 6

Page 12: APO1 - Presentacion nivel 6

Caso de estudio 1: Visor de Imágenes (2)

En el formato BMP se guarda la información del color de cada pixel.

El color de un pixel se expresa en formato RGB, en el cual se incluyen

tres componentes: rojo (R), verde (G) y azul (B).

Cada componente se expresa por un número entre 0 y 255.

NIVEL 6

Nombre del Color Componente Rojo

(R)

Componente Verde

(G)

Componente Azul

(B)

Negro 0 0 0

Blanco 255 255 255

Rojo 255 0 0

Verde 0 255 0

Azul 0 0 255

Amarillo 255 255 0

Cyan 0 255 255

Magenta 255 0 255

Page 13: APO1 - Presentacion nivel 6

Caso de estudio 1: Visor de Imágenes (3)

Requerimientos funcionales:

R1 – Mostrar una imagen BMP

R2 – Transformar la imagen

NIVEL 6

Page 14: APO1 - Presentacion nivel 6

Caso de estudio 1: Visor de Imágenes (4)

NIVEL 6

Page 15: APO1 - Presentacion nivel 6

Caso de estudio 1: Visor de Imágenes (5)

Color bitmap =

0 1 2 3 4 5

0

1

2

3

4

3 Colores (Rojo, Verde, Azul)

ALTO_MAXIMO, ANCHO_MAXIMO

NIVEL 6

Page 16: APO1 - Presentacion nivel 6

Declaración de una matriz

/**

* Imagen de mapa de colores

*/

public class Imagen

{

public static final int ANCHO_MAXIMO = 400;

public static final int ALTO_MAXIMO = 300;

//-----------------------------------------------------------------

// Atributos

//-----------------------------------------------------------------

/**

* Matriz de colores de la imagen

*/

private Color bitmap[ ][ ];

NIVEL 6

Page 17: APO1 - Presentacion nivel 6

Inicialización de una matriz

/**

* Imagen de mapa de colores

*/

public class Imagen

{

public Imagen( String archivo ) throws IOException

{

bitmap = new Color[ALTO_MAXIMO][ANCHO_MAXIMO];

}

NIVEL 6

Page 18: APO1 - Presentacion nivel 6

Acceso a los elementos de una matriz

Índices (Índice de fila e índice de columna)

Color bitmap =

0 1 2 3 4 5

0

1

2

3

4

bitmap[ fila ][ columna ]

bitmap[ 3 ][ 1 ]

NIVEL 6

int compRojo = bitmap[ 3 ][ 1 ].getRed( );

int compVerde = bitmap[ 3 ][ 1 ].getGreen( );

int compAzul = bitmap[ 3 ][ 1 ].getBlue( );

Page 19: APO1 - Presentacion nivel 6

Acceso a los elementos de una matriz (2)

Índices (Índice de fila e índice de columna)

/**

* Imagen de mapa de colores

*/

public class Imagen

{

public void iniciarMatriz(){

for( int i=0; i<ALTO_MAXIMO ; i++ ){

for( int j=0; j<ANCHO_MAXIMO ; j++ ){

bitmap[ i ][ j ] = new Color ( 0, 0, 255);

}

}

}

NIVEL 6

Page 20: APO1 - Presentacion nivel 6

Comparar los elementos de una matriz

Elementos de matrices simples se compararan con el operador

==

Elementos de matrices de referencias a objetos se comparan con el

método equals

Color bitmap =

0 1 2 3

0

1

:Color

255, 0, 0

:Color

0, 255, 0

:Color

0, 255, 0

NIVEL 6

Color color1 =

Color color2 = Color color3 =

Page 21: APO1 - Presentacion nivel 6

Comparar los elementos de una matriz (2)

Color color1 = new Color (255, 0, 0); bitmap[0][0] = color1;

bitmap[0][2] = color1;

Color color2 = new Color (0, 255, 0);

bitmap[1][1] = color2;

Color color3 = new Color (0, 255, 0);

bitmap[1][3] = color3;

bitmap[0][0].equals( bitmap[1][1] ) //Respuesta:

bitmap[0][0].equals( bitmap[1][3] ) //Respuesta:

bitmap[1][1].equals( bitmap[1][3] ) //Respuesta:

bitmap[0][0].equals( bitmap[0][2] ) //Respuesta:

NIVEL 6

Page 22: APO1 - Presentacion nivel 6

Comparar los elementos de una matriz (3)

Color color1 = new Color (255, 0, 0); bitmap[0][0] = color1;

bitmap[0][2] = color1;

Color color2 = new Color (0, 255, 0);

bitmap[1][1] = color2;

Color color3 = new Color (0, 255, 0);

bitmap[1][3] = color3;

bitmap[0][0].equals( bitmap[1][1] ) //Respuesta: false

bitmap[0][0].equals( bitmap[1][3] ) //Respuesta: false

bitmap[1][1].equals( bitmap[1][3] ) //Respuesta: false

bitmap[0][0].equals( bitmap[0][2] ) //Respuesta: true

NIVEL 6

Page 23: APO1 - Presentacion nivel 6

Patrones de algoritmos para recorridos de matrices

Patrón de recorrido total

Ejercicios de recorrido total de matrices:

Definir un método denominado rojorCero ( ) en la clase Image, el cual

retorna el número de pixeles de la imagen que tiene como componente

rojo el valor cero.

Dado un color recibido como parámetro, en la clase Imagen definir el

método cuantosPixelColor(Color colorBuscado), el cual retorna el

número de pixeles de la imagen cuyo color es el recibido como

parámetro.

Identificación del patrón del recorrido (esqueleto de patrón)

NIVEL 6

Page 24: APO1 - Presentacion nivel 6

Patrones de algoritmos para recorridos de matrices

Patrón de recorrido parcial

Ejercicios de recorrido parcial de matrices:

Dado un color recibido como parámetro, en la clase Imagen definir el

método existePixelColor(Color colorBuscado), el cual retorna un valor

indicando si en la imagen hay algún pixel con el color recibido como

parámetro.

Definir un método denominado

todasLasColumnasTienenUnPuntoRojo ( ) en la clase Image, el cual

indica si en cada una de las columnas de la imagen hay al menor un

pixel con color rojo.

Identificación del patrón del recorrido (esqueleto de patrón)

NIVEL 6

Page 25: APO1 - Presentacion nivel 6

Patrones de algoritmos para recorridos de matrices

Otros algoritmos de recorridos

Ejercicios con otros algoritmos de recorridos de matrices:

Dado el valor de una columna recibido como parámetro, en la clase

Imagen definir el método numeroPixelesMaximoVerde el cual retorna el

número de píxeles de la columna recibida como parámetro que tiene en

su componente verde el valor máximo (255).

Elaborar un método en la clase Imagen que retorne el número de la

fila con el mayor número de pixeles de un color, el color es recibido

como parámetro.

Elaborar un método en la clase Imagen que cambie los pixeles de un

color por otro color. El método recibe como parámetro dos colores, el

antiguo color y el nuevo color, y debe realizar el cambio requerido.

NIVEL 6

Page 26: APO1 - Presentacion nivel 6

PREGUNTAS

NIVEL 6

Page 27: APO1 - Presentacion nivel 6

NIVEL 6

Caso de estudio: Campeonato de futbol

Persistencia y manejo del estado inicial

El concepto de archivo

Archivo de propiedades

Escoger un archivo desde el programa

Inicialización del estado de la aplicación

Manejo de los objetos de la clase Properties

Completar la solución del ejercicio del campeonato

Registrar el resultado de un partido

Construir la tabla de posiciones

Implementación de otros métodos sobre matrices

NIVEL 6

Page 28: APO1 - Presentacion nivel 6

Caso de estudio 2: Campeonato de Fútbol

Registrar el resultado de un partido

Leer la información del campeonato desde un archivo de entrada

Presentar la tabla de goles

Presentar la tabla de posiciones

NIVEL 6

Page 29: APO1 - Presentacion nivel 6

Caso de estudio 2: Campeonato de Fútbol (2)

NIVEL 6

Page 30: APO1 - Presentacion nivel 6

Caso de estudio 2: Campeonato de Fútbol (3)

public class Equipo

{

//----------------------------------------------------

// Atributos

//----------------------------------------------------

/**

* Es el nombre del equipo

*/

private String nombre;

}

NIVEL 6

Page 31: APO1 - Presentacion nivel 6

Caso de estudio 2: Campeonato de Fútbol (3)

public class Campeonato

{

// Constantes

public static final int SIN_JUGAR = -1;

public static final int INVALIDO = -2;

// Atributos

private int maxEquipos;

private int[ ][ ] tablaGoles;

private Equipo[ ] equipos;

NIVEL 6

Page 32: APO1 - Presentacion nivel 6

Persistencia y Manejo del Estado Inicial – Concepto de archivos

Ruta de un archivo

Extensión del archivo

Nombre del archivo

NIVEL 6

Page 33: APO1 - Presentacion nivel 6

Archivo de propiedades

NIVEL 6

Page 34: APO1 - Presentacion nivel 6

Escoger un archivo desde el programa

Opción 1. Definir el archivo en el código fuente del programa

File archivoDatos = new File(“RutaArchivo”);

Opción 2. Que el usuario seleccione el archivo

JFileChooser fc = new JFileChooser( "./data" );

fc.setDialogTitle( "Abrir archivo de campeonato" );

int resultado = fc.showOpenDialog( this );

if( resultado == JFileChooser.APPROVE_OPTION )

{

File archivoCampeonato = fc.getSelectedFile( );

NIVEL 6

Page 35: APO1 - Presentacion nivel 6

Inicialización del estado de la aplicación

public Campeonato( File arch ) throws Exception

{

Properties datos = cargarInfoCampeonato( arch );

inicializarEquipos( datos );

inicializarTablaGoles( );

}

NIVEL 6

Page 36: APO1 - Presentacion nivel 6

Inicialización del estado de la aplicación (2)

private Properties cargarInfoCampeonato( File arch ) throws Exception {

Properties datos = new Properties( );

FileInputStream in = new FileInputStream( arch );

try

{

datos.load( in );

in.close( );

}

catch( Exception e )

{

throw new Exception( "Formato inválido" );

}

return datos;

}

NIVEL 6

Page 37: APO1 - Presentacion nivel 6

Inicialización del estado de la aplicación (3) - Manejo de los objetos de

la clase Properties

private void inicializarEquipos( Properties datos )

{

String strNumeroEquipos = datos.getProperty( "campeonato.equipos" );

maxEquipos = Integer.parseInt( strNumeroEquipos );

// Crea el arreglo de equipos, reservando el espacio definido en la

propiedad "campeonato.equipos"

equipos = new Equipo[maxEquipos];

// Lee el nombre de cada equipo de la respectiva propiedad y

crea el objeto que lo representa

for( int i = 0; i < maxEquipos; i++ )

{

String nombreEquipo = datos.getProperty( "campeonato.nombre" + i );

equipos[ i ] = new Equipo( nombreEquipo );

}

}

NIVEL 6

Page 38: APO1 - Presentacion nivel 6

Inicialización del estado de la aplicación (4)

private void inicializarTablaGoles( )

{

// Crea la matriz que contiene la tabla de goles

tablaGoles = new int[maxEquipos][maxEquipos];

// Inicializa todos los marcadores, dejando en la diagonal una marca

especial

for( int i = 0; i < maxEquipos; i++ )

{

for( int j = 0; j < maxEquipos; j++ )

{

if( i != j )

tablaGoles[ i ][ j ] = SIN_JUGAR;

else

tablaGoles[ i ][ j ] = INVALIDO;

}

}

}

NIVEL 6

Page 39: APO1 - Presentacion nivel 6

Caso de estudio 2: Campeonato de Fútbol (4)

-2 -1 -1 -1 -1

-1 -2 -1 -1 -1

-1 -1 -2 -1 -1

-1 -1 -1 -2 -1

-1 -1 -1 -1 -2

tablaGoles =

0 1 2 3 4

0

1

2

3

4

A.C. Milan Inter Juventus Roma Lazio

0 1 2 3 4

equipos =

NIVEL 6

Page 40: APO1 - Presentacion nivel 6

Completar la solución del ejercicio del campeonato - Registrar el

resultado de un partido

NIVEL 6

Page 41: APO1 - Presentacion nivel 6

Completar la solución del ejercicio del campeonato - Construir la tabla

de posiciones

Partidos jugados

Partidos ganados

Partidos empatados

Partidos perdidos

Goles a favor

Goles en contras

Puntos

-2 3 2 -1 -1

4 -2 2 -1 -1

2 5 -2 -1 -1

-1 -1 -1 -2 4

-1 -1 -1 2 -2

tablaGoles =

0 1 2 3 4

0

1

2

3

4

A.C. Milan Inter Juventus Roma Lazio

0 1 2 3 4

equipos =

NIVEL 6

Page 42: APO1 - Presentacion nivel 6

Ejercicios con Matrices

Ejercicios con matrices:

Elaborar un método que retorne el número de goles marcados por el

equipo cuyo nombre se recibe como parámetro.

Elaborar un método que retorne el número de equipos que llevan un

valor negativo en el número de goles a favor .

Elaborar un método que retorne el número de partidos empatados en

el campeonato.

Elaborar un método que retorne el número de equipos que han

perdido por lo menos un partido.

NIVEL 6

Page 43: APO1 - Presentacion nivel 6

PREGUNTAS

NIVEL 6

Page 44: APO1 - Presentacion nivel 6

Características adicionales de un JButton

Creación del Jbutton

JButton nuevo = new JButton("");

Creación del ícono que va a tener asignado el Jbutton

ImageIcon icono = new ImageIcon("./data/sur.gif");

Asignación del ícono al Jbutton

nuevo.setIcon( icono );

Establecimiento del tamaño del Jbutton

nuevo.setSize( new Dimension (37, 36) );

Deshabilitar o habilitar un Jbutton

nuevo.setEnabled( false );

NIVEL 6

Page 45: APO1 - Presentacion nivel 6

Características adicionales de un JLabel

Creación del Jlabel

JLabel nuevo2 = new JLabel("Numero");

Asignación del color del texto

nuevo2.setForeground( new Color(100,100,100) );

Creación del estilo del texto

Font f = new Font( "Arial", Font.BOLD, 14 );

Asignación del estilo del texto

nuevo2.setFont( f );

Definición del tamaño del JLabel

nuevo2.setSize( new Dimension(100,100) );

NIVEL 6

Page 46: APO1 - Presentacion nivel 6

Proceso de Construcción de un Programa

Análisis del problema ¿Qué hay que hacer? Requerimientos funcionales

Modelo conceptual del mundo

Requerimientos no funcionales

Diseño de la solución ¿Cómo se va a hacer? La interfaz de usuario

La arquitectura

Asignación de responsabilidades a las clases

Construcción de la solución ¿Hacerlo? El código de todas las clases

NIVEL 6

Page 47: APO1 - Presentacion nivel 6

ÉXITOS

Algorítmica y Programación 2 (APO 2) (ISIS-1205)

Estructuras de Datos (ISIS-1206)

Diseño de Software (ISIS-3717)

Ingeniería de Software (ISIS-2701)

Arquitectura de Software (ISIS-3702)

Aplicaciones Web Enriquecidas (ISIS-3716)

Más …

NIVEL 6

Page 48: APO1 - Presentacion nivel 6

ÉXITOS – CONTINUACIÓN Cupi2

NIVEL 6

Page 49: APO1 - Presentacion nivel 6

PREGUNTAS

NIVEL 6