Algoritmos. Autor: José Ángel Acosta Rodríguez



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

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

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

SISTEMAS DE NUMERACIÓN. Sistema decimal

Operación de Microsoft Excel

Unidad 1 Sistemas de numeración Binario, Decimal, Hexadecimal

Informática Bioingeniería

Los sistemas de numeración se clasifican en: posicionales y no posicionales.

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

Capítulo 4 Procesos con estructuras de repetición

Sistemas de numeración

Divisibilidad y números primos

Por ejemplo convertir el número 131 en binario se realiza lo siguiente: Ahora para convertir de un binario a decimal se hace lo siguiente:

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

Ejemplos de conversión de reales a enteros


1. SISTEMAS DIGITALES

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

❷ Aritmética Binaria Entera

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

Roberto Quejido Cañamero

GENERACIÓN DE ANTICIPOS DE CRÉDITO

Práctica 0. Emulador XENON de la computadora CESIUS

EJERCICIOS DEL TEMA 1

ICM Fundamentos de Computación

Materia: Informática. Nota de Clases Sistemas de Numeración

UNIDAD 4: PLANO CARTESIANO, RELACIONES Y FUNCIONES. OBJETIVO DE APRENDIZAJE: Representar gráficamente relaciones y funciones en el plano cartesiano.

La ventana de Microsoft Excel

EDWIN KÄMMERER ORCASITA INGENIERO ELECTRÓNICO

Representación de la Información

Transformación de binario a decimal. Transformación de decimal a binario. ELECTRÓNICA DIGITAL

8 millares + 2 centenas + 4 decenas + 5 unidades + 9 décimos + 7 céntimos

Computación I Representación Interna Curso 2011

6ª Práctica. Matlab página 1

ANEXO 2: REPRESENTACION DE LA INFORMACION EN LOS COMPUTADORES

SISTEMAS Y CÓDIGOS DE NUMERACIÓN

EJERCICIOS RESUELTOS SOBRE ERRORES DE REDONDEO

UNIDADES DE ALMACENAMIENTO DE DATOS

Representación de números en binario

Funciones, x, y, gráficos

Tema 3. Medidas de tendencia central Introducción. Contenido

Unidad 6 Cálculo de máximos y mínimos

En la actualidad ASCII es un código de 8 bits, también conocido como ASCII extendido, que aumenta su capacidad con 128 caracteres adicionales

Manual de uso: Reservas On Line GOLF

x

by Tim Tran:

Sistemas de Numeración Operaciones - Códigos

ARREGLOS DEFINICION GENERAL DE ARREGLO

SISTEMAS DE NUMERACIÓN (11001, 011) = = (32,12)

SISTEMAS DE NUMERACIÓN.

Ecuaciones de primer grado con dos incógnitas

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx

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.

COMO CREAR UN DIAGRAMA DE FLUJO

Sistema binario. Representación

2. Entorno de trabajo y funcionalidad en Arquímedes

Estructuras de Datos y Algoritmos Práctica I - Curso 2012/13

Naturaleza binaria. Conversión decimal a binario

GESTIÓN DOCUMENTAL PARA EL SISTEMA DE CALIDAD

Operación de Microsoft Word

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

SITEMA BINARIO, OCTAL Y HEXADECIMAL: OPERACIONES

Práctica 1: Sencillo Juego en Ensamblador

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

El sistema decimal, es aquél en el que se combinan 10 cifras (o dígitos) del 0 al 9 para indicar una cantidad específica.

SISTEMAS DE NUMERACIÓN. Sistema de numeración decimal: = =8245,97

BREVE MANUAL DE SOLVER

EJERCICIOS DE PROGRAMACIÓN RELACIÓN VII (EJERCICIOS DE REPASO)

PROGRAMACIÓN LINEAL Introducción Inecuaciones lineales con 2 variables

2_trabajar con calc I

Matrices equivalentes. El método de Gauss

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

Matemáticas para la Computación

Indicaciones específicas para los análisis estadísticos.

