notas clases #1 a #5

34
ALGORITMOS Y PROGRAMACIÓN DE COMPUTADORES Utilizando Visual Basic -Notas de Clase- Por: William Alvarez-Montoya Ing.Ind. Docente adscrito a la Escuela de Sistemas Facultad de Minas Escuela de Sistemas Medellín, Colombia, Febrero de 2007

Upload: mustafa-al-kassim

Post on 09-Aug-2015

67 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Notas Clases #1 a #5

ALGORITMOS Y PROGRAMACIÓN DE COMPUTADORES

Utilizando Visual Basic -Notas de Clase-

Por: William Alvarez-Montoya

Ing.Ind. Docente adscrito a la Escuela de Sistemas

Facultad de Minas

Escuela de Sistemas

Medellín, Colombia, Febrero de 2007

Page 2: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/24/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página ii

CONTENIDO

Página Clase#1 – Introducción. Evolución e impacto de los computadores. Enfoque algorítmico ...…………………………… 1 Clase#2 - Estructuras de secuencia y selección lógica ………………………………………………………………………. 9 Clase#3 – Estructura de iteración – Acumulador / Contador ……………..…………………………………………………. 16 Clase#4 – Iteración definida – Integración numérica …………………………………………………………………………. 22 Clase#5 – Iteración indefinida – Raíces de f(x) = 0 …………………………………………………………………………… 25 Clase#6 – Graficación con Visual Basic ……………………………………………………………………………………… 33 Clase#7 – Variables tipo arreglo – Subprogramas – Tipo de Datos del usuario (TDU) ………………………………… 39 Clase#8 – Archivos de datos – Aplicaciones con arreglos, subprogramas, TDU ………………………………………….. 45 Clase#9 – Métodos de Ordenamiento y Búsqueda …………………………………………………………………………... 50 Clase#10 – El manejo de las matrices (tablas) ……………………………………………………………………………… 58 Clase#11 – Aplicaciones de arreglos, subprogramas, archivos, TDU- Ecuaciones lineales simultáneas/Gauss ……… 62 Clase#12 – Solución de Ecuaciones Lineales Simultáneas – Método de Gauss-Jordan/La Inversa ……………………. 77 Clase#13 - Solución de Ecuaciones Lineales Simultáneas – Métodos Iterativos: Jacobi y Gauss-Seidel ……………… 82 Clase#14 – Ajuste de curvas por el método de Mínimos Cuadrados ………………………………………………………. 87 Clase#15 – Aplicaciones varias …………………………………………………………………………………………………. 92

PRESENTACIÓN Esta miniguía, clase a clase, del curso de 3004578 - Algoritmos y Programación pretende ser un material de apoyo para el estudio metódico por parte de los(as) estudiantes. El uso de esta miniguía ha de ser triple: (i) – antes de cada clase, su lectura exploratoria servirá para formarse una visión panorámica del contenido de cada clase, resaltándose los conceptos más importantes y las posibles dificultades de comprensión; (ii) – en el transcurso de la clase, ha de servir de derrotero y bitácora –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 básico –conjuntamente con la documentación 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 técnica de aprendizaje vía ejemplos para lograr todos los objetivos del proceso enseñanza/aprendizaje. Concientizarse y poner en práctica otras técnicas eficientes de estudio garantizará un aprendizaje efectivo y de largo alcance1. La programación de computadores es tanto arte como ciencia. De ahí, que la práctica frecuente sea indispensable para la mejor aprehensión de los diferentes contenidos. En este sentido, las sugerencias de práctica, los ejercicios y problemas propuestos, y las demás actividades extractase son de vital importancia. Igualmente, se recomienda a los estudiantes utilizar los demás recursos de acompañamiento, asesoría, talleres, realizados por docentes y auxiliares.

0 1 Véase, por ejemplo: Paul, Richard and Elder, Linda: «Cómo Estudiar y Aprender una Disciplina, usando los conceptos y herramientas del pensamiento crítico»,

Fundación para el Pensamiento Crítico, 2003, www.criticalthinking.org. Se puede descargar documento PDF en http://xue.unalmed.edu.co/~walvarem.

Page 3: Notas Clases #1 a #5

[email protected] Página 1 Clase# 1.- Evolución y Desarrollo de los Computadores

Clase #1

EEVVOOLLUUCCIIÓÓNN YY DDEESSAARRRROOLLLLOO DDEE LLOOSS CCOOMMPPUUTTAADDOORREESS

«Evolution». Fuente: R.B. Muhama.( Kent State University,

2004,.http://www.cs.kent.edu/~rmuhamma/),.

Los objetivos básicos que se pretenden lograr con este texto,

que es -en realidad- una mini-guía de clases, son los siguientes: • Desarrollar destrezas lógico-abstractas para conceptualizar e implementar la solución de problemas utilizando un

computador. • Propender por el aprendizaje de técnicas que permitan y faciliten la representación algorítmica, en el proceso de la solución

de problemas, aunando los enfoques algorítmico y ecuacional. • Incentivar el aprendizaje de un entorno gráfico, visual e interactivo de programación de computadores. En tal sentido se empleará la Metodología de Solución de Problemas (“Aprendizaje vía ejemplos”), en la cual se mezcla el enfoque ecuacional (modelación matemática) y el enfoque algorítmico, encuadrada dentro del proceso de Aprendizaje Activo. 11..11 EENNFFOOQQUUEE DDEELL CCUURRSSOO

Mediante el enfoque ecuacional se modela una parte de la realidad, generalmente vista como situación o problema a resolver, empleando el Álgebra y las matemáticas más avanzadas para construir un modelo abstracto-lógico-matemático que representa esa parte de la realidad, o ese problema a solucionar. El enfoque algorítmico, basado en secuencias lógicas de operaciones que conducen a un fin útil, e implementado por medio de computadores digitales, ha surgido desde mediado del siglo XX como una filosofía y una herramienta que permite abordar y resolver problemas complejos. La sinergia entre los dos enfoques ha catapultado más y

mejores soluciones de problemas en prácticamente toda disciplina del saber humano, especialmente en áreas técnicas y de ingeniería. Tradicionalmente este curso en la Facultad de Minas se ha organizado en dos sesiones –o clases, de 2 horas- de trabajo presencial en la semana. En una de las sesiones se explican los aspectos conceptuales y teóricos de los Algoritmos y la Programación de Computadores. Y en la otra sesión utiliza el computador para resolver problemas en los cuales se aplican los conceptos y la teoría vistos en la sesión teórica. De ahí, que esta documentación incluya ambos niveles de complejidad de un curso orientado al nivel básico del pregrado en Ingeniería (unas 10 ingenierías, excluyéndose a la Ingeniería de Sistemas, a la Ingeniería de Control, y a otras de reciente creación como la Ingeniería Biológica y la Ingeniería Física). Este tipo de trabajo –teórico y práctico- le exige al estudiante, de entrada, unas estrategias diferentes de estudio de la asignatura. La recomendación que normalmente se la hace a los estudiantes (entre 500 y 600 estudiantes por semestre, con cerca de un 40% mujeres) es muy simple: estudiar de manera frecuente y sistemática el material de cada módulo –sesión o clase- y repasarlo asiduamente; interactuar, adicionalmente, con el computador , por lo menos una sesión adicional cada semana, para lograr un refuerzo extra en la aprehensión de los conceptos, estrategias y técnicas. En este curso hay una dificultad mayor, para abordarlo de forma eficiente, por cuanto se avanza muy rápidamente en la estructura de contenidos; de suerte, que cada semana es necesario estudiar los temas que se explican en cada clase teórica y en cada clase práctica. En este sentido, es muy conveniente que los (las) estudiantes se apersonen de las técnicas eficientes de estudio que le permitirán realizar su labor de forma más eficiente, no sólo en esta asignatura sino también en las demás asignaturas de su carrera, lo cual -igualmente- redundaría en un mejor desempeńo en su futura actividad profesional. Saber estudiar de manera eficiente es una habilidad que toda persona puede desarrollar e involucrar como parte de su bagaje de conocimientos, aptitudes y actitudes. El material del curso se organiza en tres partes, incluyendo cada una teoría y práctica:

Page 4: Notas Clases #1 a #5

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 2 Clase# 1.- Evolución y Desarrollo de los Computadores- Enfoque algorítmico.

• La primera parte consta de 6 semanas, 6 sesiones teóricas y 6 sesiones prácticas. Al final de estas seis semanas

se hace la primera evaluación consistente en un examen escrito individual y en un examen práctico frente al computador. No se hace una presentación rigurosamente matemática de los algoritmos y la programación sino que se aborda de una forma más o menos intuitiva toda la temática teórico-práctica. Los temas incluyen: (1) - una presentación general del curso, de la secuencia de contenidos, de la metodología, de la evaluación y de la bibliografía y demás referencias a emplear; (2) - un vistazo general del desarrollo histórico de los computadores, enmarcando el concepto de algoritmo y las estructuras fundamentales mediante las cuales se construyen algoritmos secuenciales: secuencia, selección lógica, iteración; (3) - los conceptos de acumulador y contador, y sus aplicaciones; (4) - con los conceptos anteriores se efectúan algunas aplicaciones sencillas como los cálculos de series, de sumatorias y productorias, de ciertas medidas estadísticas, de métodos de integración numérica y de métodos para la obtención de raíces de funciones no-lineales; (5) - una introducción a las gráficas complementa la teoría explicada; (6) - en la parte práctica se inicia con el concepto entorno gráfico, visual e interactivo de programación, basado en el concepto de proyecto Visual Basic, y se elaboran sencillas aplicaciones que constan de su interfaz gráfica de usuario con la programación respectiva, que utiliza la teoría vista; (7) - lo concerniente al lenguaje de programación incluye el manejo de variables y constantes, tipos de datos, operadores, expresiones, tipos de instrucciones, funciones de librería estándar, controles básicos, 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 gráfica de usuario se trabaja con menú tipo barra, módulos de programas y formularios múltiples. Las aplicaciones con las cuales se ilustran los conceptos teóricos incluyen: ordenamiento y búsqueda; operaciones con vectores, matrices y archivos de datos. Esta parte consta de 5 semanas, al final de las cuales se hace la segunda evaluación teórica.

• En la tercera parte se aplican los conceptos y técnicas trabajados en las dos partes previas en la solución de

problemas tales como: ecuaciones lineales simultáneas, método de Eliminación de Gauss; de Jacobi y de Gauss-Seidel; el cálculo de la Inversa, método de Gauss-Jordan; el ajuste de curvas por el método de mínimos cuadrados; y una sencilla miscelánea de otras aplicaciones, con fines meramente descriptivos, para enfatizar el uso de los algoritmos y la programación en la solución de problemas prácticos en áreas de ingeniería. 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 están a nivel de las ciencias básicas de ingeniería, por cuanto el grueso de los estudiantes pertenece a los primeros semestres (del 1 al 3) en las carreras de ingeniería en las cuales esta asignatura es obligatoria en las currícula. Por lo cual los prerrequisitos son mínimos y corresponden a los básicos del Álgebra y la Aritmética, la geometria, la física, la química, el Álgebra Lineal y el cálculo de los primeros semestres universitarios. Es de suma importancia para un estudiante universitario el apersonarse de las técnicas eficientes de estudio. Semestre a semestre se observa –y las estadísticas- lo corroboran que los porcentajes de repitencia de asignaturas, pérdida del semestre, y de deserción son relativamente altos1. Aunque en la solución de esta problemática intervienen muchos factores, hay una categoría de factores sobre la cual el estudiante –como individuo- sí puede tener un alto grado de control: mejorar las técnicas de estudio. Las técnicas básicas 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 sistemático extraclase; (iv) - Saber preparar exámenes, trabajos y exposiciones; (v) - Sabia administración del tiempo, dentro del plan general del semestre académico tener una clara y realista agenda diaria y semanal; (vi) - Métodos de lectura rápida y ultrarrápida; (vii) - Métodos para mejorar la memoria de forma creativa e inteligente; (viii) - Nutrición 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 interés demasiado absorbente, drogas, alcoholismo, tabaquismo, embarazos en las jóvenes) que inciden negativamente sobre el desempeño académico de calidad en amplios grupos de estudiantes; (x) - Aprovechar los recursos de financiamiento, acompañamiento, asesoría, prevención y apoyo que brinda la universidad, a través –por ejemplo- de las oficinas de Bienestar Universitario. 0 1 Ver las estadísticas sobre el tema presentada por las instancias pertinentes en Unalmed. Estos problemas han suscitado continuos debates, véase, por

ejemplo: “Problemas curriculares y pedagógicos del pregrado en la Universidad Nacional de Colombia”, Serie de documentos de trabajo No. 3, Bogotá, 2003.. 2 Véase, por ejemplo, “Study Skills for Science & Technology Students”, Brunel University, 2005, http://www.brunel.ac.uk/~mastmmg.

Page 5: Notas Clases #1 a #5

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 3 Clase# 1.- Evolución y Desarrollo de los Computadores- Enfoque algorítmico.

FFIIGGUURRAA 11..11 El ábaco, considerado como el artefacto más antiguo de cálculo.

FFIIGGUURRAA 11..22 “La Pascalina”, sumadora mecánica ideada por Blas Pascal.

El material del curso está disponible en la página web principal en la Escuela de Sistemas, http://pisis.unalmed.edu.co/cursos/, y también en sendas páginas 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 teóricas, guías de prácticas, problemas propuestos, bibliografía, referencias y enlaces, problemas resueltos, exámenes resueltos, textos de apoyo; este material se encuentra en varios formatos: HTML como PDF y ZIP. 11..22 IIMMPPAACCTTOO DDEE LLOOSS CCOOMMPPUUTTAADDOORREESS

