




























































































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
teoria necesaria para poder aprobar informatica con satisfaccion
Tipo: Apuntes
1 / 149
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































Última actualización del documento en: 2016.11.
● Teoría (2h/sem) ○ T1 (miércoles, 19 a 21, A1.5): Joan F. Alonso ([email protected]) Consultas: Miércoles de 14 a 17, despacho A8. Otros días a convenir por correo electrónico, indicando nombre, apellidos y subgrupo ● Laboratorio (2h/sem) ○ T11 (lunes, 17 a 19, A3.1): Pilar Nivela ([email protected]) ○ T12 (miércoles, 15 a 17, A3.1): Ferran Juan ([email protected]) ○ T13 (jueves, 19 a 21, A3.1): Jorge Castro ([email protected])
● Teoría
○ 17,5% Ejercicio sobre librería El ejercicio se entrega a través de ATENEA hasta el último día de clase.
○ 30,0% Examen Final 19/01/2017, 8 a 11
● Laboratorio
○ 17,5% Examen práctico 1 Semana 6, 24 a 28 de octubre
○ 17,5% Examen práctico 2 Semana 10, 21 a 25 de noviembre
○ 17,5% Examen práctico 3 Semana 14, 19 a 23 de diciembre
Ver documento Cronograma
Este documento está basado en parte en material previo de los profesores de la asignatura 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.
Sesión 1. Primeros pasos para aprender a
programar
El vocablo informática es un acrónimo de las palabras información y automática , y la Real Academia Española la define como el conjunto de conocimientos científicos y técnicas que hacen posible el tratamiento automático de la información por medio de ordenadores.
El principal objetivo de la asignatura es aprender a programar (realizar este tratamiento automático de la información) para resolver problemas propios de la ingeniería. Un ingeniero (no necesariamente informático) debe, durante su vida profesional, desarrollar, revisar, o supervisar el desarrollo de programas o de equipos de programadores. Muy probablemente la mayoría estamos familiarizados con algún sistema operativo (Linux, Android, iOS, Microsoft Windows, OS X, etc) y otros muchos programas informáticos.
El sistema operativo se considera el programa más importante que se ejecuta en un computador , ya que permite que sobre él se ejecuten otros programas y aplicaciones mientras él se ocupa de tareas básicas como reconocer la entrada de datos a través del teclado, mostrar datos en pantalla, u organizar los ficheros y carpetas en el disco o memoria.
Seguro que también hemos usado aplicaciones de todo tipo como procesadores de texto, hojas de cálculo, videojuegos, mensajería, fotografía, etc. Sin embargo, los programas informáticos se pueden encontrar en muchos otros ámbitos de nuestra vida diaria: desde un reproductor de música, pasando por un robot aspirador de suelos o uno de cocina, hasta un desfibrilador implantable que ayuda a controlar los latidos de un paciente cardíaco.
Y para aprender a programar , debemos conocer:
Los cursos de programación utilizan diferentes lenguajes en función de cada profesor, incluso usando un lenguaje genérico, llamado pseudocódigo , que permite aprender el desarrollo de algoritmos de manera independiente del lenguaje. En esta asignatura el lenguaje de programación utilizado es un subconjunto de Python 3, pero todos los conceptos de programación que desarrollaremos son aplicables a la mayoría de lenguajes de programación. Se trata de aprender a resolver problemas mediante la metodología de
● 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
quiera sin tener que volver a traducir el programa original. Los lenguajes de programación clásicos como Fortran, Pascal, C, Go o Haskell son compilados. ● A través de un intérprete , que es un programa que va leyendo, traduciendo y ejecutando las instrucciones del programa a medida que las encuentra. Esto da más flexibilidad y más facilidad para depurar el código en busca de errores, pero se pierde velocidad de ejecución frente a los lenguajes compilados. Entre los lenguajes interpretados destacan Java, Python, Perl, PHP, MATLAB, R o Ruby.
En esta asignatura usaremos el entorno de desarrollo en Python 3 llamado IDLE , que cuenta con su propio intérprete de Python. Y como manda la tradición al aprender cualquier nuevo lenguaje, una vez iniciado el intérprete y se nos muestre que la ventana de comandos (también llamada habitualmente shell o consola) está lista para aceptar instrucciones (muestra el símbolo de entrada o prompt >>>), ejecutaremos nuestro primer código en Python con un saludo (la versión en español del habitual Hello world! ):
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win Type "copyright", "credits" or "license()" for more information.
print("Hola mundo!") Hola mundo!
En este ejemplo hemos usado la función print() de Python, que escribe el resultado en la ventana de comandos, para mostrar nuestro mensaje de saludo, que es una cadena de texto delimitada por comillas dobles (también se pueden usar las comillas simples, como veremos más adelante).
Variables
Ya hemos visto en la definición de informática que ésta maneja información de manera automática, y para ello necesita almacenar esta información en lo que llamamos variables (intuitivamente, podemos pensar que una variable es un lugar en la memoria del computador).
Internamente, los computadores no pueden almacenar la información de la misma manera que la representamos las personas, puesto que los circuitos electrónicos que forman la CPU y la memoria únicamente pueden trabajar con y almacenar unos y ceros. Los circuitos que constituyen la memoria constan de unos interruptores muy pequeños (los transistores) que pueden estar cerrados o abiertos, y eso determina si circula la corriente o no, a su vez indicando un uno o un cero (y en las asignaturas de electrónica os explicarán con más detalle todo lo relativo a estos circuitos).
Por lo tanto, la única manera que tienen los computadores digitales de almacenar información es usando el sistema binario. Para entender cómo se codifica un número en binario, primero vamos a repasar el sistema universal de representación: el decimal.
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.
Ese lugar de memoria se denomina en Python identidad del objeto (conviene no confundirlo con el identificador de una variable). La asignación asocia el identificador edad a la identidad del objeto 99 (y por eso una asignación en Python suele llamarse referenciación o identificación ). El diagrama siguiente ilustra este procedimiento de manejo de la memoria:
Una vez aclarada esta particularidad de Python, conviene tener presente que la asignación no es equivalente a la igualdad matemática. Para apreciar este concepto podemos ejecutar las instrucciones siguientes:
x = 99. 99.0 = y SyntaxError: can't assign to literal id(x) 1747153955504 type(x) <class 'float'> x = x + 1 x
La sentencia 99.0 = y es un error de sintaxis, aunque sería válida en matemáticas. En cambio x = x + 1 sería absurda en matemáticas, pero en programación indica que hay que sumar 1 a la variable x y guardar el resultado en la misma variable x.
Fijémonos también que la identidad del objeto 99.0 es diferente a la de 99 , puesto que 99.0 es de tipo float (número real), mientras que 99 es un int (entero).
El identificador de una variable puede contener letras, números y el guión bajo "_", pero no puede empezar con un número. Aunque en matemáticas se suele usar una única letra para identificar una variable, es programación es muy preferible usar nombres más descriptivos que se asocien con el significado o el propósito de esa variable. Como la
(^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
texto cualquier número entero para ver su representación binaria (anteponiendo el prefijo 0b):
bin(37) '0b100101' bin(37373737) '0b10001110100100011100101001'
También podemos usar la propia consola para comprobar que no hay limitación en la representación de enteros en Python, por ejemplo con un número que necesite muchos más bits que 64, como 2^150 :
2** 1809251394333065553493296640760748560207343510400633813116524750123642650624
En informática, los números reales suelen llamarse números de coma flotante ( floating point , en inglés), o simplemente float. Es importante destacar que, aunque el símbolo separador de decimales normativo en Europa sea la coma, la mayoría de lenguajes de programación utiliza el punto siguiendo la costumbre anglosajona.
La representación binaria en computadores sigue la norma IEEE 754, y Python usa esta norma en doble precisión, es decir, representando los números reales con 64 bits (1 bit de signo, 11 de exponente, y 52 de mantisa):
La tabla siguiente resume los cálculos que hay que realizar para obtener el valor en base 10 de un número almacenado en formato IEEE 754 con doble precisión:
Signo (s) Exponente (exp) Mantisa (m) Valor en base 10 (v)
0 ó 1 0 < exp < 2047 indiferente (-1)s^ * 1,m * 2(exp - 1023)
0 2047 0 +∞
1 2047 0 -∞
0 ó 1 2047 ≠ 0 NaN
0 ó 1 0 0 0
0 ó 1 0 ≠ 0 (-1)s^ * 0,m * 2(exp - 1022)
True > False True int(True) 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"' '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:
texto1 = "A new subculture was born,
composed of the millions of people who
now devoted every free moment of their lives
to searching for Halliday's egg." texto "A new subculture was born, composed of the millions of people who now devoted every free moment of their lives to searching for Halliday's egg." texto2 = """A new subculture was born, composed of the millions of people who now devoted every free moment of their lives to searching for Halliday's egg. """ texto "A new subculture was born, \ncomposed of the millions of people who \nnow devoted every free moment of their lives \nto searching for Halliday's egg.\n"
El segundo ejemplo entre comillas triples nos muestra en el resultado el carácter de escape de nueva línea (\n). En realidad, el primer ejemplo es un string de una única línea, pero escrito en varias gracias a la barra invertida, mientras que el segundo sí que es realmente un string multilínea. Podemos comprobarlo usando la función print():
print(texto1) A new subculture was born, composed of the millions of people who now devoted every free moment of their lives to searching for Halliday's egg. print(texto2) A new subculture was born, composed of the millions of people who now devoted every free moment of their lives to searching for Halliday's egg.
El carácter de escape también puede usarse para agregar caracteres especiales dentro de un string (comillas simples dentro de un texto delimitado por comillas simples, tabulaciones, etc):
'My obsession with finding Halliday's Easter egg was gradually being supplanted by my obsession with Art3mis' "My obsession with finding Halliday's Easter egg was gradually being supplanted by my obsession with Art3mis" texto3 = "I would have \n\tto play a perfect game \n\t\tof Pac-Man" print(texto3) I would have to play a perfect game of Pac-Man
Para acabar con los string , la función str() nos permite convertir cualquier tipo a string :
str(3.1416) '3.1416' str(99) '99'