ELECTRÓNICA DIGITAL. Una señal es la variación de una magnitud que permite transmitir información. Las señales pueden ser de dos tipos:

PRÁCTICA 1: INTRODUCCIÓN A LA ALGORÍTMICA BOLETIN DE PROBLEMAS RESUELTOS. (Curso 03-04)

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

UNIDAD 3: ARITMÉTICA DEL COMPUTADOR

Cualquier número de cualquier base se puede representar mediante la siguiente ecuación polinómica:

Tema 2 : NÚMEROS ENTEROS. Primero de Educación Secundaria Obligatoria. I.e.s Fuentesaúco.

Capítulo 12: Indexación y asociación

ETS Caminos Santander. Curso Ejercicios de introducción a la programación.

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA INGENIERIA EN COMUNICACIONES Y ELECTRÓNICA ACADEMIA DE COMPUTACIÓN

21/02/2012. Agenda. Unidad Central de Procesamiento (CPU)

Definición Dados dos números naturales m y n, una matriz de orden o dimensión m n es una tabla numérica rectangular con m filas y n columnas.

INFORMÁTICA. Matemáticas aplicadas a la Informática

3.1 DEFINICIÓN. Figura Nº 1. Vector

Algoritmos y Diagramas de Flujo 2

GENERACIÓN DE TRANSFERENCIAS

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Profr. Efraín Soto Apolinar. La función lineal. y = a 0 + a 1 x. y = m x + b

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

a < b y se lee "a es menor que b" (desigualdad estricta) a > b y se lee "a es mayor que b" (desigualdad estricta)

Draw: objetos en 3D, diagramas de flujo y exportación

TEMA 2: Representación de la Información en las computadoras

Tema 1. SISTEMAS DE NUMERACION

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

Tema 2 : Códigos Binarios

Anterior Sistemas binarios: Aritmética binaria Siguiente ARITMÉTICA BINARIA. Operaciones elementales con números binarios

Transcripción:

Autor: 2006

ÍNDICE Página Índice 1 Problema 1. Movimiento de figuras geométricas.2 Problema 2. Conversión decimal a binario....3 Problema 3. Secuencias binarias..4 Problema 4. Conversión a binario a octal... 6 Problema 5. Sucesión matemática.... 7 Problema 6. Relleno de mapa de bits I. 8 Problema 7. Seguridad de cuentas bancarias.. 10 Problema 8. Relleno de mapa de bits II. Negativo de mapa de bits 12 Problema 9. Ley D Hont..14 Problema 10. Búsqueda en un intervalo...16 Problema 11. Space Invaders...17 Problema 12. Cleaning-Robot.......19 1

Problema 1. Figurita original Se desea hacer un cierto algoritmo para un juego. El algoritmo recibe una matriz A de dimensiones 3x3. La matriz describe una cierta figurita en blanco y negro. Los elementos de la matriz a ij contienen unos (color negro) para representar elementos de la figurita y ceros (color blanco) en otro caso. Por ejemplo véase en la figura de la derecha que se representa con unos una sencilla figura, que podría ser el carácter L, y el resto de componentes de la matriz son cero. El algoritmo lee desde el teclado los elementos a ij de la matriz A y una variable p. Según el valor de p el algoritmo debe hacer lo siguiente: Si p=1, debe rotar la figura a derechas 90 grados. Si p=2, debe hacer un Flip horizontal respecto de la fila central, es decir hacer una imagen especular de las filas superior e inferior. Si p>2, el algoritmo continua y escribe la matriz resultante B. El algoritmo se representa en la figura de abajo a la izquierda, en forma de diagrama de flujo. En dicho diagrama de flujo ya está implementada la parte de lectura desde el teclado de los elementos a ij de la matriz A y la variable p. También se tienen inicializados a cero los subíndices i y j. Se pide que se completen los dos diagramas de flujo correspondientes a la rotación y al flip de la figurita representada en la matriz A, de modo que no pueden definirse más subíndices que los ya inicializados i y j. Además la matriz resultante de la rotación o del flip debe almacenarse en los elementos b ij de una matriz B, ya inicializada. 1 0 0 1 0 0 1 1 0 Rotación a derechas 1 1 1 1 0 0 0 0 0 Eje de giro Flip horizontal 0 0 0 1 0 0 1 1 1 INICIO MODULO INICIO ROTACIÓN A DERECHAS INICIO FLIP HORIZONTAL LEE MATRIZ A y variable p p=1? ROTACIÓN A DERECHAS FLIP HORIZONTAL p>2? ESCRIBE MATRIZ B FIN MODULO FIN ROTACIÓN A DERECHAS FIN FLIP HORIZONTAL 2

