Programación I toni.navarrete@upf.edu jesus.ibanez@upf.edu
Profesores teoría Toni Navarrete e-mail: despacho: toni.navarrete@upf.edu 371 Jesús Ibáñez e-mail: despacho: jesus.ibanez@upf.edu 381
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
El plan Docente
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
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
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!
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
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
Introducción Hardware: la parte física, la máquina Software: los programas que se ejecutan sobre esa máquina
Arquitectura von Neumann CPU ALU CU Registros RAM CPU = Unidad Central de Proceso ALU = Unidad Aritmético Lógica CU = Unidad de Control RAM = Memoria principal (Random Access Memory) Bus E/S
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)
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)
Lenguaje ensamblador Cada tipo de instrucciones tiene una traducción Ejemplo: LOAD A ADD B STORE C
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
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
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
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
Compilador vs intérprete Compilador Intérprete Solución híbrida: máquina virtual
Compilación #include <stdio.h> main() { printf("hola mundo!"); } errores Compilador Código fuente a.out a.exe Código máquina
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
Interpretación.................. Código fuente Coge una instrucción Intérprete La traduce a código máquina y la ejecuta 0011001010011
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
Solución híbrida: la máquina virtual (Java)
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
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!"); }
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 }
Compilación Librerías de C Edita hola.c compila hola.o Linka a.out a.exe Código fuente Código objeto Ejecutable gcc hola.c
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
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