Creación de materiales didácticos Aplicaciones para dispositivos móviles Lección 3

Documentos relacionados
Ejercicios resueltos

PRÁCTICA FUNDAMENTOS DE ALGORITMOS (Estructuras de Repetición II) Objetivos

Métodos con Parámetros

suma de los n>0 primeros números que se lean del teclado. El número n es un dato y es

Soluciones a los ejercicios planteados en el curso

5. SEGUNDA APP: par o impar

matemáticos, como por ejemplo las cinco operaciones básicas, factorial de un número.

roducción a la programación con el lenguaje C usando el entorno de trabajo Dev-C. Nociones básicas de programación

Aplicaciones Google. -- Formularios Web en Google Drive. Fecha creación: 17/02/2017. Fecha revisión: 17/02/2017. Revisión: 01

INTRODUCCIÓN A LA PROGRAMACIÓN. 1º Bachillerato

OPERADORES ARITMÉTICOS EN PHP: OPERADORES BÁSICOS Y RESTO (MÓDULO). INCREMENTO Y DECREMENTO. (CU00819B)

2.1 Introducción. Propiedades.

Crear una app con MIT inventor

Retículos y Álgebras de Boole

ESTRUCTURAS REPETITIVAS EN PHP

DETERMINANTES MATRICES EQUIVALENTES POR FILAS RANGO DE UNA MATRIZ. APLICACIONES

LOTERÍA PRIMITIVA: LISTAS

RELACIONES Y CONSULTAS EN MICROSOFT OFFICE ACCESS

FUNDAMENTOS MATEMÁTICOS (Grado en Ingeniería Informática) Práctica 8. MATRICES

1. Expresiones polinómicas con una indeterminada

Actividad 1: Calculadora

TEST DE RAZONAMIENTO NUMÉRICO. Consejos generales

Programación de Videojuegos Tema 15 Tipos de Dato I. 15. Tipos de Dato I

COPPRA Manual del Usuario

Álgebra y Matemática Discreta

CREAR Y EDITAR CUESTIONARIOS

NOCIONES BASICAS DE Miguel Iván Bobadilla

FICHAS DE TRABAJO REFUERZO

Unidad 3. Estructuras de control en diagrama de Flujo y pseudocódigo Tema Iteración o Repetitivas (repite - mientras) Juan Pablo Cobá Juárez Pegueros

OCW-V.Muto Sistemas de numeración Cap. III CAPITULO III. SISTEMAS DE NUMERACION 1. REPRESENTACION DE LA INFORMACION

Guía visual. Práctica de Cálculos. Versión

Codificador Decodificador ISBN EAN13 (GTK2.0,GdkPixbuf,GDK & GCC)

CONCEPTO Y DEFINICIÓN DE CLASE EN JAVA. OBJETOS DEL MUNDO REAL Y ABSTRACTOS. EJEMPLOS. EJERCICIO (CU00644B)

Tema 5. Diagramas de flujo. Computacion - FA.CE.NA.

Factorización de polinomios FACTORIZACIÓN DE POLINOMIOS

UNIDAD 10. LAS CONSULTAS DE ACCIÓN

Lección 5: Multiplicación y división de números racionales

Álgebra y Matemática Discreta

Etapas en la vida del software

Distinguir las diferentes estructuras de repetición utilizadas en problemas con bucles: mientras, repetir mientras, para.

Primer ha de saberse que las funciones son la herramienta más útil de. Excel, ya que con ella podemos realizar cálculos. Veamos a continuación

Primeros pasos programando en Python

Tipos de Datos de python (2ª parte):

Bloque 1. Conceptos y técnicas básicas en programación

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

TEMA 5. PROGRAMACIÓN BÁSICA EN MATLAB /OCTAVE

5. ESTRUCTURAS DE REPETICIÓN

INTELIGECIA EN REDES DE COMUNICACIONES 5º ING TELECOMUNICACIÓN TRABAJO FINAL DE LA ASIGNATURA EL SOLITARIO AUTORES

Mapéalo: Guardar y mostrar ubicaciones en un Mapa de Google