Problema 2. Se desea realizar un algoritmo que lea un número entero (positivo o negativo) y escriba dicho número en binario codificado en modo signo-valor absoluto en N bits. Asuma que el número se puede representar con N bits. La representación en modo signo-valor absoluto consiste en considerar el bit más significativo (el 1º) como bit de signo (0 positivo, 1 negativo) y en los N-1 bits restantes codificar en binario el valor absoluto del número (ver ejemplos). Para solucionar este problema se propone lo siguiente: 1) Realice un diagrama de flujo correspondiente a un módulo que tome un número positivo num y determine un vector b de N componentes que contiene la codificación binaria en base 2 del mismo. Considere que la componente b 1 corresponde al bit menos significativo (el último), y la b N al signo. 2) Utilizando el módulo anterior, realice un diagrama de flujo que solucione el problema Por ejemplo: Si se lee el número 100 y se consideran 8 bits, el módulo del apartado 1) genera el vector b=[0,0,1,0,0,1,1,0] y el diagrama completo escribe la secuencia 01100100. Si se lee el número -100 y se consideran 8 bits, el módulo del apartado 1) genera el mismo vector b=[0,0,1,0,0,1,1,0] y el diagrama completo escribe la secuencia 11100100. INICIO DEL MÓDULO INICIO DEL DIAGRAMA PRINCIPAL FIN DEL MÓDULO FIN DEL DIAGRAMA PRINCIPAL 3

Problema 3. Dibujar los diagramas de flujo que resuelven los siguientes problemas y rellenar las tablas de variables de cada uno: a) Suponga leída una secuencia binaria v de N bits, encontrar la primera secuencia de S unos seguidos y escribir por pantalla la posición del primer uno dentro de la secuencia v. Si no se encuentra ninguna secuencia de S unos seguidos, mostrar por pantalla un cero. b) Si la secuencia binaria leída representa un nº en base 2 tal que v N es el bit menos significativo, calcular el número que representa en base 10 y escribirlo en pantalla. Ejemplo: N=11 S =3 1 0 0 1 1 1 1 1 0 0 1 v 1 v 2 v 3 v 4 v 5 v 6 v 7 v 8 v 9 v 10 v 11 a) Por pantalla: 4 b) Por pantalla: 1273 No utilice más espacio que el indicado. Use acceso a vectores y matrices mediante subíndices. Emplee únicamente expresiones en lenguaje natural, operaciones aritméticas (+, -,, /, resto de la división ), asignación ( ) y comparaciones (>, <, =,,, ). Se puntuará la claridad y legibilidad de los diagramas. a) v Vector de Dato. Secuencia leída de bits. variables s N Variable Dato. Número de bits de la secuencia leída. S Variable Dato. Número de bits a 1 que localizar en v. b) v Vector de Dato. Secuencia leída de bits. variables s N Variable Dato. Número de bits de la secuencia leída. 4

Inicio a Inicio b Fin a Fin b 5

