Ejercicio ejemplo de verificación de algoritmos. Análisis de eficiencia en programación. (CU00239A)

Documentos relacionados
Ejercicio ejemplo de diagramas de flujo y pseudocódigo. Verificación de algoritmos. (CU00240A)

Ejercicio final de señaleros resuelto con pseudocódigo. Organización previa de variables. Diagramas de flujo. (CU00171A)

Herramientas de programación: contadores y su control. Valor inicial y final en bucles for next, do while, etc. (CU00157A)

Ejercicios ejemplos resueltos. Verificar algoritmos o programas con tablas de variables. (CU00236A)

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

Ejercicio ejemplo resuelto: verificar el algoritmo de resolución de una ecuación de segundo grado. (CU00237A)

Ejercicios resueltos de captura y gestión de errores en programación con pseudocódigo. (CU00246A)

Instrucción SalirMientras para el control del flujo de programas. Pseudocódigo y diagramas de flujo. (CU00180A)

Ejercicios ejemplos resueltos con Desde-Siguiente (For-next) y arrays en pseudocódigo y diagramas de flujo. (CU00154A)

Ejercicio resuelto: variante para ordenar una serie de números. Pseudocódigo y diagrama de flujo. (CU00262A)

Elegir tipos de datos Qué tipo de variable usar al programar? Ejemplos resueltos (CU00206A)

PROGRAMACION EN LENGUAJE C: EJERCICIOS RESUELTOS CON ARRAYS O ARREGLOS Y CICLOS FOR Y WHILE (CU00540F)

FINALIZAR PROGRAMAS EN C CON EXIT. CAMBIAR FLUJO EN BUCLES BREAK Y CONTINUE. EJEMPLOS (CU00544F)

Al igual que las instrucciones alternativas, las instrucciones repetitivas también se pueden anidar, permitiendo las siguientes combinaciones de

Ejercicio algoritmo de manejo de lista de datos. Parte II. Diagramas de flujo. (CU00220A)

Ejercicio resuelto programa de librería II. Diagramas de flujo. (CU00223A)

Declaración de variables en pseudocódigo. Ambito global o local programación. (CU00205A)

Condicionantes y métodos en la resolución de un problema de programación II. (CU00110A)

Ubound y Lbound en Visual Basic. Conocer índice superior e inferior de arrays (arreglos) Ejemplos y ejercicios. (CU00343A)

Capítulo 13 INSTRUCCIONES DE CONTROL REPETITIVAS. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

5. ESTRUCTURAS DE REPETICIÓN

FINAL DE ARCHIVO (EOF Y FEOF) CON C. END OF FILE. LEER DATOS DE FICHERO HASTA QUE NO HAYA MÁS. EJEMPLO (CU00543F)

Módulos genéricos y paso de parámetros por valor (byval) o por referencia (byref). Ejemplos (CU00207A)

BUCLES EN LENGUAJE C (ESTRUCTURA DE REPETICIÓN) CONDICIÓN, CONTADOR. EJEMPLOS. (CU00533F)

Introducción a la Algorítmica Transparencias correspondientes a las clases impartidas por los profesores: Lourdes Miró Amarante Ignacio García Vargas

BREAK: FORZAR SALIDA BUCLES FOR, WHILE, DO EN C. LOOP. STATEMENT NOT WITHIN LOOP OR SWITCH (CU00545F)

ALGORITMOS DIGITALES II. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

Dobles: Es el caso de la instrucción if-else (punto 1.2).

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

Estructuras de Repetición

Sentencias iterativas

Problemas en programación que se resuelven recurriendo a una tabla de decisión y su algoritmia (CU00112A)

Tema 3. Estructuras de Datos

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tablas de decisión. Ejercicio ejemplo resuelto con pseudocódigo y árbol de decisión. (CU00260A)

EJERCICIOS CON FUNCIONES EN C. EJEMPLO CALCULAR SERIES NUMÉRICAS. REFACTORIZAR. (CU00552F)

