Download Algoritmos y Lenguajes de Programación 543242-2

Document related concepts

Haxe wikipedia , lookup

Lisp wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Programación funcional wikipedia , lookup

Ocaml wikipedia , lookup

Transcript
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.
[email protected]
• 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: [email protected]
• Correo alternativo: [email protected]
• 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