Problema 4. Considere una secuencia de N bits almacenados en un vector b de N componentes de forma que b N almacena el bit más significativo de la secuencia. Se pide realizar un algoritmo que obtenga el número en octal (en base 8), lo almacene en el vector d y lo escriba en pantalla. Para pasar de un número en base 2 a base 8, basta con tomar los bits de la secuencia de 3 en 3 e interpretarlos como un número decimal. Véase el siguiente ejemplo, en el que el número binario 01011110 se transforma en el 136 en base 8. Para realizar el algoritmo se pide a) Un módulo que tome un número binario de 3 bits almacenado en un vector v y calcule el dígito decimal que representa. b) Basándose en el anterior, hacer el diagrama de flujo que resuelve el problema. b 8 b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 1 0 1 1 1 1 0 d 1=01) 2 3=011) 2 6=110) 2 d 3 d 2 d 1 b M d Vector de N enteros Entero. Número de componentes de d Vector de M enteros 6

Problema 5. Obtenga un algoritmo que resuelva el problema cuyo enunciado es: Calcular el producto de los e primeros elementos de una sucesión cuyo término general cumple: a k = a k-1 + 2 a k-2 +... + n a k-n, siendo a 1 =1, a 2 =2,..., a n =n El algoritmo ha de leer únicamente el valor de e y de n. Suponga que ambos son enteros y positivos. El algoritmo ha de escribir como único resultado el producto: e p = a h h= 1 Se pide: dibujar el diagrama de flujo en el recuadro y escribir la lista de objetos usados en la tabla. Para la confección del diagrama utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones >, <, >=, <=, acceso a memoria con subíndices y expresiones literales en lenguaje natural. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro. 7

Problema 6. Se ha desarrollado un algoritmo para incluirlo en un cierto programa de dibujo. El algoritmo resuelve el problema de relleno de una figura cerrada en dos dimensiones. La figura viene descrita por un mapa de bits en blanco y negro (ver recuadro abajo). Dicha figura se describe con una matriz A de dimensiones m x n, cuyos elementos a ij pueden valer 0 (color blanco) ó 1 (color negro). El algoritmo completo se muestra en el recuadro del margen derecho, el cual contiene un módulo interno, PUNTO INTERIOR, que determina si un elemento a ij está en el interior de la figura o no. Dicho módulo se subdivide en otros cuatro, denominados ARRIBA, ABAJO, IZQUIERDA y DERECHA. Cada uno de estos módulos recorre la figura desde un elemento a ij cualquiera hacia donde indica su nombre y hasta que encuentra un borde de la figura (ver recuadro explicativo abajo), si es que dicho borde existe. Cada módulo ARRIBA, ABAJO, IZQUIERDA y DERECHA, modifica el valor de cierta variable F. Así el primer módulo, ARRIBA, si encuentra un borde incrementa el valor de la variable F. Después el segundo módulo, ABAJO, haría lo mismo, y así sucesivamente. Si cualquiera de los módulos no detecta borde alguno, no incrementa dicha variable. De este modo, si al pasar por los cuatro módulos el punto considerado está en el interior de la figura (es decir dentro de los bordes), F deberá valer 4. TA: Para la confección del diagrama de flujo utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones <, >,,, =, lógicas y, o, acceso a memoria con subíndices y expresiones literales en lenguaje natural. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro. a) Realizar los diagramas de flujo de los módulos ARRIBA y DERECHA. Nótese que son módulos y no subprogramas. Se aconseja utilizar bucles con salida en cabeza o en medio. b) El diagrama del módulo PUNTO INTERIOR, puede optimizarse, ya que si cualquiera de sus módulos detecta que no existe un borde, el elemento a ij no será un punto interior. Optimícelo usando los módulos ARRIBA, ABAJO, IZQUIERDA y DERECHA. Figura original 0 0 0 0 0 1 0 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 INICIO PUNTO INTERIOR F = 4 i 1 j 1 j j+1 j>n i i+1 i>m FIN a ij 1 INICIO PUNTO INTERIOR F 0 IZQUIERDA ARRIBA a ij DERECHA ABAJO j i Figura rellenada 0 0 0 0 0 1 0 0 0 1 1 0 1 1 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 ARRIBA ABAJO IZQUIERDA DERECHA FIN PUNTO INTERIOR 8