Ningún invento ha cambiado más profundamente la vida moderna que el computador. Para bien o para mal, los computadores se han infiltrado en cada aspecto de nuestra sociedad. Actualmente, los computadores hacen mucho más que simplemente calcular: por ejemplo, las cajas registradoras de los supermercados están dotadas con rastreadores ópticos y tecnología de código de barras, y calculan el importe de las compras mientras actualizan el inventario; las centrales telefónicas computarizadas manejan millones de llamadas diariamente, permitiendo las comunicaciones locales, nacionales e internacionales; los cajeros automáticos facilitan y

controlan las transacciones financieras, virtualmente desde cualquier lugar del mundo; los vehículos de transporte (automóviles, trenes, aviones) se basan en la electrónica y en multitud de microprocesadores que permiten el control y la programación; en las empresas, máquinas de toda índole realizan desde las labores más sencillas hasta las más complejas, desde el diseño de productos y servicios hasta la fabricación automática de partes y de bienes terminados; y, virtualmente, todo electrodoméstico moderno está dotado de microprocesadores que permiten su control y programabilidad. Pero, ¿de dónde ha surgido toda esta tecnología informática, cuáles son sus implicaciones y hacia dónde está jalonando a las organizaciones y a los países? Para entender en profundidad y apreciar los múltiples efectos que los computadores y sus tecnologías conexas tienen en nuestras vidas y cuáles son las megatendecias que ellos están moldeando hacia el próximo futuro, es preciso estudiar y entender cuál ha sido su evolución, y quiénes son los hombres y mujeres que han determinado con sus ideas e invenciones los más sobresalientes logros. A continuación se hace una síntesis de la evolución de los artefactos de cómputo, desde la antigüedad hasta nuestros días. Más detalles en la página Web http://xue.unalmed.edu.co/~walvarem/.

• AANNTTIIGGÜÜEEDDAADD. Primer sistema de cómputo: la cuenta con los dedos (de ahí la palabra dígito). El ábaco (o Soroban) emergió hace unos 500 años y es considerado como el aparato de cómputo más antiguo. Los Sistemas Numéricos ideados por los Babilonios, Los Egipcios y Los Hindúes constituyen las raíces del Sistema de Numeración Internacional usado en los albores del siglo XXI.

