Está en la página 1de 26

Fundamentos de Programación

Tema 1: Problemas, Algoritmos y Programas

Grado en Ciencia de Datos


Objetivos

 Definir la algorítmica como el proceso de resolución de problemas y


describir algoritmos para la resolución de problemas sencillos.
 Definir la programación como el proceso de mecanización de los
algoritmos para que puedan ser ejecutados por un computador.
 Empezar a utilizar el lenguaje Python para describir los algoritmos:
edición e interpretación.
 Describir los errores de compilación y ejecución de los programas
Python y la importancia de su documentación y del uso de un estilo de
programación adecuado.

2
Índice

1. Resolución de problemas: Algoritmos y programas


 ¿Qué es la Programación?
 Fases y herramientas
2. Diseño de algoritmos
 Características de los algoritmos
 Ejemplos
3. Desarrollo de programas en Python
 Estructura de un programa
 Edición e Interpretación de un programa
 Errores de Compilación y Ejecución
 Estilo y Documentación de programas

3
¿Qué es la Programación?

 La Programación es el proceso de resolución de problemas utilizando


un ordenador.
 La Programación es la automatización de los algoritmos que resuelven
los problemas.
 Un algoritmo es la descripción de las acciones que se han de realizar
para obtener la solución al problema planteado en un tiempo finito.
 Un ordenador, o procesador, es una entidad capaz de ejecutar un
conjunto de instrucciones dado.
 Cada procesador dispone de una serie de aplicaciones que le permiten
comprender las distintas instrucciones definidas por diferentes lenguajes de
programación.
 El programador necesita conocer el repertorio de instrucciones que es
capaz de ejecutar el procesador.
4
Fases y herramientas para la Programación

 Fase 1: Comprender el problema a resolver y describir una o más


formas de resolverlo, eligiendo la solución más eficiente en términos
de eficiencia de recursos a utilizar.

 Fase 2: Implementar la solución al problema utilizando el lenguaje de


programación elegido de forma adecuada.

5
Fase 1: Diseño de algoritmos

 Encontrar la mejor estrategia para resolver el problema planteado.

 La herramienta fundamental es la abstracción:


1. Descomponer el problema en subproblemas más pequeños, más
sencillos de resolver.
2. Definir las relaciones entre los subproblemas.
3. Identificar los subproblemas para los que ya se conoce un algoritmo que
los resuelve.
4. Para el resto de subproblemas proceder volviendo al paso 1.
 El resultado es la descripción de los pasos a seguir para resolver cada
uno de los subproblemas y el problema original.

6
Fase 1: Diseño de algoritmos

 Hay (algunos) problemas para los que no se conocen algoritmos


prácticos o ningún algoritmo que los resuelva.
 Hay (muchos) problemas que admiten diversas soluciones algorítmicas,
algunas más adecuadas que otras para ser ejecutadas en un ordenador.
 La ejecución de un algoritmo obtiene la solución correcta en un tiempo
finito, sin implicar ninguna decisión subjetiva.

7
Fase 2: Automatización

 Encontrar la automatización más adecuada del proceso de abstracción.

 La herramienta principal es el ordenador (computador):


 Software + hardware.
 Amplifica la potencia de nuestras herramientas mentales.

8
Fase 2: Automatización

 Para facilitar el proceso de automatización:


 Se suelen utilizar Lenguajes de programación de Alto Nivel (LAN): permiten
reproducir las estrategias abstractas que describen los algoritmos.
 Se usa un Gestor (SO) que se encarga de planificar y llevar a cabo los
procesos necesarios para que el programa escrito en LAN pueda ser
ejecutado en Lenguaje Máquina.
 Se dispone de dispositivos de E/S y las correspondientes aplicaciones que
los gestionan, que permiten introducir datos y programas en el ordenador y
ver los resultados de su ejecución.

9
Diseño de algoritmos

 Los problemas han de definirse de forma general y precisa, evitando


ambigüedades.
 Por ejemplo, el enunciado Determinar la raíz cuadrada positiva de un