a) INICIO ARRIBA INICIO DERECHA FIN ARRIBA FIN DERECHA b) INICIO PUNTO INTERIOR OPTIMIZADO MBRE VALOR DESCRIPCIÓN DEL OBJETO m Constante Número de filas n Constante Número de columnas A Matriz m x n Describe la figura a rellenar Enteros Elementos 0 o 1 de la matriz A i Entera Índice de filas a ij j Entera Índice de columnas F Entera Variable que describe si un punto es interior FIN PUNTO INTERIOR OPTIMIZADO 9

Problema 7. El código de cuenta corriente de una cuenta bancaria está compuesto por el código de entidad (4 dígitos), el código de sucursal (4 dígitos), el código de control (2 dígitos) y en número de cuenta (10 dígitos), como se muestra en la figura adjunta: Código entidad Código sucursal Código control Número de cuenta Para el cálculo de los 2 dígitos del código de control se utiliza el siguiente algoritmo, el cual calcula un dígito de control dado un número cualquiera de 10 dígitos: 1. Calcular el número N dado por la fórmula siguiente: 10 N = 11 mod d i p i i= 1 11 donde d i el es el dígito i-ésimo del número del que se desea calcular su dígito de control, p i es la componente i-ésima de un vector dado p de 10 componentes, y mod es la operación de resto de división (véase nota abajo). 2. Según el valor de N, el dígito de control valdrá: a. Si N = 11, entonces el dígito de control es 0. b. Si N = 10, entonces el dígito de control es 1. c. En cualquier otro caso el dígito de control es el propio número N. Para obtener el primer dígito de control se utilizan los códigos de entidad y de sucursal del código de cuenta corriente añadiéndoles dos cero por la izquierda, y después se le aplica el algoritmo dado. Para el segundo dígito de control se le aplica el algoritmo a los 10 últimos dígitos correspondientes al número de cuenta. Se pide: a) Realizar el diagrama de flujo del algoritmo dado para un número cualquiera cuyos dígitos están almacenados como un vector U de 10 componentes. Dicho algoritmo debe almacenar en una variable denominada DC el valor del dígito de control obtenido. b) Usar el diagrama de flujo del apartado anterior como un módulo y realizar el diagrama de flujo para comprobar que los dígitos de control de un código de cuenta corriente dado, son correctos. El código de cuenta corriente está almacenado en un vector V. Es obligatorio usar el módulo creado en el apartado anterior tantas veces como sea necesario. TA: Para la confección del diagrama de flujo utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones <, >,,, =, lógicas y, o, acceso a memoria con subíndices y expresiones literales en lenguaje natural. Además dispone de la operación resto de división y represéntela como mod(x/y), es decir resto de dividir la cantidad X entre la cantidad Y. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro correspondiente. 10

a) b) INICIO MÓDULO INICIO FIN MÓDULO MBRE VALOR DESCRIPCIÓN DEL OBJETO N Constante Número resultado del algoritmo DC Constante Valor del dígito de control obtenido U Vector de Contiene el número dato dimensión 10 para el algoritmo V Vector Contiene el código de cuenta corriente i Índice Para vectores FIN 11