Visual Basic y.net Do Loop, Exit Do, Exit For y GoTo. Ejemplos y ejercicios resueltos. (CU00337A)

Estructuras de control

ESTIMACIÓN DE TIEMPO Y COSTO DE PRODUCTOS SOFTWARE

Open, Close, Freefile. Write# y Input#. Abrir y cerrar ficheros con Visual Basic. Leer y guardar datos. Ejemplos prácticos.

Cursosindustriales. Curso de C / C++ Por Deimos_hack

Ejercicios resueltos Visual Basic y.net con arrays (arreglos), Do While, For, mod, ficheros, Ubound. Cálculo serie numérica (CU00344A)

Ejercicios resueltos con pseudocódigo y diagramas de flujo. Bucles for-next y while-do. (CU00161A)

Abstracción, código y verificación del programa ejercicio algoritmo de ordenación resuelto con Visual Basic. (CU00358A)

Sentencia1 Sentencia2 Cuerpo del bucle

Problema de tiro parabólico. Ejercicio resuelto. Planteamiento y pseudocódigo. (CU00252A)

Problemas de programación con iteración para buscar soluciones. Ejercicio resuelto. Diagramas de flujo. (CU00254A)

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Computación I (CI-2125) Clase 3. Prof. Mireya Morales Primera

Tema 3. Estructuras de control

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

Ejemplos ejercicios resueltos Visual Basic. Arrays estáticos, uso de constantes vbyes, vbno y MsgBox. (CU00334A-1)

Tipos de errores en Visual Basic: de compilación, de ejecución, de sintaxis. Depuración. (CU00352A)

Parte I: Estrategias para resolver un problema de programación. (CU00117A)

Estructuras repetitivas o de ciclo

Hasta ahora sólo hemos visto algoritmos con tratamiento secuencial

Actividad Algoritmos, Estructura y Programación I. FOR, DO-WHILE

Estructuras de Control

EJERCICIOS DE PROGRAMACIÓN EN C. PASO DE PSEUDOCÓDIGO A CÓDIGO. BUCLES, CONDICIONES (CU00539F)

Programación Estructurada

Parte I: Ejemplos de problemas que se resuelven usando una tabla de decisión en programación (CU00113A)

INSTRUCCIÓN GOTO EN C. ETIQUETAS O LABELS. POR QUÉ NO DEBE USARSE (HARMFUL). EJEMPLOS (CU00546F)

Pruebas (test) de programas. Verificación de algoritmos en Visual Basic. Cómo recargar formularios VB y.net (CU00348A)

INSTITUCIÓN EDUCATIVA SAN VICENTE TALLER 3 DE DIAGRAMAS DE FLUJO ALGORITMOS CICLICOS CICLO: MIENTRAS QUE GRADOS DÉCIMOS

COMPUTACIÓN I TEMA 5. Subprogramas o funciones. Alcance de variables. Pasaje de parámetros por valor. Prof. Mireya Morales

Universidad Autónoma del Estado de México Facultad de Medicina

Introducción al Análisis Sintáctico

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

BOLETÍN 5: Algoritmos II

EL MÉTODO EQUALS EN JAVA. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. COMPARAR OBJETOS. EJEMPLOS. (CU00662B)

TEMA 4: ALGORITMOS Y PROGRAMAS

Instrucciones Si... Entonces y Si... Entonces SiNo (if then else) en pseudocódigo (CU00142A)

Manejo de módulos y recursión en programación. Pseudocódigo. (CU00204A)

PYTHON. Programación estructurada

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

Tema: Programación Dinámica.

Tema 2. Algoritmos y Programas. Técnicas Informáticas Físicas

Trabajando con Listas

CONDICIONALES SWITCH CASE DEFAULT BREAK EN C. ELEGIR ENTRE VARIAS OPCIONES. EJEMPLO. (CU00532F)

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño fijo