número n no es bastante preciso, hay que especificar sobre qué números se
trabaja:
 Determinar la raíz cuadrada de un número n entero no negativo cualquiera.
 Definido un problema P general con precisión, un algoritmo A que
resuelve P es un conjunto de reglas (o instrucciones) que definen cómo
llevar a cabo la resolución de P de forma exacta y efectiva en un
tiempo finito.

10
Características de los algoritmos

 Finito: el algoritmo ha de acabar necesariamente tras un número finito


de pasos.
 Preciso: debe definirse de forma exacta y precisa, sin ambigüedades.

 Efectivo: sus reglas o instrucciones se pueden ejecutar.

 General: debe resolver toda una clase de problemas y no un problema


aislado particular.
 Entradas y salidas: puede tener varias entradas o ninguna, pero al
menos debe tener una salida, el resultado que se desea obtener.

The Art of Computer Programming.


Donald E. Knuth, 1968.
El hombre que habla a las máquinas.

11
Ejemplos de problemas y algoritmos: IMC

 Cálculo del Índice de Masa Corporal (IMC) de una persona: dado el


peso en kilogramos y la altura en metros, se calcula el IMC como:
𝑖𝑖𝑖𝑖𝑖𝑖 = 𝑝𝑝/𝑎𝑎2
 Por ejemplo, el IMC de una persona de 76 kg y 1.83 m de altura es
22.69 kg/m2.

Pasos para la resolución del problema (algoritmo):

1. Obtener el peso (en kg)


2. Obtener la altura (en m)
3. Calcular la expresión aritmética que define el imc
4. Mostrar el valor obtenido

12
Ejemplos de problemas y algoritmos: IMC

 Algoritmo para el cálculo del IMC diseñado con PSeInt:

 Cuestiones:
1. ¿Cuáles son los datos del algoritmo del
cálculo del IMC?
2. ¿Cuál es el resultado del cálculo que
realiza el algoritmo?
3. ¿Qué utiliza el algoritmo para
representar el peso, la altura y el imc?
4. ¿Qué valores se deben introducir por el
teclado?
5. ¿Qué valor se muestra por pantalla?
6. ¿Deben cumplir los datos alguna
restricción para que el resultado sea
correcto?

13
Ejemplos de problemas y algoritmos:
mostrar el mayor de dos números
 El flujo del programa puede bifurcarse en ciertos puntos dependiendo
de que se cumplan o no ciertas condiciones sobre los datos:

14
Ejemplos de problemas y algoritmos:
tabla de multiplicar de un número
 El flujo del programa puede tener bucles, permitiendo así que ciertas
instrucciones se repitan mientras se cumpla una condición:

15
Ejercicio 1: Adivina un número del 1 al 100

 Pensemos el siguiente juego entre dos amigos Ana y Luis; Ana piensa
un número en un intervalo acordado entre 1 y 100 y Luis lo tiene que
adivinar. Luis dice un número y Ana le responde diciéndole si ha
acertado o si el número que ella había pensado es mayor o menor que
el que dice Luis.

Pasos para la resolución del problema (algoritmo):

1. Generar el número secreto: un número aleatorio entre 1 y 100.


2. Repetir los siguientes pasos hasta que se adivine el número
secreto:
2.1. Introducir el número elegido por el usuario
2.2. Compararlo con el número secreto; si este es mayor mostrar la pista
El número secreto es mayor, si es menor escribir El número secreto
es menor.

16
Ejercicio 2: Multiplicación rusa

 El método de multiplicación rusa consiste en multiplicar sucesivamente


por 2 el multiplicando y dividir por 2 el multiplicador hasta que el
multiplicador tome el valor 1. Luego, se suman todos los multiplicandos
correspondientes a los multiplicadores impares. Dicha suma es el
producto de los dos números. La siguiente tabla muestra como
multiplicar 37 por 12, cuyo resultado final es 12 + 48 + 384 = 444

Multiplicador Multiplicando ¿Multiplicador impar? Producto


37 12 Sí 0 + 12 = 12
18 24 No
9 48 Sí 12 + 48 = 60
4 96 No
2 192 No
1 384 Sí 60 + 384 = 444

