Algoritmos y Lenguaje de Programación 2008-1 1-2008 Introducción y horario Algoritmos y Lenguajes de Programación 543242-2 Mario Medina C. mariomedina@udec.cl • Código: 543242-2 • Carrera: Ing. Civil Electrónica • Clases 7 de Marzo a 28 de Junio • Horario clases )Martes, 9:10 a 11:00, TM 3-3 )CAMBIO DE HORARIO Y DE SALA! )Viernes, 9:10 a 10:00, TM 3-14 • Control de asistencia Mario Medina C. Administrivia Materiales del curso • Profesor: Mario Medina C. • Oficina 215, Escuela de Ingeniería • Teléfono: 2203506 • Correo electrónico: mariomedina@udec.cl • Correo alternativo: mariomedina@gmail.com • Web: http://mondrian.die.udec.cl/~mmedina • InfoAlumno (http://infoda.udec.cl) )Enlaces a software )Copias de transparencias )Tareas )Otros materiales )Notas )Foros )Subir tareas (!) Mario Medina C. Mario Medina C. Horario y lugar de las prácticas Software • Horario de prácticas `A anunciar • Ayudante • Compilador C Dev-C++ (http://www.bloodshed.net/dev/) )A anunciar • Prácticas en el laboratorio )Experiencias pasadas indican que prácticas se aprovechan mejor si se hacen frente al PC )No hay práctica hasta que se anuncie en clases! Mario Medina C. © Mario Medina C. )Bueno, bonito y barato (gratis!) )Disponible a través de enlaces en InfoAlumno )Instalado en los laboratorios de la Facultad de Ingeniería • Otros compiladores )A su cuenta y riesgo )Tareas serán revisadas usando Dev-C++ Mario Medina C. 1 Algoritmos y Lenguaje de Programación 2008-1 Evaluaciones 1-2008 Política de copias • Tareas (30%) )Cada 2 semanas aprox. • 2 Exámenes (20% c/u) )Mediados de semestre )Fin de semestre • Proyecto final obligatorio (30%) )Final de semestre • Copia en una tarea )1 para todos los involucrados ` “Se me perdió el diskette” ` Se me olvidó la tarea en un PC del laboratorio” ` “No sé cómo pasó” • Copia en la segunda tarea )1 en la asignatura • Recuperación (Se pondera 30%/70%) )Examen práctico, oral ó escrito Mario Medina C. Bibliografía a usar Escójala Ud.! • Copia en el proyecto )1 en la asignatura Mario Medina C. Pero qué texto escojo? • Curso no tiene texto guía )Libro clásico: B. Kernighan y D. Ritchie, “El lenguaje de programación C”, 2da. Edición ` “El nuevo testamento” • Otros apuntes y tutoriales )“Aprenda lenguaje ANSI C como si estuviera en primero” )http://c.conclase.net )Google! Mario Medina C. Mario Medina C. Objetivos del curso Lenguajes de programación • Aprender a programar • Aprender sobre estructuras de datos • Aprender sobre algoritmos • Aprender a escribir programas • Aprender lenguaje C • Objetivo: indicarle al computador lo que deseamos que haga • “Calcula el promedio de las tareas” )Lenguaje natural )Computador no lo entiende! • Computador sólo entiende código binario )Secuencia de 1s y 0s )00110110111011011 . . . . Mario Medina C. © Mario Medina C. Mario Medina C. 2 Algoritmos y Lenguaje de Programación 2008-1 Programación de computadores • Computadores sólo hacen lo que se les pide • Operaciones sumamente básicas )Sumar 2 números )Verificar si un dato es igual a 0 )Saltar de una instrucción a otra )Programar un computador implica expresar la solución a un problema en términos que éste entienda Mario Medina C. Ejemplo: Es n par ó impar? • 1. 2. 3. 4. Algoritmo: Dividir n por 2 Verificar el resto Si es 1, n es impar Si es 0, n es par 1-2008 Programas y algoritmos • Programa: colección de instrucciones de computador necesarias para resolver un problema determinado • Algoritmo: método utilizado para resolver el problema )Un algoritmo dado puede expresarse de miles de maneras, dependiendo del ` Lenguaje de programación ` Sistema computacional ` Programador Mario Medina C. Brecha linguística Programa en C: if n%2 == 1 printf“Impar\n”; else printf“Par\n”; • Cómo pasar del algoritmo al programa? • Brecha linguística Mario Medina C. traducción traducción • Lenguajes de programación ayudan a cerrar la brecha linguística entre lo que queremos decir y lo que el computador entiende Mario Medina C. Lenguaje natural y lenguaje formal Niveles de lenguajes • Lenguaje natural • Lenguajes de programación )Usado para comunicación oral y escrita )Producto de evolución, no invención • Lenguaje formal )Diseñado para un propósito específico ` Matemáticas: usa lenguaje formal para hablar de relaciones entre símbolos y números ` Química: lenguaje formal para átomos y moléculas ` Computación: lenguaje formal para expresar procedimientos (algoritmos) Mario Medina C. © Mario Medina C. )Lenguajes formales para expresar computaciones • Lenguajes de alto y bajo nivel )Relación entre el lenguaje de programación y el lenguaje binario de la máquina ` Bajo nivel: correspondencia 1-a-1 entre instrucciones de programa y código binario ` Alto nivel: correspondencia 1-a-muchos Mario Medina C. 3 Algoritmos y Lenguaje de Programación 2008-1 Lenguajes de bajo nivel Lenguaje ensamblador o assembly El más cercano al código binario Correspondencia 1-a-1 • • • • • 0101000100011001 • 0101001100010010 • 0101110100100100 • 0101001001001010 LOAD R1, Dato ADD R1, R2 MULT R2, R4 STORE R4, Result 1-2008 Lenguajes de alto nivel • Distintos niveles de abstracción )Más lejos de la máquina )Más cerca de las personas • Más fáciles de programar • Portables entre sistemas )Deben ser traducidos a código binario ` Lenguajes interpretados y compilados ` Lenguajes mixtos Mario Medina C. Lenguajes interpretados Mario Medina C. Ventajas de la interpretación • Independencia de la plataforma )Mismo código fuente Código Fuente Intérprete • Tipos dinámicos )Tipos de datos definidos en tiempo de ejecución • Programa intérprete lee el programa (código fuente) y lo ejecuta paso a paso • Facilidad de depuración • Interactividad con usuario • Programas más pequeños Mario Medina C. Lenguajes compilados Mario Medina C. Ventajas de la compilación • Ejecución de código es más rápida Código Fuente Compilador Prog. Ejecu table )Traducción a lenguaje de máquina ya fue hecha Ejecutor • Compilador traduce código fuente a código objeto • Ejecutor carga el programa y lo ejecuta Mario Medina C. © Mario Medina C. • Código generado es más eficiente )Compilador tiene acceso a todo el código, lo que facilita la optimización del código • Principal desventaja es el ciclo de trabajo Editar-Compilar-Depurar )Lento y tedioso Mario Medina C. 4 Algoritmos y Lenguaje de Programación 2008-1 Lenguajes mixtos Código Fuente Compilador Prog. Inter medio 1-2008 Esquemas mixtos Ejecutor • Compilador traduce código fuente a código intermedio • Ejecutor carga el programa, lo transforma en código objeto y lo ejecuta • Compilador traduce programa fuente a lenguaje intermedio (bytecode), de nivel más alto que lenguaje de máquina • Bytecode se puede ejecutar eficientemente sobre una máquina virtual )Presenta una abstracción del computador real )Simplifica optimización de código • Busca ventajas de compilación e interpretación Mario Medina C. Mario Medina C. Ventajas de los esquemas mixtos Algunos lenguajes de alto nivel • Ejecución de código rápida • Compilados • Interpretados • Mixtos )Traducción a lenguaje intermedio ya fue hecha )Traducción a lenguaje de máquina es fácil • Código intermedio generado eficiente • Ciclo de trabajo más rápido • Código intermedio es portable • Tipos y alcances dinámicos Mario Medina C. )C )C++ )FORTRAN )COBOL )Pascal )C# )BASIC )Ruby )Javascript )BASIC )Scheme )MATLAB )Mathematica )Smalltalk )Maple )Python )Perl )PHP )Java Mario Medina C. Qué es un programa? Instrucciones de un lenguaje computacional • Secuencia de instrucciones que realizan una computación, que puede ser: • Todo lenguaje computacional posee instrucciones de )Matemática: maneja números )Simbólica: maneja texto • Programar consiste en expresar una tarea grande y compleja en subtareas cada vez más pequeñas, hasta finalmente expresar la tarea usando las instrucciones del computador Mario Medina C. © Mario Medina C. )Entrada de datos )Salida de datos )Operaciones matemáticas )Verificación de condiciones )Repetición Mario Medina C. 5 Algoritmos y Lenguaje de Programación 2008-1 1-2008 Qué es la depuración? Sintaxis de un lenguaje • Programación es un proceso complejo • Todo lenguaje tiene una sintaxis )Errar es humano! • Proceso de eliminar errores de un programa se llama depuración (debugging) )Consume el 80% del tiempo! ` Errores detectados por el compilador ` Errores detectados por el ejecutor ` Errores no detectados! )Sintaxis: reglas sobre la estructuras válidas en el lenguaje • Castellano: )Tilde en palabras agudas terminadas en n, s o vocal )Sustantivos propios llevan mayúsculas • Lenguaje C: )Estudiaremos su sintaxis en este curso Mario Medina C. Mario Medina C. El compilador revisa la sintaxis Errores pueden detectados al ejecutar • Lenguajes de programación tienen más reglas sintácticas que lenguajes hablados • Compilador interpreta literalmente todo lo escrito • Errores de tiempo de ejecución • Error no aparece hasta ejecutar el programa • Ejemplo: )No perdona errores ` Ej: C = A//B; )Entrega mensajes indicando posible causa ` Saber interpretar estos mensajes )C = A/B; )Código es válido )Qué pasa si B = 0? ` Programa “se cae” al ejecutarse ` (A veces) indica que hubo una división por cero • Errores de tiempo de compilación Mario Medina C. Mario Medina C. Errores de lógica del programa Lectura recomendada • Programa compila y se ejecuta sin problemas • Programa no hace lo que queremos • Peter Norvig, “Aprende a programar en 10 años” )Pero, programa sólo hace lo que le decimos que haga! )Error en la lógica del programa • Depurador ayuda a encontrar errores logicos )http://loro.sourceforge.net/notes/21-dias.html )Programar es difícil )Programar bien es aún más difícil )Sólo se puede aprender haciendo! )Requiere bastante intervención humana! Mario Medina C. © Mario Medina C. Mario Medina C. 6