Son características básicas de este sistema: (a) – disponer de sólo diez guarismos (0 al 9) para representar cantidades; (b) – la base es 10, por lo cual cada cifra dentro de un número está multiplicada por una potencia de 10; (c) – el valor relativo de la cifras depende de su posición; (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 Numéricos utilizados son el Binario (base 2), el Octal (base 8), el hexadecimal (base 16) y el romano (para nomenclatura escrita y otros usos culturales).

• MMEEDDIIOOEEVVOO. Durante la edad Media, especialmente en Europa, se emplearon diversos dispositivos mecánicos de cálculo. La sumadora mecánica de Pascal, 1623-1662, (La Pascalina, figura adjunta) se considera tradicionalmente como el primer artefacto mecánico para calcular.

En 1694 Gottfried Wilhem von Leibtnitz (1646-1716) perfeccionó la sumadora de Pascal, logrando un artefacto de cálculo mecánica que efectuaba sumas y multiplicaciones. Estos dos inventos sirvieron

de base para muchos otros artefactos de cálculo que efectuaban las operaciones básicas de la Aritmética.

Page 6: Notas Clases #1 a #5

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 4 Clase# 1.- Evolución y Desarrollo de los Computadores- Enfoque algorítmico.

FFIIGGUURRAA 11..33 Una sección de la “Máquina Diferencial” diseñada por Charles Babbage en

FFIIGGUURRAA 11..44 Computador ENIAC en 1946.

FFIIGGUURRAA 11..55 Computador electromecánico del siglo XX.

FFIIGGUURRAA 11..66 Computador de la segunda generación.

•• EERRAA IINNDDUUSSTTRRIIAALL.. Sólo hasta 1820 las calculadoras mecánicas ganaron popularidad y un uso más amplio. El Arithómetro, de Cahrles Xavier Thomas de Colmar podía sumar, restar, multiplicar y dividir. Se usó ampliamente hasta la Primera Guerra Mundial. Charles Babbage, en Inglaterra, propuso el diseño de dos artefactos de cálculo: “La Máquina Diferencial” y “ La Máquina Analítica”. Ésta última se considera –en su diseño- la precursora d elos computadores actuales.

Las rutinas de programación de esta máquina 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 información del censo con Herman Hollerith quien ideó un tipo de máquina electromecánica, basada en técnicas de tarjeta perforada, que hizo mucho más eficientemente los cálculos y en muchísimo 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 después se convirtió en IBM (International Business Machines). • EENN EELL SSIIGGLLOO XXXX.. . Vannevar Bush (1890-1974) desarrolló una calculadora para solucionar ecuaciones diferenciales, en 1931.

La máquina podía resolver ecuaciones diferenciales tan complejas, que dejó asombrados tanto a científicos como a matemáticos.

Sin embargo, dicha máquina era demasiado engorrosa pues requería cientos de ruedas y poleas para representar los números 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 asistía, Clifford Berry, envisionaron un computador electrónico que aplicaba el Álgebra de Bool en su circuitería. Este enfoque se basaba en los trabajos del matemático inglés del siglo 19 George Boole (1815-1864), quien diseñó el sistema binario del

algebra y de la lógica simbólicas, estableciendo que cualquier ecuación o relación matemática puede dar un resultado que sea falso o verdadero (de ahí, su naturaleza binaria).

Extendiendo este concepto a los circuitos electrónicos en la forma apagado/encendido (on/off), Atanasoff y Berry desarrollaron el primer computador electrónico alrededor de 1940. Su proyecto, no obstante, se quedó sin apoyo financiero y dicho aporte tecnológico fue rápidamente sobrepasado por otros proyectos similares de otros grupos de científicos e ingenieros. Se había iniciado la etapa

electrónica del proceso de datos, cuyos desarrollos aún continúan. Todos estos aportes han convergido para estructurar la máquina denominada computador cuyos componentes externos se esquematizan en la figura mostrada. Surgió también la Informática o Computación, conjunto de conocimientos científicos y de técnicas que hacen posible el tratamiento automático de la información por medio de computadoras. La informática combina los aspectos teóricos y prácticos de la ingeniería, electrónica, teoría de la información, matemáticas, lógica y comportamiento humano. Los aspectos de la informática cubren

desde la programación y la arquitectura informática hasta la inteligencia artificial y la robótica. Las industrias de Hardware (componentes físicos, microprocesadores) y de Software (programas) se han desarrollado en forma acelerada, de tal suerte que no existe ningún ámbito empresarial, gubernamental, social, familiar y profesional exento de la influencia de estas tecnologías.

Desde la década de 1940’s se han desarrollado varias generaciones de

computadores: (i) – (1945 – 1956) De estructura electro-mecánica principalmente, implementaron el diseño de Babbage de su “Máquina Anaílica”; (ii) – (1957 – 1963) Se involucró el invento del transistor, lo que compactó más los equipos, los hizo más seguros y confiables, y se inició un gran auge de aplicaciones comerciales, científicas y militares, y se basaban en su diseño interno en los modelos de la Física del Estado Sólido; también tenían Sistema Operativo y se cimenzaron a emplear

Page 7: Notas Clases #1 a #5

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 5 Clase# 1.- Evolución y Desarrollo de los Computadores- Enfoque algorítmico.

FFIIGGUURRAA 11..77 Sistema de Cómputo de la tercera generación

Microelectrónica, Programación

AAññoo 22 00 00 77

FFIIGGUURRAA 11..88 Esquema del cambio dramático en Hardware/Software

FFIIGGUURRAA 11..99 Ejemplo de teléfono celular. Está basado en la tecnología de microprocesadores.

Lenguajes de Programación de Computadores como el FORTRAN –orientado hacia aplicaciones en Ingeniería- y el COBOL –orientado hacia aplicaciones comerciales; (iii) – (1964 – 1971) Máquinas basadas en circuitos integrados, lo cual eliminó gran parte de la disipación térmica; se hicieron mucho más compactos; grandes mejoras en los Sistemas Operativos y en los Lenguajes de Programación, en los dispositivos de almacenamiento; primeras aplicaciones técnicas y comerciales a gran

escala; (iv) – (1971 _ Presente) Computadores basados internamente, en la microelectrónica- en grandes escalas de integración, con miles de millones de componentes electrónicos en un solo chip, Sistemas Operativos y entornos visuales interactivos de programación, amplia y profunda utilización en todas las áreas del saber humano; (v) – (Presente – Futuro) Los computadores inteligentes, mediante el perfeccionamiento de técnicas de Inteligencia Artificial, y otras técnicas

avanzadas del Software.

Tecnológicamente, en las múltiples áreas de la computación –tanto hardware como Software- se ha avanzado en las últimas 6 décadas muchísimo más que en los últimos 10 milenios. Las tecnologías 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 características que los hace tan útiles.

Desde 1981, los computadores personales, de escritorio, portátiles, de mano, calculadoras programables están llevando a más y más personas, en más y más ambientes de trabajo, sociales, de negocios, científicos, las ingentes posibilidades de la programación. Y desde 1990, La Internet ha completado todo un contexto de revolución tecnológica, de grandes proporciones, a escala mundial,

cuyos efectos están moldeando nuevas formas de pensar, de trabajar y estudiar, de hacer negocios, etc. Las aplicaciones de los microprocesadores son innumerables, abarcando prácticamente toda esfera del saber humano. Está en desarrollo la tecnología nanotrónica, es decir el diseño y aplicación de máquinas de tamaño molecular que promete revolucionar todo lo que hasta ahora se ha hecho con la tecnología computacional. 11..22 IIMMPPOORRTTAANNCCIIAA DDEE LLOOSS CCOOMMPPUUTTAADDOORREESS

Los computadores y las redes de computadores se han convertido en la herramienta imprescindible en toda área técnica y de ingeniería. Por lo cual, Todo técnico y profesional debe manejar y aplicar eficientemente dicha herramienta, en sus áreas propias de profesión. Las necesidades y exigencias de las empresas, de los negocios, de las sociedades actuales, requieren que llooss iinnggeenniieerrooss sseeaann mmááss eeffiicciieenntteess en sus labores. Las herramientas computaciones, computadores, entornos y lenguajes, permiten lograr mayores niveles de eeffiicciieenncciiaa eenn eell ddeessaarrrroolllloo ttééccnniiccoo ppeerrssoonnaall. Los computadores justifican su uso en las ingenierías, por ejemplo, por la necesidad de efectuar cálculos repetitivos y complejos que involucran grandes volúmenes de datos con

un tratamiento matemático intensivo. Además, los computadores –y las redes de computadores- proporcionan velocidades de proceso a tiempo real con precisiones de cálculo que difícilmente en forma manual se puede lograr.

Page 8: Notas Clases #1 a #5

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 6 Clase# 1.- Evolución y Desarrollo de los Computadores- Enfoque algorítmico.

FFIIGGUURRAA 11..1100 La Internet está perfilando nuevas formas del trabajo, del estudio, de los negocios.

FFIIGGUURRAA 11..1111 Didáctica de las actividades de estudio, para lograr un aprendizaje eficiente.

Estas exigencias son cada vez más fuertes porque hay una mega tendencia de fondo muy clara: las empresas y los países están evolucionando hacia organizaciones cimentadas en el aprendizaje continuo, en las cuales la información y el conocimiento, basados en el Talento Humano, son los recursos estratégicos más importantes que potencian a los otros recursos organizacionales (tierra, capital y trabajo).

El boom tecnológico 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. Prácticamente, no hay quehacer humano que pueda sustraerse a esta influencia. En general, para bien. Sin embargo, la tecnología propicia –igualmente- delitos e inseguridades. Los virus informáticos son el pan de cada día de los computadores y de las redes. El fraude electrónico es una de las nuevas modalidades delictivas. Los efectos sobre los organismos y sobre la

psicoemotividad de las personas están moldeando nuevas categorías de dolencias y de enfermedades laborales. De ahí, la necesidad de que todo estudiante se apersone de los métodos eficientes de estudio que le permitirán ser más productivo durante su estadía en la universidad, y que redundará en un mejor desempeño como profesional.

En la página web http://xue.unalmed.edu.co/~walvarem/ encontrará más detalles sobre los métodos eficientes de estudio. En particular, y a manera de introducción, se recomienda la lectura, el estudio, y aplicación de las técnicas explicadas en el documento «Cómo aprender y estudiar una disciplina, usando los conceptos y herramientas del Pensamiento Crítico»3, 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 sección está conformado por las lecturas adicionales del capítulo 1 en la página Web, y por las diapositivas de la clase #1 en las cuales se presenta el esquema de las evaluaciones y las referencias a utilizar. 11..33 EELL EENNFFOOQQUUEE AALLGGOORRÍÍTTMMIICCOO

El enfoque basado en algoritmos, para la solución de problemas en Ingeniería, permite resolver problemas complejos, potenciando así el enfoque meramente ecuacional. Un algoritmo se conceptualiza –en su forma más simple- como «una secuencia lógicamente ordenada de operaciones, tareas, o procesos, que permiten lograr un resultado útil, que generalmente ayuda a la solución de un problema». La estructuración de algoritmos permite realizar el análisis lógico-conceptual de un problema y poder –así- anticipar posibles soluciones. En cierta

medida, el enfoque algorítmico facilita modelar la realidad –o una parte de ella- de una manera que guía a la solución de problemas en Ingeniería, convirtiendo la herramienta del computador en una especie de laboratorio virtual, en el cual se puede experimentar con diferentes posibilidades de los parámetros del problema en cuestión. En términos generales, la modelación –y en particular la modelación matemática- forma parte del conjunto nuclear de técnicas de solución de problemas en áreas técnicas y de Ingeniería. La elaboración de algoritmos tiene tanto de arte como de ciencia. Existe una teoría en crecimiento y todo un bagaje de experiencias. Hacer un buen algoritmo exige abstracción, lógica, imaginación, creatividad, dominio de las técnicas de programación, y dominio del área del problema que se intenta resolver. Cuando un algoritmo se expresa en la sintaxis de un lenguaje de programación de Computadores, entonces se le denomina un programa. Para elaborar un algoritmo se expresa secuencia lógica de operaciones (tareas, o procesos) que llevan a la solución de un problema. Considerando todas las posibilidades lógicas del problema en cuestión. Y analizando, y expresando matemáticamente, las relaciones y restricciones pertinentes al problema. (Para más información sobre el concepto de algoritmo véase el capítulo 2 de la documentación en PDF).

0 3 2003 Fundación para el Pensamiento Crítico http://www.criticalthinking.org .

Page 9: Notas Clases #1 a #5

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 7 Clase# 1.- Evolución y Desarrollo de los Computadores- Enfoque algorítmico.

AACBBX

242 −±−

=

CCOONNSSTTRRUUCCCCIIÓÓNN DDEE AALLGGOORRIITTMMOOSS Un algoritmo se elabora (construye) mediante ciertos componentes básicos llamados EESSTTRRUUCCTTUURRAASS.. Desde la década de 1960’s 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 solución de problemas a través de computadores, tres estructuras automáticas básicas: SSEECCUUEENNCCIIAA,, SSEELLEECCCCIIÓÓNN LLÓÓGGIICCAA,, IITTEERRAACCIIÓÓNN ((RREEPPEETTIICCIIÓÓNN)). Mediante estas tres estructuras es posible representar una gama muy amplia de algoritmos. La estructura de SECUENCIA es la estructura básica de los algoritmos secuenciales, ya que todo algoritmo SSEECCUUEENNCCIIAA LLÓÓGGIICCAA de ciertas operaciones (ó procesos, o tareas, o eventos). En la solución de un problema existe una secuencia general, y dentro de ella muchas otras secuencias más detalladas. La estructura de SELECCIÓN LÓGICA permite elegir entre dos o más vías de acción (o alternativas). En un problema especifico, el conjunto de ALTERNATIVAS puede ser muy extenso. La estructura de ITERACIÓN es la REPETICIÓN de una o más operaciones (o tareas, o procesos, o eventos). De antemano, puede conocerse o no cuántas veces se repetirán las operaciones. El conjunto de operaciones que se repite se llama RANGO DE ITERACIÓN. Si se conoce exactamente cuántas veces se repite el rango de iteración, entonces la iteración se llama iteración definida; de lo contrario, recibe el nombre de iteración indefinida.

FFiigguurraa 11..1122 Etapas básicas en la elaboración de algoritmos secuenciales. Generalmente, en la solución de un problema es posible identificar y representar un cierto conjunto de datos (constantes y/o variables), imprescindibles para efectuar cálculos 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 disposición del algoritmo, el cual realiza con ellos una especie de transformación mediante relaciones lógicas y operaciones de cálculo; 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 retroalimentación, basado en el seguimiento exacto del flujo lógico del algoritmo (prueba de escritorio) para determinar si los resultados son congruentes con el análisis y el diseño elaborados previamente, y con los resultados esperados. Esto es precisamente, una parte muy importante del proceso de diseño en Ingeniería4. EEJJEEMMPPLLOOSS DDEE CCOONNSSTTRRUUCCCCIIÓÓNN DDEE AALLGGOORRIITTMMOOSS Como un primer ejemplo, considérese el problema de solucionar ecuaciones cuadráticas de la forma: AX2 + BX + C = 0. El análisis es muy simple. Del Álgebra5 se sabe que si se conocen los coeficientes A, B, C es posible calcular las raíces aplicando la fórmula correspondiente, mostrada en la figura 1.13.

FFIIGGUURRAA 11..1133 Fórmula para hallar las raíces de una ecuación cuadrática de la forma AX2 + BX + C = 0.

El algoritmo es muy simple: (a) – Conocer los coeficientes A, B, C; (b) – Aplicar la fórmula, obteniendo las raíces. La figura 1.14 lo ilustra.

FFIIGGUURRAA 11..1144 Algoritmo secuencial para calcular las raíces de una ecuación cuadrática AX2 + BX + C = 0. Para calcular X1 se emplea la fórmula X1 = (-B + Sqr(B^2 –4*A*C))/(2*A). Y para calcular X2 se emplea la fórmula siguiente: X2 = (-B - Sqr(B^2 -4*A*C))/(2*A). Aquí se emplea directamente la notación algebraica usual para denotar variables, empleando, también, los paréntesis para agrupar; Sqr() es una función de librería estándar que obtener raíz cuadrada; los operadores aritméticos corresponden a las cuatro operaciones aritméticas (véase el capitulo 3 de la documentación en PDF). Para sumar, el signo más (+), 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

elaboración de algoritmos secuenciales se encuentran en la página web en formato HTML (problemas resueltos), y en la documentación en formato PDF en el capítulo 2.

0 4 «Engineering: A Creative profesión» , . 5 Baldor, Aurelio: «Álgebra», Editorial Norma, 1990.

Page 10: Notas Clases #1 a #5

Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ 02/26/07 ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 8 Clase# 1.- Evolución y Desarrollo de los Computadores- Enfoque algorítmico.

11..44 LLAA PPRRÁÁCCTTIICCAA ##11 –– AASSIIGGNNAACCIIÓÓNN YY CCOONNCCAATTEENNAACCIIÓÓNN

En esta primera sesión práctica se resuelven problemas muy sencillos, aplicando dos conceptos básicos ASIGNACIÓN, y CONCATENACIÓN. Mediante la instrucción de ASIGNACIÓN se le da contenido (valor), o se cambia el contenido, a una variable, como en las fórmulas empleadas para calcular X1, X2, empleando la ecuación de la figura 1.14. El operador de asignación es el signo igual ( = ). Como cada variable que se emplea en un algoritmo es, realmente, una localización física en la memoria interna de máquina, entonces la asignación que se hace es una ASIGNACIÓN DE MEMORIA.

Para realizar esta práctica se sigue la GUÍA DE PRÁCTICA #1 que se encuentra disponible en la página web, y que en el momento de estar en la práctica, utilizando el computador, entonces se descarga de la carpeta respectiva, indicada en el instructivo mismo de la práctica. En este mismo instructivo están todas las indicaciones para realizar la práctica. También se encuentran tareas extraclase a desarrollar. En esta práctica –también- se comienza el estudio, familiarización y utilización del ENTORNO DE DESARROLLO DE APLICACIONES que se utiliza como herramienta para implementar los algoritmos en un Lenguaje de Programación de Computadores. Este entorno se muestra en la figura 1.15 y corresponde a la versión 6.0 del Visual Basic6. Más detalles en el capítulo 3 de la documentación en PDF.

Figura 1.15 Escritorio principal del entorno de desarrollo de aplicaciones Visual Basic 6.0 (1) es el formulario base de diseño, 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 distribución; (6) comprende la barra de título 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 diseño se dibuja la interfaz, se establecen propiedades de los objetos, y se escribe el código fuente (el algoritmo escrito en la sintaxis del Lenguaje de Programación). (2º) – Tiempo de ejecución, en el cual se ejecuta efectivamente la

programación elaborada a través de la interfaz y de los programas escritos; el algoritmo debe recibir los datos de entrada, efectuar los cálculos respectivos, y suministrador los resultados. Si hay errores se llega el tercer tiempo. (3º) – Tiempo de depuración, en el cual se corrigen los errores que se presentan en la ejecución del proyecto; normalmente, para que se reciban las correcciones hechas, se debe detener el tiempo de ejecución y reiniciarlo. 11..55 TTAARREEAASS EEXXTTRRAACCLLAASSEE • Elaborar algoritmos para los siguientes problemas de la problemateca: 2, 3, 4, 5, 30, 31, 32, 33, 34, 36, 39, 40. Del texto de Chapra

& Canal, elaborar algoritmos para los problemas 1.7, 1.8, 1.12, 1.13, 2.1, 2.5, 2.8, 2.9, 2.10, 2.11, 2.13, 2.14, 2.15. • Para los algoritmos diseñados, elaborar proyectos Visual Basic, diseñando las interfaces y ejecutando la programación.

Realizar el estudio del documento «Cómo aprender y estudiar una disciplina, usando los conceptos y herramientas del Pensamiento Crítico»7. Seguir, por lo menos, varios de los 18 consejos iniciales, con miras a adquirir métodos más eficientes de estudio.

0 6 Marca registrada de Microsoft Corporation. Esta versión se utiliza bajo licencia, dentro del convenio existente entre la Universidad Nacional y la empresa

Microsoft (Campus Agreement). 7 2003 Fundación para el Pensamiento Crítico http://www.criticalthinking.org . (Op. Cit.).

1

2

3 4

5

6

Page 11: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 9 Clase# 2.- Estructuras de Secuencia y Selección Lógica

FFIIGGUURRAA 22..11 Conceptualización diagramática de la estructura de secuencia.

Clase #2

EESSTTRRUUCCTTUURRAASS DDEE SSEECCUUEENNCCIIAA YY SSEELLEECCCCIIÓÓNN LLÓÓGGIICCAA

«Evolution». Fuente: R.B. Muhama.( Kent State University,

2004,.http://www.cs.kent.edu/~rmuhamma/)

Uno de los primeros logros de la Teoría de Algoritmos fue el de establecer y aplicar las estructuras automáticas básicas

mediante las cuales es posible expresar y representar una gama muy amplia de algoritmos. Ya hacia finales de la década de 1960's, en 1967 y 1968, se reunieron grupos de expertos en Europa y Norteamérica para tratar de formalizar un enfoque sólido de ingeniería, basado en la lógica y en la matemática, para la emergente disciplina de elaborar programas para computador, usualmente denominada Ingeniería de Software, o Ingeniería de Programación de Computadores. Desde estos primeros esfuerzos se pudieron identificar tres estructuras básicas presentes en muchos procesos naturales y artificiales: secuencia, selección lógica e iteración. Surgió, así, un enfoque estructurado para programar, denominado Programación estructurada, cuyo boom se dio en la década de 1970's y que ha sido la base para los otros paradigmas tecnológicos que surgieron en los años 1980's y 1990's. 22..11 LLAA EESSTTRRUUCCTTUURRAA DDEE SSEECCUUEENNCCIIAA La estructura de secuencia establece el orden lógico de ejecución 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 rectángulo.

Antes de poderse ejecutar la serie de operaciones Sn es preciso ejecutar la serie ordenada S1, S2, S3, ..., Sn-

1. A su vez, cada una de la serie de operaciones Si se ejecuta con el mismo sistema de orden lógico: de arriba a abajo y de izquierda a derecha. Incluso, dicho sistema lógico de ejecución está implementado a nivel de hardware (microprocesadores y circuitos lógicos) y a nivel de software (lenguajes de programación).

22..22 PPRROOGGRRAAMMAA DDEE CCOOMMPPUUTTAADDOORR Un programa para computador es una secuencia lógica y ordenada arriba abajo de instrucciones en un lenguaje específico. Cada instrucción es una secuencia lógica y ordenada de izquierda a derecha de comandos y otros elementos del lenguaje. Esta secuencia lógica de ejecución es automática y así está implementada en los entornos visuales que se utilizan elaborar aplicaciones (proyectos de software) que automatizan las labores diarias en las empresas y en la vida cotidiana. 22..33 RREEPPRREESSEENNTTAACCIIÓÓNN DDEE UUNN AALLGGOORRIITTMMOO Existen varias técnicas para representar los algoritmos. Algunas de ellas son: (i) - Lenguaje natural estructurado que utiliza expresiones del lenguaje de una forma tal que es posible seguir la secuencia lógica del algoritmo; (ii) - Pseudo Código (o P-Código); (iii) - Diagramación Libre ; (iv) - Diagramación Estructurada . La representación diagramática que se seguirá empleando es la correspondiente al diagrama rectangular estructurado de lógica, o simplemente diagrama de lógica, que utiliza un rectángulo para incluir los diferentes procesos secuenciales, de selección lógica o de iteración. También se utilizará su equivalente de P-código estructurado en combinación con las instrucciones sintácticas del

Page 12: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 10 Clase# 2.- Estructuras de Secuencia y Selección Lógica

Aquí la condición lógica evaluada, Clog, es A > B; si es cierta, entonces se ejecuta la asignación MAX = A ( conjunto de operaciones Sv); de lo contrario, se ejecutará la asignación MAX = B (conjunto de operaciones Sf).

FFIIGGUURRAA 22..33 Un ejemplo de la utilización de la estructura de selección lógica: (a) – Diagrama estructurado; (b) – Programa Visual Basic.

If (A > B)Then '... operaciones Sv MAX = A Else ' ... operaciones Sf MAX = B End If

(a) (b)

lenguaje de programación empleado (Visual Basic). Este sistema de representación de los algoritmos también se llama diagrama N-S en honor a sus inventores y propulsores. Varias ventajas posee este tipo de diagramación algorítmica:

Es compacto, permitiendo representar y visualizar en poco espacio el flujo lógico de un algoritmo. Obedece a la norma heurística en el área informática, según la cual un algoritmo ha de estructurarse en bloques lógicos coherentes cuya visualización no exija más de una página tamaño carta. Esto es así debido al condicionamiento cultural de occidente, en el cual desde las más tempranas etapas del proceso educativo se nos capacita para entender páginas de datos, de textos.

Es visual, obedeciendo a la regularidad empírica de que «una imagen vale más que mil palabras». Y actualmente, se ajusta a los condicionamientos culturales de la imagen como medio portador e instrumentador de información.

Induce al pensamiento estructurado, base de todas las corrientes tecnoinformáticas de las últimas décadas, permitiendo utilizar las estructuras automáticas básicas de una manera concisa y coherente.

Es una herramienta muy útil para expresar los procesos de refino en la estructuración de una solución algorítmica para un problema específico, facilitando la estructuración modular de los algoritmos, siendo cada módulo, o bloque, un procedimiento o una función que puede representarse diagramáticamente en forma independiente.

Al ser una notación estándar que se ha utilizado en las últimas cuatro décadas, es un lenguaje fácilmente reconocible y aplicable en muchas situaciones prácticas dentro de las organizaciones. También, diversos manuales e instructivos emplean este tipo de representación.

Y es especialmente útil para las personas que se inician en la programación de computadores, por cuanto los induce al análisis y diseño estructurado de algoritmos.

22..44 LLAA EESSTTRRUUCCTTUURRAA DDEE SSEELLEECCCCIIÓÓNN LLÓÓGGIICCAA Es la representación algorítmica de la serie de procesos lógicos de pensamiento que permiten tomar una decisión. Corresponde a la expresión sencilla de opcionalidad: Si ... Entonces, que es la base de la elección de una alternativa específica, tanto a nivel conceptual como práctico. Diagramáticamente se representa como se ilustra en la figura 2.2, mostrada a continuación: El símbolo diagramático para la Estructura de Selección Lógica consta de un rectángulo, dividido –proporcionalmente- en tres rectángulos: uno superior y dos inferiores. El rectángulo superior se divide – a su vez- en tres triángulos, por medio de dos líneas que se originan en el extremo superior del segmento que separa los dos rectángulos inferiores. En el triángulo del centro va la condición lógica, y en los otros dos triángulos –respectivamente- sus valores de verdad. En cada rectángulo inferior van las correspondientes secuencias de operaciones a ejecutar según el valor de verdad que adopte la condición lógica. Esta estructura es automática, y también se llama de decisión lógica, o de transferencia de control, y permite elegir uno de varios caminos lógicos a seguir dentro de un algoritmo. En el esquema de la figura anterior, que es la representación diagramática de la estructura, CLog es una condición lógica que se evalúa. Si dicha evaluación da verdadero, o V, entonces se ejecuta la serie de operaciones Sv; si la evaluación da falso, o F, entonces se ejecuta la serie de operaciones Sf. A la derecha se presenta la codificación como se escribe en Visual Basic, por ejemplo; la comilla simple significa comentarios (ignorados a tiempo de ejecución). En un caso particular, por ejemplo si la condición lógica es A > B, sólo se ejecutará una de las dos posibilidades; nunca las dos a la vez, como se muestra en el diagrama y programa siguientes.

Sintaxis propia del lenguaje. La sentencia If evalúa una condicón lógica, Clog; si el valor de verdad de Clog es cierto, entonces se ejecuta el conjunto de opearciones Sv; de lo contrario, se ejecutará Sf. Sólo se ejecuta una de las d i T d If i E d If

If (Clog)Then '... operaciones Sv Else ' ... operaciones Sf End If

FFIIGGUURRAA 22..22 Estructura de Selección Lógica: (a) - Diagrama estructurado; (b) – Sintaxis en Visual Basic.

(a) (b)

Page 13: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 11 Clase# 2.- Estructuras de Secuencia y Selección Lógica

Si la condición lógica es verdadera, entonces se ejecutará la instrucción MAX = A; si la condición lógica es falsa, entonces se ejecutará la instrucción MAX = B. Los comentarios sólo sirven para documentar, explicar o describir, los programas con el fín de que las personas los puedan entender mejor. Después de que se haya ejecutado la serie de operaciones pertinente al resultado de la evaluación de la condición lógica, la secuencia lógica de ejecución continuará con la instrucción que sigue a la selección lógica. MAX = A es una asignación de memoria, pues las variables MAX, A son una localizaciones de memoria interna; el signo igual (=) es el operador de asignación de memoria, y su funcionalismo consiste en evaluar la expresión a su derecha (puede ser toda una fórmula 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 asignación de memoria es destructiva. Esta estructura, así representada, es automática, es decir que sólo es preciso utilizar la sintaxis diagramática mostrada para expresar todo el proceso de selección lógica que internamente la máquina realizará. La estructura de selección lógica puede efectuar múltiples evaluaciones de una condición lógica o de una variable, como se ilustra en el diagrama y programa siguientes:

En dicho caso, se dice que es de ramificación múltiple, cuyo esquema diagramático 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 también es automática, y en los lenguajes de programación de computadores tiene varias implementaciones, como se verá más adelante. Se aconseja utilizar la estructura If ... ElseIF ... End If cuanto se presentan ramificación múltiple en los algoritmos y programas, por cuando sólo es necesario cerrar un If.

Ejemplo #1 de selección lógica: Dados tres valores numéricos, determinar cuál es al mayor de ellos.

Solución: Sean A, B, C los tres valores numéricos. 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 básico (véase la figura 2.5).

En este ejemplo, figura 2.5, se presenta un algoritmo dentro de varios posibles. El programa (codificación) también admite varias posibilidades. ¿Puede usted encontrar otras variantes?. En el programa se ha empleado el operador lógico And para concatenar

Sólo se presenta la estructura de Selección Lógica. La instrucción LEER y el uso de un control tipo cajatexto, Text4, se explican más adelante. En el capítulo 3 se tiene un resumen de la sintaxis del lenguaje de programación.

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) FFIIGGUURRAA 22..55 Ejemplo # 1: (a) – Diagrama estructurado de lógica; (b) – Programa en Visual Basic.

Aquí la condición lógica 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 lógicas. La sentencia Else ejecutará el conjunto de operaciones correspondientes a otro valor de K.

FFIIGGUURRAA 22..44 Estructura de Selección Múltiple. (a) – Diagrama estructurado; (b) – Programa en Visual Basic.

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

(a) (a)

Page 14: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 12 Clase# 2.- Estructuras de Secuencia y Selección Lógica

dos relaciones lógicas (véase en el capítulo 3 de la documentación online la sección sobre los operadores). En las guías práctica#1 y práctica#2 se explica sobre los diferentes controles que se manejan en Visual Basic 6.0.

Ejemplo #2 de selección lógica: Dados tres segmentos de línea recta, determinar si forman un triángulo, y decir cuál tipo de

triángulo es: equilátero, isósceles o escaleno. Solución: De la Geometría Euclidiana se sabe que en todo triángulo cada lado es mayor que la suma de los otros dos. Además,

el triángulo equilátero tiene sus tres lados iguales, el isósceles sólo 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 tamaño en alguna unidad de medida). (Nota: A este proceso se le

llama genéricamente 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 triángulo y el algoritmo termina. • 3. Si los tres segmentos forman triángulo, entonces si A = B y A = C, el triángulo es equilátero; 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 triángulo es isósceles; si A ≠ B y a la vez B ≠ C, el triángulo es escaleno.

En este ejemplo es necesario utilizar una expresiones lógicas compuestas (véase el capítulo 3). Por ejemplo, para determinar si los tres segmentos forman triángulo, la variable lógica T tendría asignada la siguiente expresión lógica:

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 preguntaría por el valor de verdad de la variable T. Para el caso de determinar el tipo de triángulo, pueden emplearse las variables lógicas Te para triángulo equilátero, Ti para triángulo isósceles, Ts para triángulo escaleno, y cuyas expresiones lógicas asignadas serían: 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 lógica es el que muestra a continuación, 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 = “Triángulo equilátero” ElseIf(Ti)Then Text4 = “Triángulo isósceles” ElseIf(Ts)Then Ts = “Triángulo escaleno” End If Else Text4 = “No hay Triángulo” End If

FFIIGGUURRAA 22..66 Ejemplo # 2: (a) – Diagrama estructurado de lógica; (b) – Programa en Visual Basic.

(a) (b)

Page 15: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 13 Clase# 2.- Estructuras de Secuencia y Selección Lógica

Ejemplo número 3 de selección lógica

Problema: En una promoción comercial, un almacén 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 están numeradas de 1 a 5. Si se extrae la balota con el número 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 número 5 no se da descuento. Elaborar un algoritmo, representado mediante un diagrama estructurado de lógica. Solución: Puede emplearse una estructura de ramificación múltiple, como se ilustra en la figura 2.7. 22..55 PPAASSOOSS PPAARRAA PPLLAANNTTEEAARR UUNN AALLGGOORRIITTMMOO El Enfoque Algorítmico es el concepto y la herramienta nuclear en las estrategias de solución de problemas en Ciencias y en Ingeniería1. La utilización de computadores y de entornos computarizados permite a los estudiantes interactuar activamente con los diferentes materiales de aprendizaje2, a su propio ritmo e interés, obteniendo realimentación a tiempo real. El Enfoque Algorítmico comparte la Metodología básica de solución de problemas en áreas técnicas e ingenierías. Dicha Metodología cosnta de las siguientes etapas3:

1. Entender el problema. 2. Identificar las constantes y variables (estructura de entrada y de salida). 3. Identificar las restricciones y relaciones matemáticas entre variables y constantes. 4. Establecer una estrategia de solución, elaborando un ALGORITMO, representado por medio de alguna técnica

pertinente. 5. A partir del Algoritmo, que especifica el Proceso Lógico de Solución del Problema, elaborar el Programa en un lenguaje

de programación de computadores. 6. Ejecutar y depurar el programa con base en los resultados obtenidos. Análisis de los resultados.

Según el análisis de resultados, en algunas categorías de problemas, habrá que repetir desde la etapa 1 – proceso denominado Refino- para depurar, mejorar, rediseñar, 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..

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 instrucción If .. ElseIf ... End If es especialmente apropiada para codificar en el lenguaje una ramificación múltiple.

(a) (b) FFIIGGUURRAA 22..77 Ejemplo # 3: (a) – Diagrama estructurado de lógica; (b) – Programa en Visual Basic.

Page 16: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 14 Clase# 2.- Estructuras de Secuencia y Selección Lógica

22..66 CCOONNSSTTRRUUCCCCIIÓÓNN DDEE UUNNAA IINNTTEERRFFAAZZ GGRRÁÁFFIICCAA DDEE UUSSUUAARRIIOO -- PPRROOYYEECCTTOO

En Visual Basic, y entornos similares, se sigue una secuencia de etapas para diseñar una Interfaz Gráfica de Usuario (o simplemente Interfaz) que efectúe las operaciones de un algoritmo previamente diseñado, conformando un proyecto que aceptará los datos de entrada, procesándolos según el algoritmo y suministrando los resultados (la salida). Dichas etapas se estructuran en tres tiempos: (i) – tiempo de diseño, en el cual se diseña la interfaz y los procedimientos (programas) respectivos; (ii) – tiempo de ejecución, en el

cual el interpretador Visual Basic ejecuta –en memoria interna-las instrucciones de los diferentes procedimientos, suministrando los resultados; (iii) – tiempo de depuración, en el cual se corrigen errores que se presenten en la ejecución del proyecto. Estos tres tiempos implican las siguientes actividades:

• Ubicar en un formulario los diferentes controles que correspondan a la estructura del algoritmo diseñado. • Establecer las propiedades (atributos) de los controles previamente ubicados, que determinan la apariencia de la interfaz

propiamente dicha. • Escribir los procedimientos (programas) que correspondan a las operaciones algorítmicas a efectuar. • Activar el tiempo de ejecución. Interactuar con el proceso de depuración de errores, si los hay. • Obtener los resultados, en pantalla, en archivo, o en papel. Análisis de los resultados.

En la figura 2.8 se ilustra el diseño de una interfaz para el problema del triángulo. En dicho problema, se trata de determinar si tres segmentos de recta forman un triángulo (véase el ejemplo #2). 22..66 EELL LLEENNGGUUAAJJEE DDEE PPRROOGGRRAAMMAACCIIÓÓNN Un Lenguaje de Programación de Computadores es un entorno sintáctico en el cual es posible suministrar las secuencias de instrucciones (procedimientos) correspondientes a las etapas lógicas de un algoritmo diseñado. En términos generales, un Lenguaje de Programación de Computadores consta de los siguientes elementos4: (i) – Un conjunto de caracteres (el alfabeto) que para Visual Basic –y muchos lenguajes similares- son 256 caracteres, numerados del 0 al 255, lo que conforma la tabla ASCII American Standard Code for Information Interchange) de caracteres; (ii) – Tipos de datos (entero, real, alfanumérico, lógico, objeto), variables, constantes, operadores; cada variable y constante tiene un nombre y un tipo de datos; los operadores permiten expresar las operaciones aritméticas y matemáticas en general; (iii) – Expresiones con las cuales se representan sintácticamente las diversas fórmulas matemáticas o lógicas de los algoritmos; (iv) – Instrucciones y comandos (órdenes), con los cuales se asigna memoria (contenido) a las variables, se ejecutan diversas operaciones especificadas en el algoritmo, y se realizan variados procesos en el ambiente de diseño de aplicaciones (entorno); las instrucciones pueden ser de lectura (directamente de la interfaz, o mediante un archivo de datos), de asignación de memoria (aritmética, string, boolean, o de establecimiento o cambio de propiedades de objetos), de salida (visualización en pantalla, impresión en papel, o grabación en un archivo); los comandos –generalmente- tienen que ver con la interacción con objetos específicos (por ejemplo, si un objeto de diálogos comunes se llama

0 4 Véase el capítulo 3 de la documentación online para mayores detalles y ejemplos.

Controles para la entrada de datos: un LABEL despliega texto; un TEXTBOX despliega y recibe datos.

Controles tipo TEXTBOX para desplegar los resultados.

Control tipo BotonComando que contiene programación

FFIIGGUURRAA 22..88 Una Interfaz Gráfica de Usuario diseñada para el problema de determinar si tres segmentos de recta forman un triángulo. Los segmentos de recta se leen en sendos controles tipo cajatexto.

Page 17: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 15 Clase# 2.- Estructuras de Secuencia y Selección Lógica

FFIIGGUURRAA 22..1100 Interfaz Gráfica de Usuario diseñada en la práctica #2.

N = Val(Text1) Max = 0 For K = 1 To N X = InputBox(“X:”) If(X > Max)Then Max = X End If Next K (b)

(a) FFIIGGUURRAA 22..99 Comparación entre algoritmo y programa en la solución de un problema.

CD1, CD1.ShowOpen abre un panel de diálogo para cargar un archivo), o interacción del proyecto con el Sistema Operativo ( como por ejemplo ChDir que cambia el directorio de ubicación); (iv) – las Estructuras Básicas de Programación, como son La Secuencia (cada procedimiento es una secuencia arriba-debajo de instrucciones, y en cada instrucción el orden de ejecución es de izquierda a derecha), la Selección Lógica If … End If para tomar decisiones, For … Next para efectuar repeticiones. Un programa se estructura con una secuencia ordenada –arriba/abajo- de instrucciones sintácticamente válidas del lenguaje; dicha secuencia refleja los procesos lógicos de un algoritmo que resuelve un problema planteado. En este sentido, el entorno de programación de computadores se asimila a un entorno de laboratorio virtual dentro del cual –rápidamente- se puede indagar por el efecto de ciertos cambios en las variables y constantes, y sus relaciones, que representan la estructura lógica 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..

El algoritmo aquí, figura 2.9(a), se representa por medio de un diagrama rectangular estructurado; sin embargo, puede emplearse cualquier otra técnica de representación algorítmica. La figura 2.9(b) es la representación en el lenguaje de programación Visual Basic, a partir de una interfaz diseñada, en la cual mediante un control tipo cajatexto se lee el valor de la variable N (número de datos).

22..77 LLAA PPRRÁÁCCTTIICCAA ##22 –– SSEECCUUEENNCCIIAA YY SSEELLEECCCCIIÓÓNN LLÓÓGGIICCAA

• En esta práctica se aplica la instrucción de Selección Lógica, If… End If, en sus diversos formatos.

• Se utilizan expresiones lógicas, operadores aritméticos, de concatenación y operadores lógicos.

• Se introduce el uso de funciones matemáticas de librería estándar. • Un control tipo cajatexto se limpia (o borra) con la asignación Text1 = “”, por

ejemplo, en la cual dentro de las comillas dobles no hay nada, significando esto el carácter nulo (vacío) dentro del mundo de los textos.

• Se hace uso de la función MsgBox() para desplegar ventana de mensajes. 22..88 TTAARREEAASS EEXXTTRRAACCLLAASSEE

• Elaborar algoritmos para los siguientes problemas de la problemateca, considerando cada vez un solo dato a la vez: 35, 39, 41, 45, 48, 54, 75, 77, 88, 94, 95, 96, 97. ¿Qué dificultades se encuentran si se pretenden considerar todos los datos a la vez, en cada problema?

• Del texto de Chapra & Canal, elaborar algoritmos para los problemas 1.7, 1.8, 1.12, 1.13, 2.1, 2.5, 2.8, 2.9, 2.10, 2.11, 2.13, 2.14, 2.15. Para los algoritmos diseñados, elaborar proyectos Visual Basic, diseñando las interfaces y ejecutando la programación.

• Realizar el estudio del documento «Gestión Eficiente del Tiempo»5. Adaptar para uso personal, una técnica que le permita mejorar su gestión del tiempo. ¿Puede usted conceptualizar este proceso como un algoritmo?

0 5 2003 Fundación para el Pensamiento Crítico http://www.criticalthinking.org . (Op. Cit.).

Page 18: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 16 Clase# 3.- Estructura de Iteración – Acumulador/Contador

FFIIGGUURRAA 33..11 Esquena diagramático de la iteración definida.

Clase #3

EESSTTRRUUCCTTUURRAA DDEE IITTEERRAACCIIÓÓNN –– AACCUUMMUULLAADDOORR//CCOONNTTAADDOORR

«Evolution». Fuente: R.B. Muhama.( Kent State University,

2004,.http://www.cs.kent.edu/~rmuhamma/)

Uno de los primeros logros de la Teoría de Algoritmos fue el de establecer y aplicar las estructuras automáticas básicas

mediante las cuales es posible expresar y representar una gama muy amplia de algoritmos. Ya hacia finales de la década de 1960's, en 1967 y 1968, se reunieron grupos de expertos en Europa y Norteamérica para tratar de formalizar un enfoque sólido de ingeniería, basado en la lógica y en la matemática, para la emergente disciplina de elaborar programas para computador, usualmente denominada Ingeniería de Software, o Ingeniería de Programación de Computadores. Desde estos primeros esfuerzos se puedieron identificar tres estructuras básicas presentes en muchos procesos naturales y artificiales: secuencia, selección lógica e iteración. Surgió, así, un enfoque estructurado para programar, denominado Programación estructurada, cuyo boom se dió en la década de 1970's y que ha sido la base para los otros paradigmas tecnológicos que surgieron en los años 1980's y 1990's. 33..11 LLAA EESSTTRRUUCCTTUURRAA DDEE IITTEERRAACCIIÓÓNN La estructura de Iteración permite repetir una serie de instrucciones dentro de un algoritmo. Dicha repetición puede ser definida o indefinida. La iteración es definida cuando de antemano se sabe cuántas veces se repetirá el conjunto de instrucciones; es indefinida cuando de antemano no se sabe cuántas veces se repetirá el conjunto de instrucciones, y en este caso el proceso repetitivo finalizará cuando se cumpla una cierta condición especificada para lograr la finalización de los ciclos repetitivos. La figura 3.1 ilustra la iteración definida. En este esquema se ilustra la representación diagramática de la iteración definida, para la cual se conoce de antemano cuántas 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 iteración se le denomina –precisamente- iteración definida. El símbolo diagramático consta de dos rectángulos, uno mayor que el otro, que comparten dos lados, el derecho y el inferior (vista frontal). El rectángulo mayor encierra a toda la estructura iterativa, implicando que es un proceso que se ejecuta antes de pasar al proceso siguiente. El rectángulo menor encierra las instrucciones que se repiten. Ese es el rango de iteración. Encima del rectángulo menor se escribe la asignación que define los parámetros básicos de iteración: la variable K es el índice de iteración; el signo igual (=) le asigna contenidos a la variable K; a la derecha del signo igual –vista frontal- se escriben los límites inferior y superior del recorrido de K, separados por una coma. Así, la expresión K = 1, N significa que el índice K toma valores en el intervalo [1, N], incluidos ambos límites, con incremento unitario (de 1). La estructura es automática. Esto significa que el índice K automáticamente se inicializa en el límite inferior (en la figura es 1); ejecuta la secuencia de operaciones definida por el rango de iteración (S1 en la figura), y al final de tal ejecución K se incrementa en 1; evalúa el valor (o contenido) de K con respecto al límite superior (en la figura es N): si es cierto que K es mayor que el límite superior (K > N), entonces termina la iteración y el algoritmo continua con la siguiente operación; si el valor de K es menor o igual que el límite superior (K ≤ N), entonces se repite el conjunto de operaciones definido por el rango de iteración (S1 en la figura 3.2).

Page 19: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 17 Clase# 3.- Estructura de Iteración – Acumulador/Contador

La expresión 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 iteración y puede estar conformado por una única instrucción o por una serie muy grande de instrucciones. Este proceso iterativo, así expresado, es automático e internamente la estructura tiene los controles específicos para determinar cuando se continúa la iteración o cuando se termina. Como se dijo anteriormente, antes de iniciarse la iteración, el valor de la variable N debe estar previamente definido. Después de salir de la iteración, el valor del índice de iteración K es N + 1, por cuanto se ha de iterar hasta K = N inclusive. El paso, o el valor del incremento, en la representación mostrada, es unitario; es decir, que el índice de iteración 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 más detalle todos los elementos implicados en la estructura de Iteración Definida, como se esquematizó en las figuras 3.1 y 3.2. La sintaxis genérica de la instrucción de Iteración Definida, en el lenguaje Visual Basic, se esquematiza en la figura 3.4.

Sintaxis propia del lenguaje. La sentencia FOR K = 1 To N inicia el proceso de iteración, estableciendo el índice de iteración (K), el límite inicial (1), el límite 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 evalúa su contenido.

For K = 1 To N ' ... rango de repetición ' ... S1 ' ... S2 ' ... ' ... Sn Next K

FFIIGGUURRAA 33..22 Iteración definida: (a) – Diagrama estructurado; (b) - Sintaxis del lenguaje Visual Basic.

(a) (b)

FFOORR JJ == 11 TToo 220000 SStteepp 1155 ……………….. NNeexxtt JJ

PPaallaabbrraa ccllaavvee ddeell lleenngguuaajjee

VVaalloorr iinniicciiaall ddeell íínnddiiccee ddee iitteerraacciióónn VVaalloorr ffiinnaall ddeell íínnddiiccee

ddee iitteerraacciióónn

IInnccrreemmeennttoo ddeell íínnddiiccee iitteerraattiivvoo

RRaannggoo iitteerraattiivvoo

NNoommbbrree ddeell ììnnddiiccee ddee iitteerraacciióónn

CCoommiieennzzoo yy ffíínn ddeell cciicclloo iitteerraattiivvoo

(a)

(b)

FFIIGGUURRAA 33..33 Iteración definida: (a) – Elementos constitutivos de la instrucción de Iteración Definida en Visual Basic; (b) - Diagrama esquemático.

Page 20: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 18 Clase# 3.- Estructura de Iteración – Acumulador/Contador

Con respecto a la iteración 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 instrucción de iteración 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 iteración no se ejecuta ni una sola vez. Por ejemplo For K = 1 To N, siendo N = 0, implica que

el rango de iteración no se ejecuta. • El incremento puede ser negativo, convirtiéndose en un decremento, como en el siguiente caso: T = MAX, MIN, -2 para

el cual el índice de iteración T tomará valores decrecientes desde un valor MAX hasta un valor MIN con decremento de 2.

Ejemplo #1 de iteración definida: Para un conjunto de valores numéricos determinar cuál es el mayor de todos.

Elaborar un algoritmo y representarlo con un diagrama de lógica. Solución: Un forma de hacer este algoritmo es obtener (leer) el primer número; luego, obtener el segundo y compararlo con el

primero, llevando el mayor a una variable, por ejemplo, MAX; después, obtener el tercero y compararlo con MAX, si el tercero es mayor que MAX entonces MAX toma el valor del tercero; el proceso se continúa hasta que se haya obtenido el último número. Se suponen N números en total. Se emplea una variable X para contener cada número leído (véase la figura 3.5).

En el conjunto de valores numéricos que se emplee deberían mezclarse números negativos y números positivos. ¿Cómo puede afectar esto el resultado obtenido? También puede aprovecharse este algoritmo para calcular el menor valor, MIN. ¿Cómo lo haría usted? Igualmente, elabore proyectos Visual Basic con datos de prueba.

FFoorr vvaarriiaabbllee == eexxpp__iinniicciioo TToo eexxpp__ffiinnaall SStteepp iinnccrr

[[AAcccciióónn 11]] [[AAcccciióónn 22]] …… [[AAcccciióónn nn]]

NNeexxtt vvaarriiaabbllee

•• vvaarriiaabbllee:: íínnddiiccee ddee iitteerraacciióónn

•• CCuuaannddoo vvaarriiaabbllee eessttáá ppoorr ffuueerraa ddeell iinntteerrvvaalloo [[eexxpp__iinniicciioo,, eexxpp__ffiinnaall]] eell pprroocceessoo tteerrmmiinnaa..

•• iinnccrr:: eess eell iinnccrreemmeennttoo ddee vvaarriiaabbllee ddeell iinntteerrvvaalloo [[eexxpp__iinniicciioo,, eexxpp__ffiinnaall]]..

•• eexxpp__iinniicciioo,, eexxpp__ffiinnaall:: ppuueeddeenn sseerr eexxpprreessiioonneess eenntteerraass oo rreeaalleess.. FFIIGGUURRAA 33..44 Sintaxis genérica de la Iteración definida.

La lectura del número de datos, N, y del primer valor, en X, se hace por medio de controles cajatexto en rl programa. Dentro de la iteración, se lee cada valor con la función InputBox() que genera una ventana de entrada de datos. La instrucción de selección lógica, IF, se utiliza en su formato más simple el cual no requiere cerrar con end If por cuanto el rango es una única instrucción 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)

FFIIGGUURRAA 33..55 Ejemplo #1 de la Iteración definida: (a) – Diagrama estructurado; (b) – Sintaxis en el lenguaje Visual Basic.

Page 21: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 19 Clase# 3.- Estructura de Iteración – Acumulador/Contador

(3.1)

Ejemplo #2 de iteración definida: Un ingeniero desea obtener datos para trazar una curva que determine la carga (S) en función de la relación de esbeltez (R). Ha seleccionado de un manual dos fórmulas empíricas que dan la carga permisible en dos intervalos de variación de la relación de esbeltez1. Las fórmulas 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.

Solución: El empleo de la iteración definida es directo. Se puede utilizar la variable R como índice de iteración, variando desde 50 a 300 con incrementos de 10, y para cada valor de R aplicar la fórmula respectiva

según el valor dentro del rango dado. La figura 3.6 presenta el algoritmo y el resultado de un proyecto Visual Basic.

Ejemplo #3 de iteración definida: Elaborar un algoritmo para calcular la raíz cuadrada de los primeros 100 números naturales pares

Solución: El empleo de la iteración definida, con incremento diferente de 1, permite generar rápidamente muchos resultados, como se muestra en la figura 3.7.

0 1 Problema #3 de la Problemateca, http://xue.unalmed.edu.co/~walvarem

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

• 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 línes de texto. La constante vbCrLf se usa para el cambio de línea.

(a) (b)

(c)

FFIIGGUURRAA 33..66 Ejemplo #2 de la Iteración definida: (a) – Diagrama estructurado; (b) – Sintaxis en el lenguaje Visual Basic (c) – Resultados obtenidos con un proyecto Visual Basic.

(c)

(b)

FFoorr jj == 22 TToo 220000 SStteepp 22 ttxxtt__RR == ““jj == ““ && jj && vvbbttaabb && __ ““SSqqrr”” && jj && ““)) ==““ && SSqqrr((jj)) && __ vvbbCCrrLLff NNeexxtt jj