Problema 8. Para hacer ciertas labores de fotoimpresión en una imprenta se hace un negativo especial de las fotos. Este negativo se les aplica a fotos en blanco y negro. Las fotos representan figuras cerradas descritas por un mapa de bits en blanco y negro. Dicha figura se representa con una matriz A de dimensiones m x n, cuyos elementos a ij pueden valer 0 (color blanco) ó 1 (color negro). Se desarrolla un algoritmo para hacer el negativo, incluído el borde. Dicho algoritmo contiene un módulo interno denominado PUNTO INTERIOR que determina si un elemento a ij está en el interior de la figura o no. Dicho módulo se subdivide en otros cuatro (ver figura abajo a la derecha), denominados ARRIBA, ABAJO, IZQUIERDA y DERECHA. Cada uno de estos módulos recorre la figura desde un elemento a ij cualquiera hacia donde indica su nombre y hasta que encuentra un borde de la figura, si es que dicho borde existe (ver figura explicativa abajo a la izquierda). Cada módulo ARRIBA, ABAJO, IZQUIERDA y DERECHA, modifica el valor de la variable F. Así el primer módulo, ARRIBA, si encuentra un borde incrementa el valor de la variable F. Después el segundo módulo, ABAJO, haría lo mismo, y así sucesivamente. Si alguno de los módulos no detectase borde alguno, no se modificaría dicha variable. De este modo, si al pasar por los cuatro módulos el punto considerado está en el interior de la figura (es decir dentro de los bordes), F deberá valer 4. TA: Para hacer los diagramas de flujo utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones <, >,,, =, lógicas y, o, acceso a memoria con subíndices y expresiones literales en lenguaje natural. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro. Se pide: c) Realizar el diagrama de flujo del módulo ABAJO dentro del módulo PUNTO INTERIOR. Nótese que son módulos y no subprogramas. Suponga i, j ya conocidas para este apartado. d) Realizar el diagrama de flujo que resuelve el problema al completo usando, obligatoriamente el módulo PUNTO INTERIOR. Es decir, se desea que dada una figura original (matriz A m x n, ya leida y en memoria), el algoritmo realice el negativo y lo escriba en la matriz B. Nótese que también se hace el negativo del borde de la figura. Figura original 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 Figura en negativo 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 INICIO PUNTO INTERIOR F 0 ARRIBA F=1 ABAJO ARRIBA F=2 IZQUIERDA a ij DERECHA i IZQUIERDA F=3 ABAJO DERECHA j FIN PUNTO INTERIOR 12

INICIO ABAJO (apartado a) INICIO apartado b FIN ABAJO (apartado a) MBRE m n A a ij VALOR Constante Constante Matriz m x n Enteros DESCRIPCIÓN DEL OBJETO Número de filas Número de columnas Figura original Elementos 0 o 1 de la matriz A i Entera Índice de filas j Entera Índice de columnas F Entera Variable que describe si un punto es interior B Matriz m x n Negativo de la figura original FIN apartado b 13

Problema 9. La asignación de diputados en una provincia se rige por la ley D Hont. En una versión muy simplificada la ley se aplica como se describe a continuación. Suponga que se tiene una provincia a la que se le asignan 5 diputados y donde hay 4 formaciones políticas relevantes (F 1, F 2, F 3 y F 4 ). Después de la cita electoral se tendrá un vector de votos (V) donde cada elemento del vector hace referencia a los votos de una determinada fuerza política. Dicho vector (V), además, estará ordenado en número de votos de forma decreciente. Con este vector de votos se crea una matriz A como la que aparece en la figura y donde cada columna se corresponde con el vector V dividido por 1,2,3, y así sucesivamente hasta el total de los 5 diputados asignados. A 4x5 VOTOS V 2 V 3 V 4 V 5 (V) F 1 120000 60000,0 40000,0 20000,0 13333,3 F 2 82000 41000,0 27333,3 13666,7 9111,1 F 3 55000 27500,0 18333,3 9166,7 6111,1 F 4 25000 12500,0 8333,3 4166,7 2777,8 Ahora sólo falta escoger las 5 cifras más altas de la matriz A y asignar a cada una un diputado (celdas sombreadas en la figura). En este caso, el resultado será el que aparece en la tabla al margen derecho. Dicho resultado puede almacenarse en un vector de diputados ordenado (D). Dado un vector de votos V, ya ordenado en forma decreciente, de una provincia a la que se le asignan N diputados y en la cual existen M fuerzas políticas relevantes, se pide: FUERZAS POLÍTICAS DIPUTADOS (D) F 1 2 F 2 2 F 3 1 F 4 0 c) Realizar un diagrama de flujo tal que dado el vector de votos V, ya ordenado, cree la matriz A de dimensiones M x N. d) Realizar un diagrama de flujo que cree un vector de diputados D, donde cada elemento será el número de diputados asignado a la fuerza política correspondiente. Este apartado debe resolverse en dos partes. Primero crear un módulo que calcule el máximo de la matriz A y su posición. Después resolver el apartado usando dicho módulo el número de veces que sea necesario. TA: Los vectores y matrices conocidos, ya están almacenados en memoria y el resto inicializados a cero. Para la elaboración del diagrama de flujo utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones <, >,,, =, lógicas y, o, acceso a memoria con subíndices y expresiones literales en lenguaje natural. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro correspondiente. MBRE M VALOR Constante DESCRIPCIÓN DEL OBJETO Número de fuerzas políticas N Constante Número de diputados Vector de Vector conocido de V dimensión M votos Vector de D Vector de diputados dimensión M Matriz de Matriz para el cáculo del A dimensiones número de diputados M x N i Índice Para vectores / matrices j Índice Para vectores / matrices k Índice Para vectores / matrices 14

