Está en la página 1de 10

Fundamentos de Programación y Algoritmia

Práctica 3: Construcción de programas

1. Introducción
En esta práctica abordaremos el proceso de la construcción de un programa que comprende,
como hemos visto en teoría:

- el análisis del problema,


- el diseño del algoritmo,
- la implementación del algoritmo y
- la prueba y depuración.

En la fase de prueba y depuración utilizaremos los bancos de prueba para comprobar el correcto
funcionamiento del programa.

En caso de ser necesario depuraremos el código realizando una traza del mismo. Para ello
emplearemos funciones de Spyder que vemos lo primero en la práctica.

1
Práctica 3: Construcción de programas

2. Depurar un programa. Realizar una traza en Spyder.


Depurar un programa es analizarlo detenidamente para localizar la fuente de algún error que
no se ha podido detectar simplemente siguiendo el código.

En muchos entornos de programación, existe la opción de ejecutar línea a línea el código,


analizando qué ocurre con el valor de las variables en cada momento para determinar si lo que
está ocurriendo en el programa es realmente lo que espera el programador.

En el caso de Python, si queremos ejecutar sólo una línea nos podría bastar con marcar el código
que queremos probar y pulsar sobre el icono con el cuadro y el triángulo verde (que está al lado
del triángulo verde y sirve para ejecutar la celda actual).

En cualquier caso, se puede hacer una ejecución línea a línea del código mediante las opciones
de depuración (los iconos azules del menú).

2.1. Depuración línea a línea


Ahora, vamos a ejecutar el programa línea a línea o en bloques.

a) Para ello, pulsaremos el primero de los iconos azules


b) A partir de este momento ya podemos pulsar el resto de iconos azules para ejecutar una a
una las líneas de nuestro programa, entrando o no en las funciones definidas. Para ir línea a

línea emplearemos la siguiente opción: “Ejecutar la línea seleccionada”


c) Para salir del modo depuración hay que pulsar sobre el icono azul del cuadrado “Detener la

depuración”

2.2. Depuración con puntos de ruptura


Hay veces que los programas son largos o solo queremos fijar nuestra atención en conjuntos
concretos de líneas. Es decir, no nos interesa ir línea a línea sino lanzar la ejecución y que se
detenga en una línea concreta donde pondremos lo que se llama un “punto de ruptura”. En esos
casos podemos emplear el icono siguiente:

“Continuar con la ejecución” continua la ejecución hasta el siguiente punto de


ruptura.

Los puntos de ruptura se pueden añadir en una línea pulsando sobre la barra a la izquierda del
código, justo a la derecha del número de línea, quedando marcada la línea con un punto rojo.
En la siguiente figura se ha colocado un punto de ruptura en la línea 16. Haciendo click sobre el
punto se puede quitar.

2
Práctica 3: Construcción de programas

Figura 1. Ejemplo de punto de ruptura

2.3. Práctica de depuración


Vamos a probar esta funcionalidad con el código de “Practica3_Ejemplo1.py”:

Este programa divide dos números entre sí y a continuación invierte el resultado. Siendo el
numerador igual a 1 y el denominador igual a 4 esperaríamos que la división fuera 0.25 y el
inverso 4.

Ejecuta el código y verás que obtienes un error en el que se dice que se ha tratado de realizar
una división por 0.

Vamos a ejecutar el código paso a paso para entender cuál es el error en el código:

a) Inicia la depuración (click en )

b) Ejecuta la línea seleccionada (click en ). La ejecución debe pararse en la línea


11.
c) Visualiza el explorador de variables y comprueba que no hay ninguna variable
creada.

d) Ejecuta la línea 11 (click en ). Comprueba que se ha creado la variable


NUMERADOR y que vale 1. También puedes saber el valor de la variable poniendo
en la terminal “p(NUMERADOR)”.

e) Ejecuta la línea 12 (click en ). Comprueba que se ha creado la variable


DENOMINADOR y que vale 4.
f) Pon un punto de ruptura en la línea 18 y continúa la ejecución hasta ese punto (click

en ). Visualiza el valor de la variable “division” en el explorador de variables.


Fíjate que el valor es 0 en lugar de 0.25 porque estamos haciendo la división entera.
Así que de esta forma hemos detectado porqué luego el problema da un fallo. Para
poder invertir el resultado la división no debería ser entera. Tampoco lo debería ser
la operación de la línea 18.