17
Características de los Algoritmos

 Precondición: condiciones que deben cumplir los datos para que el


resultado sea correcto. Por ejemplo, el peso y la altura, para el cálculo
del imc deben ser valores positivos expresados en las unidades
requeridas.
 Generalización: resuelven una generalización del problema. Por
ejemplo, calculan el imc de cualquier persona, dados su peso y altura
(peso y altura son los datos, imc es el resultado).
 Estructura: secuencia de acciones o instrucciones (leer, asignar, si,
repetir, etc.) Es importante el orden y la complejidad del algoritmo, que
dependerá del número de instrucciones que se realicen.

18
Estructura de un programa Python

 Un programa en Python es una secuencia de instrucciones escritas en


ese lenguaje que permiten la resolución de un problema.
 El lenguaje proporciona un gran repertorio de tipos de datos y librerías
que el usuario puede utilizar en su código.
 Los datos y resultados que define el problema se representaran
mediante los tipos predefinidos en el lenguaje o los tipos que define el
propio programador.
 El lenguaje también proporciona estructuras de control para expresar
las acciones requeridas sobre los datos.
 Python permite la escritura de programas transportables
(independientes de la máquina), fáciles de leer y fáciles de mantener.
 Hay entornos de desarrollo que facilitan la programación en Python.

19
Edición e interpretación de un programa Python

 El código de un programa en Python se escribe, utilizando un editor, en


un fichero que debe tener la extensión .py
 Este código debe ser transformado en código máquina para poder ser
ejecutado.
 Los programas que se encargan de realizar este proceso se llaman
Compiladores o Intérpretes.
 Python es un lenguaje interpretado.
 Así, la traducción a lenguaje máquina de las instrucciones escritas en
Python se realiza una a una en tiempo de ejecución.

20
Edición e interpretación de un programa Python

 Editar el programa HolaMundo.py con la única instrucción:

print('Hola Mundo!!!')
 Ejecutar el código utilizando el terminal de comandos del sistema
operativo:
>>> python HolaMundo.py
 También se puede llamar al intérprete Python e introducir la línea de
código:
>>> python
>>> print('Hola Mundo!!!')
 Pulsad Ctrl + Z o escribid quit() para salir del intérprete.

21
Edición e interpretación de un programa Python:
Anaconda
 Anaconda es una distribución gratuita de Python que contiene el
lenguaje Python y las librerías científicas de Python que más se usan.
En esta asignatura vamos a usar dos de las herramientas que incluye:

Spyder: entorno de programación para las


prácticas.

Jupyter Notebook: entorno interactivo de


programación para la resolución de problemas.

22
Spyder

23
Jupyter

24
Errores de programación

 Pueden aparecer errores que imposibiliten la ejecución de un


programa o que alteren su comportamiento:
 Errores de interpretación: suceden si el programa no sigue la sintaxis del
lenguaje.
• Se producen al intentar ejecutar una instrucción.
• Suelen ser sencillos de corregir gracias a la ayuda que da el intérprete y al uso de
la documentación del lenguaje.
 Errores de ejecución: provocan un malfuncionamiento del programa:
• Errores en tiempo de ejecución: provocan la detención de la ejecución.
• Errores lógicos: provocan que los resultados obtenidos no sean correctos
aunque pueda parecer que el programa funciona correctamente.
• Los errores de ejecución pueden ser difíciles de detectar y resolver.

25
Documentación del código

 Para facilitar el mantenimiento y la reutilización del código, es


necesario:
 Seguir las convenciones de estilo de programación en Python. Los detalles
se pueden consultar en PEP 8 – Style Guide for Python Code.
 Documentar el código siguiendo las directrices que se proponen en PEP 257
– Docstring Conventions.
"""
Calcula el IMC de una persona de la que se conoce
su peso en Kg y su altura en metros.
@author: Profesores de FPR
"""
peso = int(input('Introduce el peso (en Kg): '))
altura = float(input('Introduce la altura (en m): '))
imc = peso / (altura ** 2)
print('El imc es : ', imc)
26

También podría gustarte