Você está na página 1de 81

Algorítmica y

Programación
(Guía de apuntes)

.NET+
EXC+
HP

INFORMÁTICA
MAT
MAT-205
UNIVERSIDAD AUTÓNOMA TOMÁS
FRÍAS
FACULTAD DE INGENIERÍA CIVIL
Auxiliar. Marco Antonio Velásquez Azurduy

Cuarta Edición 2014


1

ÍNDICE

1. Presentación…………………………………………………………………..…………………..……………..………….5

2. Introducción…………………………………………………………………..…………………..………………….………5

3. De los problemas a los programas………………………………………………………….……………..…………5

3.1Lenguajes de Programación………………………………………………………..………..……..……..6

4. Algoritmo y sus tipos…………………………………………………………………………………..…………....….7

4.1 Tipos de Algoritmos…………………………………………………………………………….….…….....7

4.2 Lenguajes Algorítmicos ……………………………………….….….……...............................…..7

5. Metodología para la solución de problemas por medio de computadora………………………………7

6. Diagrama de Flujo ………………………………………………………………..………………………….….........…9

7. Pseudocódigo…………………………………….……………………………………..................................…….10

8. Lenguaje Visual Basic………………………………………………………………………………………………..….10


8.1 Tipos, declaraciones y alcances de las variables………….……..…………………….…….…..10
8.1.1 Qué son las variables…………………………………….……..….....…………………..………..…10
8.2 Tipos de Variables……………………………………………….....…..……………………...….………11
8.3 Declaración de Constantes……………………………………………….....................................12
8.4 ENTRADAS Y SALIDAS SENCILLAS CON MSGBOX() E INPUTBOX()…………………………..……...13
8.4.1 Que son Inputbox(), Msgbox(), DataGridView………….…..................................…...13

8.5 Botón de Comando (Command Button)……………………….....…………………………...……14

9. Estructuras algorítmicas y de programación……………………………......................................…….14

10. Estructuras Secuenciales ……………………………………….…………...………………………………...……14

10.1 Calcular el área de un círculo. ……………………………………....……………………………..…….15

10.1.1 Algoritmo: Área de un círculo…………………………..…………...…………………….……..….15

10.1.2 Diagrama de flujo: Área de un Círculo……………………….……………………………...……16

10.1.3 Código Visual Basic: Área de un círculo……….…………………………………….……......…16

11. Estructuras de Condicionales …………………………….…………………......................................…..17

11.1 Condicionales Simples………………….……….………………...…………………………..…...….17

11.1.1 Determinar el máximo de tres números. …….…………………………………..…………………17

11.1.2 Algoritmo: Máximo de tres números…………….…………………………………….……….….17

11.1.3 Diagrama de Flujo: Máximo de tres números .…………………………………….……….…..18


2

11.1.4 Programa Visual Basic: Máximo de tres números………………………………………….…18

11.2 Condicionales Dobles………………………………………..…………………………….…...19

11.2.1 Indicar si un número x es par o impar……………………………………………………….……20

11.2.2 Algoritmo: ¿Número par? …………………………………………………………………..……..20

11.2.3 Diagrama de flujo: ¿Número par? ………………………………………………………..…….20

11.2.4 Programa Visual Basic: ¿Número par? …………………………………………………….……20


11.3 Condicionales Múltiples……………………………………………………………………..….….21
11.3.1 Ecuación de 2º grado.………………………………………………………………………..…....22
11.3.2 Algoritmo: Ecuación de 2º grado. ……………………………………………………....…….22
11.3.3 Diagrama de Flujo: Ecuación de 2º grado.……………………………………………....…22
11.3.4 Programa Visual Basic: Ecuación de 2º grado. ……………………………………………23

12 Estructuras Cíclicas…………………………………….……………………………………………….………23

12.1 Sentencia PARA……………………………………………………………………………………….23

12.1.1 Calcular el factorial de un número x………………………….………………………………….24

12.1.2 Algoritmo: Factorial……………………………….……………………………………..……….25


12.1.3 Diagrama de flujo: Factorial……………..…………………………………………….......….25
12.1.4 Programa Visual Basic: Factorial………………………………………………………..…….26
12.2 Sentencia Mientras…………………………………………….………………………………..….26
12.2.1 Calcular la suma de los N primeros números múltiplos de 7...…………………….........27
12.2.2 Algoritmo: suma de N múltiplos de 7…………………………………………………….....…27
12.2.3 Diagrama de Flujo: suma de N múltiplos de 7………………….……………………..……27
12.2.4 Programa Visual Basic: suma de N múltiplos de 7………………..…………………….…..…28
12.3 Sentencia REPETIR (HASTA) ………………….………………………………………………...28
12.3.1 Dado el Factorial, encontrar el número más próximo que da tal valor………………………...29
12.3.2 Algoritmo: ¿qué número da el factorial? …………………………………………………..…29
12.3.2 Diagrama de flujo: ¿qué número da el factorial?…………….……………………………30
12.3.3 Programa Visual Basic: ¿qué número da el factorial?...........…………………….......30
13. APLICACIÓN.…………………………………….……………………………….………………………………..31
13.1 Determinarla cantidad de dígitos que posee un número n.….…..……………………….........31
13.1.1 Algoritmo: Cantidad de dígitos que posee un número n…….………………………………..…31
13.1.2 Diagrama de flujo: Cantidad de dígitos que posee un número n………………………….32
13.1.3 Código Visual Basic: Cantidadde dígitos que posee un número n………………………..32
13.2 Cambio de base decimal a base binaria. ………………………….………………………..…33
13.2.1 Algoritmo: Cambio de base decimal a base binaria………..……………………………33
13.2.2 Diagrama de flujo: Cambio de base decimal a base binaria….………………………33
13.2.3 Código Visual Basic: Cambio de base decimal a base binaria……………………………..…34
13.3 ¿Es número primo? ……………………………………………………………………………………...34
13.3.1Algoritmo: ¿Es número primo? …………………………..….…………………….....…..…….34
3

13.3.2Diagramade flujo: ¿Es número primo? …………………….……………………...…………35


13.3.3 Código Visual Basic: ¿Es número primo? ……………….………………………………….…35
13.4 Máximo común divisor de n números. ……………………………………………………....……..36
13.4.1Algoritmo: Máximo común divisor de n números.……………………………………..…….36
13.4.2 Diagrama de flujo: Máximo común divisor de n números. ………………………………..…37
13.4.3 Código Visual Basic: Máximo común divisor de n números……………………………….….38
14 Métodos Numéricos……………………………………….……….………………………………………..……37
14.1 Introducción. …………………………………………...………………………………………………37
14.1.2 Integración numérica.………………………….…..……………………………………………37
14.1.3 El área bajo una curva. ……………………….……..………………………………………..…37
14.2 Método de los rectángulos: ……………………………….…………………………….…………38
14.2.1 Ejemplo Método de los rectángulos…………………………………………………….…………38
14.2.2Algoritmo. Método de los rectángulos……………………………………………….……..……38
14.2.3 Diagrama de flujo: Método de los rectángulos…………………………………….…..………38
14.2.4CódigoVisual Basic: Método de los rectángulos…………….…………………………..……39
14.3 Método de la suma de trapecios: ……………………..……….………………………………..39
14.3.1Ejemplo Método de la suma de trapecios. ……………………….….…….……………………39
14.3.2Algoritmo. Método de la suma de trapecios. ……………….………...….……………………40
14.3.3 Diagrama de flujo: Método de la suma de trapecios.………..……..………………………40
14.3.4 Código Visual Basic: Método de la suma de trapecios…………….……....……………………42
14.4 Método de Simpson 1/3 (fórmula parabólica): …………..…………………………………41
14.4.1 Ejemplo Método de Simpson 1/3. ……………………………………….……………………….42
14.4.2Algoritmo: Método de Simpson 1/3. ………………………………….…………………………42
14.4.4 Diagrama de flujo: Método de Simpson 1/3. ……………………...…………………………42
14.4.5 Código: Método de Simpson 1/3. ………………………………..……….………………………42
15. Determinación de raíces de ecuaciones…………..………….………………….….……………………43
15.1 Método de la Bisección………………………………….………………..…………………………46
15.1.1 Ejemplo Método de la Bisección. ……………………………….…………………………………46
15.1.2 Algoritmo: Método de la Bisección. …………………………..………….………………………47
15.1.3 Diagrama de flujo: Método de la Bisección. ……………….…….......………………………47
15.1.4 Código: Método de la Bisección. ………………………………..…………………………………48
15.2 Método de la Secante. ………………………………………………….……………………………49
15.2.1Ejemplo Método de la Secante. ………………………………….….……………………………49
15.2.2Algoritmo: Método de la Secante.………………………………...…….………………………50
15.2.3 Diagrama de flujo: Método de la Secante.…………………......……………………………50
15.2.4 Código: Método de la Secante. ………………………………….......……………………………51
15.3Método de la Falsa Posición. ………………………………….........……………………………51
15.3.1Ejemplo Método de la Falsa Posición.………………………..........……..……………………51
15.3.2Algoritmo: Método de la Falsa Posición.…………………….....………………………………51
15.3.3.Diagramadeflujo: Método de la Falsa Posición.…………..….…......……………………52
15.3.4Código Visual Basic: Método de la Falsa Posición.…………...….…………………………52
15.4 Método de Newton-Raphson…………………………………..…....…….………………………53
15.4.1Ejemplo Método de Newton-Raphson. …………………………...........………………………54
15.4.2Algoritmo: Método de Newton-Raphson. …………………….……........……………………54
4

15.4.3Diagrama de flujo: Método de Newton-Raphson.………….....….………………………………54


15.4.4 Código Visual Basic: Método de Newton-Raphson.……………….………………………………55
16. Vectores……………………………………………………………………………….....………………………..………55
16.1 Sacar el promedio de N números……………………………………………..………………..…………53
16.1.1 Algoritmo: Promedio…………………………………………………......……………………..………54
16.1.2 Diagrama de flujo: Promedio……………………………………….....……………………..………54
16.1.3 Programa Visual Basic: Promedio……………………………………....………………..…………55
16.2 Programa Excel: Promedio de una lista de cantidad no definida…...…..…………………………55
16.3 Ordenar números de forma ascendente. ………………………………......…………………..………56
16.3.1 Algoritmo: Ordenar números de forma ascendente……………….........….……………….………57
16.3.2 Diagrama de Flujo: Ordenar números de forma ascendente…….……………………..…………57
16.3.3 Código Visual Basic: Ordenar números de forma ascendente…..…………………….…………60
17. Matrices………………………………………………………………………………..…….………………………..……61
17.1 Producto de 2 matrices. ……………………………………………..…………………………..…………58
17.1.1 Algoritmo: Producto de 2 matrices. ………………………………………..………………..………58
17.1.2 Diagrama de flujo: Producto de 2 matrices. …….………………………………………..………60
17.1.3 Código Visual Basic: Producto de 2 matrices. ….……………………….…………………..……60
18. Extras…………………………………………………………………………………………………………………..……65

18.1 Integración; Caso Discreto (Método de los Trapecios) Programación en Ecxel……………….…62


18.2 Integración; Caso Continuo (Método Simpson 1/3) Programación en Excel……………………….…62
18.3 Raíz de una Función (Método de la Secante) Programación en Excel………………………………….…63

18.4. Raiz Newton Raphson+Grafica, Programación Visual Basic………………………..……………………64


18.5 Inversa de Una Matriz, Programación Visual Basic……………………………………………..……………..65
19.Programas Hp (Aplicación Métodos Numéricos)………………………………………………………………………………66

19.5Rraices de una ecuación…………………………………………………………………………………………………………70

19.5.1 Método de la bisección…………………………………………………………………………………...….70

19.5.2 Método de la falsa posición…………………………………………….…………….…..71

19.5.4 Método de newton raphson…………………………….…………..….………………..72

19.5.5 Método de la secante…………………………….………………….………….………...73

19.6 Ajuste lineal por mínimos cuadrados: pseudo inversa……………………………….……...76

19.8 Integración……………………………….…………………………….…………………..…………..…..78