g) Al finalizar detén la depuración (click en ).

3
Práctica 3: Construcción de programas

3. Construcción de un programa. Ejemplo guiado


En esta sección de la práctica se presenta un ejemplo guiado en el que se construye un programa
paso a paso cómo resolver un problema que implica la realización de un programa. El alumno
debe seguir los pasos indicados y completar sólo algún aspecto en cada una de las fases del
desarrollo.

La descripción del problema es la siguiente:

Un laboratorio de ingeniería español ha empezado a colaborar con un laboratorio


británico por lo que necesita un programa que pase las medidas de distancia tomadas
en el sistema internacional (metros) a las diferentes unidades británicas o imperiales
(pulgadas, pies, yardas, millas y leguas).

Tarea 1.0 Crea un documento de texto de análisis y diseño y llámalo “P3_Tarea1.docx”. Crea
dos secciones: la primera de “Análisis del problema”, la segunda de “Diseño del algoritmo”.
En los siguientes pasos iremos rellenando este documento a medida que realizamos el análisis
y el diseño. Crea una subsección en la sección de “Análisis del problema” que se llame
“Descripción e información” y añade la descripción anterior.

3.1. El análisis del problema


Información
Tanto los metros como las pulgadas, pies, yardas, millas o leguas son formas distintas de medir
distancias. Para poder resolver correctamente este problema tendremos que conocer las
equivalencias entre las distintas medidas.

Lo primero que haríamos sería buscar la equivalencia entre los metros y las distintas unidades
del sistema británico y las organizaríamos, por ejemplo, en forma de tabla.

Tarea 1.1 Busca las equivalencias necesarias y recógelas en una tabla como la siguiente. Luego
añade a la subsección de “Descripción e información” del documento de análisis y diseño la
información del problema anterior y la siguiente tabla rellenada.

1 metro =
pulgadas pies yardas millas leguas

4
Práctica 3: Construcción de programas

Entradas
La información que necesitamos que nos proporcione el usuario para poder resolver el problema
son los metros que desea transformar.

Entradas: La distancia en metros (distancia_en_metros)

Entre paréntesis hemos indicado el posible nombre de la variable a utilizar en el código para
guardar esta información.

Salidas
La información que espera obtener el usuario tras utilizar el programa es la transformación de
la distancia en metros a las distintas unidades de longitud del sistema anglosajón.

Salidas: La distancia en pulgadas (distancia_en_pulgadas), en pies (distancia_en_pies), en yardas


(distancia_en_yardas), en millas (distancia_en_millas) y en leguas (distancia_en_leguas).

De nuevo, entre paréntesis hemos indicado el posible nombre para las variables usadas para
guardar esta información.

Tarea 1.2 Incluye las distintas explicaciones anteriores en el documento de análisis y diseño
“P3_Tarea1.docx”, en dos subsecciones de la sección de “Análisis del problema” llamadas,
respectivamente, “Entradas” y “Salidas”.

Definición de un banco de pruebas


Como se va a trabajar tanto con medidas pequeñas como con medidas grandes (desde pulgadas
a leguas) propondremos un banco de pruebas que abarque todas estas escalas de medida. El
banco de pruebas puede ser el siguiente.

metros (m) pulgadas (in) pies (ft) yardas (yd) millas (mi) leguas
(imperiales)
0.0254
0.3048
0.9144
1609.34
4828.032

Tarea 1.3 Completa la tabla con los resultados esperados para cada una de las entradas en
metros. Para ello usa una calculadora o cualquier otro medio, pero nunca el mismo programa
que queremos realizar. Añade esta tabla en la sección “Análisis del problema” del documento
de análisis y diseño “P3_Tarea 1.docx.”, dentro de una subsección nueva llamada “Banco de
pruebas”.

5
Práctica 3: Construcción de programas

3.2. Diseño del algoritmo


El algoritmo podemos describirlo textualmente de la siguiente forma:

1. Pedir la distancia en metros al usuario.


2. Aplicar las distintas conversiones al valor de entrada para obtener cada una de las
medidas en el sistema anglosajón.
a. distancia_en_pulgadas = distancia_en_metros * …
b. distancia_en_pies = distancia_en_metros * …
c. distancia_en_yardas = distancia_en_metros * …
d. distancia_en_millas = distancia_en_metros * …
e. distancia_en_leguas = distancia_en_metros * …
3. Mostrar los resultados