PPrriivvaattee SSuubb FFoorrmm__LLooaadd(()) ttxxtt__RR == ""NNooss.. PPAARREESS YY SSUUSS RRAAÍÍCCEESS"" && vvbbCCrrLLff && __ SSttrriinngg((3300,,””__””)) && vvbbCCrrLLff EEnndd SSuubb

•• EEmmpplleeaannddoo ccoonnccaatteennaacciióónn yy aassiiggnnaacciióónn ssee oobbttiieenneenn llooss rreessuullttaaddooss mmoossttrraaddooss..

•• EEll ttííttuulloo ssee hhaaccee eenn eell eevveennttoo LLooaadd(()) ddeell ffoorrmmuullaarriioo..

•• vvbbTTaabb,, vvbbCCrrLLff ssoonn ccoonnssttaanntteess ssttrriinngg ddee VViissuuaall BBaassiicc 66..00..

• LLaa ffuunncciióónn SSttrriinngg(()) ccoonnccaatteennaa ccaarraacctteerreess.. txt_R = txt_R & "J=" & j & vbTab & "Sqr(" & j & ")= " & Sqr(j) & vbCrLf

(a)

(d)

FFIIGGUURRAA 33..77 Ejemplo #3 de la Iteración definida: (a) – Sintaxis en el lenguaje Visual Basic; (b) – Interfaz diseñada en el proyecto; (c) – Procedimiento Load() para los títulos; (d) – Para cada valor del índice j se ejecuta esta asignación.