19.2.1 Caso continuo …………………………….………………………..…….…………..……..78

19.2.2 Caso discreto….…………………………….…………………………………………..……79

20. Bibliografía……………………………………………………………………………………………………………….80
5

Algorítmica y Programación

1. Presentación

El siguiente Manual de Algoritmia y Programación fue creado con el propósito


que el estudiante adquiera destrezas necesarias para resolver problemas mediante
algoritmos o sin ellos para desarrollar la programación informática.

“Un programador y un ingeniero no es nada más que una persona que resuelve
problemas”

2. Introducción

Debido a las que las máquinas resultan una herramienta útil resolviendo un
problema o una situación al automatizar procesos, es conveniente conocer el proceso
por el cual podemos lograr que las máquinas hagan las cosas que necesitamos, ese
hecho simplemente se resume a lo que se llama programación, donde en un punto
lograremos realizar nuestros propios programas que se ajusten a nuestras necesidades
como usuarios y programadores a la vez, pero qué es un programador si no más que
una persona que resuelve problemas y para ello es necesario tener conocimiento tanto
de el problema como de la forma en que podemos establecer un diálogo con las
máquinas para darle dichas ordenes mediante un lenguaje.

Por tanto esta guía está dirigida al interés de cuál es el proceso para poder
adentrarnos una mínima parte en el mundo de la programación.

3. De los problemas a los programas

La computadora no solamente es una máquina que puede realizar procesos


para darnos resultados, sin que tengamos la noción exacta de las operaciones que
realiza para llegar a esos resultados. Con la computadora además de lo anterior
también podemos diseñar soluciones a la medida, de problemas específicos que se nos
presenten. Más aun, si estos involucran operaciones matemáticas complejas y/o
repetitivas, o requieren del manejo de un volumen muy grande de datos.

El diseño de soluciones a la medida de nuestros problemas, requiere como en


otras disciplinas una metodología que nos enseñe de manera gradual, la forma de
llegar a estas soluciones.

A las soluciones creadas por computadora se les conoce como programas y no


son más que una serie de operaciones que realiza la computadora para llegar a un
resultado, con un grupo de datos específicos. Lo anterior nos lleva al razonamiento de
que un programa nos sirve para solucionar un problema específico.

Para poder realizar programas, además de conocer la metodología mencionada,


también debemos de conocer, de manera específica las funciones que puede realizar la
computadora y las formas en que se pueden manejar los elementos que hay en la
misma.

1. Computadora: Es un dispositivo electrónico utilizado para procesar


información y obtener resultados. Los datos y la información se pueden
introducir en la computadora como entrada (input) y a continuación se
procesan para producir una salida (output).
6

2. Programa: Es el conjunto de instrucciones escritas de algún lenguaje de


programación y que ejecutadas secuencialmente resuelven un problema
especifico.
3. Dispositivos de Entrada: Como su nombre lo indica, sirven para introducir
datos (información) en la computadora para su proceso. Los datos se leen de
los dispositivos de entrada y se almacenan en la memoria central o interna.
Ejemplos: teclado, scanners (digitalizadores de rastreo), mouse (ratón),
trackball (bola de ratón estacionario), joystick (palancas de juego), lápiz óptico.
4. Dispositivos de Salida: Regresan los datos procesados que sirven de
información al usuario. Ejemplo: monitor, impresora.
5. La Unidad Central de Procesamiento (C.P.U) se divide en dos:
o Unidad de control
o Unidad Aritmético - Lógica
6. Unidad de Control: Coordina las actividades de la computadora y determina
que operaciones se deben realizar y en qué orden; así mismo controla todo el
proceso de la computadora.
7. Unidad Aritmético - Lógica: Realiza operaciones aritméticas y lógicas, tales
como suma, resta, multiplicación, división y comparaciones.
8. La Memoria de la computadora se divide en dos:
o Memoria Central o Interna
o Memoria Auxiliar o Externa
9. Memoria Central (interna): La CPU utiliza la memoria de la computadora
para guardar información mientras trabaja con ella; mientras esta información
permanezca en memoria, la computadora puede tener acceso a ella en forma
directa. Esta memoria construida internamente se llama memoria de acceso
aleatorio (RAM).
10. La memoria interna consta de dos áreas de memoria:
o La memoria RAM (Randon Access Memory): Recibe el nombre de
memoria principal o memoria del usuario, en ella se almacena
información solo mientras la computadora está encendida. Cuando se
apaga o arranca nuevamente la computadora, la información se pierde,
por lo que se dice que la memoria RAM es una memoria volátil.
o La memoria ROM (Read Only Memory): Es una memoria estática que
no puede cambiar, la computadora puede leer los datos almacenados en
la memoria ROM, pero no se pueden introducir datos en ella, o cambiar
los datos que ahí se encuentran; por lo que se dice que esta memoria es
de solo lectura. Los datos de la memoria ROM están grabados en forma
permanente y son introducidos por el fabricante de la computadora.
11. Memoria Auxiliar (Externa): Es donde se almacenan todos los programas o
datos que el usuario desee. Los dispositivos de almacenamiento o memorias
auxiliares (externas o secundarias) mas comúnmente utilizados son: cintas
magnéticas y discos magnéticos.

3.1 Lenguajes de Programación

Es un conjunto de símbolos, caracteres y reglas (programas) que le permiten a


las personas comunicarse con la computadora. Los lenguajes de programación tienen
un conjunto de instrucciones que nos permiten realizar operaciones de entrada/salida,
calculo, manipulación de textos, lógica/comparación y almacenamiento/recuperación.

Los lenguajes de programación se clasifican en:

• Lenguaje Maquina: Son aquellos cuyas instrucciones son directamente


entendibles por la computadora y no necesitan traducción posterior para que la
7

CPU pueda comprender y ejecutar el programa. Las instrucciones en lenguaje


maquina se expresan en términos de la unidad de memoria más pequeña el bit
(dígito binario 0 o 1).
• Lenguaje de Bajo Nivel (Ensamblador): En este lenguaje las instrucciones se
escriben en códigos alfabéticos conocidos como mnemotécnicos para las
operaciones y direcciones simbólicas.
• Lenguaje de Alto Nivel: Los lenguajes de programación de alto nivel (BASIC,
pascal, cobol, fortran, etc.) son aquellos en los que las instrucciones o
sentencias a la computadora son escritas con palabras similares a los lenguajes
humanos (en general en ingles), lo que facilita la escritura y comprensión del
programa.

4. Algoritmo y sus tipos

La palabra algoritmo se deriva de la traducción al latín de la palabra árabe


Alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado
sobre manipulación de números y ecuaciones en el siglo IX.

Un algoritmo es una serie de pasos organizados que describe el proceso que se


debe seguir, para dar solución a un problema específico.

4.1 Tipos de Algoritmos

• Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras.
• Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para
definir los pasos del proceso.

4.2 Lenguajes Algorítmicos

Es una serie de símbolos y reglas que se utilizan para describir de manera explícita
un proceso. De los cuales se encuentran los siguientes tipos de Lenguajes
Algorítmicos:

• Gráficos: Es la representación gráfica de las operaciones que realiza un


algoritmo (diagrama de flujo).
• No Gráficos: Representa en forma descriptiva las operaciones que debe realizar
un algoritmo (pseudocódigo).

5. Metodología para la solución de problemas por medio de computadora

Definición del Problema: Esta fase está dada por el enunciado del problema,
el cual requiere una definición clara y precisa. Es importante que se conozca lo que se
desea que realice la computadora; mientras esto no se conozca del todo no tiene
mucho caso continuar con la siguiente etapa.

Análisis del Problema: Una vez que se ha comprendido lo que se desea de la


computadora, es necesario definir:

• Los datos de entrada.


• Cuál es la información que se desea producir (salida)
• Los métodos y fórmulas que se necesitan para procesar los datos.
8

Una recomendación muy practica es el que nos pongamos en el lugar de la


computadora y analicemos que es lo que necesitamos que nos ordenen y en que
secuencia para producir los resultados esperados.

Diseño del Algoritmo: Las características de un buen algoritmo son:

• Debe tener un punto particular de inicio.


• Debe ser definido, no debe permitir dobles interpretaciones.
• Debe ser general, es decir, soportar la mayoría de las variantes que se puedan
presentar en la definición del problema.
• Debe ser finito en tamaño y tiempo de ejecución.

Codificación: La codificación es la operación de escribir la solución del problema (de


acuerdo a la lógica del diagrama de flujo o pseudocódigo), en una serie de
instrucciones detalladas, en un código reconocible por la computadora, la serie de
instrucciones detalladas se le conoce como código fuente, el cual se escribe en un
lenguaje de programación o lenguaje de alto nivel.

Prueba y Depuración: Los errores humanos dentro de la programación de


computadoras son muchos y aumentan considerablemente con la complejidad del
problema. El proceso de identificar y eliminar errores, para dar paso a una solución sin
errores se le llama depuración. La depuración o prueba resulta una tarea tan creativa
como el mismo desarrollo de la solución, por ello se debe considerar con el mismo
interés y entusiasmo. Resulta conveniente observar los siguientes principios al realizar
una depuración, ya que de este trabajo depende el éxito de nuestra solución.

Documentación: Es la guía o comunicación escrita es sus variadas formas, ya sea en


enunciados, procedimientos, dibujos o diagramas. A menudo un programa escrito por
una persona, es usado por otra. Por ello la documentación sirve para ayudar a
comprender o usar un programa o para facilitar futuras modificaciones
(mantenimiento). La documentación se divide en tres partes:

• Documentación Interna: Son los comentarios o mensaje que se añaden al


código fuente para hacer más claro el entendimiento de un proceso.
• Documentación Externa : Se define en un documento escrito los siguientes
puntos:
o Descripción del Problema
o Nombre del Autor
o Algoritmo (diagrama de flujo o pseudocódigo)
o Diccionario de Datos
o Código Fuente (programa)
• Manual del Usuario: Describe paso a paso la manera cómo funciona el
programa, con el fin de que el usuario obtenga el resultado deseado.

Mantenimiento: Se lleva a cabo después de terminado el programa, cuando se


detecta que es necesario hacer algún cambio, ajuste o complementación al programa
para que siga trabajando de manera correcta. Para poder realizar este trabajo se
requiere que el programa este correctamente documentado.
9

6. Diagrama de Flujo

Un diagrama de flujo es la representación gráfica de un algoritmo. También se


puede decir que es la representación detallada en forma gráfica de cómo deben
realizarse los pasos en la computadora para producir resultados.

Esta representación gráfica se da cuando varios símbolos (que indican diferentes


procesos en la computadora), se relacionan entre si mediante líneas que indican el
orden en que se deben ejecutar los procesos. Los símbolos utilizados han sido
normalizados por el instituto norteamericano de normalización (ANSI).

SÍMBOLO DESCRIPCIÓN

Indica el inicio u el final de nuestro diagrama de flujo.

Se utiliza para representar los subprogramas.

Indica la entrada y salida de datos.

Símbolo de proceso y nos indica la asignación de un


valor en la memoria y/o la ejecución de una operación
aritmética.

Símbolo de decisión indica la realización de una


comparación de valores.

Símbolo de bucle con rangos para un ciclo definido

Conector dentro de página.

Conector fuera de página.

Indica la salida de información.

Líneas de flujo o dirección.


10

Recomendaciones para el diseño de Diagramas de Flujo

• Se deben se usar solamente líneas de flujo horizontal y/o vertical.


• Se debe evitar el cruce de líneas utilizando los conectores.
• Se deben usar conectores solo cuando sea necesario.
• No deben quedar líneas de flujo son conectar.
• Se deben trazar los símbolos de manera que se puedan leer de arriba hacia
abajo y de izquierda a derecha.
• Todo texto escrito dentro de un símbolo deberá ser escrito claramente, evitando
el uso de muchas palabras.

7. Pseudocódigo

Mezcla de lenguaje de programación y español (o inglés o cualquier otro


idioma) que se emplea, dentro de la programación estructurada, para realizar el diseño
de un programa. En esencial, el pseudocódigo se puede definir como un lenguaje de
especificaciones de algoritmos. Es la representación narrativa de los pasos que debe
seguir un algoritmo para dar solución a un problema determinado. El pseudocódigo
utiliza palabras que indican el proceso a realizar.

