Beruflich Dokumente
Kultur Dokumente
Notas de Clase 3004578 Algoritmos y Programacin 02/24/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
CONTENIDO
Clase#1 Introduccin. Evolucin e impacto de los computadores. Enfoque algortmico ... Clase#2 - Estructuras de secuencia y seleccin lgica . Clase#3 Estructura de iteracin Acumulador / Contador ... Clase#4 Iteracin definida Integracin numrica . Clase#5 Iteracin indefinida Races de f(x) = 0 Clase#6 Graficacin con Visual Basic Clase#7 Variables tipo arreglo Subprogramas Tipo de Datos del usuario (TDU) Clase#8 Archivos de datos Aplicaciones con arreglos, subprogramas, TDU .. Clase#9 Mtodos de Ordenamiento y Bsqueda ... Clase#10 El manejo de las matrices (tablas) Clase#11 Aplicaciones de arreglos, subprogramas, archivos, TDU- Ecuaciones lineales simultneas/Gauss Clase#12 Solucin de Ecuaciones Lineales Simultneas Mtodo de Gauss-Jordan/La Inversa . Clase#13 - Solucin de Ecuaciones Lineales Simultneas Mtodos Iterativos: Jacobi y Gauss-Seidel Clase#14 Ajuste de curvas por el mtodo de Mnimos Cuadrados . Clase#15 Aplicaciones varias . Pgina 1 9 16 22 25 33 39 45 50 58 62 77 82 87 92
PRESENTACIN
Esta minigua, clase a clase, del curso de 3004578 - Algoritmos y Programacin pretende ser un material de apoyo para el estudio metdico por parte de los(as) estudiantes. El uso de esta minigua ha de ser triple: (i) antes de cada clase, su lectura exploratoria servir para formarse una visin panormica del contenido de cada clase, resaltndose los conceptos ms importantes y las posibles dificultades de comprensin; (ii) en el transcurso de la clase, ha de servir de derrotero y bitcora conjuntamente con las dispositivas- para seguir el hilo del discurso expositivo del docente, y precisar los conceptos y resolver en su mayor parte las dificultades encontradas previamente en la lectura exploratoria; (iii) en el estudio extractase, es el material bsico conjuntamente con la documentacin adicional- para reforzar los conceptos, resolver dudas y solucionar los problemas y ejercicios planteados. La secuencia de actividades esbozada se circunscribe dentro de una estrategia de aprendizaje activo que se complementa con la tcnica de aprendizaje va ejemplos para lograr todos los objetivos del proceso enseanza/aprendizaje. Concientizarse y poner en prctica otras tcnicas eficientes de estudio garantizar un aprendizaje efectivo y de largo alcance1. La programacin de computadores es tanto arte como ciencia. De ah, que la prctica frecuente sea indispensable para la mejor aprehensin de los diferentes contenidos. En este sentido, las sugerencias de prctica, los ejercicios y problemas propuestos, y las dems actividades extractase son de vital importancia. Igualmente, se recomienda a los estudiantes utilizar los dems recursos de acompaamiento, asesora, talleres, realizados por docentes y auxiliares. 0
1
Vase, por ejemplo: Paul, Richard and Elder, Linda: Cmo Estudiar y Aprender una Disciplina, usando los conceptos y herramientas del pensamiento crtico, Fundacin para el Pensamiento Crtico, 2003, www.criticalthinking.org. Se puede descargar documento PDF en http://xue.unalmed.edu.co/~walvarem.
Clase #1
EVOLUCIN Y DESARROLLO DE LOS COMPUTADORES
Evolution. Fuente: R.B. Muhama.( Kent State University, 2004,.http://www.cs.kent.edu/~rmuhamma/),.
Los objetivos bsicos que se pretenden lograr con este texto, que es -en realidad- una mini-gua de clases, son los siguientes: Desarrollar destrezas lgico-abstractas para conceptualizar e implementar la solucin de problemas utilizando un computador. Propender por el aprendizaje de tcnicas que permitan y faciliten la representacin algortmica, en el proceso de la solucin de problemas, aunando los enfoques algortmico y ecuacional. Incentivar el aprendizaje de un entorno grfico, visual e interactivo de programacin de computadores.
En tal sentido se emplear la Metodologa de Solucin de Problemas (Aprendizaje va ejemplos), en la cual se mezcla el enfoque ecuacional (modelacin matemtica) y el enfoque algortmico, encuadrada dentro del proceso de Aprendizaje Activo.
Pgina
Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________ La primera parte consta de 6 semanas, 6 sesiones tericas y 6 sesiones prcticas. Al final de estas seis semanas se hace la primera evaluacin consistente en un examen escrito individual y en un examen prctico frente al computador. No se hace una presentacin rigurosamente matemtica de los algoritmos y la programacin sino que se aborda de una forma ms o menos intuitiva toda la temtica terico-prctica. Los temas incluyen: (1) - una presentacin general del curso, de la secuencia de contenidos, de la metodologa, de la evaluacin y de la bibliografa y dems referencias a emplear; (2) - un vistazo general del desarrollo histrico de los computadores, enmarcando el concepto de algoritmo y las estructuras fundamentales mediante las cuales se construyen algoritmos secuenciales: secuencia, seleccin lgica, iteracin; (3) - los conceptos de acumulador y contador, y sus aplicaciones; (4) - con los conceptos anteriores se efectan algunas aplicaciones sencillas como los clculos de series, de sumatorias y productorias, de ciertas medidas estadsticas, de mtodos de integracin numrica y de mtodos para la obtencin de races de funciones no-lineales; (5) - una introduccin a las grficas complementa la teora explicada; (6) - en la parte prctica se inicia con el concepto entorno grfico, visual e interactivo de programacin, basado en el concepto de proyecto Visual Basic, y se elaboran sencillas aplicaciones que constan de su interfaz grfica de usuario con la programacin respectiva, que utiliza la teora vista; (7) - lo concerniente al lenguaje de programacin incluye el manejo de variables y constantes, tipos de datos, operadores, expresiones, tipos de instrucciones, funciones de librera estndar, controles bsicos, eventos y procedimientos asociados a dichos controles. En la segunda parte se introducen y se manejan los conceptos de arreglo, de archivos de datos, subprogramas definidos por el usuario, y de datos definidos pro el usuario. Para la interfaz grfica de usuario se trabaja con men tipo barra, mdulos de programas y formularios mltiples. Las aplicaciones con las cuales se ilustran los conceptos tericos incluyen: ordenamiento y bsqueda; operaciones con vectores, matrices y archivos de datos. Esta parte consta de 5 semanas, al final de las cuales se hace la segunda evaluacin terica. En la tercera parte se aplican los conceptos y tcnicas trabajados en las dos partes previas en la solucin de problemas tales como: ecuaciones lineales simultneas, mtodo de Eliminacin de Gauss; de Jacobi y de GaussSeidel; el clculo de la Inversa, mtodo de Gauss-Jordan; el ajuste de curvas por el mtodo de mnimos cuadrados; y una sencilla miscelnea de otras aplicaciones, con fines meramente descriptivos, para enfatizar el uso de los algoritmos y la programacin en la solucin de problemas prcticos en reas de ingeniera. Estas ltimas aplicaciones pueden variar semestre a semestre dependiendo de la disponibilidad de soluciones que el docente tenga a la mano.
Los problemas de ejemplo estn a nivel de las ciencias bsicas de ingeniera, por cuanto el grueso de los estudiantes pertenece a los primeros semestres (del 1 al 3) en las carreras de ingeniera en las cuales esta asignatura es obligatoria en las currcula. Por lo cual los prerrequisitos son mnimos y corresponden a los bsicos del lgebra y la Aritmtica, la geometria, la fsica, la qumica, el lgebra Lineal y el clculo de los primeros semestres universitarios. Es de suma importancia para un estudiante universitario el apersonarse de las tcnicas eficientes de estudio. Semestre a semestre se observa y las estadsticas- lo corroboran que los porcentajes de repitencia de asignaturas, prdida del semestre, y de desercin son relativamente altos1. Aunque en la solucin de esta problemtica intervienen muchos factores, hay una categora de factores sobre la cual el estudiante como individuo- s puede tener un alto grado de control: mejorar las tcnicas de estudio. Las tcnicas bsicas incluyen2: (i) - Actitud proactiva para asistir a clases; (ii) - Saber concentrarse en clase y toma de apuntes eficaces que ayuden efectivamente al aprendizaje, (ii) - Estudio frecuente y sistemtico extraclase; (iv) - Saber preparar exmenes, trabajos y exposiciones; (v) - Sabia administracin del tiempo, dentro del plan general del semestre acadmico tener una clara y realista agenda diaria y semanal; (vi) - Mtodos de lectura rpida y ultrarrpida; (vii) - Mtodos para mejorar la memoria de forma creativa e inteligente; (viii) - Nutricin adecuada para el aprendizaje; (ix) - Saber identificar y controlar de manera inteligente los distractores (y obstructores) que impiden centrarse en el estudio (amistades y grupos de inters demasiado absorbente, drogas, alcoholismo, tabaquismo, embarazos en las jvenes) que inciden negativamente sobre el desempeo acadmico de calidad en amplios grupos de estudiantes; (x) - Aprovechar los recursos de financiamiento, acompaamiento, asesora, prevencin y apoyo que brinda la universidad, a travs por ejemplo- de las oficinas de Bienestar Universitario. 0
1
Ver las estadsticas sobre el tema presentada por las instancias pertinentes en Unalmed. Estos problemas han suscitado continuos debates, vase, por ejemplo: Problemas curriculares y pedaggicos del pregrado en la Universidad Nacional de Colombia, Serie de documentos de trabajo No. 3, Bogot, 2003.. 2 Vase, por ejemplo, Study Skills for Science & Technology Students, Brunel University, 2005, http://www.brunel.ac.uk/~mastmmg.
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 2 Clase# 1.- Evolucin y Desarrollo de los Computadores- Enfoque algortmico.
Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________ El material del curso est disponible en la pgina web principal en la Escuela de Sistemas, http://pisis.unalmed.edu.co/cursos/, y tambin en sendas pginas que el suscrito mantiene para tal efecto: http://www.unalmed.edu.co/~walvarem, http://xue.unalmed.edu.co/~walvarem . Este material consta de: diapositivas de las clases tericas, guas de prcticas, problemas propuestos, bibliografa, referencias y enlaces, problemas resueltos, exmenes resueltos, textos de apoyo; este material se encuentra en varios formatos: HTML como PDF y ZIP.
Son caractersticas bsicas de este sistema: (a) disponer de slo diez guarismos (0 al 9) para representar cantidades; (b) la base es 10, por lo cual cada cifra dentro de un nmero est multiplicada por una potencia de 10; (c) el valor relativo de la cifras depende de su posicin; (d) el uso del cero para representar la ausencia de cantidad. As, por ejemplo, 4054 se expresa de derecha a izquierda, vista de frente-como 4 x 100 + 5x101 + 0x102 + 4x103. Otros Sistemas Numricos utilizados son el Binario (base 2), el Octal (base 8), el hexadecimal (base 16) y el romano (para nomenclatura escrita y otros usos culturales). MEDIOEVO. Durante la edad Media, especialmente en Europa, se emplearon diversos dispositivos mecnicos de clculo. La sumadora mecnica de Pascal, 1623-1662, (La Pascalina, figura adjunta) se considera tradicionalmente como el primer artefacto mecnico para calcular.
FIGURA 1.2 La Pascalina, sumadora mecnica ideada por Blas Pascal.
En 1694 Gottfried Wilhem von Leibtnitz (1646-1716) perfeccion la sumadora de Pascal, logrando un artefacto de clculo mecnica que efectuaba sumas y multiplicaciones. Estos dos inventos sirvieron de base para muchos otros artefactos de clculo que efectuaban las operaciones bsicas de la Aritmtica. __________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 3 Clase# 1.- Evolucin y Desarrollo de los Computadores- Enfoque algortmico.
Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________ ERA INDUSTRIAL. Slo hasta 1820 las calculadoras mecnicas ganaron popularidad y un uso ms amplio. El Arithmetro, de Cahrles Xavier Thomas de Colmar poda sumar, restar, multiplicar y dividir. Se us ampliamente hasta la Primera Guerra Mundial. Charles Babbage, en Inglaterra, propuso el diseo de dos artefactos de clculo: La Mquina Diferencial y La Mquina Analtica. sta ltima se considera en su diseo- la precursora d elos computadores actuales.
FIGURA 1.3 Una seccin de la Mquina Diferencial diseada por Charles Babbage en
Las rutinas de programacin de esta mquina las ide Ada Augusta Byron, quien es considerada la primera persona en programar un computador. Hacia 1890 el gobierno de Estados Unidos, USA, contrat el procesamiento de la informacin del censo con Herman Hollerith quien ide un tipo de mquina electromecnica, basada en tcnicas de tarjeta perforada, que hizo mucho ms eficientemente los clculos y en muchsimo menos tiempo. Esto marc el inicio de toda una industria de procesamiento de datos, especialmente con la empresa que Hollerith y sus asociados fundaron, la que despus se convirti en IBM (International Business Machines). EN EL SIGLO XX. . Vannevar Bush (1890-1974) desarroll una calculadora para solucionar ecuaciones diferenciales, en 1931. La mquina poda resolver ecuaciones diferenciales tan complejas, que dej asombrados tanto a cientficos como a matemticos.
FIGURA 1.4 Computador ENIAC en 1946.
Sin embargo, dicha mquina era demasiado engorrosa pues requera cientos de ruedas y poleas para representar los nmeros y sus diversas relaciones. John V. Atanasoff (nacido en 1903), un profesor del Iowa State College (llamado ahora Iowa State University) y un estudiante de postgrado que lo asista, Clifford Berry, envisionaron un computador electrnico que aplicaba el lgebra de Bool en su circuitera. Este enfoque se basaba en los trabajos del matemtico ingls del siglo 19 George Boole (1815-1864), quien dise el sistema binario del algebra y de la lgica simblicas, estableciendo que cualquier ecuacin o relacin matemtica puede dar un resultado que sea falso o verdadero (de ah, su naturaleza binaria).
FIGURA 1.5 Computador electromecnico del siglo XX.
Extendiendo este concepto a los circuitos electrnicos en la forma apagado/encendido (on/off), Atanasoff y Berry desarrollaron el primer computador electrnico alrededor de 1940. Su proyecto, no obstante, se qued sin apoyo financiero y dicho aporte tecnolgico fue rpidamente sobrepasado por otros proyectos similares de otros grupos de cientficos e ingenieros. Se haba iniciado la etapa electrnica del proceso de datos, cuyos desarrollos an continan. Todos estos aportes han convergido para estructurar la mquina denominada computador cuyos componentes externos se esquematizan en la figura mostrada. Surgi tambin la Informtica o Computacin, conjunto de conocimientos cientficos y de tcnicas que hacen posible el tratamiento automtico de la informacin por medio de computadoras. La informtica combina los aspectos tericos y prcticos de la ingeniera, electrnica, teora de la informacin, matemticas, lgica y comportamiento humano. Los aspectos de la informtica cubren desde la programacin y la arquitectura informtica hasta la inteligencia artificial y la robtica. Las industrias de Hardware (componentes fsicos, microprocesadores) y de Software (programas) se han desarrollado en forma acelerada, de tal suerte que no existe ningn mbito empresarial, gubernamental, social, familiar y profesional exento de la influencia de estas tecnologas. Desde la dcada de 1940s se han desarrollado varias generaciones de computadores: (i) (1945 1956) De estructura electro-mecnica principalmente, implementaron el diseo de Babbage de su Mquina Analica; (ii) (1957 1963) Se involucr el invento del transistor, lo que compact ms los equipos, los hizo ms seguros y confiables, y se inici un gran auge de aplicaciones comerciales, cientficas y militares, y se basaban en su diseo interno en los modelos de la Fsica del Estado Slido; tambin tenan Sistema Operativo y se cimenzaron a emplear __________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 4 Clase# 1.- Evolucin y Desarrollo de los Computadores- Enfoque algortmico.
FIGURA 1.6 Computador de la segunda generacin.
Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________ Lenguajes de Programacin de Computadores como el FORTRAN orientado hacia aplicaciones en Ingeniera- y el COBOL orientado hacia aplicaciones comerciales; (iii) (1964 1971) Mquinas basadas en circuitos integrados, lo cual elimin gran parte de la disipacin trmica; se hicieron mucho ms compactos; grandes mejoras en los Sistemas Operativos y en los Lenguajes de Programacin, en los dispositivos de almacenamiento; primeras aplicaciones tcnicas y comerciales a gran escala; (iv) (1971 _ Presente) Computadores basados internamente, en la microelectrnica- en grandes escalas de integracin, con miles de millones de componentes electrnicos en un solo chip, Sistemas Operativos y entornos visuales interactivos de programacin, amplia y profunda utilizacin en todas las reas del saber humano; (v) (Presente Futuro) Los computadores inteligentes, mediante el perfeccionamiento de tcnicas de Inteligencia Artificial, y otras tcnicas avanzadas del Software.
FIGURA 1.7 Sistema de Cmputo de la tercera generacin Microelectrnica, Programacin
del
cambio
dramtico
en
Tecnolgicamente, en las mltiples reas de la computacin tanto hardware como Software- se ha avanzado en las ltimas 6 dcadas muchsimo ms que en los ltimos 10 milenios. Las tecnologas basadas en microprocesadores (chips) han permeado todo tipo de industria y de esferas de la ciencia, del conocimiento, de las artes, de los negocios, de las sociedades sy culturas en general. La programabilidad de los computadores es una de sus principales caractersticas que los hace tan tiles.
A o 2 0 0 7
Desde 1981, los computadores personales, de escritorio, porttiles, de mano, calculadoras programables estn llevando a ms y ms personas, en ms y ms ambientes de trabajo, sociales, de negocios, cientficos, las ingentes posibilidades de la programacin. Y desde 1990, La Internet ha completado todo un contexto de revolucin tecnolgica, de grandes proporciones, a escala mundial, cuyos efectos estn moldeando nuevas formas de pensar, de trabajar y estudiar, de hacer negocios, etc. Las aplicaciones de los microprocesadores son innumerables, abarcando prcticamente toda esfera del saber humano. Est en desarrollo la tecnologa nanotrnica, es decir el diseo y aplicacin de mquinas de tamao molecular que promete revolucionar todo lo que hasta ahora se ha hecho con la tecnologa computacional.
Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________ Estas exigencias son cada vez ms fuertes porque hay una mega tendencia de fondo muy clara: las empresas y los pases estn evolucionando hacia organizaciones cimentadas en el aprendizaje continuo, en las cuales la informacin y el conocimiento, basados en el Talento Humano, son los recursos estratgicos ms importantes que potencian a los otros recursos organizacionales (tierra, capital y trabajo).
FIGURA 1.10 La Internet est perfilando nuevas formas del trabajo, del estudio, de los negocios.
El boom tecnolgico iniciado con los computadores, desde mediados del siglo XX, ha permeado todas las actividades de los hogares, los individuos, los gobiernos, las empresas, las ciencias. Prcticamente, no hay quehacer humano que pueda sustraerse a esta influencia. En general, para bien. Sin embargo, la tecnologa propicia igualmente- delitos e inseguridades. Los virus informticos son el pan de cada da de los computadores y de las redes. El fraude electrnico es una de las nuevas modalidades delictivas. Los efectos sobre los organismos y sobre la psicoemotividad de las personas estn moldeando nuevas categoras de dolencias y de enfermedades laborales. De ah, la necesidad de que todo estudiante se apersone de los mtodos eficientes de estudio que le permitirn ser ms productivo durante su estada en la universidad, y que redundar en un mejor desempeo como profesional.
FIGURA 1.11 Didctica de las actividades de estudio, para lograr un aprendizaje eficiente.
En la pgina web http://xue.unalmed.edu.co/~walvarem/ encontrar ms detalles sobre los mtodos eficientes de estudio. En particular, y a manera de introduccin, se recomienda la lectura, el estudio, y aplicacin de las tcnicas explicadas en el documento Cmo aprender y estudiar una disciplina, usando los conceptos y herramientas del Pensamiento Crtico3, por Richard Paul y Linda Elder. Una clave fundamental es la de adquirir una actitud proactiva hacia el proceso de aprender, logrando desarrollar la capacidad de aprender a aprender. Un buen complemento de esta seccin est conformado por las lecturas adicionales del captulo 1 en la pgina Web, y por las diapositivas de la clase #1 en las cuales se presenta el esquema de las evaluaciones y las referencias a utilizar.
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 6 Clase# 1.- Evolucin y Desarrollo de los Computadores- Enfoque algortmico.
CONSTRUCCIN DE ALGORITMOS
Un algoritmo se elabora (construye) mediante ciertos componentes bsicos llamados ESTRUCTURAS. Desde la dcada de 1960s se vi que este enfoque, aunque sencillo, es muy til para representar secuencias de procesos (tareas, actividades, operaciones). Inicialmente, se plantearon y se aplicaron, en la solucin de problemas a travs de computadores, tres estructuras automticas bsicas: SECUENCIA, SELECCIN LGICA, ITERACIN (REPETICIN). Mediante estas tres estructuras es posible representar una gama muy amplia de algoritmos. La estructura de SECUENCIA es la estructura bsica de los algoritmos secuenciales, ya que todo algoritmo SECUENCIA LGICA de ciertas operaciones ( procesos, o tareas, o eventos). En la solucin de un problema existe una secuencia general, y dentro de ella muchas otras secuencias ms detalladas. La estructura de SELECCIN LGICA permite elegir entre dos o ms vas de accin (o alternativas). En un problema especifico, el conjunto de ALTERNATIVAS puede ser muy extenso. La estructura de ITERACIN es la REPETICIN de una o ms operaciones (o tareas, o procesos, o eventos). De antemano, puede conocerse o no cuntas veces se repetirn las operaciones. El conjunto de operaciones que se repite se llama RANGO DE ITERACIN. Si se conoce exactamente cuntas veces se repite el rango de iteracin, entonces la iteracin se llama iteracin definida; de lo contrario, recibe el nombre de iteracin indefinida. Figura 1.12 Etapas bsicas en la elaboracin de algoritmos secuenciales. Generalmente, en la solucin de un problema es posible identificar y representar un cierto conjunto de datos (constantes y/o variables), imprescindibles para efectuar clculos y obtener otros resultados; tales datos se llaman los datos de entrada. Con estos datos de entrada, y mediante ciertos mecanismos, son capturados y puestos a disposicin del algoritmo, el cual realiza con ellos una especie de transformacin mediante relaciones lgicas y operaciones de clculo; dichas operaciones se denominan de procesamiento. Como resultado de la etapa de procesamiento, el algoritmo suministra otros datos (constantes y/o variables) que constituyen la salida, o el resultado del algoritmo. Con los datos de salida se realiza un proceso de retroalimentacin, basado en el seguimiento exacto del flujo lgico del algoritmo (prueba de escritorio) para determinar si los resultados son congruentes con el anlisis y el diseo elaborados previamente, y con los resultados esperados. Esto es precisamente, una parte muy importante del proceso de diseo en Ingeniera4.
EJEMPLOS DE CONSTRUCCIN DE ALGORITMOS Como un primer ejemplo, considrese el problema de solucionar ecuaciones cuadrticas de la forma: AX2 + BX + C = 0. El anlisis es muy simple. Del lgebra5 se sabe que si se conocen los coeficientes A, B, C es posible calcular las races aplicando la frmula correspondiente, mostrada en la figura 1.13. FIGURA 1.13 Frmula para hallar las races de una ecuacin cuadrtica de la forma AX2 + BX + C = 0. 2
X = B B 4 AC 2A
El algoritmo es muy simple: (a) Conocer los coeficientes A, B, C; (b) Aplicar la frmula, obteniendo las
races. La figura 1.14 lo ilustra. FIGURA 1.14 Algoritmo secuencial para calcular las races de una ecuacin cuadrtica AX2 + BX + C = 0. Para calcular X1 se emplea la frmula X1 = (-B + Sqr(B^2 4*A*C))/(2*A). Y para calcular X2 se emplea la frmula siguiente: X2 = (-B - Sqr(B^2 -4*A*C))/(2*A). Aqu se emplea directamente la notacin algebraica usual para denotar variables, empleando, tambin, los parntesis para agrupar; Sqr() es una funcin de librera estndar que obtener raz cuadrada; los operadores aritmticos corresponden a las cuatro operaciones aritmticas (vase el capitulo 3 de la documentacin en PDF). Para sumar, el signo ms (+), para restar el signo menos (-); para multiplicar el asterisco (*); para dividir la diagonal (/), para asignar contenido se emplea el signo igual ( = ). Otros ejemplos adicionales de la elaboracin de algoritmos secuenciales se encuentran en la pgina web en formato HTML (problemas resueltos), y en la documentacin en formato PDF en el captulo 2.
0
4
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 7 Clase# 1.- Evolucin y Desarrollo de los Computadores- Enfoque algortmico.
Figura 1.15 Escritorio principal del entorno de desarrollo de aplicaciones Visual Basic 6.0 (1) es el formulario base de diseo, en el cual se dibuja la interfaz; (2) es la ventana exploradora de proyectos; (3) es la ventana de propiedades; (4) es la vcaja de herramientas, o caja de controles; (5) es la ventana de distribucin; (6) comprende la barra de ttulo y control, el men principal tipo barra, y la barra de herramientas.
El proceso de elaborar un proyecto, en este entorno, consta de tres tiempos: (1) En el tiempo de diseo se dibuja 2 5 la interfaz, se establecen propiedades de los objetos, y se escribe el cdigo fuente (el algoritmo escrito en la sintaxis 3 4 del Lenguaje de Programacin). (2) Tiempo de ejecucin, en el cual se ejecuta efectivamente la programacin elaborada a travs de la interfaz y de los programas escritos; el algoritmo debe recibir los datos de entrada, efectuar los clculos respectivos, y suministrador los resultados. Si hay errores se llega el tercer tiempo. (3) Tiempo de depuracin, en el cual se corrigen los errores que se presentan en la ejecucin del proyecto; normalmente, para que se reciban las correcciones hechas, se debe detener el tiempo de ejecucin y reiniciarlo.
0
Marca registrada de Microsoft Corporation. Esta versin se utiliza bajo licencia, dentro del convenio existente entre la Universidad Nacional y la empresa Microsoft (Campus Agreement). 7 2003 Fundacin para el Pensamiento Crtico http://www.criticalthinking.org . (Op. Cit.).
6
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 8 Clase# 1.- Evolucin y Desarrollo de los Computadores- Enfoque algortmico.
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
Clase #2
ESTRUCTURAS DE SECUENCIA Y SELECCIN LGICA
Evolution. Fuente: R.B. Muhama.( Kent State University, 2004,.http://www.cs.kent.edu/~rmuhamma/)
Uno de los primeros logros de la Teora de Algoritmos fue el de establecer y aplicar las estructuras automticas bsicas mediante las cuales es posible expresar y representar una gama muy amplia de algoritmos. Ya hacia finales de la dcada de 1960's, en 1967 y 1968, se reunieron grupos de expertos en Europa y Norteamrica para tratar de formalizar un enfoque slido de ingeniera, basado en la lgica y en la matemtica, para la emergente disciplina de elaborar programas para computador, usualmente denominada Ingeniera de Software, o Ingeniera de Programacin de Computadores. Desde estos primeros esfuerzos se pudieron identificar tres estructuras bsicas presentes en muchos procesos naturales y artificiales: secuencia, seleccin lgica e iteracin. Surgi, as, un enfoque estructurado para programar, denominado Programacin estructurada, cuyo boom se dio en la dcada de 1970's y que ha sido la base para los otros paradigmas tecnolgicos que surgieron en los aos 1980's y 1990's.
2.1 LA ESTRUCTURA
DE SECUENCIA
La estructura de secuencia establece el orden lgico de ejecucin de los procesos u operaciones dentro de un algoritmo. Para nuestro caso, en la cultura occidental, dicho orden es de arriba a abajo y de izquierda a derecha. Cada proceso se representa por medio de un rectngulo.
FIGURA 2.1 Conceptualizacin diagramtica de la estructura de secuencia.
Antes de poderse ejecutar la serie de operaciones Sn es preciso ejecutar la serie ordenada S1, S2, S3, ..., Sn1. A su vez, cada una de la serie de operaciones Si se ejecuta con el mismo sistema de orden lgico: de arriba a abajo y de izquierda a derecha. Incluso, dicho sistema lgico de ejecucin est implementado a nivel de hardware (microprocesadores y circuitos lgicos) y a nivel de software (lenguajes de programacin).
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ lenguaje de programacin empleado (Visual Basic). Este sistema de representacin de los algoritmos tambin se llama diagrama N-S en honor a sus inventores y propulsores. Varias ventajas posee este tipo de diagramacin algortmica: Es compacto, permitiendo representar y visualizar en poco espacio el flujo lgico de un algoritmo. Obedece a la norma heurstica en el rea informtica, segn la cual un algoritmo ha de estructurarse en bloques lgicos coherentes cuya visualizacin no exija ms de una pgina tamao carta. Esto es as debido al condicionamiento cultural de occidente, en el cual desde las ms tempranas etapas del proceso educativo se nos capacita para entender pginas de datos, de textos. Es visual, obedeciendo a la regularidad emprica de que una imagen vale ms que mil palabras. Y actualmente, se ajusta a los condicionamientos culturales de la imagen como medio portador e instrumentador de informacin. Induce al pensamiento estructurado, base de todas las corrientes tecnoinformticas de las ltimas dcadas, permitiendo utilizar las estructuras automticas bsicas de una manera concisa y coherente. Es una herramienta muy til para expresar los procesos de refino en la estructuracin de una solucin algortmica para un problema especfico, facilitando la estructuracin modular de los algoritmos, siendo cada mdulo, o bloque, un procedimiento o una funcin que puede representarse diagramticamente en forma independiente. Al ser una notacin estndar que se ha utilizado en las ltimas cuatro dcadas, es un lenguaje fcilmente reconocible y aplicable en muchas situaciones prcticas dentro de las organizaciones. Tambin, diversos manuales e instructivos emplean este tipo de representacin. Y es especialmente til para las personas que se inician en la programacin de computadores, por cuanto los induce al anlisis y diseo estructurado de algoritmos.
2.4 LA ESTRUCTURA
DE SELECCIN LGICA
Es la representacin algortmica de la serie de procesos lgicos de pensamiento que permiten tomar una decisin. Corresponde a la expresin sencilla de opcionalidad: Si ... Entonces, que es la base de la eleccin de una alternativa especfica, tanto a nivel conceptual como prctico. Diagramticamente se representa como se ilustra en la figura 2.2, mostrada a continuacin:
If (Clog)Then '... operaciones Sv Else ' ... operaciones Sf End If
Sintaxis propia del lenguaje. La sentencia If evala una condicn lgica, Clog; si el valor de verdad de Clog es cierto, entonces se ejecuta el conjunto de opearciones Sv; de lo contrario, se ejecutar Sf. Slo se ejecuta una de las d i T d If i E d If FIGURA 2.2 Estructura de Seleccin Lgica: (a) - Diagrama estructurado; (b) Sintaxis en Visual Basic.
(a)
(b)
El smbolo diagramtico para la Estructura de Seleccin Lgica consta de un rectngulo, dividido proporcionalmente- en tres rectngulos: uno superior y dos inferiores. El rectngulo superior se divide a su vez- en tres tringulos, por medio de dos lneas que se originan en el extremo superior del segmento que separa los dos rectngulos inferiores. En el tringulo del centro va la condicin lgica, y en los otros dos tringulos respectivamente- sus valores de verdad. En cada rectngulo inferior van las correspondientes secuencias de operaciones a ejecutar segn el valor de verdad que adopte la condicin lgica. Esta estructura es automtica, y tambin se llama de decisin lgica, o de transferencia de control, y permite elegir uno de varios caminos lgicos a seguir dentro de un algoritmo. En el esquema de la figura anterior, que es la representacin diagramtica de la estructura, CLog es una condicin lgica que se evala. Si dicha evaluacin da verdadero, o V, entonces se ejecuta la serie de operaciones Sv; si la evaluacin da falso, o F, entonces se ejecuta la serie de operaciones Sf. A la derecha se presenta la codificacin como se escribe en Visual Basic, por ejemplo; la comilla simple significa comentarios (ignorados a tiempo de ejecucin). En un caso particular, por ejemplo si la condicin lgica es A > B, slo se ejecutar una de las dos posibilidades; nunca las dos a la vez, como se muestra en el diagrama y programa siguientes.
If (A > B)Then '... operaciones Sv MAX = A Else ' ... operaciones Sf MAX = B End If
Aqu la condicin lgica evaluada, Clog, es A > B; si es cierta, entonces se ejecuta la asignacin MAX = A ( conjunto de operaciones Sv); de lo contrario, se ejecutar la asignacin MAX = B (conjunto de operaciones Sf). FIGURA 2.3 Un ejemplo de la utilizacin de la estructura de seleccin lgica: (a) Diagrama estructurado; (b) Programa Visual Basic.
(a) (b) __________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 10 Clase# 2.- Estructuras de Secuencia y Seleccin Lgica
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ Si la condicin lgica es verdadera, entonces se ejecutar la instruccin MAX = A; si la condicin lgica es falsa, entonces se ejecutar la instruccin MAX = B. Los comentarios slo sirven para documentar, explicar o describir, los programas con el fn de que las personas los puedan entender mejor. Despus de que se haya ejecutado la serie de operaciones pertinente al resultado de la evaluacin de la condicin lgica, la secuencia lgica de ejecucin continuar con la instruccin que sigue a la seleccin lgica. MAX = A es una asignacin de memoria, pues las variables MAX, A son una localizaciones de memoria interna; el signo igual (=) es el operador de asignacin de memoria, y su funcionalismo consiste en evaluar la expresin a su derecha (puede ser toda una frmula compleja) y el resultado asignarlo a la variable ubicada a su izquierda (en este caso MAX). Como resultado, la variable MAX cambia su contenido, pues la asignacin de memoria es destructiva. Esta estructura, as representada, es automtica, es decir que slo es preciso utilizar la sintaxis diagramtica mostrada para expresar todo el proceso de seleccin lgica que internamente la mquina realizar. La estructura de seleccin lgica puede efectuar mltiples evaluaciones de una condicin lgica o de una variable, como se ilustra en el diagrama y programa siguientes:
If (K = 1)Then '... operaciones A ElseIf (K = 2)Then ' ... operaciones B ElseIf (K = 3)Then ' ... operaciones C ElseIf (K = 4)Then ' ... operaciones D ElseIf (K = 5)Then ' ... operaciones E Else ' ... operaciones F End If
Aqu la condicin lgica evaluada, Clog, es K ; si K es 1, entonces se ejecutan las operaciones A; si es 2, las operaciones B; y as sucesivamente. La sentencia ElseIf permite evaluar cada una de las condiciones lgicas. La sentencia Else ejecutar el conjunto de operaciones correspondientes a otro valor de K.
FIGURA 2.4 Estructura de Seleccin Mltiple. (a) Diagrama estructurado; (b) Programa en Visual Basic.
(a) En dicho caso, se dice que es de ramificacin mltiple, cuyo esquema diagramtico es el que se ilustra. Si la variable K toma el valor de 1, entonces se ejecutar la serie de operaciones A; si toma el valor de 2, se ejecutar B, y as sucesivamente. Esta estructura tambin es automtica, y en los lenguajes de programacin de computadores tiene varias implementaciones, como se ver ms adelante. Se aconseja utilizar la estructura If ... ElseIF ... End If cuanto se presentan ramificacin mltiple en los algoritmos y programas, por cuando slo es necesario cerrar un If. Ejemplo #1 de seleccin lgica: Dados tres valores numricos, determinar cul es al mayor de ellos. Solucin: Sean A, B, C los tres valores numricos. El mayor de los tres es el que sea a la vez- mayor que los otros dos. Esto plantea tres posibilidades: (1) Si A > B y a la vez A > C, entonces el mayor es A; (2) si B > A y a la vez B > C, entonces el mayor es B; (3) si C > A y a la vez C > B, entonces el mayor es C. Este es el algoritmo bsico (vase la figura 2.5). If (A > B And A > C)THEN Text4 = A es el mayor ElseIf (B > A And B > C)Then Text4 = B es el mayor ElseIf(C > And C > B)Then Text4 = C es el mayor End If (a) (b) Slo se presenta la estructura de Seleccin Lgica. La instruccin LEER y el uso de un control tipo cajatexto, Text4, se explican ms adelante. En el captulo 3 se tiene un resumen de la sintaxis del lenguaje de programacin.
(a)
FIGURA 2.5 Ejemplo # 1: (a) Diagrama estructurado de lgica; (b) Programa en Visual Basic.
En este ejemplo, figura 2.5, se presenta un algoritmo dentro de varios posibles. El programa (codificacin) tambin admite varias posibilidades. Puede usted encontrar otras variantes?. En el programa se ha empleado el operador lgico And para concatenar __________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 11 Clase# 2.- Estructuras de Secuencia y Seleccin Lgica
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ dos relaciones lgicas (vase en el captulo 3 de la documentacin online la seccin sobre los operadores). En las guas prctica#1 y prctica#2 se explica sobre los diferentes controles que se manejan en Visual Basic 6.0. Ejemplo #2 de seleccin lgica: Dados tres segmentos de lnea recta, determinar si forman un tringulo, y decir cul tipo de
tringulo es: equiltero, issceles o escaleno.
Solucin: De la Geometra Euclidiana se sabe que en todo tringulo cada lado es mayor que la suma de los otros dos. Adems, el tringulo equiltero tiene sus tres lados iguales, el issceles slo tiene dos lados iguales, y en el escaleno los tres lados son diferentes entre s. El algoritmo, entonces, tiene los siguientes pasos: 1. Conocer los tres segmentos de recta (saber su tamao en alguna unidad de medida). (Nota: A este proceso se le llama genricamente LEER). 2. Si se cumple a la vez que A > B + C y B > A + C y C > A + B, entonces los tres segmentos forman triangulo; de lo contrario, no forman tringulo y el algoritmo termina. 3. Si los tres segmentos forman tringulo, entonces si A = B y A = C, el tringulo es equiltero; si A = B pero A C, A = C pero A B, B = A pero B C, B = C pero B A, C = A pero C B, C = B pero C A, el tringulo es issceles; si A B y a la vez B C, el tringulo es escaleno.
En este ejemplo es necesario utilizar una expresiones lgicas compuestas (vase el captulo 3). Por ejemplo, para determinar si los tres segmentos forman tringulo, la variable lgica T tendra asignada la siguiente expresin lgica: T = (A > B + C) And (B > A + C) And (C > A + B) Que el evaluarse deber dar una de dos posibilidades: Falso (False) Verdadero (True). Entonces, se preguntara por el valor de verdad de la variable T. Para el caso de determinar el tipo de tringulo, pueden emplearse las variables lgicas Te para tringulo equiltero, Ti para tringulo issceles, Ts para tringulo escaleno, y cuyas expresiones lgicas asignadas seran:
Te = (A = B) And (A = C), Ti = ((A = B) And (A <> C)) Or ((A =C ) And A <> B)) Or ((B = C) And B <> A) , Ts = (A <> B) And (B <> C)
Un diagrama de lgica es el que muestra a continuacin, figura 2.6, en el cual para abreviar- se emplean las definiciones de T, Ti, Te, Ts especificadas.
T = (A > B + C) And (B > A + C) And (C > A + B) If(T)Then Te = (A = B) And (A = C) Ti = ((A=B) And A <> C) Or ((A=C) And A <>B) Or ((B=C) And B<>A) Ts = (A <>B) And (B <>C) If(Te)Then Txt4 = Tringulo equiltero ElseIf(Ti)Then Text4 = Tringulo issceles ElseIf(Ts)Then Ts = Tringulo escaleno End If Else Text4 = No hay Tringulo End If
(a) (b)
FIGURA 2.6 Ejemplo # 2: (a) Diagrama estructurado de lgica; (b) Programa en Visual Basic.
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ Ejemplo nmero 3 de seleccin lgica Problema: En una promocin comercial, un almacn ha instalado en las cajas registradoras ciertas urnas de las cuales los usuarios pueden extraer, al momento de pagar su compra, una balota. Las balotas estn numeradas de 1 a 5. Si se extrae la balota con el nmero 1, entonces el descuento hecho al cliente es del 20%; si es la 2, ser del 15%; si es la 3, es del 10%; si es la 4, ser del 5%; y si se extrae la balota nmero 5 no se da descuento. Elaborar un algoritmo, representado mediante un diagrama estructurado de lgica. Solucin: Puede emplearse una estructura de ramificacin mltiple, como se ilustra en la figura 2.7.
If (Balota = 1)Then D = 20 ElseIf (Balota = 2)Then D = 15 ElseIf (Balota = 3)Then D = 10 ElseIf (Balota = 4)Then D=5 ElseIf (Balota = 5)Then D=0 End If Text1 = Compra = & Str(C*(1-(D/100)))
La instruccin If .. ElseIf ... End If es especialmente apropiada para codificar en el lenguaje una ramificacin mltiple.
(a)
(b)
FIGURA 2.7 Ejemplo # 3: (a) Diagrama estructurado de lgica; (b) Programa en Visual Basic.
Segn el anlisis de resultados, en algunas categoras de problemas, habr que repetir desde la etapa 1 proceso denominado Refino- para depurar, mejorar, redisear, realimentar el algoritmo y sus especificaciones.
0
1
Grogono, Peter and Nelson, Sharon: Problem Solving and Computer Programming, 1985 (Op. Cit.) // MIT Open CourseWare: Introduction to Computer and Engineering Problem Solving, 2002 2007. // Fogler, H. Scott and LeBlanc, Steven E.: Strategies for Creative Problem Solving, 2nd Edition, 2007. 2 Fogler, Montgomery and Zipp, Comp, Appl. in Eng. Educ., Vol 1(1), p. 11-12, September/October 1992. 3 Engineering A Creative Profession..
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
En la figura 2.8 se ilustra el diseo de una interfaz para el problema del tringulo. En dicho problema, se trata de determinar si tres segmentos de recta forman un tringulo (vase el ejemplo #2). Controles para la entrada de datos: un LABEL despliega texto; un TEXTBOX despliega y recibe datos. Control tipo BotonComando que contiene programacin Controles tipo TEXTBOX para desplegar los resultados.
FIGURA 2.8 Una Interfaz Grfica de Usuario diseada para el problema de determinar si tres segmentos de recta forman un tringulo. Los segmentos de recta se leen en sendos controles tipo cajatexto.
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ CD1, CD1.ShowOpen abre un panel de dilogo para cargar un archivo), o interaccin del proyecto con el Sistema Operativo ( como por ejemplo ChDir que cambia el directorio de ubicacin); (iv) las Estructuras Bsicas de Programacin, como son La Secuencia (cada procedimiento es una secuencia arriba-debajo de instrucciones, y en cada instruccin el orden de ejecucin es de izquierda a derecha), la Seleccin Lgica If End If para tomar decisiones, For Next para efectuar repeticiones. Un programa se estructura con una secuencia ordenada arriba/abajo- de instrucciones sintcticamente vlidas del lenguaje; dicha secuencia refleja los procesos lgicos de un algoritmo que resuelve un problema planteado. En este sentido, el entorno de programacin de computadores se asimila a un entorno de laboratorio virtual dentro del cual rpidamente- se puede indagar por el efecto de ciertos cambios en las variables y constantes, y sus relaciones, que representan la estructura lgica de un problema. Por ejemplo, en la figura 2.9(a) se muestra el algoritmo que resuelve el problema de hallar el mayor valor de un conjunto de datos; la figura 2.9(b) es el programa respectivo.. (a) N = Val(Text1) Max = 0 For K = 1 To N X = InputBox(X:) If(X > Max)Then Max = X End If Next K (b) FIGURA 2.9 Comparacin entre algoritmo y programa en la solucin de un problema. El algoritmo aqu, figura 2.9(a), se representa por medio de un diagrama rectangular estructurado; sin embargo, puede emplearse cualquier otra tcnica de representacin algortmica. La figura 2.9(b) es la representacin en el lenguaje de programacin Visual Basic, a partir de una interfaz diseada, en la cual mediante un control tipo cajatexto se lee el valor de la variable N (nmero de datos).
0
5
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
Clase #3
ESTRUCTURA DE ITERACIN ACUMULADOR/CONTADOR
Evolution. Fuente: R.B. Muhama.( Kent State University, 2004,.http://www.cs.kent.edu/~rmuhamma/)
Uno de los primeros logros de la Teora de Algoritmos fue el de establecer y aplicar las estructuras automticas bsicas mediante las cuales es posible expresar y representar una gama muy amplia de algoritmos. Ya hacia finales de la dcada de 1960's, en 1967 y 1968, se reunieron grupos de expertos en Europa y Norteamrica para tratar de formalizar un enfoque slido de ingeniera, basado en la lgica y en la matemtica, para la emergente disciplina de elaborar programas para computador, usualmente denominada Ingeniera de Software, o Ingeniera de Programacin de Computadores. Desde estos primeros esfuerzos se puedieron identificar tres estructuras bsicas presentes en muchos procesos naturales y artificiales: secuencia, seleccin lgica e iteracin. Surgi, as, un enfoque estructurado para programar, denominado Programacin estructurada, cuyo boom se di en la dcada de 1970's y que ha sido la base para los otros paradigmas tecnolgicos que surgieron en los aos 1980's y 1990's.
3.1 LA ESTRUCTURA
DE ITERACIN
La estructura de Iteracin permite repetir una serie de instrucciones dentro de un algoritmo. Dicha repeticin puede ser definida o indefinida. La iteracin es definida cuando de antemano se sabe cuntas veces se repetir el conjunto de instrucciones; es indefinida cuando de antemano no se sabe cuntas veces se repetir el conjunto de instrucciones, y en este caso el proceso repetitivo finalizar cuando se cumpla una cierta condicin especificada para lograr la finalizacin de los ciclos repetitivos. La figura 3.1 ilustra la iteracin definida. FIGURA 3.1 Esquena diagramtico de la iteracin definida.
En este esquema se ilustra la representacin diagramtica de la iteracin definida, para la cual se conoce de antemano cuntas veces se va a repetir un conjunto de instrucciones. Antes de ejecutarse este proceso iterativo, la variable N debe estar definida de antemano. De ah, que a este tipo de iteracin se le denomina precisamente- iteracin definida. El smbolo diagramtico consta de dos rectngulos, uno mayor que el otro, que comparten dos lados, el derecho y el inferior (vista frontal). El rectngulo mayor encierra a toda la estructura iterativa, implicando que es un proceso que se ejecuta antes de pasar al proceso siguiente. El rectngulo menor encierra las instrucciones que se repiten. Ese es el rango de iteracin. Encima del rectngulo menor se escribe la asignacin que define los parmetros bsicos de iteracin: la variable K es el ndice de iteracin; el signo igual (=) le asigna contenidos a la variable K; a la derecha del signo igual vista frontal- se escriben los lmites inferior y superior del recorrido de K, separados por una coma. As, la expresin K = 1, N significa que el ndice K toma valores en el intervalo [1, N], incluidos ambos lmites, con incremento unitario (de 1). La estructura es automtica. Esto significa que el ndice K automticamente se inicializa en el lmite inferior (en la figura es 1); ejecuta la secuencia de operaciones definida por el rango de iteracin (S1 en la figura), y al final de tal ejecucin K se incrementa en 1; evala el valor (o contenido) de K con respecto al lmite superior (en la figura es N): si es cierto que K es mayor que el lmite superior (K > N), entonces termina la iteracin y el algoritmo continua con la siguiente operacin; si el valor de K es menor o igual que el lmite superior (K N), entonces se repite el conjunto de operaciones definido por el rango de iteracin (S1 en la figura 3.2). __________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 16 Clase# 3.- Estructura de Iteracin Acumulador/Contador
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
For K = 1 To N ' ... rango de repeticin ' ... S1 ' ... S2 ' ... ' ... Sn Next K
Sintaxis propia del lenguaje. La sentencia FOR K = 1 To N inicia el proceso de iteracin, estableciendo el ndice de iteracin (K), el lmite inicial (1), el lmite final (N), y el incremento (como es unitario se omite). La sentencia Next K demarca hasta donde llega el rango iterativo, e incrementa a K en 1, y evala su contenido.
(a)
(b)
FIGURA 3.2 Iteracin definida: (a) Diagrama estructurado; (b) - Sintaxis del lenguaje Visual Basic. La expresin FOR K =1 To N significa que se itera desde K igual a 1 hasta K igual a N. La secuencia de operaciones S1, S2, ..., Sn se denomina el rango de iteracin y puede estar conformado por una nica instruccin o por una serie muy grande de instrucciones. Este proceso iterativo, as expresado, es automtico e internamente la estructura tiene los controles especficos para determinar cuando se contina la iteracin o cuando se termina. Como se dijo anteriormente, antes de iniciarse la iteracin, el valor de la variable N debe estar previamente definido. Despus de salir de la iteracin, el valor del ndice de iteracin K es N + 1, por cuanto se ha de iterar hasta K = N inclusive. El paso, o el valor del incremento, en la representacin mostrada, es unitario; es decir, que el ndice de iteracin tomar valores de 1, 2, 3, hasta N. Es posible que el incremento sea diferente de la unidad. En general, el incremento puede ser una variable o una constante. En la figura 3.3 se explica con ms detalle todos los elementos implicados en la estructura de Iteracin Definida, como se esquematiz en las figuras 3.1 y 3.2.
(a)
(b)
FIGURA 3.3 Iteracin definida: (a) Elementos constitutivos de la instruccin de Iteracin Definida en Visual Basic; (b) - Diagrama esquemtico. La sintaxis genrica de la instruccin de Iteracin Definida, en el lenguaje Visual Basic, se esquematiza en la figura 3.4.
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ For variable = exp_inicio To exp_final Step incr [Accin 1] [Accin 2] [Accin n] Next variable FIGURA 3.4 Sintaxis genrica de la Iteracin definida.
Con respecto a la iteracin definida expuesta en las figuras 3.2, 3.3 y 3.4 es necesario anotar lo siguiente: Si el incremento es unitario, puede escribirse o no: For K = 1 To N Step 1 tiene el mismo efecto que escribir la instruccin de iteracin definida as: For K = 1 To N. Si el incremento No es unitario, hay que escribirlo siempre: For X = -10.0 To 10.0 Step 2.5. Si exp-inicio > exp_final la iteracin no se ejecuta ni una sola vez. Por ejemplo For K = 1 To N, siendo N = 0, implica que el rango de iteracin no se ejecuta. El incremento puede ser negativo, convirtindose en un decremento, como en el siguiente caso: T = MAX, MIN, -2 para el cual el ndice de iteracin T tomar valores decrecientes desde un valor MAX hasta un valor MIN con decremento de 2.
Ejemplo #1 de iteracin definida: Para un conjunto de valores numricos determinar cul es el mayor de todos.
Elaborar un algoritmo y representarlo con un diagrama de lgica. Solucin: Un forma de hacer este algoritmo es obtener (leer) el primer nmero; luego, obtener el segundo y compararlo con el primero, llevando el mayor a una variable, por ejemplo, MAX; despus, obtener el tercero y compararlo con MAX, si el tercero es mayor que MAX entonces MAX toma el valor del tercero; el proceso se contina hasta que se haya obtenido el ltimo nmero. Se suponen N nmeros en total. Se emplea una variable X para contener cada nmero ledo (vase la figura 3.5). La lectura del nmero de datos, N, y del primer valor, en X, se hace por medio de controles cajatexto en rl programa. Dentro de la iteracin, se lee cada valor con la funcin InputBox() que genera una ventana de entrada de datos. La instruccin de seleccin lgica, IF, se utiliza en su formato ms simple el cual no requiere cerrar con end If por cuanto el rango es una nica instruccin MAX = X.
N = Val(Text1) X = Val(Text2) MAX = X FOR K = 2 TO N X = InputBox(Valor=) If(X > MAX)Then MAX = X NEXT K Text3 = Mayor = & STR(X) (a) (b)
FIGURA 3.5 Ejemplo #1 de la Iteracin definida: (a) Diagrama estructurado; (b) Sintaxis en el lenguaje Visual Basic. En el conjunto de valores numricos que se emplee deberan mezclarse nmeros negativos y nmeros positivos. Cmo puede afectar esto el resultado obtenido? Tambin puede aprovecharse este algoritmo para calcular el menor valor, MIN. Cmo lo hara usted? Igualmente, elabore proyectos Visual Basic con datos de prueba.
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ Ejemplo #2 de iteracin definida: Un ingeniero desea obtener datos para trazar una curva que determine la carga (S) en funcin de la relacin de esbeltez (R). Ha seleccionado de un manual dos frmulas empricas que dan la carga permisible en dos intervalos de variacin de la relacin de esbeltez1. Las frmulas son las mostradas en las ecuaciones 3.1. Elabore un algoritmo que calcule S para valores de R en el rango [50,300] y variando con incrementos de 10. Solucin: El empleo de la iteracin definida es directo. Se puede utilizar la variable R como ndice de iteracin, variando desde 50 a 300 con incrementos de 10, y para cada valor de R aplicar la frmula respectiva segn el valor dentro del rango dado. La figura 3.6 presenta el algoritmo y el resultado de un proyecto Visual Basic. (3.1)
For R = 50 To 300 STEP 10 If(R < 120)THEN S = 17000-0.485*R^2 Else S = 18000/(1+((R^2)/18000)) End If Text1 = Str(R) & vbTab & Str(S) & vbCrLf Next R
(c)
(a)
(b)
FIGURA 3.6 Ejemplo #2 de la Iteracin definida: (a) Diagrama estructurado; (b) Sintaxis en el lenguaje Visual Basic (c) Resultados obtenidos con un proyecto Visual Basic.
Esta es una muestra de un posible resultado, en forma tabular, del algoritmo descrito en este ejemplo. El control cajatexto Text1, al cambiarle las propiedades MultiLine a True y ScrollBars a 3-Both permite desplegar muchas lnes de texto. La constante vbCrLf se usa para el cambio de lnea.
Ejemplo #3 de iteracin definida: Elaborar un algoritmo para calcular la raz cuadrada de los primeros 100 nmeros
naturales pares Solucin: El empleo de la iteracin definida, con incremento diferente de 1, permite generar rpidamente muchos resultados, como se muestra en la figura 3.7. For j = 2 To 200 Step 2 txt_R = j = & j & vbtab & _ Sqr & j & ) = & Sqr(j) & _ vbCrLf Next j (b) (a)
Private Sub Form_Load() txt_R = "Nos. PARES Y SUS RACES" & vbCrLf & _ String(30,_) & vbCrLf (c) En d S u b
(d)
txt_R = txt_R & "J=" & j & vbTab & "Sqr(" & j & ")= " & Sqr(j) & vbCrLf
Empleando concatenacin y asignacin se obtienen los resultados mostrados. El ttulo se hace en el evento Load() del formulario. vbTab, vbCrLf son constantes string de Visual Basic 6.0. La funcin String() concatena caracteres.
FIGURA 3.7 Ejemplo #3 de la Iteracin definida: (a) Sintaxis en el lenguaje Visual Basic; (b) Interfaz diseada en el proyecto; (c) Procedimiento Load() para los ttulos; (d) Para cada valor del ndice j se ejecuta esta asignacin.
0
1
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
(a)
FIGURA 3.8 Ejemplo de acumulador: (a) Diagrama estructurado; (b) Sintaxis en el lenguaje Visual Basic. Es sorprendente saber que este es el proceso mediante el cual todo computador ejecuta las operaciones ms complejas: sumas de los trminos de series, pues toda operacin aritmtica o matemtica puede convertirse a una sumatoria de los trminos de una serie. La ventaja de los computadores es que realizan extremadamente rpido dichas sumas (del orden de 10-6 segundos para los PC's, hasta 10-18 segundos para los supercomputadores), y en trminos de la velocidad de respuesta de los sentidos humanos (del orden de 10-3 segundos) parece que el proceso fuera instantneo. Una vez entendido lo que es un acumulador, el concepto de contador es directo: un contador es un acumulador con incremento unitario. Si NP es una variable que se incrementa una unidad en cada iteracin, dentro de un proceso de N iteraciones, el efecto final es que se ha efectuado un proceso de conteo. En el diagrama y programa ilustrados en la figura 3.9, se cuenta el nmero de valores que son mayores que cero (positivos) y esa cantidad se almacena en la variable NP.
NP = 0 For K = 1 to N X = InputBox("X = ") If (X > 0) Then NP = NP + 1 Next K La variable NP debe ser de tipo entero. Se inicializa en cero con el fn de garantizar el inicio correcto del conteo. El formato de seleccin lgica empleado es el ms simple y no requiere usar End If. Esto se puede hacer siempre que el rango de la seleccin lgica sea una nica instruccin.
(a)
(b)
FIGURA 3.9 Ejemplo de contador: (a) Diagrama estructurado; (b) Sintaxis en el lenguaje Visual Basic. __________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 20 Clase# 3.- Estructura de Iteracin Acumulador/Contador
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
Ejemplo de acumulador: Para la siguiente serie calcular la suma de los N primeros trminos, 1 < X < 2:
X X 3 X 5 X 7 X 9 + + ... 3 7 11 15 19
N = Val(Text1) : X = Val(Text2) Suma = 0.0 : D = 3 For K = 1 To N Ter = (X^(2*K-1)) / D Suma = Suma + Ter D=D+4 Next K Text3 = Suma = & Suma (a) (b)
La asignacin de acumulacin, Suma = Suma + Ter, repetida N veces emula el clculo de la sumatoria. El signo igual (=) es el operador de asignacin (vase el captulo 3, seccin 3.2) cuyo efecto consiste en evaluar la expresin ubicada a su derecha (vista frontal) y el resultado asignarlo a la variable ubicada a su izquierda. El esquema se muestra en la figura 3.11.
FIGURA 3.10 Ejemplo de acumulador: (a) Diagrama estructurado; (b) Sintaxis en el lenguaje Visual Basic. FIGURA 3.11 La Instruccin de Asignacin de Memoria.
sigue
Calcula el factorial
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
Clase #4
ESTRUCTURA DE ITERACIN INTEGRACIN NUMRICA
Evolution. Fuente: R.B. Muhama.( Kent State University, 2004,.http://www.cs.kent.edu/~rmuhamma/)
El problema de encontrar la solucin numrica de una integral definida es un problema comn de ingeniera. Estos mtodos numricos se utilizan cuando los mtodos analticos no son fciles de aplicar, o simplemente cuando no se pueden aplicar. Por ejemplo, la siguiente integral -mostrada en la ecuacin 4.1- no tiene solucin analtica:
La estrategia bsica de los mtodos de integracin numrica consiste en aproximar la integral a una sumatoria, lo cual implica utilizar la iteracin definida. La ecuacin 4.2 es la esquematizacin matemtico-conceptual de dicha estrategia:
1 x2 / 2 e dx 2
(4.1)
(4.2)
MTODO RECTANGULAR
En el mtodo Rectangular, se divide el intervalo [a, b] en subintervalos (franjas o tiras) igualmente espaciados, y cada franja Ai se considera como un rectngulo (vase la figura 4.1). La integral se aproxima por la sumatoria de los rectngulos.
Ai
Y= f(x)
FIGURA 4.1 Elementos bsicos a considerar en el Mtodo Rectangular de Integracin Numrica: (a) esquema de los subintervalos; (b) - Aproximacin de la integral.
(a) (b)
f ( x)dx Ai
i =1
a
0
1 2
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ En la figura 4.2 se esquematiza cada franja de las mostradas en la figura 4.1; cada franja tiene una altura f(x) y un ancho , que se calcula as: = (b-a)/n . El rea de cada franja est dada por Ai = *f(x), siendo en general- cada franja diferente de las otras. f(x) 1 1 1) Se declaran x, , n, a, b, Suma f (x) = + 6 2) a, b, n son definidos por el usuario 2 (x 0.3) + 0.01 (x 0.9)2 + 0.04 3) =(b-a)/n 4) Para i=0,,n-1 (c) x = a + i* Suma = Suma + f(x)* Ai (a) 5) Se imprime Suma Private Function f(X As Single) As Single f = 1 / ((x - 0.3) ^ 2 + 0.01) + 1 / ((x - 0.9) ^ 2 _ + 0.04) - 6 (b) (d) End Sub
x+
FIGURA 4.2 El Mtodo Rectangular: (a) Esquema de cada franja; (b) Esquema general del algoritmo; (c) Frmula de la funcin f(x) empleada; (d) Sintaxis de la funcin f(x) en el Lenguaje Visual Basic. La figura 4.3 muestra un esquema grfico de la funcin f(x), cuya frmula es la que aparece en la figura 4.2(c), y una interfaz Visual Basic con los resultados del caso. FIGURA 4.3 El Mtodo Rectangular: (a) Esquema grfico de f(x); (b) Interfaz Visual Basic con resultados.
(a)
(b)
MTODO TRAPEZOIDAL
En el Mtodo Trapezoidal de Integracin Numrica se considera cada franja como un trapezio, como se ilustra en la figura 4.4.
Ai = [f(xi)+f(xi + )]*/2
Ai (a) X X+ (b) (c)
a, b, n son definidos por el usuario 3) =(b-a)/n 4) Para i=0,,n-1 x = a + i* Suma = Suma + f(x)* 5) Se imprime Suma
FIGURA 4.4 El Mtodo Trapezoidal: (a) Esquema de cada franja; (b) Frmula para calcular el rea de cada franja; (c) Esquema del algoritmo que utiliza la funcin f() definida en la figura 4.2(d).
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
MTODO DE SIMPSON
El Mtodo Simpson de Integracin Numrica proporciona una aproximacin ms precisa, ya que consiste en conectar grupos sucesivos de tres o ms puntos sobre la curva mediante parbolas de segundo grado, y sumar las reas bajo las parbolas para obtener el rea aproximada bajo la curva. La figura 4.5 ilustra varias frmulas del Mtodo Simpson.
(b)
Ai
n/ 2
n/ 2
f (x
i+1
) + f (b)
(c)
X
(a)
3 2 f ( x) + 3 f ( x + ) + 3 f ( x + ) + f ( x + ) 8 3 3
(d)
FIGURA 4.5 El Mtodo Simpson: (a) Esquema de cada franja; (b) Frmula para calcular el rea de cada franja, considerando tres puntos; (c) Frmula llamada de 1/3 para calcular el rea total; (d) Frmula de los 3/8. Empleando el esquema algortmico de la figura 4.2(b) es fcil implementar un proyecto en Visual Basic que emplee el Mtodo Simpson en cualquiera de sus variantes expuestas en la figura 4.5.
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
Clase #5
ESTRUCTURA DE ITERACIN INDEFINIDA RACES DE F(X )= 0
Evolution. Fuente: R.B. Muhama.( Kent State University, 2004,.http://www.cs.kent.edu/~rmuhamma/)
Adems de la iteracin definida, estudiada en las clases #3 y #4, se dispone de la Estructura de Iteracin Indefinida que se caracteriza porque de antemano se desconoce exactamente cuntas veces se repetir un conjunto de instrucciones (el rango iterativo). La figura 5.1 presentan dos esquemas diagramticos bsicos de este tipo de repeticin.
(a)
Do While (CondLog) ' ... rango de repeticin ' ... S1 ' ... S2 ' ...... ' ... Sn (b) Loop
FIGURA 5.2 La Iteracin Indefinida del tipo HAGA MIENTRAS QUE: (a) Esquema diagramtico; (b) En este formato de la sintaxis del lenguaje, la condicin lgica se evala al inicio; (c) En este formato de la condicin lgica se evala al final. Es decir, que si de entrada la condicin lgica es falsa, no se ejecutar el rango de iteracin conformado por la serie de procesos S1, S2, ..., Sn. Se saldr de la iteracin tan pronto la condicin lgica sea falsa. Como en el caso de la iteracin definida, el smbolo diagramtico de esta iteracin consta de dos rectngulos, uno ms pequeo dentro de otro mayor, que comparten un lado; la palabra MIENTRAS es requerida y es la que define el tipo de iteracin. En el programa mostrado, se ve que la eleccin de
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 25 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ esta palabra, para utilizarse en la diagramacin, obedece a que en los lenguajes se utiliza un comando exactamente igual (Do While = haga mientras). En el programa mostrado, la estructura iterativa se inicia con Do While (CLog) y se termina con Loop. Sin embargo, en la segunda variante de la sintaxis, la condicin lgica se evala al final. Es decir, que por lo menos- se ejecuta una vez el rango iterativo de instrucciones.
Ejemplo #1 de iteracin indefinida: Para dos nmeros enteros M, N, hallar el Mximo Comn Divisor (mcd)
utilizando el algoritmo de Euclides. Solucin: Como se estableci en el captulo 2 de la documentacin, el algoritmo de Euclides consta de los siguientes pasos: (1) Dividir el nmero mayor (dividendo),M, entre el nmero menor (divisor), N. Esto da en general- un cociente y un residuo. (2) El nuevo dividendo es el divisor anterior, y el nuevo divisor es el residuo anterior. (3) Se repite el paso 2 mientras el residuo sea diferente de cero. (4) Cuando el reisduo sea cero se termina el algoritmo. El mcd es el ltimo divisor. El la figura 5.3 se ilustra un diagrama estructurado de lgica para el proceso del algoritmo de Euclides. Obsrvese que la variable R, el residuo, se inicializa en un valor diferente de cero con el fn de ejecutar la iteracin desde el principio ( en este caso, R = 77); tambin, dentro de la iteracin indefinida es necesario preguntar si R <> 0 para poder definir cuando se ha obtenido el mcd, o realizar las sustituciones de dividendo y divisor. (a) M = InputBox(M = ) N = InputBox(N = ) R = 77 Do WHILE (R <> 0) C=M\N:R=MC*N If (R <> 0)Then M=N:N=R Else MCD = N End If Loop Text1 = MCD = & MCD M \ N significa divisin en aritmtica entera (vase la seccin 3.2). Mediante dos puntos se separan dos, o ms instrucciones, en una misma lnea de programa. Para obtener el residuo se resta del dividendo el producto del cociente por el divisor, R = M C * N. Cuando R = 0 la iteracin termina y en N estar contenido el ltimo divisor.
(b)
FIGURA 5.3 Ejemplo #1 de la Iteracin Indefinida: (a) Esquema diagramtico; (b) Un programa en la sintaxis del lenguaje, la condicin lgica se evala al inicio.
Ejemplo #2 de iteracin indefinida: En cierta parte de un proceso acadmico se calculan las calificaciones de cierta asignatura, teniendo como base los puntajes obtenidos en las calificaciones parciales. El proceso consiste en leer para cada estudiante un cdigo de cinco dgitos, una nota, entre 0.0 y 5.0, que esl 35%, otra nota del 35%, y una tercera nota del 30%. El proceso termina si se digita un cero para el cdigo. Elaborar un algoritmo y representarlo diagramticamente.
Solucin: En la figura 5.4 se ilustra el algoritmo representado mediante un diagrama estructurado de lgica y la sintaxis del lenguaje Visual Basic; tambin presenta algunos resultados obtenidos con un proyecto Visual Basic. El clculo de la nota Def slo se efectua si el cdigo es diferente de cero.
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 26 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ Cod = 99 Do WHILE (Cod <> 0) Cod = InputBox(Cdigo:) Nota1 = InpuBox(Nota1:) Nota2 = InputBox(Nota2) Nota3 = InputBox(Nota3) If (Cod <> 0)Then Def = 0.35*Nota1 + 0.35*Nota2+ _ 0.30*Nota3 Text1 = Cod & vbtab & Def& vbCrLf End If (b) Loop
(c)
(a)
FIGURA 5.4 Ejemplo #2 de Iteracin Indefinida: (a) Esquema de un diagrama estructurado de lgica; (b) Un programa en la sintaxis del lenguaje Visual Basic; (c) Algunos resultados obtenidos con un proyecto elaborado en Visual Basic.
Ejemplo de resultados para este problema. Si se pretende obtener notas definitivas aproximadas a las dcimas, es precisa utilizar una funcin de redondeo, como Round(), vase el captulo 3.
Otra variante de la iteracin indefinida es la iteracin HAGA HASTA QUE; tambin es de tipo indefinido por cuanto se persistir la repeticin en tanto NO se cumpla la condicin lgica, CLog, y de antemano se ignora exactamente cuntas repeticiones se efectuarn, como se ilustra en el diagrama y programa de la figura 5.5. (a)
Do
' ... rango de repeticin ' ... S1 ' ... S2 ' ...... ' ... Sn
Do Until (CondLog)
' ... rango de repeticin ' ... S1 ' ... S2 ' ...... ' ... Sn
Loop
FIGURA 5.5 Iteracin Indefinida HAGA HASTA QUE: (a) Esquema diagramtico; (b) Un programa en la sintaxis del lenguaje Visual Basic. En este tipo de iteracin la condicin lgica siempre se evala al final, de suerte que de entrada siempre se ejecutar la serie de operaciones S1, S2, ..., Sn que conforman el rango de iteracin. An si la condicin lgica no se cumple, el rango de iteracin se ejecutar una vez. El smbolo diagramtico para esta iteracin tambin incluye un rectngulo menor dentro de otro mayor, compartiendo un lado, pero, como se puede apreciar en el esquema mostrado, el rectngulo menor tiene espacios arriba y abajo para incluir las expresiones de control y el lado compartido es el de la izquierda. En el programa, mostrada a la derecha de la figura anterior, la estructura iterativa se inicia con Do y se termina con Loop Until (CondLog) ( Do Until = haga hasta que). En la segunda variante, sin embargo, la condicin lgica se evala de entrada. La figura 5.6 hace una comparacin entre la iteracin definida y la indefinida para calcular una serie.
S =
1 2 i =0 1 + i
S =
1 2 i =0 1 + i
Iteracin definida: Calcular la S para los primeros 100 trminos de la Sumatoria, por ejemplo.
Iteracin Indefinida: Calcular S mientras que la suma sea menor que 2.0. Cuntos trminos se suman?
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 27 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
entonces el denominador q divide al coeficientes an y el numerador p divide al trmino independiente a0. La mayora de los mtodos utilizados para el clculo de las races de una ecuacin son iterativos y se basan en modelos de aproximaciones sucesivas, que siempre suministran un valor muy aproximado de las races. Estos mtodos trabajan del siguiente modo: a partir de una primera aproximacin al valor de la raz, determinamos una aproximacin mejor aplicando una determinada regla de clculo y as sucesivamente hasta que se determine el valor de la raz con el grado de aproximacin deseado.
Si slo se presenta una variable independiente en la ecuacin 5.1 entonces se emplean dos categoras de mtodos de solucin: (a) - de intervalo cerrado como el mtodo de biseccin y el mtodo Regula Falsi o de la Falsa posicin;
0
1
Carnahan, Brice, et al: Applied Numerical Methods, John Wiley and Sons, 1969, pp. 173-17
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 28 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ (b) - de intervalo abierto2, que son los dems mtodos. Cuando se presenta ms de una variable independiente, entonces habr de resolverse un sistema de ecuaciones lineales nolineales (vase el captulo 8 de las aplicaciones en Mtodos Numricos). Por ahora, se tratarn races de funciones, para una ecuacin f(x) = 0, donde slo interviene una nica variable independiente, y la funcin es no-lineal. La ecuacin 5.1 tiene siempre en forma implcita a la variable independiente. Particularmente, dado que este es un curso introductorio al tema del Anlisis Numrico y de los Mtodos Numricos se vern los siguientes Mtodos: El Mtodo de Bolzano, llamado generalmente el Mtodo de Biseccin, que es de intervalo cerrado. El Mtodo de Regula Falsi, o de la Falsa Posicin, que tambin es de intervalo cerrado. El Mtodo de Newton-Raphson, generalmente llamado Mtodo de Newton, que es de intervalo abierto. El Mtodo de la Secante, como una variante del Mtodo de Newton. Adems, hay muchos otros Mtodos que se mencionan en la literatura especializada, tales como: Punto Fijo, Steffensen, Graffe, Muller, Bernoulli, Factorizacin Iterativa de polinomios, Mtodo de Ward, Algoritmo QD de RutisHauser, Mtodo de Bairstow para factores cuadrticos, Mtodos acelerativos, etc.
f(x)
El Mtodo de Bolzano3, conocido popularmente como Mtodo de Biseccin, es uno de los procedimientos ms simples para hallar la raz de una funcin f(x) = 0 en un intervalo b dado, como en la figura 5.7. Precisamente, el Teorema de Bolzano4 suministra la base lgico-matemtica que permite hallar dicha raz. En trminos sencillos, dicho Teorema establece que si una funcin f(x) es continua en el intervalo [a,b] y se cumple que f(a)*(b) < 0, entonces f(x) tiene una raz en dicho intervalo. Mediante mtodos grficos o mediante la tabulacin de valores de f(x), es posible determinar el intervalo, que es aquel en el cual a la funcin cambia de signo al ser evaluada en el punto a y luego en el punto b. El procedimiento, en s, es bastante directo. Una vez determinado el intervalo que encierra la raz a obtener, se calcula un tercer valor c que es la mitad del intervalo, es decir que c = (a + b), bisectando el intervalo en dos subintervalos: [a,c] y [c,b]; de ah el nombre conque este mtodo es conocido. Luego se verifica si este nuevo valor c es la raiz, o en cul de los intervalos est, ahora, la raz (vase la figura 5.8). El proceso se repite hasta que el valor absoluto de f(c) sea suficientemente pequeo.
0
2 3
The Free Dictionary , Copyright 2006 Farlex, Inc. http://encyclopedia.thefreedictionary.com/Root-finding+algorithm R. E. White, Nonlinear Problems and Intermediate Values; the Bisection Method Undergraduate Computational Engineering and Science, The Department of Energy (DOE), Krell Institute, Copyright 1994. // Tam, Ming T.: The Bisection Method, Notes and Animation, Chemical Engineering Dept., Newcastle University upon Tyne, UK, 1999. // Houben, Stephan: The Bisection Method, Dept. of Math. & Comp. Sci., Eindhoven University of Technology, The Netherlands, 2000, http://www.win.tue.nl/~stephanh/dictaat/solvers/node1.html. 4 Mathews, John H. And Finks, Kurtis: Numericals Methods using Mathematica, 2004. // Arfken, G.: Mathematical Methods for Physicists, 3rd ed. Orlando, FL: Academic Press, pp. 964-965, 1985. // Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T. Bracketing and Bisection, 9.1 in Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England: Cambridge University Press, pp. 343-347, 1992.
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 29 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________ FIGURA 5.9 Diagrama esquemtico de los parmetros bsicos involucrados en el Mtodo de Bolzano. Los pasos bsicos del algoritmo, en Lenguaje Natural Estructurado (LNA)5, son los siguientes: 1. Conocer la funcin f(x) a la cual se le quiere conocer su raz. 2. Establecer el intervalo [a, b] a partir del cual se va a iniciar el proceso y un > 0 (margen de error, o tolerancia numrica). 3. Calcular el punto medio del intervalo: c = (a+b)/2 3.1 Si |f(c)| < entonces c es la raz. Finalizar. 3.2 Si f(a)*f(c) < 0 entonces b = c. Es decir, el nuevo extremo superior del intervalo es b. 3.3 Si f(c)*f(b)<0 entonces a = c. Es decir, el nuevo extremo inferior del intervalo es b. 4. Repetir el proceso desde el paso 3. Como ejemplo de aplicacin, considrese la siguiente funcin:
f ( x) =
(5.2)
Cuyo esquema grfico y la solucin mediante un proyecto Visual Basic se presentan en la figura 5.10:
FIGURA 5.10 Diagrama esquemtico de la funcin f(x) de la ecuacin 5.2, y resultados obtenidos con un proyecto Visual Basic para el intervalo [1, 2].
0
5
Esta es una de las tcnicas bsicas de representacin de algoritmos. Vase el captulo 2 de Algoritmos y Programacin con Visual Basic, en http://xue.unalmed.edu.co/~walvarem.
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 30 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
Xn = Xn1
f ( Xn1) , n 1 f (Xn1)
(5.3)
Los pasos bsicos de un algoritmo para el Mtodo de Newton son los siguientes: 1. 2. 3. 4.
Conocer la funcin f(x) a la cual se le quiere obtener su raz. Tambin su derivada f(x). Establecer un punto de inicio X0 a partir del cual se va a iniciar el proceso.
Si f(X0) = 0 entonces habr divisin por cero, finalizar; de lo contrario, continuar con paso 4.. Si f(X0) = 0 entonces la raz es X0, finalizar, e ir al paso 5; de lo contrario: Calcule X1 mediante la ecuacin: Hacer X0 igual a X1.
= X
f (X 0 ) f (X 0 )
(3.3.11)
5. Repetir el paso 3 hasta que |f(X0)| epsilon. f 6. Mostrar X0 Sin embargo, el Mtodo de Newton-Raphson presenta varios inconvenientes: (i) - Cuando la raz es un Punto de Inflexin, es decir que: f(x)=0, el mtodo falla, o sea que no converge; (ii) Igualmente, la convergencia es inexistente cuando cae en un punto de mxima o o de mnima (f(x) = 0); (iii) En ocasiones, el mtodo converge demasiado lentamente, especialmente cuando el punto inicial no es cerdcano a la raz; (iv) tambin se suele presentar bamboleo o secuencias oscilatorias de iteraciones.
0
6
Murison, Marc A.: A Symbolic Newton-Raphson Method of Finding Roots, Astronomical Applications Department U.S. Naval Observatory , http://arnold.usno.navy.mil/murison/, December 1996. // Pascal Sebah and Xavier Gourdon , Newtons method and high order iterations, numbers.computation.free.fr/Constants/constants.html, October 3, 2001. // Recktenwald , Gerald: Numerical Methods with MATLAB: Implementations and Applications, 2000, Prentice Hall ISBN: 0201308606. 7 Tjalling J. Ypma: Historical Development of the Newton-Raphson Method, SIAM Review, Vol. 37, No. 4 (Dec., 1995), pp. 531-551
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 31 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0
Notas de Clase 3004578 Algoritmos y Programacin 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________
MTODO DE LA SECANTE
El Mtodo de La Secante8, es en realidad- una variante del Mtodo Newton-Raphson. Como se vio en la seccin 3.3, el Mtodo Newton-Raphson tiene muchos aspectos positivos, pero una de sus principales falencias es que requiere la evaluacin de dos funciones diferentes en cada iteracin, f(x) y su derivada f(x). Cuando la funcin f(x) es relativamente simple, es fcil calcular ambas funciones iterativamente; pero cuando f(x) es una funcin complicada como sucede en la prctica en muchas reas tcnicas y de ingenieras- el clculo de la derivada no es fcil, y en el mejor de los casos es un proceso tedioso. En estos casos, resulta muy til tener a la mano un mtodo que no requiera la evaluacin de la derivada, f(x). Uno de estos mtodos es el Mtodo Secante, o Mtodo de La secante, que en lugar de la derivada utiliza una aproximacin lineal en cada iteracin. Este mtodo es de intervalo abierto. Este mtodo empieza con dos valores iniciales xo, x1, como se ilustra en la figura 5.12. FIGURA 5.12 Esquema grfico que muestra los parmetros bsicos del Mtodo Secante. En este mtodo, la funcin f(x) es aproximada por medio de una linea recta, la cual es una extrapolacin basada en dos puntos xo y x1 de la funcin f(x). Los dos puntos (x0,f(x0)) y (x1,f(x1)) definen una lnea recta secante (de ah el nombre del mtodo) cuya ecuacin es la siguiente:
x2 = x1 f ( x1 )
x1 x0 f ( x1 ) f ( x0 )
(5.3)
f ( x) =
(5.2)
Indagar cmo funcionan y cules son los algoritmos de los siguientes mtodos, y elaborar proyectos Visual Basic: (i) - Regula Falsi, o de la Falsa Posicin; (ii) - Punto Fijo; (iii) - Steffensen; (iv) - Graffe, Muller, Bernoulli, Factorizacin Iterativa de polinomios, Mtodo de Ward, Algoritmo QD de RutisHauser, Mtodo de Bairstow para factores cuadrticos, Mtodos acelerativos.
0
8
Dyer, Charles and Ip, Peter S.S.: An Elementary Introduction to Scientific Computing, Division of Physical Sciences University of Toronto at Scarborough, http://pathfinder.scar.utoronto.ca/~dyer/ 2000, 2002 2006. // Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T. Secant Method, False Position Method, and Ridders' Method, 9.2 in Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England: Cambridge University Press, pp. 347-352, 1992. // Recktenwald , Gerald: Numerical Methods with MATLAB: Implementations and Applications, 2000, Prentice Hall ISBN: 0201308606.
__________________________________________________________________________________________ walvarem@unalmed.edu.co Pgina 32 Clase# 5.- Estructuras de Iteracin Indefinida / Races de f(x) = 0