Page 22: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 20 Clase# 3.- Estructura de Iteración – Acumulador/Contador

33..22 AACCUUMMUULLAADDOORR YY CCOONNTTAADDOORR

Los procesos de acumulación son frecuentes en los cálculos dentro de los algoritmos. Se presenta acumulación cuando se pretende obtener la suma de los términos de una serie, por ejemplo, o cuando se quiere hallar una sumatoria de N valores, siendo cada uno Xi. Cuando se intenta efectuar procesos de acumulación en un algoritmo es preciso emular los procesos acumulativos de los sistemas naturales. Para ello, desde los más tempranos desarrollos computacionales, se ideó el concepto de acumulador, que es

simplemente un área de la memoria física de la máquina sobre la cual se va sumando un valor leído o calculado. El proceso físico emulado corresponde al de una alcancía en la cual se echa una cierta cantidad de dinero cada vez, cantidad que en general es variable; después de cada adición de dinero a la alcancía, el nuevo contenido de la misma corresponde al contenido previo más el valor adicionado. La expresión genérica de una acumulación es: T = T + X, donde el signo igual actúa como operador de acumulación o de asignación de memoria. La expresión anterior se interpreta como que el nuevo valor de la variable T es igual al valor anterior más el contenido de la variable X. Si la expresión anterior es el rango iterativo de una estructura automática de iteración, entonces el efecto final es el de obtener una sumatoria.