Ventajas de utilizar un Pseudocódigo a un Diagrama de Flujo

• Ocupa menos espacio en una hoja de papel


• Permite representar en forma fácil operaciones repetitivas complejas
• Es muy fácil pasar de pseudocódigo a un programa en algún lenguaje de
programación.
• Si se siguen las reglas se puede observar claramente los niveles que tiene cada
operación.

8. Lenguaje Visual Basic

Como se menciono anteriormente es necesario el manejo de un lenguaje el cual


nos ayude a la codificación de los programas, por tanto nuestro lenguaje de
programación será el Visual Basic, el cual trabaja en un entorno visual y de fácil
manejo, lo cual nos llevará seguidamente a la manipulación de los macros enExcel,
que simple mente trabaja con el mismo lenguaje que es el Visual Basic.

8.1Tipos, declaraciones y alcances de las variables

8.1.1 Qué son las variables

En cualquier programa necesitamos hacer cálculos, usar información, procesarla


y mostrarla. En la mayoría de los casos, necesitamos un lugar temporal en el cual
guardar parte de esa información, incluso toda.

Es aquí donde entran en juego las variables, las que nos permite guardar datos
en memoria, para que cuando los necesitemos, podamos tomarlos, modificarlos y
volverlos a guardar para usar mas tarde.

La memoria es el lugar donde el ordenador almacena de forma temporal los


programas y parte de la información que necesita o utiliza. Esas posiciones o lugares
de la memoria donde los programas pueden almacenar información son las variables.
11

Es una ubicación de almacenamiento temporal con nombre que se encuentra en


memoria, siendo capaz de contener cierto tipo de datos que pueden modificarse
durante la ejecución del programa.

En V.B. los nombres de las variables deben limitarse a 255 caracteres, empezar
con un carácter alfabético y no pueden obtener un punto

Utilización temporal de almacenamiento de datos dentro de un programa.


Permiten asignar nombres cortos y fáciles de recordar. Son para manejar cualquier
tipo de información.

8.2 Tipos de Variables

Dim: Al declarar una variable con esta palabra estamos diciendo que la variable
sea local al ámbito en que se declara. Puede ser dentro de un procedimiento o dentro
de un formulario, de esta forma no sería accesible desde los demás procedimientos o
formularios.

Ej: Dim suma

Public: Las variables declaradas serán publicas y podrán estar accesibles desde
todos los formularios de la aplicación. Para conseguirlo tendremos que declararlas en
un módulo de código, no en la sección declarations de cualquier formulario de los que
conste la aplicación.

Ej: Public suma

Static: Con esta forma de declarar variables conseguiremos que las variables
locales no se creen y se destruyan al entrar y salir de los procedimientos donde fueron
declaradas sino que se mantenga su valor durante todo el periodo de ejecución de la
aplicación. De esta forma a entrar en algún procedimiento las variables recuerdan el
valor que tenían cuando se salió de él.

Ej: Static suma

TIPOS DE VARIABLES
TIPO COMENTARIO

BOOLEAN Sólo admite 2 valores TRUE o FALSE

BYTE admite valores entre 0 y 255

INTEGER admite valores entre -32768 y 32767

admite valores entre -2.147.483.648 y


LONG
2.147.483.647

admite valores decimales con precisión


SINGLE
simple
12

admite valores decimales de doble


DOUBLE
precisión

CURRENCY válido para valores de tipo moneda

STRING cadenas de caracteres

Variant Admite cualquier tipo de datos

DATE fechas, permite operar con ellas

8.3 Declaración de Constantes

Como su palabra lo dice es Información que no varía hace más fácil la


comprensión del código y permite modificar un valor en un solo lugar no ocupa espacio
extra, Ejemplo:

Mínimo = 1, Máximo = 10

8.4.a) Entradas y salidas con Textbox

Textbox() Se introduce en este cuadro la información, que puede ser usada


como de entrada de datos o de salida.

En la escritura del código, para que su uso sea de ingreso de datos debe estar de la
siguiente manera.

Radio=Textbox1.Text

El cual en la variable “Radio” se almacenará el dato que introduzcamos en el


textbox1.

Para que su uso sea de salida de datos, se escribe en el código de la siguiente manera.

Textbox2.text= Área

Donde en el textbox2 estará el dato de salida o la respuesta, en este caso Área


13

8.4 ENTRADAS Y SALIDAS SENCILLAS CON MSGBOX() E INPUTBOX()

8.4.1 Que son Inputbox(), Msgbox()

InputBox() Despliega un Mensaje en un cuadro de dialogo, espera que el


usuario introduzca el texto o seleccione un botón y luego devuelve el contenido del
cuadro de texto. Sintaxis:

Ej.

Radio = InputBox(“ingresar datos”)

MsgBox Despliega un mensaje en un cuadro de dialogo y espera que el usuario

seleccione un botón. Sintaxis:

Ej.

Area = MsgBox(“Mensaje”)

8.4.2. DataGridView.- Es un cuadro que posee celdas donde se puede mostrar o


escribir datos. (Para tener acceso a el se encuentra ubicado en el cuadro Toolbox de la
izquierda)

Para manipular el número de columnas o filas se debe hacer internamente


dentro el código de programación que se explicara más adelante.

8.5 Botón de Comando (Button)

Uno de los controles más habituales en Visual Basic Net es el de Button, en el cual la
propiedad más importante es el Caption que es lo que aparece escrito en él.

El evento que se ejecuta al hacer doble click en él, produce la hoja de programación
donde podrá ser escrito el lenguaje o código de programación.
14

9. Estructuras algorítmicas y de programación

Las estructuras de operación de programas son un grupo de formas de trabajo,


que permiten, mediante la manipulación de variables, realizar ciertos procesos
específicos que nos lleven a la solución de problemas, resumiendo a tres simples pero
importantes tipos de estructuras:

- Estructura Secuencial
- Estructura de Condicionales
- Estructuras Cíclicas

10. Estructuras Secuenciales

La estructura secuencial es aquella en la que una acción (instrucción) sigue a


otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la
entrada de la siguiente y así sucesivamente hasta el fin del proceso. Una estructura
secuencial se representa de la siguiente forma:

Inicio
Accion1
Accion2
.
.
AccionN
Fin

Lectura: La lectura consiste en recibir desde un dispositivo de entrada (p.ej. el


teclado) un valor. Esta operación se representa en un pseudocódigo como sigue:

Leer a, b.
Donde “a” y “b” son las variables que recibirán los valores

a, b
15

Asignación: La asignación consiste, en el paso de valores o resultados a una zona de


la memoria. Dicha zona será reconocida con el nombre de la variable que recibe el
valor. La asignación se puede clasificar de la siguiente forma:

o Simples: Consiste en pasar un valor constate a una variable (a=15)


o Contador: Consiste en usarla como un verificador del número de veces
que se realiza un proceso (a=a+1)
o Acumulador: Consiste en usarla como un sumador en un proceso
(a=a+b)
o De trabajo: Donde puede recibir el resultado de una operación
matemática que involucre muchas variables (a=c+b*2/4).

a=c+b*2/4

Escritura: Consiste en mandar por un dispositivo de salida (p.ej. monitor o impresora)


un resultado o mensaje. Este proceso se representa en un pseudocódigo como sigue:
Escribe “El resultado es:”, R
Donde “El resultado es:” es un mensaje que se desea aparezca y R es una variable que
contiene un valor.

Ejemplo.-

10.1 Calcular el área de un círculo.

10.1.1 Algoritmo: Área de un círculo

1. Inicio
2. Leer R
3. pi= 3.1415927
4. Área= pi*R^2
5. Escribir Área
6. Fin
16

10.1.2 Diagrama de flujo: Área de un Círculo

10.1.3 Código Visual Basic: Área de un círculo

Nota.- Se necesita: 2 TextBox, 1 Button

…………………………………………………..

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click

Dim R As Single
Dim pi As Single
Dim Area As Single

R = TextBox1.Text
pi = 3.1415927
Area = pi * R ^ 2

TextBox2.Text = Area
End Sub
End Class

…………………………………………………..

10.1.4 Ejercicios de aplicación.

a) Convertir una hora expresada en segundos a horas, minutos y segundos.


17

b) Convertir un número complejo de su forma polar a cartesiana.

11. Estructuras de Condicionales

Las estructuras condicionales comparan una variable contra otro(s) valor(es),


para que en base al resultado de esta comparación, se siga un curso de acción dentro
del programa. Cabe mencionar que la comparación se puede hacer contra otra variable
o contra una constante, según se necesite. Existen dos tipos básicos, las simples y las
múltiples.

11.1 Condicionales Simples

Las estructuras condicionales simples se les conocen como “Tomas de decisión”.


Estas tomas de decisión tienen la siguiente forma:
Si <condición> entonces
Acción(es)
Fin-decisión

V
<Condición> Tareas

Ejemplo.-

11.1.1Determinar el máximo de tres números.

11.1.2 Algoritmo: Máximo de tres números

1. Inicio
2. Leer I, J, K
3. MAX= I
4. SI J>MAX ENTONCES
5. MAX=J
6. Fin condición
7. SI K>MAX ENTONCES
8. MAX=K
9. Fin decisión
10. Escribir MAX
11. Fin.

11.1.2 Diagrama de Flujo: Máximo de tres números


18

11.1.3 Programa Visual Basic: Máximo de tres números

Nota.- (Se necesita: 4 TextBox,1 CommandButton)

…………………………………………………………..

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim i, j, k As Single
Dim max As Single

TextBox1.Text = i
TextBox2.Text = j
TextBox3.Text = k

max = i

If j > max Then


max = j
End If
If k > max Then
max = k
End If
19

TextBox4.Text = max
End Sub
End Class

…………………………………………………………..

11.1.4 Ejercicios de aplicación

a) Determinar el mínimo de tres números.

b) Obtener el valor absoluto de un número x.

11.2 Condicionales Dobles

Las estructuras condicionales dobles permiten elegir entre dos opciones o


alternativas posibles en función del cumplimiento o no de una determinada condición.
Se representa de la siguiente forma:

Si<condición>entonces
Acción(es)
si no
Acción(es)
Fin-si
- <condición>, indica la condición a evaluar

- <acción(es)>, son las acciones a realizar cuando se cumple o no la condición

F V
Tareas Condición Tareas

Ejemplo.-

11.2.1 Indicar si un número x es par o impar

11.2.2 Algoritmo:¿Número par?

1. Inicio
2. Leer N
3. SI N RESIDUO 2 = 0 ENTONCES
4. Escribir “ es par”
5. Caso contrario
6. Escribir “ es impar”
7. Fin decisión
8. Fin

11.2.3 Diagrama de flujo: ¿Es N un Número par?


20

11.2.4 Programa Visual Basic: ¿Es N un Número par?

Nota.- Se necesita: 2TextBox,1 Button

…………………………………………………………..

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim N As Single
N = TextBox1.Text

If N Mod 2 = 0 Then
TextBox2.Text = "ES PAR"
Else
TextBox2.Text = "ES IMPAR"
End If
End Sub
End Class

………………………………………………………..

11.2.5 Ejercicios de aplicación

a) Determinar si un número N es múltiplo de un número n.

b) Determinar si un número es entero o es un número con parte decimal.

11.3 Condicionales Múltiples

Las estructuras de comparación múltiples, son tomas de decisión especializada


que permiten comparar unas variables con otras distintas posibles resultados,
ejecutando para cada caso una serie de instrucciones específicas.
21