Tarea 1.4 Completa los puntos suspensivos del algoritmo y añádelo al fichero
“P3_Tarea1.docx” dentro de la sección de “Diseño del algoritmo”.

3.3. Implementación del algoritmo

Tarea 1.5 Copia el siguiente código sin ninguna modificación al área de trabajo de Spyder y
guárdalo como “P3_Tarea1.py”. Sustituye los puntos suspensivos por los valores adecuados.

"""
P3_Tarea1.py

Este programa pasa una cierta medida de distancia en metros a las


distintas medidas de distancia del sistema anglosajón: Pulgadas,
pies, yardas, millas y leguas.

Version 1.1
Autor: Ricardo Ferrís Castell / David Martín-Sacristán
Fecha: 05/10/2020
"""

#Definición de los factores de conversión (constantes)


METROS2PULGADAS = ... # Factor de conversión entre metros y pulgadas
METROS2PIES = ... # Factor de conversión entre metros y pies
METROS2YARDAS = ... # Factor de conversión entre metros y yardas
METROS2MILLAS = ... # Factor de conversión entre metros y millas
METROS2LEGUAS = ... # Factor de conversión entre metros y leguas

def main():
print("Este programa pasa una cierta medida de distancia en")
print("metros a las distintas medidas de distancia del sistema")
print("anglosajón: pulgadas, pies, yardas, millas y leguas.")