a) b) INICIO apartado a) INICIO MÓDULO apartado b) FIN apartado a) b) INICIO apartado b) FIN apartado b) FIN MÓDULO apartado b) 15

Problema 10. Realice en el recuadro adjunto el diagrama de flujo de un programa que lea desde teclado una lista de valores enteros positivos y los almacene en un vector v. La lectura por teclado finaliza cuando se introduzca un valor negativo. A continuación, el programa preguntará otros 2 números por teclado (en cualquier orden), y recorrerá el vector v, calculando el porcentaje de elementos que están entre el menor y el mayor de ambos números (incluidos los extremos). Ejemplo: Lista: 24, 30, 5, 9, 85, 19 Intervalo: 20, 5 Nºs en intervalo: 5, 9, 19. Resultado: 50% TA: Para hacer los diagramas de flujo utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones <, >,,, =, lógicas y, o, acceso a vectores y matrices con subíndices y expresiones literales en lenguaje natural. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro. MBRE TIPO DESCRIPCIÓN DEL OBJETO 16

Problema 11. Un antiguo videojuego llamado Space Invaders tenía como objetivo defender la Tierra de una invasión enemiga. La escena en la pantalla estaba formada por una matriz de puntos monocromos, blancos y negros. Los objetos estaban formados simplemente por un mapa de bits en negro sobre fondo blanco. Describiremos aquí la escena mediante una matriz A de dimensiones m x n, cuyos elementos a kj pueden valer 0 (color blanco) ó 1 (color negro). Las formas de los objetos y la escena son exactamente como aparecen en la figura: las naves invasoras, la nave del jugador y los proyectiles. Los movimientos de los objetos son: las naves invasoras pueden moverse libremente, mientras que la nave del jugador sólo puede moverse en horizontal; los proyectiles de la nave del jugador salen desde el disparador y se mueven verticalmente hacia arriba; y los proyectiles de las naves invasoras se mueven en vertical hacia abajo. Teniendo en cuenta que los módulos son parte del algoritmo del videojuego, se pide: a) Dada una posición a pq de colisión entre entre el proyectil del jugador y una nave invasora, realice el diagrama de flujo de un módulo que se denomine DESTRUYE, tal que destruya la nave invasora, es decir borre por completo la nave invasora de la escena. Este módulo no debe detectar la colisión sólo destruir la nave invasora. Para facilitar la resolución tenga en cuenta que todas las naves enemigas están contenidas en submatrices de 3x3 y que están siempre separadas horizontalmente como mínimo por un hueco de 3x3 (ver figura). b) Dada la posición a kj de disparo del proyectil del jugador, realice el diagrama de flujo de un módulo que anime paso a paso el movimiento del proyectil del jugador desde que sale del disparador (ver figura) hasta que, o bien se encuentra con una nave invasora o bien llega al final de la escena sin acierto. Si hay una colisión con una nave invasora debe usar el módulo DESTRUYE del apartado anterior para destruirla proporcionándole las coordenadas correspondientes. TA: Para hacer los diagramas de flujo utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones <, >,,, =, lógicas y, o, acceso a vectores y matrices con subíndices y expresiones literales en lenguaje natural. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro. 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Naves 0 0 invasoras 0 0 0 0 0 0 0 0 Posición a pq 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Proyectil 0 0 0 jugador 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Posición 0 0 de 0 salida 0 0 del 0 proyectil 0 0 a kj 0 0 (a 0 1 0 antes 0 de 0 salir 0 el 0 proyectil) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Disparador 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Nave 0 del 0 jugador 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 17