Seleccionar Caso<expresión_prueba>
[Caso lista_expresiones1
<bloque de sentencias 1>
[Caso lista_expresiones2
<bloque de sentencias 2>
.
.
.
[Caso Contrario
<bloque de sentencias n>
Fin Caso
ó

Caso 1 Caso 2 Caso 3 Caso 4

Ejemplo.-

11.3.1 Hacer un programa que “resuelva cualquier ecuación de 2º grado


ax2 + bx + c = 0, con “a” diferente de 0.

11.3.2Algoritmo: Ecuación de 2º grado.

1. Inicio
2. Leer a, b, c.
3. Discriminante = b2 – 4ac
4. Seleccionar caso Discriminante
5. Caso es > 0
√ √
6. Mostrar: 1 = , 2=
7. Casoes =0
8. Mostrar: X = − b
2a
9. Casoes< 0
10. Mostrar La ecuación no tiene soluciones “reales”
11. Fin caso
12. Fin
22

11.3.3 Diagrama de Flujo: Ecuación de 2º grado.

11.3.4 Programa Visual Basic: Ecuación de 2º grado.

Nota.- Se necesita: 5 TextBox, 1 CommandButton

………………………………………………………..

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim a, b, c As Single
Dim X1, X2, x As Single
Dim discr As Single
a = TextBox1.Text
b = TextBox2.Text
c = TextBox3.Text

discr = b ^ 2 - (4 * a * c)

Select Case discr


Case Is > 0
X1 = (-b + Math.Sqrt(discr)) / (2 * a)
23

X2 = (-b - Math.Sqrt(discr)) / (2 * a)
TextBox4.Text = X1
TextBox5.Text = X2
Case Is = 0
x = -b / (2 * a)
TextBox4.Text = x
TextBox5.Text = x
Case Is < 0
MsgBox("no tiene sol. real")

End Select
End Sub
End Class
………………………………………………………..

11.3.5 Ejercicios de aplicación

a) Determinar si un número es mayor, menor o igual a un número b.

b) Dada tres longitudes de un triángulo, determinar qué tipo de triangulo es.

12Estructuras Cíclicas

Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es


necesario utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad
específica de veces. Esta cantidad puede ser fija (previamente determinada por el
programador) o puede ser variable (estar en función de algún dato dentro del
programa).Los ciclos se clasifican en:

12.1 Sentencia PARA

La sentencia Para es la más sencilla de utilizar de las sentencias iterativas. La


emplearemos cuando el número de iteraciones del bucle se conozca antes de iniciarse
la ejecución de éste. Una variable de contaje, contador, va contando las pasadas
(iteraciones) por el bucle.

Para <contador> = <iniciar>Hasta <finalizar> [Salto<incremento>]


<Sentencias>
Siguiente[<contador>]

- <contador>, es la variable empleada para contabilizar las iteraciones del bucle


realizadas.
- <iniciar>, el resultado de su evaluación determina el valor inicial, de contador,
es decir, el valor con el que se ejecutara por primera vez.
- <final>, el resultado de su evaluación determina el valor final, de contador, es
decir, el valor con el que se ejecutará por última vez el bucle.
- <incremento>, determina la forma en a que se modificara contador al final de
cada ejecución del bucle. Su valor se sumara o se restará a contador, según
hayamos usado la palabra reservada Hasta antes de <final>, respectivamente.
La indicación de este valor en la sentencia es opcional, caso de no indicarse, el
valor que toma por defecto es 1.
24

- <sentencia>, es la que constituye el denominado “cuerpo del bucle”. En


general será una sentencia compuesta, es decir, que estará formada por más
de una sentencia simple, aunque puede ser una sola acción, o incluso no
existir(acción nula).

Para<contador>=<iniciar>Hasta<finalizar>[Salto<incremento>]

<Sentencias>
Ejemplo.-

12.1.1 Calcular el factorial de un número x

12.1.2 Algoritmo: Factorial

1. Inicio
2. Leer x
3. Factorial=1
4. Para i= 1 hasta x
5. Factorial=Factorial*i
6. Siguiente i
7. Mostrar: Factorial
8. Fin

12.1.3 Diagrama de flujo: Factorial


25

12.1.4 Programa Visual Basic: Factorial

Nota.- Se necesita: 2 TextBox, 1 CommandButton

……………………………………………..

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim N As Single
Dim factorial As Single

N = TextBox1.Text
Factorial = 1
For i = 1 To N
factorial = factorial * i
Next
TextBox2.Text = factorial
End Sub
End Class

………………………………….
26

12.1.5 Ejercicios de aplicación

a) Calcular la sumatoria de un número n.

b) Calcular el número de combinaciones de n elementos tomados de m en m.

12.2 Sentencia Mientras

En la sentencia PARA, debemos conocer el número exacto de veces que se


deben ejecutar las sentencias del bucle. Cuando esto no es posible, debemos emplear
la sentencia MIENTRAS para conseguir ejecutar varias veces las sentencias del bucle.
En estas sentencias el número de iteraciones depende de la evaluación de una
condición.

MIENTRAS< condición ejecución >HACER<sentencia>CICLO

<condición ejecución>, es una expresión que puede tomar los valores cierto o falso.

<sentencia bucle>, es la sentencia que se debe ejecutar en el caso de que el


resultado de la evaluación de <condición ejecución> sea cierto. Puede ser una
sentencia compuesta.

“el CICLO indica que debe volver al punto donde se realiza la pregunta de <condición
de ejecución> hasta que el valor sea falso”

F
condición
ejecución

Sentencia
bucle

Ejemplo.

12.2.1Calcular la suma de los N primeros números múltiplos de 7

12.2.2 Algoritmo:suma de N múltiplos de 7

1. Inicio
2. Leer N
3. i=0, suma=0
4. Mientrasi<N
5. i=i+1
6. suma=suma+(i*7)
7. Ciclo “vuelve al paso 4 hasta que la pregunta N/2<2 sea falso”
8. Mostrar: suma
27

9. Fin

11.2.3 Diagrama de Flujo: suma de N múltiplos de 7

12.2.4 Programa Visual Basic: suma de N múltiplos de 7

Nota: Se necesita: 2 TextBox, 1 CommandButton

……………………………………………………………….

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim N As Single
Dim i As Single
Dim suma As Single
N = Val(TextBox1.Text)
i = 0
suma = 0
Do While (i < N)
i = i + 1
suma = suma + (i * 7)
Loop
TextBox2.Text = suma

End Sub
End Class

……………………………………………………………….
28

12.2.5 Ejercicios de aplicación

a) Obtener el máximo común divisor por resta reiterada de 2 números.

b) Imprimir los términos de la serie Fibonacci menores que N.

12.3 Sentencia REPETIR (HASTA)

En la sentencia MIENTRAS, la condición de ejecución del bucle se verifica antes


de haber ejecutado este por primera vez. Por tanto, es necesario inicializar las
variables empleadas para determinar su ejecución antes de entrar por primera vez a
éste, lo cual puede tener como consecuencia que el bucle no llegue a ejecutarse nunca.
Si queremos evitar ambas cosas, es decir:

· tener que inicializar las variables de control de bucle y

· ejecutar al menos una vez el bucle,

debemos emplear la sentencia REPETIR. En esta sentencia, el número de interacciones


depende de la evaluación de una condición, como en la de MIENTRAS, pero esta
evaluación se realiza después de cada ejecución del bucle.

Hacer<sentencia de bucle>Hasta<condición>

<sentencia bucle>, es la sentencia que se debe volver a ejecutar en el caso de que


el resultado de la evaluación de <condición> sea falso. Puede ser una sentencia
compuesta.

<condición>, es una expresión que puede tomas los valores cierto o falso.

Ejemplo.

12.3.1Dado el Factorial, encontrar el número más próximo que da tal valor.

12.3.2 Algoritmo: ¿qué número da el factorial?

1. Inicio
2. Leer Factorial
3. i=1, fact=1
4. Hacer
5. i=i+1
6. fact=fact*i
29

7. Hastafact<=Factorial
8. Si fact= FactorialEntonces
9. Mostrar: i
10. Casocontrario
11. Mostrar: “ninguno”
12. Findecisión
13.Fin

12.3.2 Diagrama de flujo: ¿qué número da el factorial?

12.3.3 Programa Visual Basic:¿qué número da el factorial?

Nota.- Se necesita: 2 TextBox, 1 CommandButton

…………………………………………………..
30

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim Factorial As Single
Dim i As Single
Dim fact As Single
Factorial = Val(TextBox1.Text)
i = 0
fact = 1
Do
i = i + 1
fact = fact * i
Loop Until fact >= Factorial
If fact = Factorial Then
TextBox2.Text = i
Else
TextBox2.Text = "ninguno"
End If

End Sub
End Class

……………………………………………..

12.2.5 Ejercicios de aplicación

a) Convertir un número de base octal a base decimal.

b) Imprimir los términos de la serie Fibonacci menores que N.

13. APLICACIÓN.-

Ejemplo.-

13.1 Determinarla cantidad de dígitos que posee un número n.

13.1.1Algoritmo:Cantidad de dígitos que posee un número n.

1. Inicio
2. Leer n
3. dígitos=0
4. Hacer
5. dígitos=dígitos+1
6. n=(n Cociente 10)
7. Hasta n=0
8. Mostrar: dígitos
9. Fin

13.1.2Diagrama de flujo: Cantidad de dígitos que posee un número n.


31

13.1.3Código Visual Basic: Cantidad de dígitos que posee un número n.

Nota.- Se necesita: 2 TextBox, 1 CommandButton

…………………………………………..

Private Sub Command1_Click()


Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim n As Single
Dim digitos As Single
n = Val(TextBox1.Text)
digitos = 0
Do
digitos = digitos + 1
n = n \ 10
Loop Until (n = 0)
TextBox2.Text = digitos
End Sub
End Class

…………………………………
Ejemplo.

13.2Cambio de base decimal a base binaria.


32

13.2.1Algoritmo: Cambio de base decimal a base binaria.

1. Inicio
2. Leer N
3. i= -1, Base =0
4. Hacer mientras N>2
5. C=N Residuo 2
6. Base=Base+(C*10^(1+i))
7. i=i+1
8. N=N Cociente 2
9. Ciclo
10.Base=Base+(N Residuo 2)*10^(1+i)
11.Mostrar Base
12.Fin

13.2.2Diagrama de flujo: Cambio de base decimal a base binaria.

13.2.3Código Visual Basic: Cambio de base decimal a base binaria.

Nota.- Se necesita: 2 TextBox, 1 CommandButton


33

……………………………………………

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim N As Single
Dim i As Single
Dim base, C As Single
N = Val(TextBox1.Text)
i = -1
Base = 0
Do While (N > 2)
C = N Mod 2
base = base + (C * 10 ^ (1 + i))
i = i + 1
N = N \ 2
Loop
base = base + (N Mod 2) * 10 ^ (1 + i)
TextBox2.Text = base

End Sub
End Class

……………………………………………………………………

Ejemplo.

13.3 Realizar el algoritmo, diagrama de flujo y código para mostrar si un número es


primo no.

13.3.1Algoritmo: ¿Es número primo?

1. Inicio
2. Leer n
3. Para i = 1 Hasta n
4. Si n Residuo i=0 Entonces
5. temp=temp+1
6. Fincondición
7. Siguiente i
8. Si temp > 2 Entonces
9. Mostrar “No es primo”
10. Casocontrario: Mostrar “Es primo”
11. Fincondición
12.Fin

13.3.2Diagramade flujo: ¿Es número primo?


34

13.3.3 Código Visual Basic: ¿Es número primo?

Nota.- Se necesita: 1 TextBox, 1 CommandButton

…………………………………………………

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim n As Single
Dim temp As Single

n = Val(TextBox1.Text)
For i = 1 To n
If n Mod i = 0 Then
temp = 1 + temp
End If
Next i
If temp > 2 Then
MsgBox("no es primo")
Else
MsgBox("Es primo")
35

End If

End Sub
End Class

…………………………………………..

Ejemplo.-

13.4 Realizar el algoritmo, diagrama de flujo y código para determinar el máximo


común divisor de “n” números.

13.4.1Algoritmo: Máximo común divisor de n números.

1. Inicio
2. Leer n
3. MCD=1
4. Para i= 1 Hasta n
5. Leer a(i)
6. Siguiente i
7. Para i= 1 Hasta a(1)
8. Para j=1Hasta n
9. Si a(j) Residuo i=0 Entonces
10. cont=cont+1
11. Fincondición
12. Siguiente j
13. Si cont=n Entonces
14. MCD=i
15. Fincondición
16. cont=0
17. Siguiente i
18. Mostrar MCD
19.Fin