Supóngase que se desea obtener la sumatoria de N valores Xi, expresada algebraicamente como se muestra. El diagrama estructurado de lógica es el que se muestra, conjuntamente con un programa Visual Basic en la figura 3.8.

Es sorprendente saber que este es el proceso mediante el cual todo computador ejecuta las operaciones más complejas: sumas de los términos de series, pues toda operación aritmética o matemática puede convertirse a una sumatoria de los términos de una serie. La ventaja de los computadores es que realizan extremadamente rápido dichas sumas (del orden de 10-6 segundos para los PC's, hasta 10-18 segundos para los supercomputadores), y en términos de la velocidad de respuesta de los sentidos humanos (del orden de 10-3 segundos) parece que el proceso fuera instantáneo. 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 iteración, 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 número de valores que son mayores que cero (positivos) y esa cantidad se almacena en la variable NP.

T = 0.0 For K = 1 to N X = InputBox("X = ") T = T + X Next K

El valor de N ha de estar previamente definido. Cada vez que se lee un valor de X, se le adiciona al contenido de T; al leer N valores de X, por medio del control iterativo K = 1, N, se tendrá la sumatoria X1 + X2 + X3 + ... + Xn. La instrucción de asignación X = InputBox("X = ") utiliza una lectura desde el teclado. La variable T se inicializa en cero, para garantizar que se acumula correctamente.

(a)

(b)

FFIIGGUURRAA 33..88 Ejemplo de acumulador: (a) – Diagrama estructurado; (b) – Sintaxis en el lenguaje Visual Basic.

• La variable NP debe ser de tipo entero. Se inicializa en cero con el fín de garantizar el inicio correcto del conteo.

• El formato de selección lógica empleado es el más simple y no requiere usar End If. Esto se puede hacer siempre que el rango de la selección lógica sea una única instrucción.

NP = 0 For K = 1 to N X = InputBox("X = ") If (X > 0) Then NP = NP + 1 Next K

(a) (b)

FFIIGGUURRAA 33..99 Ejemplo de contador: (a) – Diagrama estructurado; (b) – Sintaxis en el lenguaje Visual Basic.

Page 23: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 21 Clase# 3.- Estructura de Iteración – Acumulador/Contador

...19151173

9753

−+−+− XXXXX

Ejemplo de acumulador: Para la siguiente serie calcular la suma de los N primeros términos, 1 < X < 2:

En la figura 3.10 se ilustra un algoritmo y programa para este caso.

33..33 PPRRÁÁCCTTIICCAA##33:: IITTEERRAACCIIÓÓNN DDEEFFIINNIIDDAA –– AACCUUMMUULLAADDOORR//CCOONNTTAADDOORR

• Diseñar la interfaz mostrada. Con un control tipo PictureBox (cajagráfica) se

muestra la fórmula para el Sen(x). • En una cajatexto, los resultados se visualizan en forma tabular. • El Programa para calcular la suma de la serie es el siguiente

33..44 TTAARREEAASS EEXXTTRRAACCLLAASSEE

• Implementar en Visual Basic, los ejemplos de esta clase. Apóyese en el documento “Aprenda Visual Basic Como si estuviera en primero”, capítulos 3 y 4, de García et al. (lo encuentra en formato PDF en la página Web de la asignatura), y en los capítulos 2 y 3 de la documentación básica del curso.

• Estudiar los ejemplos resueltos. Ver: http://xue.unalmed.edu.co/~walvarem. • Implementar técnicas de estudio eficiente. Véase el documento sobre motivación. • Resuelva de la problemateca: 6, 11, 12, 13, 14, 15, 17, 18, 24, 42, 72, 73, 74, 83, 90, 91. Y las siguientes series:

NN == VVaall((TTeexxtt11)) :: XX == VVaall((TTeexxtt22)) SSuummaa == 00..00 :: DD == 33 FFoorr KK == 11 TToo NN TTeerr == ((XX^̂((22**KK--11)))) // DD SSuummaa == SSuummaa ++ TTeerr DD == DD ++ 44 NNeexxtt KK TTeexxtt33 == ““SSuummaa ==““ && SSuummaa

La asignación de acumulación, Suma = Suma + Ter, repetida N veces emula el cálculo de la sumatoria. El signo igual (=) es el operador de asignación (véase el capítulo 3, sección 3.2) cuyo efecto consiste en evaluar la expresión 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.

(a) (b) FFIIGGUURRAA 33..1100 Ejemplo de acumulador: (a) – Diagrama estructurado; (b) – Sintaxis en el lenguaje Visual Basic.

FFIIGGUURRAA 33..1111 La Instrucción de Asignación de Memoria.

Suma = 0.0 For i = 0 To N F = 1 For K = 1 To 2*I + 1 F = F * K Next K

Ter = ((-1)^i)*(X^(2*i + 1)) / F Suma = Suma + Ter Next i Text3 = Str(Suma)

sigue

Calcula el factorial

Page 24: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 22 Clase# 4.- Estructuras de Iteración / Integración Numérica

Clase #4

EESSTTRRUUCCTTUURRAA DDEE IITTEERRAACCIIÓÓNN –– IINNTTEEGGRRAACCIIÓÓNN NNUUMMÉÉRRIICCAA

«Evolution». Fuente: R.B. Muhama.( Kent State University, 2004,.http://www.cs.kent.edu/~rmuhamma/)

El problema de encontrar la solución numérica de una integral

definida es un problema común de ingeniería. Estos métodos numéricos se utilizan cuando los métodos analíticos no son fáciles de aplicar, o simplemente cuando no se pueden aplicar. Por ejemplo, la siguiente integral -mostrada en la ecuación 4.1- no tiene solución analítica: La estrategia básica de los métodos de integración numérica consiste en aproximar la integral a una sumatoria, lo cual implica utilizar la iteración definida. La ecuación 4.2 es la esquematización matemático-conceptual de dicha estrategia: 44..11 MMÉÉTTOODDOOSS DDEE IINNTTEEGGRRAACCIIÓÓNN NNUUMMÉÉRRIICCAA

La Integración Numérica implica el calcular un valor aproximado de una integral de una función f(x), como en la ecuación 4.1, mediante la evaluación de una serie de puntos discretos1. En general, hay dos categorías de métodos para lograr dicha aproximación. (i) - En primer lugar, están los métodos que como el trapezoidal o el de Simpson calculan la aproximación a la integral evaluando a la función f(x) en una serie de puntos igualmente espaciados, configurando –así- franjas o tiras de igual ancho. Estos métodos, frecuentemente, se les denomina como de la fórmula Newton-Cotes. (ii) – En segundo lugar, están los métodos que utilizan puntos irregularmente espaciados; estos métodos se denominan genéricamente como Cuadratura Gauss, o Integración Numérica de Gauss-Legendre2, diseñados para obtener una mayor precisión numérica para un cierto conjunto de puntos dentro de un intervalo dado. Sobre este tipo de métodos hay màs detalles en capìtulo 6 de las aplicaciones en Mètodos Numéricos (http://xue.unalmed.edu.co/~walvarem). De la primera categoría, los métodos que se emplean para calcular numéricamente una integral, y que se tratan en esta clase#4, son los siguientes: (i) – Método Rectangular; (ii) – Método Trapezoidal; (iii) – Método de Simpson. MMÉÉTTOODDOO RREECCTTAANNGGUULLAARR En el método Rectangular, se divide el intervalo [a, b] en subintervalos (franjas o tiras) igualmente espaciados, y cada franja – Ai - se considera como un rectángulo (véase la figura 4.1). La integral se aproxima por la sumatoria de los rectángulos.

0 1 numerical-methods.com :«Numerical Integration»,http://www.numerical-methods.com. 2 Dyer, Charles: «Numerical Integration», 2002

dxe xb

a

2/2

21 −∫ π (4.1) ∑∫

+∞

=

=0

)(i

b

asGeométricaFigurasÁreasxf (4.2)

∑∫=

≅N

ii

b

aAdxxf

1)(

a bδ x

Y= f(x) Ai

(a)

(b)

FFIIGGUURRAA 44..11 Elementos básicos a considerar en el Método Rectangular de Integración Numérica: (a) – esquema de los subintervalos; (b) - Aproximación de la integral.

Page 25: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 23 Clase# 4.- Estructuras de Iteración / Integración Numérica

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. La figura 4.3 muestra un esquema gráfico de la función f(x), cuya fórmula es la que aparece en la figura 4.2(c), y una interfaz Visual Basic con los resultados del caso. MMÉÉTTOODDOO TTRRAAPPEEZZOOIIDDAALL En el Método Trapezoidal de Integración Numérica se considera cada franja como un trapezio, como se ilustra en la figura 4.4.

x x+δ

δ

f(x)

Ai

1) Se declaran x, δ, n, a, b, Suma 2) 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 (a)

(b)

604.0)9.0(

101.0)3.0(

1)( 22 −+−

++−

=xx

xf

(c)

Private Function f(X As Single) As Single f = 1 / ((x - 0.3) ^ 2 + 0.01) + 1 / ((x - 0.9) ^ 2 _ + 0.04) - 6 End Sub (d)

FFIIGGUURRAA 44..22 El Método Rectangular: (a) – Esquema de cada franja; (b) – Esquema general del algoritmo; (c) – Fórmula de la función f(x) empleada; (d) – Sintaxis de la función f(x) en el Lenguaje Visual Basic.

(a) (b)

FFIIGGUURRAA 44..33 El Método Rectangular: (a) – Esquema gráfico de f(x); (b) – Interfaz Visual Basic con resultados.

X X+δ

Ai = [f(xi)+f(xi + δ)]*δ/2

(a)

(b) Ai

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

(c)

FFIIGGUURRAA 44..44 El Método Trapezoidal: (a) – Esquema de cada franja; (b) – Fórmula para calcular el área de cada franja; (c) – Esquema del algoritmo que utiliza la función f() definida en la figura 4.2(d).

Page 26: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 24 Clase# 4.- Estructuras de Iteración / Integración Numérica

MMÉÉTTOODDOO DDEE SSIIMMPPSSOONN El Método Simpson de Integración Numérica proporciona una aproximación más precisa, ya que consiste en conectar grupos sucesivos de tres o más puntos sobre la curva mediante parábolas de segundo grado, y sumar las áreas bajo las parábolas para obtener el área aproximada bajo la curva. La figura 4.5 ilustra varias fórmulas del Método Simpson. Empleando el esquema algorítmico de la figura 4.2(b) es fácil implementar un proyecto en Visual Basic que emplee el Método Simpson en cualquiera de sus variantes expuestas en la figura 4.5. 44..22 PPRRÁÁCCTTIICCAA··44:: MMÉÉTTOODDOOSS DDEE IINNTTEEGGRRAACCIIÓÓNN NNUUMMÉÉRRIICCAA

• Calcular el área de la función definida en la figura 4.2(c). • Emplear los métodos explicados: Rectangular, Trapezoidal, Simpson. • Emplear varios intervalos para la función. • Modificar esta interfaz para presentar los resultados tabulares en cada método

que se emplee. • Efectuar una tabla de comparación de los tres métodos, para un mismo intervalo.

44..33 AACCTTIIVVIIDDAADDEESS EEXXTTRRAACCLLAASSEE -- TTAARREEAASS • Elaborar algoritmos e implementarlos como

proyectos Visual Basic para calcular numéricamente las integrales de la figura 4.6.

• Incluya en dicha lista la función f(x) de la

ecuación 4.1, en el intervalo [-3.0, 3.0].

FFIIGGUURRAA 44..55 El Método Simpson: (a) – Esquema de cada franja; (b) – Fórmula para calcular el área de cada franja, considerando tres puntos; (c) – Fórmula llamada de 1/3 para calcular el área total; (d) – Fórmula de los 3/8.

X X+δ δ (a)

Ai = [f(x)+4*f(x + δ/2)+f(x + δ)]*δ/6 Regla de Simpson de 1/6 (b)

Regla de Simpson de 1/3, n es par ⎟⎟

⎞⎜⎜⎝

⎛+++== ∑ ∑∫ ∑

=

=+

=

2/

1

2/)2(

11

2/

1

)()(2)(4)(3

)()(n

i

n

iii

b

a

n

ii bfxfxfafAxdxf δ

(c)

(d)

Regla de Simpson de 3/8; 4 puntos

⎟⎠⎞

⎜⎝⎛ ++++++= )()

