Introducción y horario Algoritmos y Lenguajes de Programación 543242-2 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 Administrivia Materiales del curso Profesor: 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 (!) Horario y lugar de las prácticas Software Horario de prácticas A anunciar Ayudante 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! Compilador C Dev-C++ (http://www.bloodshed.net/dev/) 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++ 1
Evaluaciones 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 Recuperación (Se pondera 30%/70%) Examen práctico, oral ó escrito Política de copias 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 Copia en el proyecto 1 en la asignatura Bibliografía a usar Escójala Ud.! 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! 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.... 2
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 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 Ejemplo: Es n par ó impar? Brecha linguística Algoritmo: 1. Dividir n por 2 2. Verificar el resto 3. Si es 1, n es impar 4. Si es 0, n es par Programa en C: if n%2 == 1 printf Impar\n ; else printf Par\n ; Cómo pasar del algoritmo al programa? Brecha linguística traducción Lenguajes de programación ayudan a cerrar la brecha linguística entre lo que queremos decir y lo que el computador entiende Lenguaje natural y lenguaje formal Niveles de lenguajes Lenguaje natural 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) Lenguajes de programación 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 3
Lenguajes de bajo nivel Lenguajes de alto nivel Lenguaje ensamblador o assembly El más cercano al código binario Correspondencia 1-a-1 LOAD R1, Dato ADD R1, R2 MULT R2, R4 STORE R4, Result 0101000100011001 0101001100010010 0101110100100100 0101001001001010 Distintos niveles de abstracción Más lejos de la máquina Máscercade laspersonas Más fáciles de programar Portables entre sistemas Deben ser traducidos a código binario Lenguajes interpretados y compilados Lenguajes mixtos Lenguajes interpretados Ventajas de la interpretación Código Fuente Intérprete Programa intérprete lee el programa (código fuente) y lo ejecuta paso a paso Independencia de la plataforma Mismocódigofuente Tipos dinámicos Tipos de datos definidos en tiempo de ejecución Facilidad de depuración Interactividad con usuario Programas más pequeños Lenguajes compilados Ventajas de la compilación Código Fuente Compilador Prog. Ejecu table Ejecutor Compilador traduce código fuente a código objeto Ejecutor carga el programa y lo ejecuta Ejecución de código es más rápida Traducción a lenguaje de máquina ya fue hecha 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 4
Lenguajes mixtos Esquemas mixtos Código Fuente Compilador Prog. Inter medio Compilador traduce código fuente a código intermedio Ejecutor carga el programa, lo transforma en código objeto y lo ejecuta Ejecutor 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 Ventajas de los esquemas mixtos Algunos lenguajes de alto nivel Ejecución de código rápida 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 Compilados C C++ FORTRAN COBOL Pascal C# BASIC Ruby Interpretados Javascript BASIC Scheme MATLAB Mathematica Smalltalk Maple Mixtos Python Perl PHP Java Qué es un programa? Secuencia de instrucciones que realizan una computación, que puede ser: 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 Instrucciones de un lenguaje computacional Todo lenguaje computacional posee instrucciones de Entrada de datos Salida de datos Operaciones matemáticas Verificación de condiciones Repetición 5
Qué es la depuración? Sintaxis de un lenguaje Programación es un proceso complejo 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! Todo lenguaje tiene una sintaxis 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 El compilador revisa la sintaxis Lenguajes de programación tienen más reglas sintácticas que lenguajes hablados Compilador interpreta literalmente todo lo escrito No perdona errores Ej: C = A//B; Entrega mensajes indicando posible causa Saber interpretar estos mensajes Errores de tiempo de compilación Errores pueden detectados al ejecutar Errores de tiempo de ejecución Error no aparece hasta ejecutar el programa Ejemplo: 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 lógica del programa Lectura recomendada Programa compila y se ejecuta sin problemas Programa no hace lo que queremos Pero, programa sólo hace lo que le decimos que haga! Error en la lógica del programa Depurador ayuda a encontrar errores logicos Requiere bastante intervención humana! Peter Norvig, Aprende a programar en 10 años 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! 6