13.4.2Diagrama de flujo: Máximo común divisor de n números.

A
36
A

13.4.3 Código Visual Basic: Máximo común divisor de n números.

Nota.- Se necesita: 2 TextBox, 1 CommandButton

……………………………………………………

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim n As Single
Dim a(0 To 50) As Single
Dim MCD As Single
Dim cont As Integer

n = Val(TextBox1.Text)
MCD = 1
For i = 1 To n
a(i) = InputBox("leer Números")
Next i
For i = 1 To a(1)
For j = 1 To n
If a(j) Mod i = 0 Then
37

cont = cont + 1
End If
Next j
If cont = n Then
MCD = i
End If
cont = 0
Next i
TextBox2.Text = MCD

End Sub
End Class

……………………………………………………………….

14 Métodos Numéricos

14.1 Introducción.
Se presentan algunas de las tecinas comunes para realizar cálculos numéricos
sin mayor rigor matemático, con el objetivo de hacer referencias a ellas en elresto de
los capítulos donde ello sea necesario, y para que el lector interesado
tenga conocimiento de la existencia de estos métodos.

14.1.2 Integración numérica.

14.1.3El área bajo una curva.


Si se tiene una función y = f(x), el problema de determinar el ¶área entre la
curva representativa de la función y el eje X, entre los valores x1 y x2 conduce al
concepto de integral. Una aproximación a la solución de este problema consiste en
aproximar el área por una suma de rectángulos como se indicien la figura.
Si el intervalo de x1 a x2 lo llenamos con N rectángulos que lleguen hasta
la curva, entonces los anchos de los rectángulos serán

2 1
=
las abscisas de sus vértices inferiores izquierdos serán
1 ! " 1# ; 1, 2, . . . ,
38

Figura 1.1: Área bajo la curva.


o
= ! " 1# ; 1, 2, . . . ,
&

Entonces el área A será aproximadamente


&

' ( ) *" #
+ ,-

14.2 Método de los rectángulos:

Sea f(x) en el intervalo [a, b], con sub intervalos [ , " ! 1#], entonces el área
aproximada A de f(x) presenta la siguiente fórmula.
. *" # ( ∆ 0*" - # ! *" # ! ⋯ ! *" #2


Ejemplo:
14.2.1Realizar el algoritmo, diagrama de flujo y código del método de rectángulos

14.2.2Algoritmo. Método de los rectángulos

1. Inicio
2. Definir función Y=x^3
3. Leer a, b, n
4. S=0, h=(b-a)/n
5. Para i= 0 Hasta (n-1)
6. S= Y(a+i*h)+S
7. Siguiente i
8. Área=S*h
9. Mostrar Área
10.Fin

14.2.3 Diagrama de flujo: Método de los rectángulos

A
39

14.2.4CódigoVisual Basic: Método de los rectángulos

Nota.- Se necesita: 4 TextBox, 1 CommandButton

……………………………………………

Public Class Form1


Public Function Y(ByVal x As Double)
Y = x ^ 3
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim a, b, n As Double
Dim S, h As Double
Dim Area As Double
a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
n = Val(TextBox3.Text)
S = 0
h = (b - a) / n
For I = 0 To n - 1
S = Y(a + (I * h)) + S
Next I
Area = S * h
TextBox4.Text = Area

End Sub
End Class

……………………………………………………………..

14.3 Método de la suma de trapecios:

Sea f(x) una función en [a, b], con n sub intervalos [xi , x"i ! 1#], entonces el área
aproximada A de f(x) es:
9
∆x
. f"x#dx ( 0f"x7# ! 2f"x-# ! 2f"x # ! ⋯ ! 2f"x8 - # ! f"x8 #2
: 2
9 :
∆x y x; a ! i∆x
8

Ejemplo:

14.3.1Realizar el algoritmo, diagrama de flujo y código del método de la suma de


trapecios
40

14.3.2Algoritmo. Método de la suma de trapecios.

1. Inicio
2. Definirfunción Y=x^3
3. Leer a, b, n
4. S1=0, S2=0, h=(b-a)/n
5. Para i= 1Hasta (n-1)
6. S= Y(a+i*h)+S
7. Siguiente i
8. Área=h/2*(Y(a)+2*S+Y(b))
9. Mostrar Área
10.Fin

14.3.3 Diagrama de flujo: Método de la suma de trapecios.


41

14.3.4 Código Visual Basic: Método de la suma de trapecios.

Nota.- Se necesita: 4 TextBox, 1 CommandButton

…………………………………………………….

Public Class Form1


Public Function Y(ByVal x As Single)
Y = x ^ 3
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim a, b, n As Single
Dim S, h As Single
Dim Area As Single
a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
n = Val(TextBox3.Text)
S = 0
h = (b - a) / n
For i = 1 To (n - 1)
S = S + (2 * Y(a + (i * h)))
Next i
Area = (Y(a) + Y(b) + S) * h / 2
TextBox4.Text = Area

End Sub
End Class

…………………………………………………………………..

14.4 Método de Simpson 1/3 (fórmula parabólica):

Sea f(x) una función continua en [a, b], una vez generada éste intervalo como unión
de sub intervalos con la misma longitud h, esta vez se considerará el ajuste a la
función mediante parábolas, dando el área total la suma de dichas parábolas,
tomando siempre n par.

0*" 7 # ! 4*" - # ! 2*" # ! ⋯ ! 4*" -# ! *" #2Donde n es par ∆


∆>
= *" # (
?
Ejemplo

14.4.1Realizar el algoritmo, diagrama de flujo y código del método de Simpson1/3.

14.4.2Algoritmo: Método de Simpson 1/3.

1. Inicio
2. Definir función Y=x^3
3. Leer a, b, n
4. S1=0, S2=0, h=(b-a)/n
5. Para i= 1Hasta n : Salto 2
6. S1= Y(a+i*h)+S1
7. Siguiente i
8. Para j= 2 Hasta (n-1) :Salto 2
9. S2= Y(a+j*h)+S2
10. Siguiente j
42

11. Área=h/3*(Y(a)+4*SI+2*S2+Y(b))
12. Mostrar Área
13.Fin

14.4.4 Diagrama de flujo: Método de Simpson 1/3.

14.4.5 Código: Método de Simpson 1/3.

Nota.- Se necesita: 4 TextBox, 1 CommandButton

……………………………………………………..

Public Class Form1


Public Function Y(ByVal x As Single)
Y = x ^ 3
End Function
43

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim a, b, n As Single
Dim S1, S2, h As Single
Dim Area As Single

a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
n = Val(TextBox3.Text)
S1 = 0
S2 = 0
h = (b - a) / n
For i = 1 To n Step 2
S1 = S1 + Y(a + (i * h))
Next i

For j = 2 To (n - 1) Step 2
S2 = S2 + Y(a + (j * h))
Next j

Area = (Y(a) + Y(b) + (4 * S1) + (2 * S2)) * h / 3


TextBox4.Text = Area

End Sub
End Class

………………………………………………………

15. Determinación de raíces de ecuaciones.


Muchos problemas en ciencia e ingeniería conducen a un problema de
determinarlas raíces de una ecuación de la forma f(x) = 0 donde f es unafunción
diferenciable. Para una ecuación cuadrática ax2 +bx +c = 0 es bienconocido que:

Para ecuaciones de tercer y cuarto orden hay también fórmulas, peroque son
complicadas. Si f es un polinomio de grado 5 o superior no existetal fórmula. Asimismo
no hay fórmulas que nos permitan encontrar raícesexactas de ecuaciones
trascendentales tales como cos x = x. Métodos quepermitan encontrar aproximaciones
para las raíces de ecuaciones se han desarrollado.

15.1 Método de la Bisección

Sea f(x) una función (ecuación) con raíz en (a, b), esto significa que f(a)>0 y
f(b)<0 ó f(a)<0 y f(b)>0, además f(x) continuo.
Bajo esta hipótesis, se considera reiterativa la mitad del intervalo con las condiciones
ya mencionadas.
44

Figura: Método de la bisección


Donde A = y debe cumplir que *" # ∗ *" #<0

Ejemplo

15.1.1 Realizar el algoritmo, diagrama de flujo, código del método de la Bisección.

15.1.2 Algoritmo: Método de la Bisección.

1. Inicio
2. Definir función Y=x^2-2
3. Leer a, b, n
4. Si Y(a)*Y(b)<0 Entonces
5. Para i= 1 Hasta n
6. c=(a+b)/2
7. Si Y(a)*Y(c)<0 Entonces
8. b=c
9. Caso contrario
10. a=c
11. Fin condición
12. Siguiente i
13. Mostrar c
14. Caso contrario: No existe raíz o hay más de una raíz
15. Fin condición
16.Fin
45

15.1.3 Diagrama de flujo: Método de la Bisección.

15.1.4 Código: Método de la Bisección.

Nota.- Se necesita: 4 TextBox, 1 CommandButton

………………………………………………………….
Public Class Form1
Public Function Y(ByVal x As Double)
Y = x ^ 2 - 2
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim a, b, n As Double
Dim c As Double
46

a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
n = Val(TextBox3.Text)

If Y(a) * Y(b) < 0 Then


For i = 1 To n
c = (a + b) / 2
If Y(a) * Y(c) < 0 Then
b = c
Else
a = c
End If
Next i
TextBox4.Text = c
Else
MsgBox("no tiene raíz en ese intervalo")
End If

End Sub
End Class

………………………………………………………………..

15.2 Método de la Secante.

La idea de este método es muy simple. Si se conocen do puntos tales que


en ellos las función f(x) tiene diferente signo, por ejemplo f(a) <0 yf(b) >0, entonces
(para funciones continuas) en algún punto intermedio lafunción debe anularse. La recta
que va desde el punto (1) al punto (2) corta eleje x más cerca de la raíz buscada,
como se ilustra en la figura siguiente: Comola recta pasa por los puntos (1) y (2) su
ecuación es (verifíquelo)

*" # *" #
C = *" # ! "A #

y el punto donde ella corta el eje x (la aproximación) satisface

*" #– *" #
*" # ! "A # = 0
47

Figura 1.4: Método de la secante.

de donde
A= *" #
*" # – *" #

*" # *" #
A =
*" # *" #

Este proceso debe ser repetido hasta alcanzar la precisión deseada, eligiendo
entre nuevos valores iníciales, (a, c) o (c, b) según en cual pareja hay cambio
de signo de la función.

Ejemplo.-

15.2.1Realizar el algoritmo, diagrama de flujo, código del método de la Secante.

15.2.2Algoritmo: Método de la Secante.

1. Inicio
2. Definir función Y=x^2-2
3. Leer a, b, n
4. Si Y(a)*Y(b)<0 Entonces
5. Para i= 1 Hasta n
a * Y (b) − b * Y (a )
6. c=
Y (b) − Y (a)
7. a=b, b=c
8. Siguiente i
9. Mostrar c
10. Casocontrario: No existe raíz o hay más de una raíz
11. Fincondición
12.Fin

15.2.3 Diagrama de flujo: Método de la Secante.


48

15.2.4 Código: Método de la Secante.

Nota.- Se necesita: 4 TextBox, 1 CommandButton

……………………………………………………………………………
Public Class Form1
Public Function Y(ByVal x As Double)
Y = x ^ 2 - 2
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim a, b, n As Double
Dim c As Double

a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
n = Val(TextBox3.Text)
49

If Y(a) * Y(b) < 0 Then


For i = 1 To n
c = ((a * Y(b)) - (b * Y(a))) / (Y(b) - Y(a))
a = b
b = c
Next i
TextBox4.Text = c
Else
MsgBox("no hay raiz")
End If

End Sub
End Class

………………………………………………………………………………..

15.3Método de la Falsa Posición.

Para encontrar la raíz aproximada de f(x) continua y con presencia de una raíz
se itera como con el método de la bisección, usando la regla de f(a) * f(b)<0, y
utilizando la iteración del método de la Secante.

F( ) F( )
A= . y en cada iteración *( ) ∗ *( ) < 0.
F( ) F( )

Ejemplo
15.3.1Realizar el algoritmo, diagrama de flujo, código del método de la Falsa Posición.
15.3.2Algoritmo: Método de la Falsa Posición.

1. Inicio
2. Definir función Y=x^2-2
3. Leer a, b, n
4. Si Y(a)*Y(b)<0 Entonces
5. Para i= 1 Hasta n
a * Y (b) − b * Y (a)
6. c=
Y (b) − Y (a)
7. Si Y(a)*Y(c)<0 Entonces
8. a=c
9. Casocontrario
10. b=c
11. Fincondición
12. Siguiente i
13. Mostrar c
14. Casocontrario: No existe raíz o hay más de una raíz
15. Fincondición
16.Fin

15.3.3Diagramadeflujo: Método de la Falsa Posición.


50

Para i= 1 Hasta n
INICIO

Y=x^2-2

a, b, n Y(a)*^Y(c)<0
No Si

No a=c b=c
No existe raíz o
Y(a)*Y(b)<0 hay mas de una
raíz
Si
Mostrar
A
c

FIN

15.3.4Código Visual Basic: Método de la Falsa Posición.

Nota.- Se necesita: 4 TextBox, 1 CommandButton

……………………………………………………
Public Class Form1
Public Function Y(ByVal x As Double)
Y = x ^ 2 - 2
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim a, b, n As Double
Dim c As Double

a = Val(TextBox1.Text)
b = Val(TextBox2.Text)
n = Val(TextBox3.Text)

If Y(a) * Y(b) < 0 Then


For i = 1 To n
c = ((a * Y(b)) - (b * Y(a))) / (Y(b) - Y(a))
If Y(a) * Y(c) < 0 Then
51

b = c
Else
a = c
End If
Next i

TextBox4.Text = c
Else
MsgBox("no hay raiz")
End If

End Sub
End Class

……………………………………………………………………………………….

15.4 Método de Newton-Raphson

El método de Newton se basa en la observación de que la línea tangente esuna


buena aproximación local a una función. Sea (x0; f(x0)) un punto de lacurva. La línea
tangente en ese punto será
C *" 0# = * ′ " 0#" 0#.
Esta línea cruza el eje-x donde y = 0. El valor de x será
*" 0#
= 0 .
*′" 0#

En general, dada una aproximación xn a una raíz de la función f(x), la líneatangente


cruza el eje x donde

*" #
n ! 1 .
*′" #

Dado x0, el método de Newton produce una lista x1, x2, …, xn de aproximacionesal
cero de f.
En los gráficos que siguen, f(x) = x - x3, x0 = 0.44, x1( -0.41,x2 (0.27, y x3(-0.048.
52

Ejemplo:

15.4.1Realizar el algoritmo, diagrama de flujo, código del método de Newton-


Raphson.

15.4.2Algoritmo: Método de Newton-Raphson.

1. Inicio
2. Definir función Y=x^2-2
3. Leer x, n
4. Para i = 1 Hasta n
Y ( x)
5. x = x−
dY ( x)
6. Siguiente i
7. Mostrar x
8. Fin

15.4.3Diagrama de flujo: Método de Newton-Raphson.


53

15.4.4 Código Visual Basic: Método de Newton-Raphson.


Nota.- Se necesita: 3 TextBox, 1 CommandButton

………………………………………………………….

Public Class Form1


Public Function Y(ByVal x As Double)
Y = x ^ 2 - 2
End Function
Public Function dY(ByVal x As Double)
dY = 2 * x
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim x, n As Double
Dim s As Double
x = Val(TextBox1.Text)
n = Val(TextBox2.Text)
For i = 1 To n
x = (x - (Y(x) / dY(x)))
Next i
TextBox3.Text = x

End Sub
End Class

…………………………………………………………

16. Vectores

Un vector es una estructura de datos en la que podemos almacenar un


determinado número de datos, todos ellos del mismo tipo, ordenados en una sola
dimensión.

<nombrevector>(<tipoíndice>)

<nombre>, es el nombre de la variable tipo vector.

(<tipoíndice>), indica el elemento concreto del vector con el que queremos operar.

Con los elementos de un vector podemos realizar cualquier operación permitida con la
variable de su tipo, es decir, del tipo básico del vector.

Ejemplo.

16.1Sacar el promedio de N números

16.1.1 Algoritmo: Promedio

1. Inicio
2. Leer N
3. Suma=0
4. Para i= 1 Hasta N
5. Leer x(i)
54

6. Suma=Suma +x(i)
7. Siguiente i
8. Promedio=Suma/N
9. Mostrar Promedio
10.Fin

16.1.2 Diagrama de flujo:Promedio

INICIO

Suma=0

Para i= 1 Hasta N

x(i)

Suma= Suma + x(i)

Promedio = Suma/ N

Promedio

FIN
55

16.1.3 Programa Visual Basic: Promedio

Nota.- Se necesita: 2 TextBox, 1 CommandButton

……………………………………………………………………………………………………….

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click

Dim N As Single
Dim x(0 To 50) As Double
Dim Suma, promedio As Single
N = Val(TextBox1.Text)
For i = 1 To N
x(i) = InputBox("leer número")
Suma = Suma + x(i)
Next
promedio = suma / N
TextBox2.Text = promedio

End Sub
End Class

-----------------------------------Ejemplo 2-----------------------------------------

16.2 Programa Excel: Promedio de una lista de cantidad no definida

Sub promedio()

suma = 0

i=1

If Cells(1, 2) = "" Then

MsgBox ("la lista esta vacía")

Else

Do

i=i+1

suma = suma + Cells(1, i)

Loop Until Cells(1, i) = ""

Range("B3") = suma / (i - 2)

End If

Cells(1, i) = ">"

End Sub
56

………………………………………………………………………………………………………..

Ejemplo.

16.3Realizar el algoritmo, diagrama de flujo, y código para ordenar números de forma


ascendente.

16.3.1 Algoritmo:Ordenar números de forma ascendente.

1. Inicio
2. Leer n
3. Para i= 1 Hasta n
4. Leer a(i)
5. Siguiente i
6. Para i = 1 Hasta (n-1)
7. Para j= (i+1)Hasta n
8. Si a(i)>a(j) Entonces
9. temp=a(i)
10. a(i)=a(j)
11. a(j)=temp
12. Fincondición
13. Siguiente j
14. Siguiente i
15. Para i= 1 Hasta n
16. Mostrar a(i)
17. Siguiente i
18.Fin

16.3.2 Diagrama de Flujo:Ordenar números de forma ascendente.

A
57

16.3.3 Código Visual Basic:Ordenar números de forma ascendente.

Nota.- Se necesita: 1 TextBox, 1 CommandButton, 1 Textbox (Multiline: True)

……………………………………………………

Private Sub Command1_Click()


Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim n As Single
Dim i As Single
Dim j As Single
Dim a(0 To 10) As Single
Dim temp As Single
n = Val(TextBox1.Text)
For i = 1 To n
a(i) = InputBox("meter numero")
Next
For i = 1 To n - 1
For j = i + 1 To n
If a(i) > a(j) Then
temp = a(i)
58

a(i) = a(j)
a(j) = temp
End If
Next j
Next i
For i = 1 To n
TextBox2.Text = TextBox2.Text + Str(a(i)) + vbCrLf
Next i

End Sub
End Class

………………………………………………………

16.4 Ejercicios de aplicación

a) Descomponer en sus factores primos un número n y mostrarlos en una lista.


b) Normalizar un vector de reales con el criterio de hacer su módulo igual a 1.

17. Matrices

Por matriz entenderemos una estructura de datos en la que podemos almacenar


tantos datos como queramos, todos ellos del mismo tipo, el tipo básico, ordenados en
cualquier número de dimensiones, podemos decir que es una generalización del tipo
vector, aunque, como veremos, es mucho más lógico pensar que los vectores son un
caso particular de una matriz.

Las matrices se declaran empleando una sintaxis muy similar a la de los vectores,
añadiendo simplemente tantos rangos de valores como dimensiones tenga la
estructura matricial que estemos definiendo:

<nombre>(<índice1,índice2,…>)

<nombre>, es el nombre de la variable tipo matriz.

(<índice1,índice2,…>), indica el elemento concreto de la matriz con el que


queremos operar.

Así pues, una matriz bidimensional (de dos dimensiones) tendrá dos rangos de valores
MATRIZ(indice1,indice2), una tridimensional tres MATRIZ(indice1, indice2,
indice3),etc., todos ellos separados por comas.

Ejemplo.-

17.1Producto de 2 matrices.

17.1.1 Algoritmo: Producto de 2 matrices.

1. Inicio
2. Leer m, n; p ,q
3. Si n= p Entonces
4. Para i= 1 Hasta m
59

5. Para j= 1 Hasta n
6. Leer mtrz1(i,j)
7. Siguiente j
8. Siguiente i
9. Para i= 1 Hasta p
10. Para j= 1 Hasta q
11. Leer mtrz2(i,j)
12. Siguiente j
13. Siguiente i
14. Para i= 1 Hasta m
15. Para j= 1 Hasta q
16. Para k= 1 Hasta n
17. mtrz3(i, j) = mtrz3(i, j) + mtrz1(i, k) * mtrz2(k, j)
18. Siguiente k
19. Siguiente j
20. Siguiente i
21. Para i= 1 Hasta m
22. Para j= 1 Hasta q
23. Mostrar: mtrz3(i,j)
24. Siguiente j
25. Siguiente i
26. Caso contrario: “No está definida”
27. Fin condición
28.FIN

17.1.2 Diagrama de flujo: Producto de 2 matrices.


60

17.1.3 Código Visual Basic:Producto de 2 matrices.

Nota.- Se necesita: 3 TextBox, 1 CommandButton, 3 DataGridView

………………………………………………………..

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim m, n, p As Integer
Dim a(0 To 100, 0 To 100), b(0 To 100, 0 To 100) As Single
Dim c(0 To 100, 0 To 100) As Single
61

m = Val(TextBox1.Text)
n = Val(TextBox2.Text)
p = Val(TextBox3.Text)

For i = 1 To n
DataGridView1.Columns.Add("col" & Str(i), "Columna" & Str(i))
Next
For i = 1 To m
DataGridView1.Rows.Add()
Next

For i = 1 To p
DataGridView2.Columns.Add("col" & Str(i), "Columna" & Str(i))
Next
For i = 1 To n
DataGridView2.Rows.Add()
Next

For i = 1 To p
DataGridView3.Columns.Add("col" & Str(i), "Columna" & Str(i))
Next
For i = 1 To m
DataGridView3.Rows.Add()
Next
'Lectura de la matriz A
For i = 1 To m
For j = 1 To n
a(i, j) = Val(InputBox("Digitar el dato a(" & Str(i) & "," & Str(j)
& ")", "Matriz a"))
DataGridView1(j - 1, i - 1).Value = Str(a(i, j))
Next
Next
'Lectura de la matriz B
For i = 1 To n
For j = 1 To p
b(i, j) = Val(InputBox("Digitar el dato b(" & Str(i) & "," & Str(j)
& ")", "Matriz b"))
DataGridView2(j - 1, i - 1).Value = Str(b(i, j))
Next
Next
'Producto
For i = 1 To m
For j = 1 To p
c(i, j) = 0
For k = 1 To n
c(i, j) = c(i, j) + a(i, k) * b(k, j)
Next
Next
Next
'Mostrar Resultado
For i = 1 To m
For j = 1 To p
DataGridView3(j - 1, i - 1).Value = Str(c(i, j))
Next
Next
End Sub
End Class

………………………………………………………………………………………………………………………………………
62

17.2 Ejercicios de aplicación

a) Programa para calcular el determinante de una matriz m*n

b) Programa para resolver un sistema de ecuaciones lineales.

18. Extras

18.1 Métodos de Integración; Caso Discreto (Método de los Trapecios)


Programación en Ecxel.

Caso Discreto.-

Método de los Trapecios.

Sub cálculo()
Dim f(1 To 50) As Single
Dim d(1 To 50) As Single

‘ lectura de datos
n = Cells(1, 2)
For i = 1 To n
f(i) = Cells(2, 1 + i)
d(i) = Cells(3, 1 + i)
Next

‘ Cálculos
h = d(2) - d(1)
For i = 2 To n - 1
suma = suma + f(i)
Next
trabajo = h / 2 * (f(1) + 2 * suma + f(n))

‘ salida de datos
Cells(5, 2) = trabajo

End Sub
………………………………………………………………………………………………………………………………………………

18.2 Métodos de Integración; Caso Continuo (Método Simpson 1/3)


Programación en Excel

Caso Continuo.-

Método Simpson 1/3

Public Function Y(x) As Double


Y=x^3
End Function
………………………………………………….
Sub simp13()
Dim a As Single
Dim b As Single
63

Dim n As Single
‘ Lectura de datos
n = Cells(2, 2)
a = Cells(3, 2)
b = Cells(4, 2)

‘Cálculo de h
h = (b - a) / n
Cells(5, 2) = "h=" & Val(h) & ""

‘Cálculos de las sumas pares “sump” e impares ”sumi”


For i = 1 To n - 1
Cells(7 + i, 1) = i
Cells(7 + i, 2) = a + (h * i)
If i Mod 2 = 0 Then
Cells(7 + i, 3) = Y(Cells(7 + i, 2))
sump = sump + Cells(7 + i, 3)
Cells(7 + n, 3) = "Suma=" & Val(sump) & " "
Else
Cells(7 + i, 4) = Y(Cells(7 + i, 2))
sumi = sumi + Cells(7 + i, 4)
Cells(7 + n, 4) = "Suma=" & Val(sumi) & " "
End If
Next i
‘Mostrar datos
Cells(9 + n, 2) = "f(a)=" & Val(Y(a)) & ""
Cells(10 + n, 2) = "f(b)=" & Val(Y(b)) & ""
Cells(15, 6) = "Area="
Cells(15, 7) = h / 3 * (Y(a) + 2 * sump + 4 * sumi + Y(b))

End Sub
‘Borrar datos
Sub borrar()
Dim n As Single
n = Cells(2, 2)
For i = 8 To 10 + n
For j = 1 To 7
Cells(i, j) = ""
Next j
Next i
End Sub
………………………………………………………………………………………………………………………………………………

18.3 Raíz de una Función (Método de la Secante) Programación en Excel.

Método de la Secante

Public Function Y(x As Double)


Y=x^2-2
End Function
………………………………………………..
Sub secante()
Dim a As Double
Dim b As Double
Dim n As Double
64

Dim c As Double
‘ Lectura de datos
a = Cells(2, 2)
b = Cells(3, 2)
n = Cells(4, 2)

If Y(a) * Y(b) < 0 Then


For i = 1 To n
Cells(6 + i, 1) = i
Cells(6 + i, 2) = a
Cells(6 + i, 3) = b
Cells(6 + i, 4) = Y(a)
Cells(6 + i, 5) = Y(b)

c = ((a * Y(b)) - (b * Y(a))) / (Y(b) - Y(a))


Cells(6 + i, 6) = c
a=b
b=c
Next i

Else
MsgBox "no hay raiz"
End If
End Sub
……………………………………………………………………………………………………………………………………………..

18.4. Raiz Newton Raphson + Grafica, Programación Visual Basic.

Nota. - 3 textbox, 1 Commandbutton, 1 Picturebox (Size: 400;400).


………………………………………………………………………………………………………………………………………………
Public Class Form1
Public Function Y(ByVal x) As Single
Y = x ^ 2 - 2
End Function
Public Function Yd(ByVal x) As Single
Yd = 2 * x
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim x As Single
Dim n As Single
Dim g As Graphics

x = TextBox1.Text
n = TextBox2.Text

g = PictureBox1.CreateGraphics
g.Clear(Color.Silver)
g.DrawLine(Pens.Red, 200, 0, 200, 400)
g.DrawLine(Pens.Red, 0, 200, 400, 200)

For i = 0 To 400
g.DrawLine(Pens.Blue, i, 200 - Y(i - 200), i + 1, 200 - Y((i + 1) -
200))
Next

For i = 1 To n
65

x = x - Y(x) / Yd(x)
Next
TextBox3.Text = x

End Sub
End Class

………………………………………………………………………………………………………………

18.5 Inversa de Una Matriz Programación Visual Basic.


Nota. - 1 textbox, 1 Optionbutton, 2 DataGridView
………………………………………………………………………………………………………………
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click
Dim n As Integer
Dim a(0 To 100, 0 To 100) As Single
Dim i, j, k As Integer
Dim q, t As Double

n = Val(TextBox1.Text)
For i = 1 To n + n
DataGridView1.Columns.Add("col" & Str(i), "Columna" & Str(i))
Next
For i = 1 To n
DataGridView1.Rows.Add()
Next
For i = 1 To n
DataGridView2.Columns.Add("col" & Str(i), "Columna" & Str(i))
Next
For i = 1 To n
DataGridView2.Rows.Add()
Next
'Lectura
For i = 1 To n
For j = 1 To n
a(i, j) = Val(InputBox("Introducir la matriz(" & Str(i) & "," &
Str(j) & ")", "Lectura de la matriz"))
DataGridView1(j - 1, i - 1).Value = Str(a(i, j))
If i = j Then
a(i, j + n) = 1
DataGridView1(j + n - 1, i - 1).Value = Str(a(i, j + n))
Else
a(i, j + n) = 0
DataGridView1(j + n - 1, i - 1).Value = Str(a(i, j + n))
End If
Next
Next
'Resultado
For i = 1 To n
For j = 1 To n
If j <> i Then
q = a(j, i) / a(i, i)
For k = 1 To 2 * n
a(j, k) = a(j, k) - (a(i, k) * q)
Next
End If
Next
66

Next
For i = 1 To n
t = a(i, i)
For j = 1 To 2 * n
a(i, j) = a(i, j) / t
Next
Next
'Mostrar inversa
For i = 1 To n
For j = n + 1 To 2 * n
DataGridView2(j - n - 1, i - 1).Value = Str(a(i, j))
Next
Next

End Sub
End Class

………………………………………………………………………………………………………………………………………………

19. Programas Hp HEWLETT PACKARD (Aplicación Métodos Numéricos)

19.1. INTRODUCCIÓN

Toda la guía está orientada a la programación de la calculadora científica Hewlett


Packard 49-50G+.

La razón por la que se utilizó esta herramienta de programación es debido a la gran


versatilidad que tiene, el fácil manejo de LISTAS, y la posibilidad de simplificación y
factorización.

En los siguientes programas se observará con frecuencia el siguiente encabezado:

<< abn

<<

Esto quiere decir, que en la pila de la calculadora se introducen las constantes a,b,c y
al ejecutar el programa, estas constantes se cargarán al programa que empieza
desde el segundo par de comillas (<< ).

Notese también que existe algunos programas que tienen esta variante:

<< 0 0 a b n cont1 cont2

<<
67

En este caso, se introducen las constantes a, b y n por teclado; al ejecutarse el


programa se cargarán también los dos ceros designando así los valores a a,b,n y 0’s a
los contadores cont1 y cont2; esta forma de nomenclatura dará las condiciones
iniciales requeridas.

Otro detalle que es necesario aclarar, es que este lenguaje es conocido con el nombre
de RPL y el modo de trabajo de la calculadora es el RNP que tiene una manera de
enfoque diferente al habitualmente usado algebraico. Obsérvese el siguiente ejemplo:

Algebraico: 2*a+3*COS(П) ENTER

RPN: 2 ENTER a * 3 ENTER П COS( ) * +

Este ejemplo muestra que la calculadora tiene una memoria temporal conocida con el
nombre de PILA donde se van almacennado los resultados parciales.

Algunas de las funciones especiales que se usaron para los programas son:

f(x) ENTER DERVX ; saca la derivada respecto de x de la función

SIMPLIFY ; simplifica una función algebraica

SORT ; ordena en orden ascendente una LISTA

 x x!
COMB(x,y) ;equivale a   = , x y y pueden ser constantes
 y  ( x − y )!· y!
o variables

DEFINE ;sirve para definir funciones

IDN ; genera una matriz identidad de la dimensión deseada

19.2. ESTRUCTURAS DE PROGRAMACIÓN

19.2.1. ESTRUCTURAS SECUENCIALES.

La estructura secuencial es aquella en la que una acción (instrucción) sigue a


otra en secuencia.
68

Ej) Area de un círculo.-