Uso de centinelas para la toma de decisiones. Esquemas y diagramas de flujo. Ejemplos resueltos. (CU00167A)

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

RESOLUCIÓN INTERACTIVA DEL SIMPLEX

PSEUDOCÓDIGO. En este documento se recopilan los elementos conceptuales esenciales acerca PSEUDOCÓDIGO en la programación.

FUNCIÓN COUNT. RECORRIDO DE ARRAYS UNIDIMENSIONALES Y MULTIDIMENSIONALES EN PHP CON FOR Y FOR-EACH. EJEMPLOS. (CU00826B)

Ejercicios resueltos con acumuladores. Pseudocódigo y diagramas de flujo. Bucle desdesiguiente (for-next). (CU00160A)

Tema 2. Algoritmos y Programas. Informática Grado en Física

Tema: Programación Dinámica.

FUNCIONES JAVASCRIPT. CONCEPTO. PARÁMETROS O ARGUMENTOS Y TIPOS. PASO POR VALOR. RETURN. EJEMPLOS. (CU01122E)

FUNCIONES CON Y SIN PARÁMETROS EN C. INVOCAR. SIGNATURAS. ARGUMENTOS. TIPO DE RETORNO (CU00549F)

Tema 2. Algoritmos y programas. Informática Grado en Física Universitat de València.

Ahora responde a las siguientes cuestiones: Supongamos que el usuario introduce 3 en A, 4 en B y 5 en C

Etapas en la vida del software

Ejercicios resueltos ejemplo de leer datos desde ficheros con Visual Basic, variables, bucles For Next y condicionales If.

Ejercicio de algoritmia resuelto con Visual Basic: ordenar series de series de números. (CU00356A)

Estructura repetitiva while

Transcripción:

aprenderaprogramar.com Ejercicio ejemplo de verificación de algoritmos. Análisis de eficiencia en programación. (CU00239A) Sección: Cursos Categoría: Curso Bases de la programación Nivel II Fecha revisión: 2024 Autor: Mario R. Rancel Resumen: Entrega nº 38 del Curso Bases de la programación Nivel II 24

EJERCICIO Nos hemos planteado el siguiente objetivo: Queremos leer datos desde un archivo que contiene un array Dato(1), Dato(2),..., Dato(n) en paquetes de 5 datos. Contaremos el número de datos cuyo valor sea inferior a 100 (a los que llamaremos datos válidos) de modo que si tras extraer un paquete el número de datos válidos es igual o superior a 5 el algoritmo finaliza. Determinar cuál de los dos algoritmos que se plantean cumple el objetivo con eficiencia. Algoritmo 1: 1. i = 0 : A = 1 : B = 5 2. Mientras i <= 5 Hacer 3. Desde j = A hasta B Hacer 4. Leer Dato(j) 5. Si Dato(j) < 100 Entonces 6. i = i + 1 7. FinSi 8. Siguiente j 9. A = B : B = B + 5 10. Repetir Algoritmo 2: 1. i = 0 : A = 1 : B = 5 2. Mientras i <= 5 Hacer 3. Desde j = A hasta B 1 Hacer 4. Leer Dato(j) 5. Si Dato(j) < 100 Entonces 6. i = i + 1 7. FinSi 8. Siguiente j 9. A = B : B = B + 5 10. Repetir SOLUCIÓN El ejercicio tiene un poco de enjundia, ya que el enunciado contiene una pequeña trampa. Pero vayamos al asunto. Supuestamente uno de los algoritmos es incorrecto. En teoría deben leer paquetes de 5 datos hasta que el número de datos válidos es igual o superior a 5. Se nos ocurren dos grupos de casos: a) Los cinco primeros datos son válidos. b) Los cinco primeros datos no son válidos.

