




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Apuntes informática examen final teoría 2025/2026
Tipo: Apuntes
1 / 192
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































Última actualización del documento: 2019.08.
Este documento está basado en parte en material previo de los profesores de Informática de la EEBE, pertenecientes a los departamentos de Ciencias de la Computación y de Ingeniería de Sistemas, Automática e Informática Industrial de la UPC.
programación explicada, y no tanto de aprender todo lo que Python puede ofrecer (por el momento).
Python es un lenguaje de programación potente pero fácil de usar, desarrollado por el holandés Guido van Rossum, quien publicó la primera versión en 1991.
El objetivo de cualquier lenguaje de programación es hacer de puente entre el cerebro del programador y el computador, y Python es un lenguaje de alto nivel que simplifica mucho la sintaxis usando un lenguaje más cercano al natural. Python ayuda en el proceso de aprendizaje por su claridad al escribir las estructuras algorítmicas, dispone de una gran cantidad de módulos que nos permiten realizar operaciones complicadas sin tener que empezar desde cero, y nos permite aprender a programar sin perdernos en la sintaxis del lenguaje. Además, soporta estructuras complejas de datos y programación orientada a objetos (esta última queda fuera del temario de la asignatura), por lo que todo lo aprendido es fácilmente aplicable a otros lenguajes como C++ y Java.
Durante el curso, utilizaremos un vocabulario específico que es posible que hayamos oído antes, pero que conviene tener claro desde el principio.
Se entiende por algoritmo la sucesión ordenada de acciones elementales que deben realizarse para obtener la solución correcta de un problema en un tiempo finito a partir de unos datos concretos. Por lo tanto, un algoritmo es un método general para la solución de un problema o la realización de una tarea. Quizá uno de los algoritmos más conocidos es el algoritmo de Euclides (para calcular el máximo común divisor de dos números), pero de la misma manera que los programas informáticos, podemos encontrar algoritmos en cualquier parte: en el teléfono que codifica los datos que enviamos a través de las redes móviles, el algoritmo de búsqueda de Google, el que encripta los datos de nuestros mensajes (WhatsApp, Telegram, Viber), o el que permite comprimir una canción en un fichero MP3 de sólo unos cuantos megabytes. Y en el fondo, una receta de cocina también es un algoritmo.
Codificar un algoritmo es escribirlo en un lenguaje que el computador pueda entender y ejecutar, es decir, realizar un programa. Por extensión, los ficheros que contienen las instrucciones que debe ejecutar el computador se llaman código o código fuente.
Un programa es una secuencia de instrucciones que especifican cómo realizar una operación determinada, ya sea matemática (encontrar las raíces de un polinomio) o de otro tipo (por ejemplo reemplazar texto en un documento o retocar una imagen para mejorar el contraste). Cada lenguaje de programación tiene sus peculiaridades, pero existe una serie de elementos que suele ser común a cualquier programa:
● Datos de entrada. Los datos con los que trabaja el programa, introducidos a través de teclado, leídos de un fichero, o de cualquier otro dispositivo.
9
● Datos de salida. Se muestran en pantalla, se guarda en un fichero o se envían a otro dispositivo. ● Operaciones. Sean matemáticas o de otro tipo, se realizan sobre los datos de entrada para obtener el resultado deseado. ● Condiciones. En ocasiones, hay que asegurarse de que se cumplen ciertas condiciones para ejecutar la secuencia de operaciones correcta. ● Repetición. Algunas de las operaciones puede que deban ejecutarse varias veces, habitualmente con alguna pequeña variación.
Cualquier programa que hayamos usado, sin importar lo complicado que sea, se basa en la combinación de estos elementos. Por lo tanto, podemos decir que programar es el proceso consistente en dividir una tarea grande y compleja en pequeños bloques suficientemente simples para poderlos realizar mediante la combinación de instrucciones como las de la lista.
Para escribir la secuencia de instrucciones de un programa se requiere de un lenguaje de programación. El lenguaje básico que entiende un computador (y más concretamente su unidad central de proceso o microprocesador, habitualmente llamada CPU por las siglas en inglés de central processing unit ) es el lenguaje máquina (también llamado lenguaje ensamblador). Se trata de un conjunto de instrucciones básicas que se traducen a código binario que puede ser directamente ejecutado por la CPU. Los lenguajes máquina o ensamblador se conocen también como lenguajes de bajo nivel (se encuentran al nivel de la CPU), en contraposición a los lenguajes de alto nivel que son más cercanos al usuario.
Los lenguajes de alto nivel tienen, como cualquier otro lenguaje, su vocabulario, sintaxis y semántica: ● El vocabulario está formado por todos los elementos propios del lenguaje, es decir, los símbolos de las operaciones aritméticas, lógicas, y relacionales, así como las palabras propias que permiten definir las estructuras algorítmicas. ● La sintaxis define la forma como se combinan estos elementos del lenguaje. Por ejemplo, x = 3 + 2 es una sintaxis correcta, pero x = 3 2 + no (aunque podría ser al revés). ● Y la semántica hace referencia a que las expresiones sintácticamente correctas tengan un resultado correcto. Por ejemplo x = 7/5 dará un resultado correcto, mientras que x = 7/’hola’ arrojará un error. Una semántica correcta también incluye que el programa no se quede colgado en un bucle infinito y que no de errores lógicos o de ejecución (por ejemplo al dividir un número por cero)
Una de las ventajas de los lenguajes de alto nivel es que sus programas pueden ejecutarse en máquinas diferentes normalmente sin modificaciones (o con muy pocas). Al ejecutar nuestro código ( run en inglés) se traducen las instrucciones que hemos programado a lenguaje máquina para que la CPU pueda interpretarlas y llevarlas a cabo. Esta traducción puede hacerse de dos formas: ● A través de un compilador , que lee el código fuente y lo traduce completamente al lenguaje de la máquina, creando un programa ejecutable (por ejemplo, un archivo .exe típico del sistema operativo Windows) que se puede usar tantas veces como se
10
En el sistema decimal la base es 10, y por lo tanto tenemos 10 símbolos para representar cualquier número: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.
Así, por ejemplo, el número 2016 tiene como dígito más significativo el 2, y el menos significativo el 6. Su descomposición en base 10 es la siguiente:
2016| 10 = 21000 + 0100 + 110 + 6
O lo que es lo mismo
2016| 10 = 210^3 + 010^2 + 110^1 + 610^0
De manera general, cualquier número N puede representarse mediante un polinomio de potencias de una base b cualquiera:
N|b = anbn^ + an-1bn-1^ + ... + a 1 *b^1 + a 0 *b^0
donde ak es un número perteneciente al conjunto [0, b-1].
De una manera análoga podemos entender como funciona el sistema de numeración binario, es decir, la codificación en base 2 usando únicamente 2 símbolos : {0, 1}. Por ejemplo, el número 100101 en base 2 equivale al 37 en base 10:
100101| 2 = 12^5 + 02^4 + 02^3 + 12^2 + 02^1 + 12^0 = 132 + 14 + 1*1 = 37| 10
Podemos hacer la conversión de base 10 a base 2 mediante divisiones sucesivas por 2 y anotando los restos (en orden inverso):
A la vista de esta representación, podemos también ser conscientes de las limitaciones de esta representación. De la misma manera que con 4 cifras decimales únicamente podemos representar 10^4 = 10000 números (del 0 al 9999), con 4 cifras binarias podemos representar solamente 2^4 = 16 números (del 0 al 15, es decir de 0 a 2^4 -1, o en binario, del 0000 al 1111). Es interesante entender esta representación binaria para entender algunas de las limitaciones que tienen los computadores y los lenguajes de programación a la hora de almacenar datos y realizar operaciones con ellos.
12
En Python, las variables se definen de forma dinámica, lo que significa que no se tiene que especificar cuál es su tipo de antemano y puede tomar distintos valores en otro momento (por eso se llaman variables), incluso de un tipo diferente al que tenía previamente.
Cada variable tiene tres componentes: ● un identificador , es decir, el nombre que le queremos asignar al dato. ● un valor , el dato o datos que contiene ● y un tipo , que hace referencia al tipo de datos que contiene, es decir, si es un número entero, un carácter, o un valor lógico (verdadero o falso).
Una vez iniciado el intérprete y nos muestre el prompt , declarar una variable es muy sencillo. A continuación podemos ver un ejemplo en el que declaramos la variable con identificador edad y le asignamos el valor 18 mediante el operador de asignación =.
edad = 18 edad 18
Para verificar que la variable edad contiene el valor correcto podemos ejecutar directamente su identificador y el intérprete nos mostrará su valor. Para saber el tipo de datos de la variable edad podemos usar la función type():
type(edad) <class 'int'>
En este caso, el resultado de la función type() nos indica que edad es de tipo int, es decir, un número entero.
Cuando hemos introducido la idea de variable hemos dicho que intuitivamente podemos pensar que una variable es un espacio en la memoria del computador en el que se almacena un dato (y que tiene asociado un identificador, un valor, y es de un determinado tipo). En algunos lenguajes esto es realmente lo que sucede (por ejemplo en C), y es una manera natural de entender cómo se crean y almacenan datos en la memoria.
Lo que sucede en Python es ligeramente diferente ya que las variables no son un lugar en la memoria del computador donde almacenamos un valor, sino que las variables se refieren, a un lugar de memoria que contiene ese valor. Al ejecutar una sentencia de asignación (por ejemplo edad = 99 ) se crea primero un objeto con el valor 99 de tipo int y se almacena en la memoria, y luego la variable se refiere a ese objeto.
13
mayoría de lenguajes, Python se distingue entre mayúsculas y minúsculas, y por ejemplo Edad y edad serían dos variables diferentes.
Todos los lenguajes de programación tienen una serie de palabras clave reservadas (keywords, en inglés) para operaciones e instrucciones que no pueden usarse como identificadores. En Python podemos conocer la lista de palabras reservadas usando la función de ayuda help():
if = 3 SyntaxError: invalid syntax help("keywords") Here is a list of the Python keywords. Enter any keyword to get more help. False def if raise None del import return True elif in try and else is while as except lambda with assert finally nonlocal yield break for not class from or continue global pass
De la misma manera, no debemos usar los nombres de funciones internas ( built-in functions ), ya que al identificar una variable con uno de esos nombres, la función correspondiente no podrá ser usada posteriormente:
print = 3 print("Hola mundo!") Traceback (most recent call last): File "<pyshell#16>", line 1, in
print("Hola mundo!") TypeError: 'int' object is not callable
Ya sabemos que todas las variables tienen que ser de un tipo determinado. Los tipos de datos pueden ser simples o compuestos, y los más habituales en los principales lenguajes de programación son:
Simples Compuestos
Entero (int) Tabla (array, string) 2
Real (float) Estructura (record, struct) 2
Booleano (bool) Tupla, String (estáticos, inmutables) 3
Carácter (char) 1 Lista, Diccionario, Set (dinámicos, mutables) 3
15
(^1) El tipo de datos carácter no existe en Python (^2) Estructuras compuestas de lenguajes como C, Fortran o MATLAB (^3) Estructuras compuestas de Python
Python cuenta con otros tipos de datos que no veremos en esta asignatura, pero sí que debemos tener en cuenta si los tipos compuestos son: ● Mutables , cuando su contenido puede cambiarse en tiempo de ejecución. ● Inmutables , cuando su contenido no puede cambiarse en tiempo de ejecución.
Aunque la inmutabilidad parece ir en contra de la propia definición de variable, ya nos ocuparemos de esta particularidad más adelante.
En matemáticas, los números enteros son los naturales, sus negativos, y el cero. La mayoría de lenguajes de programación se refieren a este tipo numérico como integer o int. Python asigna este tipo automáticamente a los números literales que no tienen punto decimal o notación exponencial (como hemos visto en el ejemplo anterior con la variable edad).
También se puede usar la función int() para definir explícitamente una variable de este tipo:
temperatura = 25 type(temperatura) <class 'int'> type(37) <class 'int'> num_alumnos = int(56.5) num_alumnos 56 type(num_alumnos) <class 'int'> num_alumnos = int("56") num_alumnos 56 type(num_alumnos) <class 'int'>
Podemos ver como la función int() convierte un número real a entero o el texto "56" en el número entero también. Esta operación se suele denominar type casting , que en español podemos traducir por cambio de tipo, y hay otras funciones asociadas a otros tipos de datos que nos permiten cambiar entre diferentes tipos de datos.
En otros lenguajes de programación se utiliza un número determinado de bits (8, 16, 32 o
16
precisión de entre 15 y 17 decimales, y el rango que se puede representar és de ± 1,7 *
Veamos algunos ejemplos con números reales en Python, usando también la notación exponencial (a veces llamada también notación científica):
3.3e-
3.3e
type(3.3e2) <class 'float'> float(3)
0.3 + 0.3 + 0.
En el último ejemplo se puede observar el error de representación del tipo float en un cálculo sencillo.
Los booleanos constituyen el tipo de datos utilizado para representar valores lógicos (cierto o falso) en Python. Los valores lógicos se utilizan habitualmente para representar el resultado de una expresión de comparación, por ejemplo:
10 > 5 True 10 < 5 False res = 10 > 5 type(res) <class 'bool'>
Como podemos ver, una variable booleana solamente puede tomar los valores True y False para indicar un resultado cierto o falso respectivamente.
En lenguajes estrictos (como Pascal), no es posible realizar operaciones aritméticas con booleanos, únicamente se permiten operaciones lógicas. Python no es tan estricto y, dado que un booleano es simplemente una subclase de enteros, cualquier operación que trabaje con enteros también lo hará con booleanos:
True + 1 2 False - 1
True > False True int(True)
18
1
int(False) 0
Y cualquier número diferente de cero se convierte a cierto mediante la función bool():
bool(2) True bool(0) False bool(-5) True
Los tipos de datos compuestos o estructurados comprenden aquellos con elementos de valores de un mismo tipo o de diferentes tipos, que se representan unificados para ser guardados o procesados. Más adelante en el curso trabajaremos con tipos de datos que nos permitirán realizar operaciones con vectores y matrices de números, y conjuntos heterogéneos de números, texto y booleanos.
Por el momento, introduciremos el tipo de datos correspondiente a las cadenas de texto, que ya hemos visto en algún ejemplo, y que nos permitirá trabajar con secuencias de caracteres.
El tipo de datos string es la estructura básica para trabajar con cadenas de texto, incluyendo todos los caracteres alfanuméricos y otros símbolos incluidos en la codificación ASCII o UTF-8. Python no tiene un tipo de datos simple correspondiente al carácter, por lo que un carácter es un string con un solo elemento.
Los string literales se pueden declarar entre comillas simples o dobles:
'Hola mundo!' 'Hola mundo!' "Hola mundo!" 'Hola mundo!'
Un string definido entre comillas simples puede contener comillas dobles y viceversa:
"That's a 'Hello World' text" "That's a 'Hello World' text" 'Eso era un mensaje de "Hola mundo"' bool(0) False >>> bool(-5) True #### Tipos de datos compuestos Los tipos de datos compuestos o estructurados comprenden aquellos con elementos de valores de un mismo tipo o de diferentes tipos, que se representan unificados para ser guardados o procesados. Más adelante en el curso trabajaremos con tipos de datos que nos permitirán realizar operaciones con vectores y matrices de números, y conjuntos heterogéneos de números, texto y booleanos. Por el momento, introduciremos el tipo de datos correspondiente a las cadenas de texto, que ya hemos visto en algún ejemplo, y que nos permitirá trabajar con secuencias de caracteres. ##### Cadena de caracteres o string (str) El tipo de datos string es la estructura básica para trabajar con cadenas de texto, incluyendo todos los caracteres alfanuméricos y otros símbolos incluidos en la codificación ASCII o UTF-8. Python no tiene un tipo de datos simple correspondiente al carácter, por lo que un carácter es un string con un solo elemento. Los string literales se pueden declarar entre comillas simples o dobles: >>> 'Hola mundo!' 'Hola mundo!' >>> "Hola mundo!" 'Hola mundo!' Un string definido entre comillas simples puede contener comillas dobles y viceversa: >>> "That's a 'Hello World' text" "That's a 'Hello World' text" >>> 'Eso era un mensaje de "Hola mundo"' 'Eso era un mensaje de "Hola mundo"'
También se puede definir un string con múltiples líneas usando una barra invertida al final de cada línea (o entre comillas triples). Este tipo de string es más habitual usarlo en ficheros de texto que contienen código y no tanto en la ventana de comandos:
19