« 'Π*R^2' EVAL 'Area' STO

19.2.2. ESTRUCTURAS CONDICIONALES.

Las estructuras condicionales comparan una variable contra otro(s) valor(es),


para que en base al resultado de esta comparación, se siga un curso de acción dentro
del programa.

Ej.) ¿Es un número par?

« IF 'a MOD 2 == 0' EVAL THEN

"Es par" MSGBOX

ELSE

"Es impar" MSGBOX

END

19.2.3. ESTRUCTURAS CÍCLICAS

Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es


necesario utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad
específica de veces.

Ej.) Factorial

« 1 'Fact' STO

1 n FOR j 'Fact*j' EVAL 'Fact' STO

NEXT

»
69

19.3. VECTORES Ó LISTAS

Un vector es una estructura de datos en la que podemos almacenar un


determinado número de datos, todos ellos del mismo tipo, ordenados en una sola
dimensión.

En la calculadora los Vectores pueden estar dispuestos dentro de


corchetes “[ ]” o pueden trabajar como listas dentro de llaves “{ }”
dependiendo del usuario la utilidad que le asigne.

Ej.1) Normalizar un vector “{ }”.

« A 'A^2' EVAL ∑LIST √ / 'Norm' STO

Ej.2) Normalizar un vector “[ ]”.

« A DUP ABS / 'Norm' STO

19.4. MATRICES-TABLAS

Por matriz entenderemos una estructura de datos en la que podemos almacenar


tantos datos como queramos, todos ellos del mismo tipo, el tipo básico, ordenados en
cualquier número de dimensiones, podemos decir que es una generalización del tipo
vector, aunque, como veremos, es mucho más lógico pensar que los vectores son un
caso particular de una matriz.

Ej.) Producto, Suma, Resta de dos Matrices

AB

«AB*AB+AB–

»
70

Ej.) Tabla de funciones trigonométricas

As

« DEG

['ø''Sen''Cos''Tan']

0 A FOR j

['j''SIN(j)''COS(j)''TAN(j)'] NUM

AUGMENT

s STEP

19.5. RAÍCES DE UNA ECUACIÓN

Para todos los métodos de esta parte se usa la siguiente definición de función:

<< X 'f(x)'>> f DEFINE

Es decir, cuando el programa necesite evaluar una función, automáticamente la


calculadora llamará a la función.

19.5.1. MÉTODO DE LA BISECCIÓN

<< abn // a y b son lo intervalos y n es el número de iteraciones

<<

IF 'f(a)*f(b)<0.'

THEN 1. n

FOR i '(a+b)/2.' EVAL 'c' STO

IF 'f(a)*f(c)<0.'

THEN c 'b' STO

ELSE c 'a' STO


71

END 1.

STEP c 'c' PURGE

ELSE "no existe raiz o existe un numero par de raices" MSGBOX

END

>>

>>

19.5.2. MÉTODO DE LA FALSA POSICIÓN

<< abn // a y b son lo intervalos y n es el número de iteraciones

<<

IF 'f(a)*f(b)<0.'

THEN 1. n

FOR i '(a*f(b)-b*f(a))/(f(b)-f(a))' EVAL 'c' STO

IF 'f(a)*f(c)<0.'

THEN c 'b' STO

ELSE c 'a' STO

END 1.

STEP c 'c' PURGE

ELSE "no existe raiz o existe un numero par de raices" MSGBOX

END

>>

>>

19.5.3. MÉTODO DE LA FALSA POSICIÓN MEJORADA

<< 0 0 a b n cont1 cont2 //cont1 y cont2 controlan un máximo de iteraciones en las


72

// que puede quedarse fijo a o b

<<

IF 'f(a)*f(b)<0'

