Title: P. Universidad Cat
1P. Universidad Católica de Chile
Escuela de IngenierÃaCiencia de la
Computación Introducción a la Programación
- Prof. Yadran Eterovic
- yadran_at_ing.puc.cl
- Edif. San AgustÃn, p.4, of.15
- 686 4440 686 4445
2Resolución de Problemas
- Los métodos para resolver problemas son
estudiados en muchas disciplinas, en las ciencias
y la ingenierÃa - La programación es una disciplina de resolución
de problemas mediante el computador - Un objetivo de este curso es ayudarlos a mejorar
sus habilidades para resolver problemas - Ejemplos de problemas resolubles
computacionalmente, desarrollando programas - Problema fácil Necesito convertir distancias en
millas a kilómetros - Problema no tan fácil Quiero encontrar la mejor
ruta para viajar desde mi casa hasta el campus
San JoaquÃn - Para resolverlos, en ambos casos hay que aplicar
el método de desarrollo de programas
3Método de Desarrollo de Programas
- El método consta de 5 pasos
- Especificar los requisitos del problema
- Analizar el problema
- Diseñar el algoritmo que resuelve el problema
- Implementar el algoritmo escribir el programa
- Probar y verificar el programa
4Aplicación del Método1. Especificar los
requisitos del problema
- Problema fácil
- En una oficina internacional de turismo a la que
recién entré a trabajar los mapas y otros
documentos tienen algunas distancias en
kilómetros y otras en millas - Para atender mejor a los turistas provenientes
del mundo del sistema métrico, me pidieron hacer
un programa computacional que haga la conversión - Problema no tan fácil
- Todos los dÃas viajo en auto desde mi casa al
campus San JoaquÃn, ida y vuelta, invirtiendo una
buena cantidad de tiempo - Para reducir el tiempo invertido, necesito
determinar la mejor ruta en cada sentido
5Aplicación del Método2. Analizar el problema
- Hay que determinar qué es lo que se nos pide
hacer - Problema fácil
- Convertir de kilómetros a millas o vice versa?
- Queremos atender mejor a los turistas
provenientes del mundo del sistema métrico - El dato o input del problema es distancia en
millas - El resultado o output del problema es distancia
equivalente en kilómetros - Tenemos que saber la relación entre millas y
kilómetros - 1 milla 1.609 kilómetros
- Problema no tan fácil
- pendiente
6Aplicación del Método3. Diseñar el algoritmo
que resuelve el problema
- Un algoritmo es un secuencia de instrucciones
precisas que llevan a una solución - La mayorÃa de los algoritmos computacionales
consisten al menos en las siguientes tres
instrucciones - Obtener los datos
- Ejecutar los cálculos que permiten obtener los
resultados a partir de los datos - Mostrar los resultados
- Esta secuencia de tres instrucciones es un patrón
que aplicaremos múltiples veces en este curso - Apliquemos este patrón a nuestro problema fácil
7Aplicación del Método3. Diseñar el algoritmo
que (cont.)
- Las instrucciones (1) y (3) son básicas no
requieren mayor refinación - Obtener la distancia en millas
-
- Mostrar la distancia en kilómetros
- La instrucción (2) también es bastante simple,
pero podemos detallarla más - La distancia en kilómetros es 1.609 veces la
distancia en millas - Con esto, el algoritmo refinado queda asÃ
- Obtener la distancia en millas
- Convertir la distancia a kilómetros
- La distancia en kilómetros es 1.609 veces la
distancia en millas - Mostrar la distancia en kilómetros
8Aplicación del Método4. Implementar el algoritmo
- Implementar un algoritmo o solución significa
escribirlo como un programa en C - Tenemos que saber que
- Un computador almacena toda la información
necesaria para la ejecución de un programa en la
memoria - Un computador puede ejecutar programas escritos
en un lenguaje de programación sólo si tiene un
compilador para ese lenguaje - Primero, hay que decirle al compilador de C
cuáles son los requerimientos de datos del
algoritmo - Qué nombres de celdas de memoria vamos a usar
- Qué tipo de datos será almacenado en cada celda
- Luego, hay que convertir cada instrucción del
algoritmo en su versión más refinada a una o
más sentencias de C
9Aplicación del Método4. el programa
include ltstdio.hgt int main(void) double
millas, kms printf("Ingrese distancia en
millasgt ") scanf("lf", millas) kms
1.609millas printf("Equivale a f
kilometros.\n", kms) return 0
10Aplicación del Método5. Probar y verificar el
programa
- Hay que revisar el (texto del) programa para
asegurarse que sea un fiel reflejo del algoritmo - Hay que ejecutar el programa múltiples veces,
para distintos datos cada vez, y revisar los
resultados cuidadosamente, para asegurarse que
tienen sentido e, idealmente, que están correctos
11Otro problema fácil Calcular el área de la
superficie y el volumen de una esfera
- Análisis
- El input es el radio de la esfera
- Se pide dos outputs
- El área de la superficie de la esfera
- El volumen de la esfera
- El radio, el área y el volumen son números reales
- Fórmulas relevantes
- área 4p ? radio2
- volumen (4/3)p ? radio3
12Otro Calcular el área y el volumen de una
esfera
- Diseño del algoritmo
- Debemos poner mucha atención al orden de las
instrucciones - Algoritmo inicial
- 1. Obtener el radio
- 2. Calcular el área
- 3. Calcular el volumen
- 4. Mostrar el área y el volumen
- Refinamos las instrucciones que no son simples
para el computador/lenguaje de programación - 2. Calcular el área asignar a área el valor
43.14159radioradio - 3. Calcular el volumen asignar a volumen el
valor (4/3)3.14159 radioradioradio
13Otro Calcular el área y el volumen de una
esfera
Algoritmo refinado (y con un cierto sabor a
C) double radio, area, volumen / obtener el
radio de la esfera / / calcular el area de la
superficie / / asignar 43.14159radioradio a
area / / calcular el volumen / / asignar
(4/3)3.14159radioradioradio a volumen / /
mostrar el area y el volumen /
14Otro Calcular el área y el volumen de una
esfera
Programa include ltstdio.hgt int
main(void) double radio, area,
volumen printf("Ingrese radio de la esferagt
") scanf("lf", radio) area
43.14159radioradio volumen
(4/3)3.14159radioradioradio printf("El area
es f\n", area) printf(El volumen es f\n,
volumen) return 0
15El Problema de la Torre de Hanoi(originalmente
la torre de Brahma)
- Inventado por el matemático francés E. Lucas en
los 1880s - En el gran templo en Benares descansa una placa
de bronce con tres agujas de diamantes en una de
ellas, Dios puso durante la creación 64 discos de
oro, el más grande descansando sobre la placa y
los otros, cada uno más pequeño, uno encima del
otro. Esta es la torre de Brahma. Continuamente
los sacerdotes transfieren los discos de una
aguja a otra de acuerdo con las reglas inmutables
de Brahma no puede moverse más que un disco a la
vez y ese disco debe ponerse en una aguja de modo
que no quede encima de un disco más pequeño.
Cuando los 64 discos hayan sido transferidos a
una de las otras agujas la torre, el templo y los
brahmanes se desmoronarán y con un estruendo el
mundo desaparecerá. - El problema es determinar el orden en que los
sacerdotes deben transferir los discos para hacer
desaparecer el mundo
16El Problema de la Torre de HanoiPasos para su
solución
- Análisis
- Llamemos A, B y C a las agujas queremos
mover los 64 discos que están en A a B,
ayudándonos con C - No hay input o tal vez el input es sólo el
número 64, o tal vez los números 64 y 3, pero
ambos números no cambian - El output es la secuencia de movimientos de
discos, de a uno, de una aguja a otra, hasta que
todos haya sido transferidos de la aguja A a la
B (cuántos movimientos en total?) - Diseño
- Para mover los 64 discos de A a B, es
absolutamente necesario que en algún instante los
63 discos más pequeños estén en C sólo en ese
momento podemos mover el disco más grande de A
a B y después hay que mover los 63 discos de
C a B - Similarmente, para mover los 63 discos de A a
C, es absolutamente necesario mover primero los
62 discos más pequeños de A a B luego
movemos el disco 63 de A a C y por último
movemos los 62 discos de B a C
17El Problema de la Torre de HanoiUna solución
recursiva
- El diseño anterior representa una estrategia
recursiva - Para solucionar el problema más grande (mover n
discos), lo descomponemos en problemas más
pequeños del mismo tipo - Primero movemos n1 discos, luego movemos 1
disco, y finalmente movemos n1 discos nuevamente - Por supuesto, para mover n1 discos hacemos los
mismo primero movemos n2, luego movemos 1, y
luego movemos n2 de nuevo - Los interesante es que computacionalmente basta
especifi-car el primer nivel de la recursión (si
está bien especificado) en la forma de una
función (matemática) con un nombre y que entre
sus instrucciones incluye llamarse a sà misma - Mover(n, a, b, c) si n 1 mover de a a b de
lo contrario Mover(n1, a, c, b) , mover de a a
b, Mover(n1, c, b, a)
18El Problema de la Torre de HanoiLa función
recursiva Mover
En C, escribimos la definición de una función
dándole un nombre (Mover), especificando cuáles
son sus argumentos (int n, char ini, char fin,
char tmp), y especificando cómo se ejecuta la
función void Mover(int n, char ini, char fin,
char tmp) if (n 1) printf(c -gt c\n,
ini, fin) else Mover(n1, ini, tmp, fin)
printf(c -gt c\n, ini, fin) Mover(n1,
tmp, fin, ini) Para ejecutar la función
anterior, simplemente la llamamos Mover(64,
A, B, C)