32(3)

3(3)(

83 δδδδ xfxfxfxfAi

Ai

FFIIGGUURRAA 44..66 Ejemplos de integrales cuya solución es más fácil por métodos de Integración Numérica.

Page 27: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 25 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

Clase #5

EESSTTRRUUCCTTUURRAA DDEE IITTEERRAACCIIÓÓNN IINNDDEEFFIINNIIDDAA–– RRAAÍÍCCEESS DDEE FF((XX ))== 00

«Evolution». Fuente: R.B. Muhama.( Kent State University, 2004,.http://www.cs.kent.edu/~rmuhamma/)

Además de la iteración definida, estudiada en las clases #3 y #4, se dispone de la Estructura de Iteración Indefinida que se caracteriza porque de antemano se desconoce exactamente cuántas veces se repetirá un conjunto de instrucciones (el rango iterativo). La figura 5.1 presentan dos esquemas diagramáticos básicos de este tipo de repetición. 44..11 FFOORRMMAATTOOSS DDEE LLAA IITTEERRAACCIIÓÓNN IINNDDEEFFIINNIIDDAA

La iteración MIENTRAS QUE es de tipo indefinido por cuanto se persistirá la repetición en tanto la condición lógica, CondLog, sea verdadera, y de antemano no se sabe exactamente cuántas repeticiones se efectuarán. En el diagrama y programa

siguientes, el valor de verdad de la condición lógica controla la iteración cuya evaluación se realiza siempre al inicio de la iteración. La figura 5.2 presenta

dos formatos en la sintaxis del lenguaje Visual Basic para la Iteración Indefininida del tipo HAGA MIENTRAS QUE.

Es decir, que si de entrada la condición lógica es falsa, no se ejecutará el rango de iteración conformado por la serie de procesos S1, S2, ..., Sn. Se saldrá de la iteración tan pronto la condición lógica sea falsa. Como en el caso de la iteración definida, el símbolo diagramático de esta iteración consta de dos rectángulos, uno más pequeńo dentro de otro mayor, que comparten un lado; la palabra MIENTRAS es requerida y es la que define el tipo de iteración. En el programa mostrado, se ve que la elección de

FFIIGGUURRAA 55..11 EEnn llaa iitteerraacciióónn iinnddeeffiinniiddaa NNOO ssee ssaabbee ddee aanntteemmaannoo ccuuáánnttaass vveecceess ssee rreeppeettiirráá eell rraannggoo ddee iitteerraacciióónn:: ((aa)) –– IItteerraacciióónn IInnddeeffiinniiddaa ddeell ttiippoo HHAAGGAA MMIIEENNTTRRAASS;; ((bb)) –– IItteerraacciióónn IInnddeeffiinniiddaa ddeell ttiippoo HHAAGGAA HHAASSTTAA QQUUEE..

(a) (b)

Otra forma de la sintaxis de esta instrucción es la siguiente: Do ' ... rango de repetición ' ... S1 ' ... S2 ' ...... ' ... Sn Loop While (CondLog)

Do While (CondLog) ' ... rango de repetición ' ... S1 ' ... S2 ' ...... ' ... Sn Loop

(a) (b) (c)

FFIIGGUURRAA 55..22 LLaa IItteerraacciióónn IInnddeeffiinniiddaa ddeell ttiippoo HHAAGGAA MMIIEENNTTRRAASS QQUUEE:: ((aa)) –– EEssqquueemmaa ddiiaaggrraammááttiiccoo;; ((bb)) –– EEnn eessttee ffoorrmmaattoo ddee llaa ssiinnttaaxxiiss ddeell lleenngguuaajjee,, llaa ccoonnddiicciióónn llóóggiiccaa ssee eevvaallúúaa aall iinniicciioo;; ((cc)) –– EEnn eessttee ffoorrmmaattoo ddee llaa ccoonnddiicciióónn llóóggiiccaa ssee eevvaallúúaa aall ffiinnaall..

Page 28: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 26 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

esta palabra, para utilizarse en la diagramación, 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 condición lógica se evalúa al final. Es decir, que –por lo menos- se ejecuta una vez el rango iterativo de instrucciones.

Ejemplo #1 de iteración indefinida: Para dos números enteros M, N, hallar el Máximo Común Divisor (mcd)

utilizando el algoritmo de Euclides. Solución: Como se estableció en el capítulo 2 de la documentación, el algoritmo de Euclides consta de los siguientes pasos: (1º)

– Dividir el número mayor (dividendo),M, entre el número 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 lógica para el proceso del algoritmo de Euclides. Obsérvese que la variable R, el residuo, se inicializa en un valor diferente de cero con el fín de ejecutar la iteración desde el principio ( en este caso, R = 77); también, dentro de la iteración indefinida es necesario preguntar si R <> 0 para poder definir cuando se ha obtenido el mcd, o realizar las sustituciones de dividendo y divisor.

Ejemplo #2 de iteración indefinida: En cierta parte de un proceso académico 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 código de cinco dígitos, 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 código. Elaborar un algoritmo y representarlo diagramáticamente. Solución: En la figura 5.4 se ilustra el algoritmo representado mediante un diagrama estructurado de lógica y la sintaxis del

lenguaje Visual Basic; también presenta algunos resultados obtenidos con un proyecto Visual Basic. El cálculo de la nota Def sólo se efectua si el código es diferente de cero.

M \ N significa división en aritmética entera (véase la sección 3.2). Mediante dos puntos se separan dos, o más instrucciones, en una misma línea 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 iteración termina y en N estará contenido el último divisor.

(a) M = InputBox(“M = “) N = InputBox(“N = “) R = 77 Do WHILE (R <> 0) C = M \ N : R = M – C * N If (R <> 0)Then M = N : N = R Else MCD = N End If Loop Text1 = “MCD = “ & MCD (b)

FFIIGGUURRAA 55..33 EEjjeemmpplloo ##11 ddee llaa IItteerraacciióónn IInnddeeffiinniiddaa:: ((aa)) –– EEssqquueemmaa ddiiaaggrraammááttiiccoo;; ((bb)) –– UUnn pprrooggrraammaa eenn llaa ssiinnttaaxxiiss ddeell lleenngguuaajjee,, llaa ccoonnddiicciióónn llóóggiiccaa ssee eevvaallúúaa aall iinniicciioo..

Page 29: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 27 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

Otra variante de la iteración indefinida es la iteración HAGA HASTA QUE; también es de tipo indefinido por cuanto se persistirá la repetición en tanto NO se cumpla la condición lógica, CLog, y de antemano se ignora exactamente cuántas repeticiones se efectuarán, como se ilustra en el diagrama y programa de la figura 5.5.

En este tipo de iteración la condición lógica siempre se evalúa al final, de suerte que de entrada siempre se ejecutará la serie de operaciones S1, S2, ..., Sn que conforman el rango de iteración. Aún si la condición lógica no se cumple, el rango de iteración se ejecutará una vez. El símbolo diagramático para esta iteración también incluye un rectángulo menor dentro de otro mayor, compartiendo un lado, pero, como se puede apreciar en el esquema mostrado, el rectángulo 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 condición lógica se evalúa de entrada. La figura 5.6 hace una comparación entre la iteración definida y la indefinida para calcular una serie.

Cod = 99 Do WHILE (Cod <> 0) Cod = InputBox(“Código:”) 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 Loop

Ejemplo de resultados para este problema. Si se pretende obtener notas definitivas aproximadas a las décimas, es precisa utilizar una función de redondeo, como Round(), véase el capítulo 3.

FFIIGGUURRAA 55..44 EEjjeemmpplloo ##22 ddee IItteerraacciióónn IInnddeeffiinniiddaa:: ((aa)) –– EEssqquueemmaa ddee uunn ddiiaaggrraammaa eessttrruuccttuurraaddoo ddee llóóggiiccaa;; ((bb)) –– UUnn pprrooggrraammaa eenn llaa ssiinnttaaxxiiss ddeell lleenngguuaajjee VViissuuaall BBaassiicc;; ((cc)) –– AAllgguunnooss rreessuullttaaddooss oobbtteenniiddooss ccoonn uunn pprrooyyeeccttoo eellaabboorraaddoo eenn VViissuuaall BBaassiicc..

(a) (b)

(c)

También se puede escribir así: Do Until (CondLog) ' ... rango de repetición ' ... S1 ' ... S2 ' ...... ' ... Sn Loop

(a) Do ' ... rango de repetición ' ... S1 ' ... S2 ' ...... ' ... Sn Loop Until (CondLog) (a)

FFIIGGUURRAA 55..55 IItteerraacciióónn IInnddeeffiinniiddaa HHAAGGAA HHAASSTTAA QQUUEE:: ((aa)) –– EEssqquueemmaa ddiiaaggrraammááttiiccoo;; ((bb)) –– UUnn pprrooggrraammaa eenn llaa ssiinnttaaxxiiss ddeell lleenngguuaajjee VViissuuaall BBaassiicc..

∑= +

=n

i iS

021

1

Iteración definida: CCaallccuullaarr llaa SS ppaarraa llooss pprriimmeerrooss 110000 ttéérrmmiinnooss ddee llaa SSuummaattoorriiaa,, ppoorr eejjeemmpplloo..

∑= +

=?

021

1i i

S

IItteerraacciióónn IInnddeeffiinniiddaa:: CCaallccuullaarr SS mmiieennttrraass qquuee llaassuummaa sseeaa mmeennoorr qquuee 22..00.. ¿¿CCuuáánnttooss ttéérrmmiinnooss ssee ssuummaann??

FFIIGGUURRAA 55..66 CCoommppaarraacciióónn eennttrree llaa IItteerraacciióónn IInnddeeffiinniiddaa yy llaa IItteerraacciióónn DDeeffiinniiddaa..

Page 30: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 28 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

44..22 MMÉÉTTOODDOOSS PPAARRAA OOBBTTEENNEERR RRAAÍÍCCEESS DDEE FF((XX)) == 00 Calcular las raíces de funciones no-lineales se reduce al problema fundamental de obtener las raíces de una ecuación de la forma genérica:

f(x) = 0 (5.1) Es decir, que el problema consiste en determinar los valores de x, o los ceros de f(x), para los que se cumple f(x) = 0. Normalmente, no es posible obtener una forma explícita en x por lo cual es preciso emplear una forma implícita, como la explicada en secciones anteriores. Esto implica - a su vez- que es preciso emplear métodos aproximados. Por otro lado, la determinación de las raíces de una ecuación f(x) = 0, correspondiente a una función no-líneal, es uno de los problemas más antiguos y más estudiados en algunas áreas de las Matemáticas Aplicadas, de los Métodos Numéricos, y del Análisis Numérico, y se han realizado un gran número de esfuerzos en para lograr métodos de solución que permitan obtener los ceros de f(x) = 0. Su importancia radica en que si podemos determinar las raíces de una ecuación, también podemos determinar máximos y mínimos, valores propios de matrices, resolver sistemas de ecuaciones lineales y diferenciales, etc. Todo lo cual tiene muchísimas aplicaciones en muy diversas áreas técnicas y de ingeniería, especialmente con el desarrollo de los computadores y de las redes de computadores, en especial de la Internet, que han permitido abordar problemas que antes eran inabordables con técnicas manuales. La determinación de las soluciones de la ecuación1 puede llegar a ser un problema muy difícil, en especial cuando intervienen varios tipos de funciones (exponenciales, trigonométricas, polinómicas, logarítmicas, etc.). Si f(x) es una función polinómica de grado 1 ó 2, conocemos expresiones simples que nos permitirán determinar sus raíces. Para polinomios de grado 3 ó 4 es necesario emplear métodos complejos y laboriosos. Sin embargo, si f(x) es de grado mayor de cuatro o bien no es polinómica, no hay ninguna fórmula conocida que permita determinar los ceros de la ecuación, es decir sus raíces (con excepción de casos muy singulares). Existen una serie de reglas que pueden ayudar a determinar las raíces de una ecuación como la definida por 5.1:

• El Teorema de Bolzano, que establece que si una función continua, f(x), toma en los extremos del intervalo [a,b] valores de signo opuesto, entonces la función admite, al menos, una raíz en dicho intervalo.

• En el caso en que f(x) sea una función algebraica (polinómica) de grado n y coeficientes reales, podemos afirmar que

tendrá n raíces reales o complejas.

• La propiedad más importante que verifican las raíces racionales de una ecuación algebraica establece que si p/q es una raíz racional de la ecuación de coeficientes enteros:

entonces el denominador q divide al coeficientes an y el numerador p divide al término independiente a0.

• La mayoría de los métodos utilizados para el cálculo de las raíces de una ecuación son iterativos y se basan en modelos

de aproximaciones sucesivas, que siempre suministran un valor muy aproximado de las raíces. Estos métodos trabajan del siguiente modo: a partir de una primera aproximación al valor de la raíz, determinamos una aproximación mejor aplicando una determinada regla de cálculo y así sucesivamente hasta que se determine el valor de la raíz con el grado de aproximación deseado.

Si sólo se presenta una variable independiente en la ecuación 5.1 entonces se emplean dos categorías de métodos de solución: (a) - de intervalo cerrado como el método de bisección y el método «Regula Falsi» o de la «Falsa posición»;

0 1 Carnahan, Brice, et al: «Applied Numerical Methods», John Wiley and Sons, 1969, pp. 173-17

Page 31: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 29 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

(b) - de intervalo abierto2, que son los demás métodos. Cuando se presenta más de una variable independiente, entonces habrá de resolverse un sistema de ecuaciones lineales ó no-lineales (véase el capìtulo 8 de las aplicaciones en Métodos Numéricos). Por ahora, se tratarán raíces de funciones, para una ecuación f(x) = 0, donde sólo interviene una única variable independiente, y la función es no-lineal. La ecuación 5.1 tiene siempre en forma implícita a la variable independiente. Particularmente, dado que este es un curso introductorio al tema del Anàlisis Numèrico y de los Métodos Numèricos se verán los siguientes Métodos: • El Método de Bolzano, llamado generalmente el Método de Bisección, que es de intervalo cerrado. • El Mètodo de Regula Falsi, o de la Falsa Posición, que también es de intervalo cerrado. • El Método de Newton-Raphson, generalmente llamado Método de Newton, que es de intervalo abierto. • El Método de la Secante, como una variante del Método de Newton. • Además, hay muchos otros Métodos que se mencionan en la literatura especializada, tales como: Punto Fijo, Steffensen,

Graffe, Muller, Bernoulli, Factorizaciòn Iterativa de polinomios, Método de Ward, Algoritmo QD de RutisHauser, Método de Bairstow para factores cuadràticos, Métodos acelerativos, etc.

MMÉÉTTOODDOO DDEE BBOOLLZZAANNOO ((BBIISSEECCCCIIÓÓNN))

El Método de Bolzano3, conocido popularmente como Método de Bisección, es uno de los procedimientos más simples para hallar la raìz de una funciòn f(x) = 0 en un intervalo dado, como en la figura 5.7. Precisamente, el Teorema de Bolzano4 suministra la base lógico-matemática que permite hallar dicha raíz. En tèrminos sencillos, dicho Teorema establece que si una función f(x) es continua en el intervalo [a,b] y se cumple que f(a)*(b) < 0, entonces f(x) tiene una raìz en dicho intervalo. Mediante métodos gráficos o mediante la tabulación de valores de f(x), es posible determinar el intervalo, que es aquel en el cual la funciòn 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

raìz 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 método es conocido. Luego se verifica si este nuevo valor c es la raíiz, o en cuál de los intervalos está, ahora, la raìz (véase la figura 5.8). El proceso se repite hasta que el valor absoluto de f(c) sea suficientemente pequeño.

0 2 The Free Dictionary , Copyright © 2006 Farlex, Inc. http://encyclopedia.thefreedictionary.com/Root-finding+algorithm 3 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.

FFIIGGUURRAA 55..77 f(x) tiene una raìz en el intervalo [1.0, 1.5].

a

b

f(x)

FFIIGGUURRAA 55..88 Diagrama esquemático de los subintervalos involucrados en el Mètodo de Bolzano.

Page 32: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 30 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

Los pasos básicos del algoritmo, en Lenguaje Natural Estructurado (LNA)5, son los siguientes:

1. Conocer la función ff((xx)) a la cual se le quiere conocer su raíz.

2. Establecer el intervalo [[aa,, bb]] a partir del cual se va a iniciar el proceso y un εε >> 00 (margen de error, o tolerancia numérica).

3. Calcular el punto medio del intervalo: cc == ((aa++bb))//22

3.1 Si ||ff((cc))|| << εε entonces cc es la raíz. Finalizar.

3.2 Si ff((aa))**ff((cc)) << 00 entonces bb == cc.. EEss ddeecciirr,, eell nnuueevvoo eexxttrreemmoo ssuuppeerriioorr ddeell iinntteerrvvaalloo eess bb..

3.3 Si ff((cc))**ff((bb))<<00 entonces aa == cc.. EEss ddeecciirr,, eell nnuueevvoo eexxttrreemmoo iinnffeerriioorr ddeell iinntteerrvvaalloo eess bb.. 4. Repetir el proceso desde el paso 3. Como ejemplo de aplicación, considérese la siguiente función: Cuyo esquema gráfico y la solución mediante un proyecto Visual Basic se presentan en la figura 5.10:

0 5 Esta es una de las técnicas básicas de representación de algoritmos. Véase el capítulo 2 de «Algoritmos y Programación con Visual Basic», en

http://xue.unalmed.edu.co/~walvarem.

FFIIGGUURRAA 55..99 Diagrama esquemático de los parámetros básicos involucrados en el Mètodo de Bolzano.

604.0)9.0(

101.0)3.0(

1)( 22 −+−

++−

=xx

xf (5.2)

FFIIGGUURRAA 55..1100 Diagrama esquemático de la función f(x) de la ecuación 5.2, y resultados obtenidos con un proyecto Visual Basic para el intervalo [1, 2].

Page 33: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 31 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

MMÉÉTTOODDOO DDEE NNEEWWTTOONN ((NNEEWWTTOONN--RRAAPPHHSSOONN)) Es de gran importancia resolver una ecuación de la forma f(x)=0 (3.3.1), en muchas áreas de Ciencia e Ingeniería, como en Matemáticas, Física, Química, Eléctrica, etc., y también en el cálculo de algunas funciones o constantes matemáticas como las raíces cuadradas y otros tipos de raíces. El Método de Newton_Raphson6, conocido más comúnmente como Método de Newton, es un Método de intervalo abierto, y sólo requiere un valor inicial, cercano a la raíz, para obtener un valor más aproximado a la raíz de una función f(x) = 0 (3.3.1) . Este método es atribuido a Sir Isaac Newton (1643-1727) y a Joseph Raphson (1648-1715)7. La figura 5.11 presenta los parámetros principales a considerar en el método de Newton.

Los pasos básicos de un algoritmo para el Método de Newton son los siguientes:

1. Conocer la función ff((xx)) a la cual se le quiere obtener su raíz. También su derivada ff’’((xx)).

2. Establecer un punto de inicio XX00 a partir del cual se va a iniciar el proceso.

3. Si ff’’((XX00)) == 00 entonces habrá división por cero, finalizar; de lo contrario, continuar con paso 4..

4. Si ff((XX00)) == 00 entonces la raíz es XX00, finalizar, e ir al paso 5; de lo contrario:

• Calcule XX11 mediante la ecuación:

•• Hacer XX00 igual a XX11..

5. Repetir el paso 3 hasta que |ff((XX00))|| ≤≤ eeppssiilloonn..

6. Mostrar XX00

Sin embargo, el Método de Newton-Raphson presenta varios inconvenientes: (i) - Cuando la raíz es un Punto de Inflexión, es decir que: f’’(x)=0, el método falla, o sea que no converge; (ii) – Igualmente, la convergencia es inexistente cuando “cae” en un punto de máxima o o de mínima (f’(x) = 0); (iii) – En ocasiones, el método converge demasiado lentamente, especialmente cuando el punto inicial no es cerdcano a la raíz; (iv) – también 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 , «Newton’s 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

FFIIGGUURRAA 55..1111 Elementos básicos para hallar una raíz de la función f(x) = 0 por medio del Método de Newton-Raphson.

1,)´()(

1

11 ≥−=

−− n

XfXfXX

n

nnn

(5.3)

( )( )0

001 Xf

XfXX′

−= (3.3.11)

Page 34: Notas Clases #1 a #5

Notas de Clase – 3004578 – Algoritmos y Programación 02/26/07 Ingeniero William Alvarez Montoya http://www.unalmed.edu.co/~walvarem/ ____________________________________________________________________________________________

__________________________________________________________________________________________ [email protected] Página 32 Clase# 5.- Estructuras de Iteración Indefinida / Raíces de f(x) = 0

MMÉÉTTOODDOO DDEE LLAA SSEECCAANNTTEE El Método de La Secante8, es –en realidad- una variante del Método Newton-Raphson. Como se vio en la sección 3.3, el Método Newton-Raphson tiene muchos aspectos positivos, pero una de sus principales falencias es que requiere la evaluación de dos funciones diferentes en cada iteración, f(x) y su derivada f’(x). Cuando la función f(x) es relativamente simple, es fácil calcular ambas funciones iterativamente; pero cuando f(x) es una función complicada –como sucede en la práctica en muchas áreas técnicas y de ingenierías- el cálculo de la derivada no es fácil, y en el mejor de los casos es un proceso tedioso. En estos casos, resulta muy útil tener a la mano un método que no requiera la evaluación de la derivada, f’(x). Uno de estos métodos es el Método Secante, o Método de La secante, que en lugar de la derivada utiliza una aproximación lineal en cada iteración. Este método es de intervalo abierto. Este método empieza con dos valores iniciales xo, x1, como se ilustra en la figura 5.12.

En este método, la función f(x) es aproximada por medio de una linea recta, la cual es una extrapolación basada en dos puntos xo y x1 de la función f(x). Los dos puntos (x0,f(x0)) y (x1,f(x1)) definen una línea recta secante (de ahí el nombre del método) cuya ecuación es la siguiente:

44..33 PPRRÁÁCCTTIICCAA ##55 –– RRAAÍÍCCEESS DDEE FF((XX)) == 00 • Realizar un proyecto Visual Basic que tenga esta apariencia para obtener las

raíces de una función f(x), como la definida en la ecuación 5.2, en los intervalos respectivos:

44..44 AACCTTIIVVIIDDAADDEESS EEXXTTRRAACCLLAASSEE -- TTAARREEAASS • Indagar cómo funcionan y cuáles son los algoritmos de los siguientes métodos, y elaborar proyectos Visual Basic: (i) - Regula

Falsi, o de la Falsa Posición; (ii) - Punto Fijo; (iii) - Steffensen; (iv) - Graffe, Muller, Bernoulli, Factorizaciòn Iterativa de polinomios, Método de Ward, Algoritmo QD de RutisHauser, Método de Bairstow para factores cuadràticos, Métodos 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.

FFIIGGUURRAA 55..1122 Esquema gráfico que muestra los parámetros básicos del Método Secante.

)()()(

01

01112 xfxf

xxxfxx−−

−= (5.3)

604.0)9.0(

101.0)3.0(

1)( 22 −+−

++−

=xx

xf (5.2)