distancia_en_metros = int(input("Valor en metros: ")


6
Práctica 3: Construcción de programas

distancia_en_pulgadas = distancia_en_metros * METROS2PULGADAS


distancia_en_pies = distancia_en_metros * METROS2PIES
distancia_en_yardas = distancia_en_metros * METROS2YARDAS
distancia_en_millas = distancia_en_metros / METROS2MILLAS
distancia_en_leguas = distancia_en_metros * METROS2LEGUAS

print("Los", distancia_en_metros, "metros introducidos son:")


print(distancia_en_pulgadas, "in")
print(distancia_en_pies, "ft")
print(distancia_en_yardas, "yd")
print(distancia_en_millas, "mi")
print(distancia_en_leguas, "leguas")

if __name__ == '__main__':
main ()

3.4. Prueba y depuración


Una vez escrito el programa hay que probarlo y comprobar que efectivamente no sólo funciona,
sino que funciona de forma correcta.

Al ejecutar el código nos aparece el siguiente mensaje que indica un error de traducción, en
concreto de sintaxis. Es decir, se ha construido una frase de forma incorrecta.
File ".../P3_Tarea1.py", line 27
distancia_en_pulgadas = distancia_en_metros * METROS2PULGADAS
^
SyntaxError: invalid syntax

De hecho, si nos fijamos en la zona de edición, aparece en esa línea (la línea 27) un círculo rojo
con una ‘x’ que indica que en el análisis del código ha aparecido un 'invalid syntax’). Si
analizamos la línea está bien escrita, pero en la línea anterior (la del print) falta un paréntesis.

Tarea 1.6 Corrige el error

Una vez corregido el problema de escritura, volvemos a intentar ejecutar el programa. Ahora sí
que se ejecuta y queda a la espera de que el usuario introduzca valores.

En este punto debemos probar los valores del banco de pruebas y corroborar que el programa
funciona correctamente.

Al intentar introducir el primer valor, por ejemplo, 0.23, vuelve a producirse un error, en este
caso un error de ejecución:
File ".../P3_Tarea1.py", line 25, in main
distancia_en_metros = int(input("Valor en metros: ") )
ValueError: invalid literal for int() with base 10: '0.23'

7
Práctica 3: Construcción de programas

Este mensaje nos está diciendo que al introducir la cadena ‘0.23’ e intentar pasarla a entero,
no ha podido encontrar un entero que se corresponda con ese valor.

Tarea 1.7 Efectivamente no queremos introducir enteros, sino reales, así que tendremos que
cambiar la línea para poder introducir reales. Realiza la modificación.

Una vez hecho el cambio, volvemos a ejecutar el programa.

Si vamos poniendo los distintos valores del banco de pruebas nos podremos dar cuenta de que
sistemáticamente el valor de las millas no coincide con el valor esperado. Eso significa que, muy
probablemente, la fórmula usada para las millas no es correcta. Si nos fijamos en el programa,
efectivamente no hemos utilizado la operación correcta. Hemos puesto:
millas = metros / METROS2MILLAS

cuando deberíamos haber puesto


millas = metros * METROS2MILLAS

Este tipo de errores puede que los veamos a simple vista o que para encontrarlos necesitemos
realizar una depuración línea a línea del código como hemos visto en la sección anterior.

Tarea 1.8 Corrige esta línea para que la operación que se realice sea la correcta

Tras el nuevo cambio ya vemos que los diferentes valores obtenidos son correctos y se está
cumpliendo el banco de pruebas, por lo que podremos estar bastante seguros de que nuestro
programa es correcto.

En este momento tendremos un documento de análisis y diseño “P3_Tarea1.docx” y el


programa correspondiente en “P3_Tarea1.py”.

8
Práctica 3: Construcción de programas

4. Ejercicio autónomo
Una vez establecida la metodología de trabajo con el ejemplo del problema anterior, se plantea
a continuación un nuevo problema para el cual debéis seguir las diferentes fases de la realización
de un programa.

Al final debéis tener dos ficheros: un fichero de análisis y diseño “P3_Tarea2.docx”, donde
estarán documentadas las fases de análisis (incluyendo el banco de pruebas) y diseño del
algoritmo, y un programa en Python “P3_Tarea2.py”.

El problema es el siguiente:

Gestionamos una cadena de gimnasios de fitboxing. Queremos un programa que nos


permita saber cuántos gimnasios llenos de clases podríamos abrir en una ciudad
introduciendo la posible demanda (cantidad de personas interesadas). Suponemos que
cada gimnasio está lleno con 10 clases y que cada clase tiene exactamente 12 alumnos.

Notas:

- Usa constantes en el código.


- Si tenemos un conjunto de N elementos y queremos dividirlo en subconjuntos de n
elementos, podemos realizar la división entera de N entre n para saber el número de
conjuntos posibles con exactamente n elementos.
- Primero deberías ver cuántas clases podríamos tener de 12 alumnos. Y luego, sabiendo
las clases, cuántos gimnasios de 10 clases.

4.1. El análisis del problema

Tarea 2.1 Realiza el análisis del problema. Recuerda incluir:


- La información que creas necesaria para poder entender el problema
- La información necesaria que te pueda ayudar, posteriormente, a buscar un algoritmo
que lo resuelva
- Las entradas
- Las salidas
Escribe este análisis en el fichero de análisis y diseño “P3_Tarea2.docx”.

Definición de un banco de pruebas

Tarea 2.2 Realiza un banco de pruebas con, al menos, tres casos posibles de demanda para
validar el correcto funcionamiento de tu programa. En un caso no debería haber ninguna clase
llena. En otro, alguna clase, pero ningún gimnasio lleno. Y en el último caso, debería haber
varias clases y algún gimnasio llenos.
Escribe este banco de pruebas en el fichero “P3_Tarea2.docx”.

9
Práctica 3: Construcción de programas

4.2. Diseño del algoritmo

Tarea 2.3 Escribe la secuencia de pasos que al seguirla nos proporcione el resultado deseado.
Utiliza un diagrama de flujo.

4.3. Implementación del algoritmo

Tarea 2.4 Traduce los pasos indicados en tu algoritmo a Python. Guarda este programa como
“P3_Tarea2.py”.

4.4. Prueba y depuración

Tarea 2.5 Comprueba, no sólo que el programa se ejecuta, sino que a partir de él se obtiene
los valores esperados según el banco de pruebas propuesto en la Tarea 2.2.

5. Entrega de las tareas


Una vez hayas realizado las tareas propuestas guarda los ficheros .py creados en un fichero .zip
cuyo nombre se corresponda con:

P3_Apellido1_Apellido2.zip

Donde Apellido1 será el primer apellido del primer miembro de la pareja de prácticas, y
Apellido2 será el primer apellido del segundo miembro de la pareja.

Si no tienes pareja tu fichero será:

P3_Apellido1.zip

Sube el zip generado a la tarea creada para la práctica en el Aula Virtual. Basta con que un
miembro de la pareja suba el zip a la tarea.

10

También podría gustarte