En el caso a) sólo se leería un paquete de datos (5 datos), ya que una vez realizado el proceso se cumple la condición de salida. En el caso b) habrá que extraer, al menos, dos paquetes de datos (10 datos). En primer lugar comprobaremos si los dos algoritmos resuelven satisfactoriamente el caso a), o sólo uno de ellos. Algoritmo 1. Dato(1) < 100, Dato(2) <100,..., Dato(n) < 100 Estado i A B j Número de lecturas Inicio Línea 1 0 1 5 0 ~ Evaluación bucle exterior Línea 2 0 ~ ~ ~ ~ [Entra bucle exterior] Líneas 3 4 5 6 7 1 ~ ~ 1 1 [Entra bucle j] Líneas 8 3 4 5 6 7 2 ~ ~ 2 2 Líneas 8 3 4 5 6 7 3 ~ ~ 3 3 Líneas 8 3 4 5 6 7 4 ~ ~ 4 4 Líneas 8 3 4 5 6 7 5 ~ ~ 5 5 Línea 8 3 ~ ~ 5 6 ~ [Sale bucle j] Línea 9 10 2 5 5 10 ~ ~ Líneas 3 4 5 6 7 6 ~ ~ 5 6 [Entra bucle j] [Repite lectura de dato 5] Líneas 8 3 4 5 6 7 7 ~ ~ 6 7 [Lectura de dato 6] ALGORITMO SIGUE PERO NO CUMPLE OBJETIVOS Algoritmo 2. Dato(1) < 100, Dato(2) <100,..., Dato(n) < 100 Estado i A B j B 1 Número de lecturas Inicio Línea 1 0 1 5 0 4 ~ Evaluación bucle exterior Línea 2 0 ~ ~ ~ ~ ~ [Entra bucle exterior] Líneas 3 4 5 6 7 1 ~ ~ 1 ~ 1 [Entra bucle j] Líneas 8 3 4 5 6 7 2 ~ ~ 2 ~ 2 Líneas 8 3 4 5 6 7 3 ~ ~ 3 ~ 3 Líneas 8 3 4 5 6 7 4 ~ ~ 4 4 4 Línea 8 3 ~ ~ ~ 5 4 ~ [Sale bucle j]

Línea 9 10 2 4 5 10 ~ 9 ~ Líneas 3 4 5 6 7 5 ~ ~ 5 ~ 5 Líneas 8 3 4 5 6 7 6 ~ ~ 6 ~ 6 ALGORITMO SIGUE PERO NO CUMPLE OBJETIVOS Aquí estaba la enjundia y la trampa del enunciado: ninguno de los dos algoritmos cumple el objetivo. El algoritmo 1 lee los 5 datos con lo cual parece que maneja bien los paquetes de datos. Sin embargo, aunque los cinco datos sean válidos no se para la extracción, incumpliendo el objetivo. El algoritmo 2 es similar pero en la línea 2 el bucle Desde tiene límite superior B 1 en vez de B. Parece querer decir como el otro algoritmo se pasa, rebajo el límite del bucle para no pasarme. Pensamiento un tanto errático que lleva a que en vez de un paquete de 5 datos se extraigan 4 datos entre otras cosas..., incumpliendo también el objetivo. Vamos a ver un algoritmo que funciona correctamente: Algoritmo 3: 1. i = 0 : A = 1 : B = 6 2. Mientras i < 5 Hacer 3. Desde j = A hasta B 1 Hacer 4. Leer Dato(j) 5. Si Dato(j) < 100 Entonces 6. i = i + 1 7. FinSi 8. Siguiente j 9. A = B : B = B + 5 10. Repetir Los cambios introducidos han sido: Se define B = 6 en vez de B = 5. La condición i <= 5 cambia a i < 5. El límite superior del bucle j pasa de ser B a B 1. Comprobemos que para un paquete inicial de 5 datos válidos el bucle funciona correctamente: Algoritmo 3. Dato(1) < 100, Dato(2) <100,..., Dato(n) < 100 Estado i A B j B 1 Número de lecturas Inicio Línea 1 0 1 6 0 5 ~ Evaluación bucle exterior Línea 2 0 ~ ~ ~ ~ ~ [Entra bucle exterior] Líneas 3 4 5 6 7 1 ~ ~ 1 5 1 [Entra bucle j]