Guía básica del uso de Kbruch

TIPO Y MÉTODO ITERATOR. ERROR JAVA.UTIL.CONCURRENT MODIFICATIONEXCEPTION. RESUMEN DE TIPOS DE BUCLES EN JAVA. (CU00667B)

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

EJERCICIO 1. CREACIÓN DE UNA FUNCIÓN

Dpto. de ATC, Universidad de Sevilla - Página 1 de 16

TEMA 1.- POLINOMIOS Y FRACCIONES ALGEBRAICAS

MÁSTER EN DIDÁCTICA DE LA TECNOLOGÍA MODERNA

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

Complejidad de algoritmos recursivos

Departamento de Matemática Aplicada CÁLCULO COMPUTACIONAL. Licenciatura en Química (Curso ) Archivos de órdenes. Programación.

Desarrollo de APPs sin saber Programación. Profesores Jezabel Molina Gil, Cándido Caballero Gil, Moisés Lodeiro Santiago

Recursión. Introducción a la Computación Clase 15 Patricia Borensztejn

1ra. Es la Media: es el promedio de un grupo de números. 2da. Es la Mediana: es el número del centro en una serie de datos.

Estructuras de Repetición

Programación con Matlab

!DETERMINANTES. Tema 3.- DETERMINANTES !MATRICES EQUIVALENTES POR FILAS!RANGO DE UNA MATRIZ. APLICACIONES. Un poco de historia

UNIDAD 2 - CONSULTAS

TEMA 3: Estructuras de Control: Iterativas

Operaciones con polinomios

Cargando los tipos de datos estructurados

PASOS PARA REALIZAR UN PEDIDO

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C)

2. Editor de bloques. Permite programar de una forma visual e intuitiva el flujo de funcionamiento del programa utilizando bloques.

EJEMPLOS LENGUAJE C. DECLARAR VARIABLES Y ASIGNARLES CONTENIDO. PROGRAMA BÁSICO INT MAIN MOSTRAR MENSAJE. (CU00511F)

TEMA 2: ALGORITMOS Y PROGRAMAS

LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE

Programación Estructurada

Álgebra y Matemática Discreta

Sentencias iterativas

PRÁCTICA. Estructura de Computadores Grado en Ingeniería Informática Estudios de Informática, Multimedia y Telecomunicación

Estructuras de control: Las variables: Fuertemente tipado: Tipado dinámico: Variables booleanas: Qué son las estructuras de control?

Introducción a la Teoría de Números

IES Los Albares (Dep. de Tecnología) MSWLogo nivel 3

9. Tablas de Excel Introducción Crear una tabla

Unidad didáctica 1. Operaciones básicas con números enteros

TEORIA SOBRE FOSILES

Descubre este programa creado bajo licencia GPL v.2 que permite la sincronización de archivos y carpetas...

3.1. Aspectos avanzados de Scratch: listas y procedimientos

Salvador Reyes Técnico informático a domicilio

Objetivo específico: Maneja los elementos básicos de algoritmos utilizados para resolver un problema por computadora.

Conceptos. Generales ALGORITMOS

Estructuras dinámicas lineales (i)

El segundo panel está compuesto por casillas, igual que si fuese una actividad con casillas y pueden contener textos, imágenes,sonidos...

VB - Access Manual Visual Basic para Aplicaciones del Access 2000

Especificación y uso de módulos en Java(II)

IES Miralbueno TIC-I 1º Bach. Curso VARIABLES Y SENTENCIAS ELEMENTALES

Ejercicios ejemplo: verificación de algoritmos del valor suma de una sucesión matemática. (CU00238A)

INICIACIÓN A LA PROGRAMACIÓN: SCRATCH

1. Números naturales y sistema de numeración decimal

Transcripción:

Creación de materiales didácticos Aplicaciones para dispositivos móviles Lección 3 Fundamentos de programación