THEN '(a*f(b)-b*f(a))/(f(b)-f(a))' EVAL 'c' STO 1 n

FOR i

IF 'f(a)*f(c)<0'

THEN c 'b' STO cont1 1 + 'cont1' STO

IF 'cont1\<=3'

THEN 0 'cont2' STO '(a*f(b)-b*f(a))/(f(b)-f(a))' EVAL 'c' STO

ELSE '(a+b)/2' EVAL 'c' STO

END

ELSE c 'a' STO cont2 1 + 'cont2' STO

IF 'cont2\<=3'

THEN 0 'cont1' STO '(a*f(b)-b*f(a))/(f(b)-f(a))' EVAL 'c' STO

ELSE '(a+b)/2' EVAL 'c' STO

END

END 1

STEP c 'c' PURGE

ELSE "no existe raiz o existe un n\250mero par de raices" MSGBOX

END

>>

>>

19.5.4.MÉTODO DE NEWTON RAPHSON

<< xn //x es el valor inicial y n el número de iteraciones

<< 'df(X)' 'f(X)' EVAL DERVX = DEFINE 1. n

FOR i 'x-f(x)/df(x)' EVAL 'x1' STO x1 'x' STO 1.

STEP x1 { x1 df } PURGE

>>

>>
73

19.5.5. MÉTODO DE LA SECANTE

Para este caso considérese a b sólo como el intervalo inicial ya que éste se modificará
en el transcurso del programa.

<< abn //a y b son las condiciones iníciales y n el números de iteraciones

<<

IF 'f(a)*f(b)<0.'

THEN 1. n

FOR i '(a*f(b)-b*f(a))/(f(b)-f(a))' EVAL 'c' STO b 'a' STO c 'b' STO 1

STEP c 'c' PURGE

ELSE "no existe raiz o existe un numero par de raices" MSGBOX

END

>>

>>

19.5.6. MÉTODO DE LA SECANTE MODIFICADA

<< xδn //x es el valor inicial, δ / 0<δ<1 y n el número de iteraciones

<< 1 n

FOR i 'x-f(x)* δ *x/(f(x)-f(x- δ *x))' EVAL 'x1' STO x1 'x' STO 1

STEP x1 'x1' PURGE

>>

>>

19.6. RESOLUCIÓN NUMÉRICA DE SISTEMAS DE ECUACIONES LINEALES

Para todos los métodos de esta parte se usa la siguiente definición de función:
74

 A(1,1) A(1,2) A(1,3) 



A ENTER A(2,1) A(2,2) A(2,3)  STO, y se definirá una especie de función

 A(3,1) A(3,2) A(3,3) 
matricial.

Es decir, cuando el programa necesite evaluar en A(i,j) , automáticamente la


calculadora llamará a la matriz A.

 B(1,1) 
 
De la misma forma, B ENTER B(2,1) STO; todas las fuciones de esa forma están
 
 B(3,1) 
definidas de esa manera.

19.6.1. MÉTODO DE JACOBI

<< 0. 0. 0. n x1 x2 x3 //x1, x2, x3 son las condiciones iniciales y n el número de

//iteraciones

<< 1. n

FOR i '(B(1.,1.)-A(1.,2.)*x2-A(1.,3.)*x3)/A(1.,1.)' EVAL 'X' STO '(B(2.,1.)-


A(2.,1.)*x1-A(2.,3.)*x3)/A(2.,2.)' EVAL 'Y' STO '(B(3.,1.)-A(3.,1.)*x1-
A(3.,2.)*x2)/A(3.,3.)' EVAL 'Z' STO 'x1=X' DEFINE 'x2=Y' DEFINE 'x3=Z' DEFINE 1.

STEP X Y Z 3. LIST { X Y Z } PURGE

>>

>>

19.6.2. MÉTODO DE GAUSS SEIDEL

<< 0. 0. 0. n x1 x2 x3 //x1, x2, x3 son las condiciones iniciales y n el número de

//iteraciones

<< 1. n

FOR i '(B(1.,1.)-A(1.,2.)*x2-A(1.,3.)*x3)/A(1.,1.)' EVAL 'x1' STO '(B(2.,1.)-


A(2.,1.)*x1-A(2.,3.)*x3)/A(2.,2.)' EVAL 'x2' STO '(B(3.,1.)-A(3.,1.)*x1-
A(3.,2.)*x2)/A(3.,3.)' EVAL 'x3' STO 1.
75

STEP x1 x2 x3 3. LIST

>>

>>

19.6.3. MÉTODO DE RELAJACIÓN

<< p // p es el error de aproximación

//IDN en este caso es una matriz identidad 3x3 que se usará sólo
/ /como comodín

<< 3. IDN 'C' STO 0. 0. 0. 3. ARRY 'R' STO 0. 0. 0. 3. ARRY 'X' STO 1. 3.

FOR i 1. 3.

FOR j

IF 'i==j'

THEN -1. 'C(i,j)' STO

ELSE '-A(i,j)/A(i,i)' EVAL 'C(i,j)' STO

END 1.

STEP 1.

STEP 1. 3.

FOR i 1. 3.

FOR j 'R(i)+C(i,j)*X(j)' EVAL 'R(i)' STO 1.

STEP 1.

STEP 1. 3.

FOR i '(R(i)+B(i,1.)/A(i,i))*p' EVAL 0. RND 'R(i)' STO 1.

STEP

WHILE 'R(1.)OR R(2.)OR R(3.)==1.'

REPEAT R OBJ OBJ DROP LIST DUP DUP ABS SORT 3. GET DUP 'M' STO POS
'q' STO

IF 'q==0.'

THEN M NEG 'M' STO

END M POS 'k' STO 'X(k)+R(k)' EVAL 'X(k)' STO 1. 3.

FOR i 'R(i)+M*C(i,k)' EVAL 0. RND 'R(i)' STO 1.


76

STEP

END X p / OBJ OBJ DROP LIST { k q M X R C } PURGE

>>

>>

19.6.4. AJUSTE LINEAL POR MÍNIMOS CUADRADOS: PSEUDO INVERSA

//En este método previamente se almacena a modo de funciones dos vectors X[] y Y[]
de dimensión n

<< 0. 0. 0. 0. n S S1 S2 S3 //n es el número de iteraciones, S S1 S2 S3 son


//condiciones iniciales

<< 1. n

FOR i 'S+X(i)' EVAL 'S' STO 'S1+SQ(X(i))' EVAL 'S1' STO 'S2+X(i)*Y(i)' EVAL 'S2'
STO 'S3+Y(i)' EVAL 'S3' STO 1.

STEP 'n*S1-SQ(S)' EVAL 'D' STO '(n*S2-S*S3)/D' EVAL 'a' STO '(S1*S3-S*S2)/D'
'b' STO 'a' NUM 'b' NUM 'D' PURGE

>>

>>

19.7. INTERPOLACIÓN POLINÓMICA

INTERPOLACIÓN DE NEWTON GREGORY HACIA DELANTE ( FNGA) PARA


DATOS EQUIESPACIADOS

//En este método previamente se almacena a modo de funciones dos vectors U[] y Y[]
de dimensión n

<< 0. nP

<< 'n-1.' EVAL DUP 'N' STO IDN DUP - '∆Y' STO 'U(2.)-U(1.)' EVAL 'h' STO '(Z-
U(1.))/h' EVAL 'K' STO 1. 'n-1.'

FOR i 'Y(i+1.)-Y(i)' EVAL '∆Y(i,1.)' STO 1.

STEP n 1. - 'n' STO 1. 'n-1.'


77

FOR i 1. 'n-1.'

FOR j '∆Y(j+1.,i)- ∆Y(j,i)' EVAL '∆Y(j,i+1.)' STO 1.

STEP n 1. - 'n' STO 1.

STEP 'P+Y(1.)' EVAL 'P' STO 1. N

FOR i 'K' 'i' COMB EVAL '∆Y(1.,i)' EVAL * P + SIMPLIFY 'P' STO 1.

STEP P { N } PURGE

>>

>>

19.7.1 INTERPOLACIÓN DE LAGRANGE PARA DATOS NO EQUIESPACIADOS

//En este método previamente se almacena a modo de funciones dos vectors U[] y Y[]
de dimensión n

<< 0. nS

<< 1. n

FOR i 1. 1.

STEP n ARRY 'P' STO 1. n

FOR i 1. n

FOR j

IF 'i≠j'

THEN '(X-U(j))/(U(i)-U(j))*P(i)' EVAL 'P(i)' STO

END 1.

STEP 'Y(i)*P(i)+S' EVAL SIMPLIFY 'S' STO 1.

STEP S

>>

>>
78

19.8. INTEGRACIÓN

19.8.1. CASO CONTINUO

19.8.1.1. INTEGRACIÓN POR RECTÁNGULOS

<< 0. abnS //la función está previamente definida

<< '(b-a)/n' EVAL 'h' STO 0. 'n-1.'

FOR i 'S+f(a+i*h)' EVAL 'S' STO 1.

STEP '(b-a)/n*S' EVAL

>>

>>

19.8.1.2. INTEGRACIÓN POR TRAPECIOS

<< 0. abnS //la función está previamente definida

<< '(b-a)/n' EVAL 'h' STO 1. 'n-1.'

FOR i 'S+f(a+i*h)' EVAL 'S' STO 1.

STEP 'h/2.*(2.*S+f(a)+f(b))' EVAL

>>

>>

19.8.1.3. INTEGRACIÓN POR SIMPSON

<< 0. 0. a b n S1 S2 //la función está previamente definida

<<

IF 'n MOD 2.==0.'

THEN '(b-a)/n' EVAL 'h' STO 1. 'n/2.'

FOR i 'S1+f(a+(2.*i-1.)*h)' EVAL 'S1' STO 1.


79

STEP 1. 'n/2.-1.'

FOR i 'S2+f(a+2.*i*h)' EVAL 'S2' STO 1.

STEP 'h/3.*(4.*S1+2.*S2+f(a)+f(b))' EVAL

ELSE "n debe ser par" MSGBOX

END

>>

>>

19.8.2. CASO DISCRETO

19.8.2.1. INTEGRACIÓN NEWTON COTES n = 1

//En este método previamente se almacena a modo de funciones dos vectors X[] y Y[]
de dimensión n

<< 0. nS

<< 'X(2.)-X(1.)' EVAL 'h' STO 2. 'n-1.'

FOR i 'S+Y(i)' EVAL 'S' STO 1.

STEP 'h/2.*(2.*S+Y(1.)+Y(n))' EVAL

>>

>>

19.8.2.2. INTEGRACIÓN SIMPSON 1/3 NEWTON COTES n = 2

//En este método previamente se almacena a modo de funciones dos vectors U[] y Y[]
de dimensión n

<< 0. 0. n S1 S2

<<

IF 'n MOD 2.==0.'

THEN 'X(2.)-X(1.)' EVAL 'h' STO 2. 'n/2.'


80

FOR i 'S1+Y(2.*i-1.)' EVAL 'S1' STO 1.

STEP 2. 'n/2.-1.'

FOR i 'S2+Y(i)' EVAL 'S2' STO 1.

STEP 'h/3.*(4.*S1+2.*S2+Y(1.)+Y(n))' EVAL

ELSE "n debe ser par" MSGBOX

END

>>

>>

20. Bibliografía

-Algorítmica y programación para ingenieros. M.Isabel Gallego Fernandez


Manuel Medina Llinàs

-Algoritmos y diagramación Colegio de bachilleres del


estado de Sonora Hermosillo

-Métodos numéricos. Introducción, aplicaciones Antonio Huerta Cerezuelo

y propagación. Josep Sarrate-Ramos

Antonio Rodríguez-Ferran

-Métodos numéricos y simulaciones. Luis Rodriguez Valencia

-Cálculo diferencial e integral. William Anthony Granville

- Visual Basic 2013 Javier García de Jalón

José Ignacio Rodriguez

Alfonso Brález

Patxi Funes
Eduardo Carrasco

Jesús Calleja
-Hp 50g Calculadora Gráfica (Guía del Usuario)

Você também pode gostar