Ing. Informática Programación I Programación I [email protected] [email protected] Bloque 1 Ing. Informática Programación I Profesores teoría Toni Navarrete e-mail: [email protected] despacho: 371 Jesús Ibáñez e-mail: [email protected] despacho: 381 Bloque 1 Ing. Informática Programación I Bloque 1 Introducción Filosofía: aprender a programar programando Web de la asignatura: http://www.tecn.upf.es/~tnavarrete/programacio1/ Bibliografía básica The C Programming Language, Second Edition by Brian W. Kernighan and Dennis M. Ritchie. Prentice Hall. http://cm.bell-labs.com/cm/cs/cbook/index.html Ing. Informática Programación I El plan Docente Bloque 1 Ing. Informática Programación I El plan docente: objetivo de la asignatura “El objetivo fundamental de esta asignatura es que los alumnos adquieran las bases de la algorítmica y estructuras de datos, así como que sean capaces de desarrollar fluidamente programas de tamaño medio utilizando el lenguaje C” Bloque 1 Ing. Informática Programación I Bloque 1 El plan docente: competencias Competencias generales Instrumentales: CG1: Capacidad de síntesis CG2: Capacidad de análisis Sistémicas CG3: Capacidad para aplicar el conocimiento en la práctica CG4: Interés por la calidad Competencias específicas CE1: Capacidad para trabajar con un compilador y debugador CE2: Dominio de los tipos de datos estáticos básicos y compuestos CE3: Dominio de las estructuras de control CE4: Capacidad de resolución de problemas mediante diseño descendente y dominio de la utilización de funciones CE5: Dominio de los tipos de datos dinámicos y de la gestión dinámica de memoria CE6: Documentación y estructuración de código Ing. Informática Programación I Bloque 1 El plan docente: tipos de actividades Sesiones de teoría Sesiones de ejercicios (seminarios) Sesiones de prácticas Ejercicios de auto-evaluación Consultar calendario! Ing. Informática Programación I El plan docente: evaluación Dos partes principales: Fundamentos teórico-prácticos: exámenes parcial (25%) y final (75%) 1 punto extra actividades seminarios (ejercicios) Prácticas: prácticas parcial (25%) y final (75%) Cada parte supone un 50% de la nota final, aunque es necesario aprobar ambas para superar la asignatura Otras actividades de auto-evaluación Septiembre Bloque 1 Ing. Informática Programación I Importante! En esta asignatura se dan las bases necesarias para (sólo las de primer curso): Programación II, Programación III, Estructuras de Datos I Álgebra II, Análisis Numérico, Sistemas Operativos Bloque 1 Ing. Informática Programación I Introducción Hardware: la parte física, la máquina Software: los programas que se ejecutan sobre esa máquina Bloque 1 Ing. Informática Programación I Arquitectura von Neumann ALU CPU CPU = Unidad Central de Proceso ALU = Unidad Aritmético Lógica CU = Unidad de Control RAM = Memoria principal (Random Access Memory) CU RAM Registros Bus E/S Bloque 1 Ing. Informática Programación I Lenguaje máquina La Unidad de control entiende una serie de combinaciones de bits que determinan diferentes instrucciones Ejemplo: 0001 1001 0010 1100 (16 bits) Bloque 1 Ing. Informática Programación I Lenguaje máquina La Unidad de control entiende una serie de combinaciones de bits que determinan diferentes instrucciones Ejemplo: 0001 1001 0010 1100 (16 bits) Problemas: Extremadamente difícil escribir y leer No portable (específico para una unidad de control concreta) Bloque 1 Ing. Informática Programación I Lenguaje ensamblador Cada “tipo” de instrucciones tiene una traducción Ejemplo: LOAD A ADD B STORE C Bloque 1 Ing. Informática Programación I Lenguaje ensamblador Cada “tipo” de instrucciones tiene una traducción Ejemplo: LOAD A R1 LOAD B R2 ADD R1 R2 STORE C R1 Problemas: Aún difícil escribir y leer No portable Bloque 1 Ing. Informática Programación I Lenguaje de alto nivel Las instrucciones son de un nivel superior, más cercano a cómo se piensa una solución Más fáciles de escribir y leer Son independientes de la máquina Ejemplo: C=A+B Bloque 1 Ing. Informática Programación I Lenguaje de alto nivel Las instrucciones son de un nivel superior, más cercano a cómo se piensa una solución Más fáciles de escribir y leer Son independientes de la máquina Ejemplo: C=A+B Desventaja: Hay que traducirlo a lo que la máquina entiende (código máquina): más lento Bloque 1 Ing. Informática Programación I Niveles Lenguajes de Alto Nivel C=A+B Lenguajes Ensambladores LOAD A R1 LOAD B R2 ADD R1 R2 STORE C R1 Lenguajes Máquina 000110011100… 110100010111… 100101100101… Bloque 1 Ing. Informática Programación I Compilador vs intérprete Compilador Intérprete Solución híbrida: máquina virtual Bloque 1 Ing. Informática Programación I Bloque 1 Compilación #include <stdio.h> main() { printf("Hola mundo!"); } Compilador errores Código fuente a.out a.exe Código máquina Ing. Informática Programación I Compilación Se compila antes de ejecutar Detecta errores sintácticos Cuando ya no hay errores, genera el código máquina (fichero ejecutable) No necesita el compilador para ejecutar Bloque 1 Ing. Informática Programación I Bloque 1 Interpretación .............. ........ .................... .......... ... ............... Código fuente Coge una instrucción Intérprete La traduce a código máquina y la ejecuta 0011001010011… Ing. Informática Programación I Interpretación El proceso de traducción se realiza mientras se ejecuta, instrucción a instrucción Se necesita el intérprete para poder ejecutar Bloque 1 Ing. Informática Programación I Solución híbrida: la máquina virtual (Java) Bloque 1 Ing. Informática Programación I Solución híbrida: la máquina virtual (Java) Se compila el código fuente y se obtiene código máquina de una máquina virtual Al código máquina virtual se le denomina byte-code La máquina virtual en realidad es un intérprete que después va ejecutando (traduciendo a código máquina real) instrucción a instrucción el byte-code Bloque 1 Ing. Informática Programación I Lenguaje C Historia Principios 70’s: Dennis Ritchie, Laboratorios Bell de AT&T, creado para desarrollar UNIX 1983: ANSI C 1990: estándar ISO Primer programa #include <stdio.h> main() { printf("Hola mundo!"); } Bloque 1 Ing. Informática Programación I Bloque 1 Comentando el código Es conveniente documentar el código: /* comentarios de varias líneas */ // comentario en una línea # include <stdio.h> /* la línia anterior ha d’estar sempre que fem operacions de lectura o escriptura. Tot i això, hi ha compiladors que no ho necessiten*/ main () { //el codi del programa anirà entre les dues claus printf("Hola mundo!"); //això escriu “Hola mundo!” per pantalla } Ing. Informática Programación I Bloque 1 Compilación Librerías de C Edita hola.c Código fuente compila hola.o Linka Código objeto gcc hola.c a.out a.exe Ejecutable Ing. Informática Programación I Bloque 1 Diseño de programas Problema Algoritmo Programa El Proceso de Diseño de Programas tiene dos fases: Resolución de Problemas Crea un algoritmo que resuelve un problema Implementación Traduce el algoritmo a un lenguaje de programación Ing. Informática Programación I Bloques 2 y 3 Un programa es como una receta. Contiene una lista de ingredientes (variables) y una lista de instrucciones (sentencias) que le dicen al ordenador qué hacer con las variables. Las variables pueden representar datos numéricos, caracteres, ... Bloque 2: “ingredientes”: cómo escribimos los datos que hemos de utilizar Bloque 3: “instrucciones”: cómo escribimos las órdenes que se han de ejecutar Bloque 1