Líneas 8 3 4 5 6 7 2 ~ ~ 2 ~ 2 Líneas 8 3 4 5 6 7 3 ~ ~ 3 ~ 3 Líneas 8 3 4 5 6 7 4 ~ ~ 4 ~ 4 Líneas 8 3 4 5 6 7 5 ~ ~ 5 5 5 Línea 8 3 ~ ~ ~ 6 5 ~ [Sale bucle j] Línea 9 10 2 5 6 11 ~ ~ ~ [Sale bucle exterior] En esta ocasión el funcionamiento es correcto, pues al leerse 5 datos válidos se sale del bucle. Téngase en cuenta que si se hubiera definido B = 5 y el bucle Desde de la línea 3 con límite superior B las lecturas serían (suponiendo datos no válidos): 1, 2, 3, 4, 5 (5 datos) 5, 6, 7, 8, 9, 10 (6 datos) 10, 11, 12, 13, 14, 15 (6 datos) Etc. Por qué 6 datos? Porque en el segundo bucle repetimos como punto de partida el punto de llegada del anterior, cosa que evitamos en el algoritmo 3. Pequeños detalles pueden trastocarnos el funcionamiento de grandes programas. A lo largo del curso hemos trabajado con algoritmos similares a éste y eso no significa que podamos resolver este tipo de algoritmos rápidamente. A pesar de su aparente sencillez requieren hilar fino. En este caso estaríamos, como ya nos ha pasado en más de una ocasión (ver ejercicio relativo a algoritmo para el manejo de una lista de datos), ante algo que intuimos pero cuyo método paso a paso desconocemos. Como ya expusimos, entra en juego la experiencia del programador y el uso de las técnicas expuestas en Conocer el problema. Estudiando el funcionamiento del algoritmo 3 llegamos a la siguiente tabla: Ratio de datos válidos Datos leídos Datos válidos leídos Pasadas por el bucle exterior Constante 5 / 5 5 5 1 Constante 4 / 5 10 8 2 Constante 3 / 5 10 6 2 Constante 2 / 5 15 6 3 Constante 1 / 5 25 5 5

Constante 0 / 5 0 Indefinido Indefinido Indefinido Indefinido En esta tabla nos ha de llamar la atención que para una posibilidad de datos de entrada aparezca pasadas por el bucle exterior =. El famoso bucle infinito. Convendría preverlo y evitar que se pueda producir. Para ello bastaría introducir en el bucle una cláusula de seguridad tipo: Si j > 2000 Entonces Finalizar FinSi ó Si j > 2000 Entonces SalirMientras FinSi Este u otro mecanismo deben protegernos también del número de repeticiones indefinido. Si la cantidad de datos válidos es muy baja en relación al total, la salida del bucle se puede demorar. Podría darse un mensaje de advertencia al usuario para advertirle de que sólo se han encontrado x datos válidos tras tantas miles de lecturas y pedir si se quiere continuar o desistir. Como consideración final, a lo largo de los ejercicios anteriores hemos visto distintos enfoques de la verificación de algoritmos pero siempre usando tablas de variables por resultar estas bastante explicativas y claras. Sin embargo un programador no usa una sola técnica de verificación: las ha de conocer todas y recurrir a la más oportuna para una circunstancia dada. Muchas de las verificaciones que hemos visto podrían haberse resuelto con una verificación mental o por seguimiento escrito. De hecho, la mayoría de bucles y procesos simples los acabaremos resolviendo así por ser lo más rápido. En algún caso, no hemos realizado un comprobación por requerir un número de iteraciones muy elevado, lo que un ordenador o dispositivo de programación nos puede resolver fácilmente. Próxima entrega: CU00240A Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente: http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=36&itemid=60