MBRE TIPO DESCRIPCIÓN DEL OBJETO INICIO DESTRUYE (apartado a) m n A a kj p q k j Constante Constante Matriz m x n Enteros Entera Entera Entera Entera Número de filas Número de columnas Escena original Elementos 0 o 1 de la matriz A Índice de fila de la colisión del proyectil Índice de columna de la colisión del proyectil Índice de la fila de salida del proyectil Índice de la columna de salida del proyectil FIN DESTRUYE (apartado a) INICIO apartado b) FIN apartado b) 18

Problema 12. Se ha diseñado un robot limpia piscinas llamado Cleaning-Robot (ver figura). El funcionamiento del robot es el siguiente: 1. El usuario lo arroja a la piscina en cualquier zona. 2. El robot se hunde y una vez llega al fondo calcula su posición respecto a los bordes de la piscina. Para ello el robot digitaliza la piscina mediante una matriz de puntos A de dimensiones M x N, cuyos elementos a kj pueden valer 0 (zona aún sucia) ó 1 (zona limpiada). La digitalización la hace de modo que siempre deja un número par de celdas desde el mismo hacia las paredes (ver figura). 3. Una vez ha calculado su posición, por ejemplo a pq, éste puede moverse sólo paralelo a las paredes de la piscina y celda a celda de la matriz (ver figura abajo). Se desea hacer un algoritmo tal que, dada una posición cualquiera (p,q) de partida del robot, éste limpie por completo la piscina sin pasar dos veces por el mismo sitio. Para ello se pide completar en los recuadros A y B del diagrama de flujo dado, lo siguiente: 1. Recuadro A: aquí debe ir la actualización de los índices de la siguiente posición del robot en la matriz. El avance del robot debe ser celda a celda y en el sentido el indicado en la figura al margen del Recuadro (ver diagrama de flujo). 2. Recuadro B: rellenar los bloques del diagrama de flujo, sabiendo que existen dos módulos predefinidos: el primero denominado MOVER y hace que el robot se mueva celda a celda a la posición (contigua) indicada por los índices (k,j); y el segundo denominado RETROCESO que lleva al robot sin limpiar desde la posición (M,N) hasta la (1,1). MBRE TIPO DESCRIPCIÓN DEL OBJETO Constante M Número de filas Constante N Número de columnas Matriz M x N A Describe la piscina Elementos 0 o 1 de la a kj Enteros matriz A k Entera Índice de fila j Entera Índice de columna Índice de la fila de salida p Entera del robot Índice de la columna de q Entera salida del robot Variable para el sentido t Entera de avance del robot Variable que indica al F Entera robot el fin de limpieza SE PUEDEN DEFINIR NUEVAS VARIABLES TAS: Para hacer los diagramas de flujo utilice únicamente las operaciones +,-,, /, asignación ( ), comparaciones <, >,,, =, lógicas y, o, acceso a vectores y matrices con subíndices y expresiones literales en lenguaje natural. El diagrama de flujo ha de estar estructurado, ser claro y legible y ocupar sólo el espacio interior del recuadro. 0 0 Descripción del 0 0 0 movimiento 0 0 0 del 0 Robot 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Posición 0 0 a0 pq 0 0 0 0 0 0 0 0 0 0 0 0 Cleaning-Robot 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Número par de celdas Número par de celdas Número par de celdas Número par de celdas 19

INICIO k p, j q t 1 F 0 a kj 1 Recuadro A j j + t Sentido de avance j = N t -1 k k + 1 j = 1 t 1 k k + 1 j = N y k = M Recuadro B F = 1 FIN 20