Introducción En el tema anterior hemos usado el App Inventor para crear algunas aplicaciones usando los siguientes pasos: 1. Primero, diseñamos la interfaz de usuario, añadiendo todos los elementos que tendrá nuestra ventana para interactuar con el usuario 2. Una vez que tenemos el diseño, añadimos la funcionalidad del programa usando el block editor. La parte de programación real se corresponde con la tarea de añadir la funcionalidad, y es ahí donde recae la tarea más compleja. En este tema profundizaremos en ello. Algoritmos Un algoritmo es un conjunto de pasos o instrucciones que es necesario seguir para realizar alguna tarea. En nuestra vida cotidiana, estamos rodeados de algoritmos: Una receta de cocina es un algoritmo Las instrucciones para montar un mueble es un algoritmo El nombre de Algoritmo es en honor al matemático persa AlJuarismi, quien escribió un libro en el siglo IX con algoritmos para resolver ecuaciones. El concepto de algoritmo es muy importante para la programación, ya que la programación consiste en escribir uno o más algoritmos (conjunto de pasos) que debe ejecutar un computador para resolver algún problema. Por ejemplo, el siguiente algoritmo describe qué hace el programa Conversor, visto en la lección anterior, cuando el usuario pulsa el botón Convertir: 1. Obtener el factor de conversión. 2. Multiplicar la cantidad introducida por el usuario por el factor de conversión. 3. Mostrar el resultado de la multiplicación anterior. El algoritmo que ejecuta programa Cronómetro: Cada segundo, hacer lo siguiente: 1. Sumar un segundo: segundos = segundos + 1. 2. Si segundos=60, hacemos (minutos=minutos+1). segundos=0 y sumamos un minuto 3. Si minutos = 60, hacemos minutos = 0 y sumamos una hora (horas=horas+1). 4. Mostramos el valor de horas,minutos y segundos en pantalla. Cuando desarrollamos aplicaciones con App Inventor, antes de empezar a trabajar con el block editor, conviene pensar el algoritmo o algoritmos que tendrá nuestro programa y escribirlos en papel.

Bases de los lenguajes programación Todos los lenguajes de programación más comunes, incluido el App Inventor, ofrecen mecanismos para: Almacenar datos. Variables. En ellas guardamos datos y valores que se necesitan durante la ejecución del programa. Hay que distinguir entre las variables y las bases de datos o ficheros, que veremos más adelante. Tomar decisiones. Estructuras de control condicionales. Iterar para realizar una tarea sobre un conjunto de datos: Bucles. Reutilizar código ( o bloques) mediante funciones y procedimientos. En las guías rápidas se puede ver un resumen de los diferentes bloques que tiene App Inventor para tratar variables, condicionales, bucles y funciones. A continuación veremos algunos ejemplos, un poco más avanzados que los del tema anterior, para seguir practicando. Ejemplos Ejemplo: Calcular la media Vamos a construir un programa que nos permita introducir números y, a continuación, podamos calcular la media. El diseño del programa (Media.zip) es el siguiente: Tiene un cuadro de texto donde introducir el número. Un botón añadir. Un ListPicker para eliminar algún número. Un botón para calcular la media y algunas etiquetas para mostrar información de interés.

Vamos a comenzar a añadir funcionalidad. En prime lugar, definimos la siguiente variable: Dicha variable tiene la lista de los números que iremos añadiendo. Para añadir un elemento, podemos hacer lo siguiente: Cuando se pulsa el botón, lo primero que hacemos es añadir a la lista el número introducido. A continuación, imprimimos los números en pantalla. Para ello el bloque list to csv row que nos devuelve el contenido de la lista en formato CSV (Comma-separated values): numero1, numero2, numero3,... Además, imprimimos junto a la lista la etiqueta Números. El carácter especial \n significa un salto de línea. Los números están entre comillas. Si quisiéramos quitar las comillas, podríamos usar el siguiente bloque: Ahora vamos a añadir la funcionalidad de eliminar números usando el ListPicker añadido durante el diseño. Para ello, lo primero que tenemos que decirle al ListPicker es qué lista queremos usar:

Cuando seleccionemos un elemento del ListPicker tenemos que borrarlo: Además, tendríamos que actualizar la etiqueta con los números: El bloque de arriba y el utilizado al añadir un nuevo número son iguales. Es un buen momento de aprender a usar los procedimientos para reutilizar código. En este caso, vamos a crear un procedimiento (el bloque está dentro de Built-in - Definition) que se llame mostrarnumeros : Podemos llamarlo desde ambos bloques usando el siguiente bloque ( se encuentra en My blocks - My definitions): Ya tenemos la funcionalidad de añadir y quitar números. El último paso, consistirá en añadir la funcionalidad al botón que calcula la media. Para ello, hacemos uso del siguiente bloque:

Como vemos, el procedimiento es el clásico para calcular la media: 1. En primer inicializamos la variable media para que valva 0. 2. A continuación, recorremos todos los números de la lista, sumándolos en la variable media. 3. Por último, dividimos el valor de media por el número de elementos (hacemos uso de lengh of list, que devuelve el número de elementos de la lista) El código completo, con comentarios, está disponible en el fichero Media.zip.

Ejemplo: Eliminar repetidos en una lista En muchos programas es necesario eliminar elementos repetidos en una lista. En este ejemplo, vamos a ver un método para eliminar números repetidos de una lista generada al azar. En primer lugar, generamos una lista añadiendo números aleatorios. Para ello, podemos utilizar el siguiente procedimiento, que acepta como argumento el tamaño de la lista: El procedimiento genera una lista aleatoria cuyo tamaño se indica en el parámetro numeroelementos. Sigue el siguiente proceso: 1. El primer lugar, asignamos a la lista una lista vacía. 2. A continuación, iteramos desde 1 hasta numeroelementos 3. En cada iteración, añade a la lista un número aleatorio entre 1 y 20. Si queremos generar una lista de 50 elementos, por ejemplo, podemos usar usar el siguiente: Para eliminar los elementos repetidos, también hacemos un procedimiento, borrarrepetidos. En dicho procedimiento, vamos a crear una nueva lista de modo que no tenga repeticiones:

En procedimiento inicializa nuevalista con una lista vacía. A continuación itera sobre los elementos de nuestra lista de números. Para cada elemento, comprueba si está ya incluido en nuevalista usando el bloque position in list. Si dicho bloque devuelve 0, quiere decir que no se ha encontrado, por lo que podemos añadirlo. Con los procedimientos creados, podemos usar los siguientes bloques para decir qué hacer cuando el usuario pulse algún botón: El proyecto completo, junto con los comentarios, se puede ver en Repetidos.zip.

Ordenar una lista de números El ordenar cosas es una de las tareas más comunes en todos los programas. En este caso, vamos a ver cómo ordenar una lista de números con un sencillo programa, muy similar a los dos anteriores. El diseño del programa es el siguiente: Ahora vamos a añadir un procedimiento para ordenar números. Para ordenar números, existen una infinidad de algoritmos, algunos más eficientes que otros. Dos métodos básicos son: Ordenación por selección: en este caso, buscamos en menor elemento de la lista y lo intercambiamos por que ocupa la primera posición. A continuación, buscamos el siguiente mínimo en la lista, y lo intercambiamos por el que ocupa la segunda posición. Este procedimiento lo repetimos hasta recorrer toda la lista. Ordenación por inserción: consiste en construir una nueva lista, pero procurando que permanezca ordenada cada vez que insertamos un nuevo elemento. Vamos a aplicar el método de ordenación por selección. Con este método necesitamos saber cuál es el menor elemento de una lista, por lo que vamos a hacer una función que acepte como parámetro una lista, y nos devuelva el menor elemento:

El procedimiento hace lo siguiente: El primer lugar, asigna como mínimo un valor cualquiera de la lista, usando pick random item. A continuación itera sobre todos los elementos de la lista. En cada iteración, comprueba si el valor actual es menor que el de la variable mínimo. En tal caso, asigna a mínimo el nuevo valor, y continúa iterando. Por último, devuelve el valor encontrado. Usando el procedimiento buscarminimo podemos ordenar la lista siguiente un enfoque parecido al del ejemplo de Repetidos.zip, usando otra lista auxiliar: Buscamos el menor elemento de la lista números usando la función buscarminimo. Cuando tengamos el mínimo, lo añadimos a nuevalista y lo borramos de la lista números. Repetimos los dos pasos anteriores mientras queden elementos en la lista números. En la siguiente página se muestra una captura del procedimiento creado. En el fichero Ordenar.zip se puede ver el programa completo con comentarios.

Ejemplo: Comprobar si un número es primo Vamos a hacer un programa para calcular si un número es primo. Recordemos que un número se considera primo si sólo es divisible por el mismo y la unidad. Para ver que un número es primo, lo que tenemos que hacer es recorrer todos los números menores que él (y mayores que 1) y ver si alguno de ellos es un divisor. En realidad, nos basta con comprobar hasta su raíz cuadrada. El siguiente algoritmo describe el proceso: 1. Para n = 2 hasta raíz cuadrada del número a comprobar hacer: 1.1. Si el número es divisible por n (su resto es 0) entonces el número es primo. 1.2. En caso contrario, comprobar el siguiente número. El siguiente ejemplo en App Inventor corresponde a la aplicación Primos.zip: El bloque de anterior hace las siguiente: En primer lugar, obtiene el valor del número introducido por el usuario y calcula el mayor divisor posible ( su raíz cuadrada). El bloque round realiza un redondeo del

número, para quitar los decimales. Inicialmente, suponemos que el número es primo. Si el número es mayor que tres (1,2,3 son primos), itera todos los números desde 2 al mayor divisor posible. En cada iteración, comprueba si el número actual es un divisor (el módulo vale 0). Si es un divisor, el número ya no puede ser primo, por lo que hacemos primo=false. Al final, mostramos una imagen dependiendo de si el número es primo o no. Al bloque anterior, se le puede hacer una modificación. En el caso de que el número no sea primo, el bloque for range va a seguir iterando, y por tanto tarda más tiempo en mostrar el resultado. Para solucionarlo, podemos cambiar el bloque, y usar un bucle while basado en una condición de parada: Se pueden ver el programa completo en PrimosMejorado.zip

Funciones recursivas. Ejemplo: Factorial de un número. En este ejemplo vamos a ver el concepto de función recursiva. Una función recursiva es aquella que se compone de una o más llamadas a sí misma. Como ejemplo, pensemos en el factorial de un número: n! = n * (n-1) * (n-2) *. * 1 0! = 1 Como vemos, el factorial de un número es la multiplicación de todos los números entre 1 y él mismo. Por ejemplo, 5! = 5 * 4 * 3 * 2 * 1 = 120. Podemos hacer una función que implemente el factorial usando un bucle: En el bloque anterior, iteramos desde 1 al número, multiplicando todos los números, obteniendo el factorial. Una solución, más elegante, podría ser usar una función recursiva. Si observamos que: 5! = 5*4*3*2*1 = 5*4! = 5*4*3! = 5*4*3*2! = 5*4*3*2*1 sacamos como conclusión que el factorial de un número N se puede calcular como la multiplicación de ese número multiplicado por el factorial de N-1. La función se puede implementar entonces en App Inventor de la siguiente forma:

En este caso, la función factorial empieza comprobando si numero es 1. Dicha comprobación establece un criterio de parada que la función recursiva pare deje de llamarse a sí misma. En este caso, el criterio de parada es evidente ya que el factorial de 1 es 1. En caso contrario, aplicamos la recursividad: f = número * factorial ( número -1 ) La función se puede simplificar más haciendo uso del bloque choose: En este caso la función sólo tiene un bloque en la parte donde especificamos el valor que tiene que devolver. Este bloque es un choose: dependiendo de la condición a comprobar, devuelve un valor u otro.

En la próxima lección... Hasta ahora hemos usado datos sin posibilidad de almacenarlos en nuestro móvil para disponer de ellos cuando queramos. En el próximo tema veremos como solucionar ese problema mediante las bases de datos.