You are on page 1of 12

UNIVERSIDAD DE ANTIOQUIA

FACULTAD DE INGENIERIA
SEDES MEDELLIN Y TULENAPA
CURSO DE ALGORITMOS Y PROGRAMACION - 2017

Tema de Estudio: ESTRUCTURA REPETITIVA

1. Estructura repetitiva
Hasta el momento se ha encontrado que cada una de las instrucciones que conforman el algoritmo se
ejecutan una, y solo una vez, en el mismo orden en el que aparecan. Es as como hasta ahora cubriendo el
tema de PROGRAMACION ESTRUCTURADA, hemos hablado las siguientes dos estructuras:

1. Estructura secuencial : Describe una secuencia de instrucciones. No hay toma de decisiones ni repeticion
de instrucciones.

2. Estructura de decision logica: Describe un bloque de instrucciones que contiene una bifurcacion, donde
es necesario tomar una decision de acuerdo a una condicion.

En esta sesion trataremos una estructura que se conoce como estructura repetitiva, la cual permite ejecutar
un bloque de instrucciones que se debe repetir cero o mas veces. La mayora de los problemas dentro de la
programacion exigen que un grupo de instrucciones que hacen un calculo determinado se repitan bajo ciertas
condiciones. La estructura repetitiva, tambien conocida como estructura MIENTRAS, permite representar
aquellos algoritmos en los que se debe repetir un conjunto de instrucciones cero o mas veces. Debido a la
naturaleza repetitiva de estas estructuras, se les conoce tambien como ciclos. La representacion de dicha
estructura es como sigue:

1 MIENTRAS < Condicion > HAGA


2 < Instrucciones >
3 FIN_MIENTRAS

Esta estructura esta conformada basicamente por dos partes: una <Condicion> y una secuencia de
<Instrucciones > que se deben repetir cero o mas veces dependiendo de si la condicion que controla el ci-
clo, <Condicion>, se cumple o no. Para ingresar al ciclo es necesario que se cumpla la condicion. Igualmente,
para salir de el es necesario que la condicion se deje de cumplir, razon por la cual, muchas veces es necesario
escribir una instruccion que haga que la condicion se deje de cumplir.

1.1. Esquemas de la estructura repetitiva


Existen dos esquemas basicos de la estructura repetitiva, dependiendo s se conoce con anticipacion, o
no, el numero de veces que se deben ejecutar las instrucciones que esta dentro de la estructura: (1) Esquema
cuantitativo y (2) Esquema cualitativo.

Esquema cuantitativo En este esquema se conoce con anticipacion el numero de veces que se
va a ejecutar el conjunto de instrucciones que esta dentro de la estructura. Como en este esquema se
conoce el numero de veces, digamos N , que se deben ejecutar las instrucciones dentro de la estructura,
este esquema se puede generalizar facilmente utilizando una variable contadora, as:

1
1 CONTADOR = 1
2 MIENTRAS ( CONTADOR <= N ) HAGA
3 < Instrucciones >
4 CONTADOR = CONTADOR + 1
5 FIN_MIENTRAS

OBSERVACIONES:
En este esquema la variable CONTADOR es la encargada de contar el numero de veces y a su vez
controlar directamente la ejecucion de la estructura.
La instruccion "CONTADOR = CONTADOR + 1" es la encargada de aumentar el valor de la variable
CONTADOR, de manera que en algun momento (CONTADOR = N o CONTADOR > N) se deje de cumplir
la condicion y se termine la ejecucion de las instrucciones dentro de la estructura. !Ojo con esto
porque si no se incluye esta instruccion, nunca podremos salir de la estructura y esta se repetira
infinitamente. Esta ultima condicion es la que se conoce normalmente como ciclo infinito o bucle
infinito.
Las instruccion "CONTADOR = CONTADOR + 1" y la condicion "CONTADOR <= N" estan ntimamente
relacionadas. En este caso fjense que la variable CONTADOR empieza en 1 y va aumentando de uno en
uno ("CONTADOR = CONTADOR + 1") hasta llegar a N y por ende se debe poner un lmite superior
por medio de la condicion "CONTADOR <= N". Tambien es posible utilizar el esquema empezando la
variable CONTADOR en N y que yaya disminuyendo de a uno en uno ("CONTADOR = CONTADOR - 1")
hasta llegar a 1, pero en este caso se debe poner un lmite inferior por medio de la condicion
"CONTADOR >= 1".En general, se puede utilizar cualquier valor constante para cambiar (aumentar
o disminuir, segun sea el caso) el valor de la variable CONTADOR.
Esquema cualitativo En este esquema no se conoce con anticipacion el numero de veces que
se va a repetir el conjunto de instrucciones dentro de la estructura. Como en este esquema no se conoce
el numero de veces (digamos N ), que se deben ejecutar las instrucciones dentro de la estructura, este
esquema no tiene una forma general como el esquema cuantitativo sino que utiliza la forma general de
la estructura MIENTRAS.

1 MIENTRAS < Condicion > HAGA


2 < Instrucciones >
3 < Instruccion de Control >
4 FIN_MIENTRAS

OBSERVACIONES:
En esta estructura se debe implementar una instruccion que afecte la validez de la condicion
que controla la ejecucion de la estructura para poder garantizar que en algun momento podamos
salir de la estructura. Esta instruccion se conoce con el nombre de <Instruccion de Control>
y es la encargada de terminar la ejecucion de la estructura. Ojo con esto! porque si no se
incluye una <Instruccion de Control>, nunca podremos salir de la estructura y esta se repetira
infinitamente. Esta ultima condicion es la que se conoce normalmente como ciclo infinito o bucle
infinito.
Una forma sencilla de implementar un estructura repetitiva cualitativa es utilizando una variable
que se conoce como BANDERA o SUICHE. Esta hace referencia a una variable que toma dos
posibles valores definidos por el programador (p.ej. 1 y 0, "ON" y "OFF", VERDADERO y FALSO,
etc.); y se utiliza en estructuras estructuras repetitivas cualitativas para controlar la ejecucion de
la estructura. Antes de llegar a la estructura, la variable BANDERA debe tener asignado el valor
que garantiza la entrada a la estructura repetitiva. Para salir de la estructura repetitiva se debe

2
cambiar el valor de la variable BANDERA al otro valor posible. El esquema cualitativo se puede
implementar facilmente utilizando una variable BANDERA, as:

1 BANDERA = VERDADERO
2 MIENTRAS ( BANDERA = VERDADERO ) HAGA
3 < Instrucciones >
4 FIN_MIENTRAS

Ojo con esto! Dentro de la estructura se debe incluir en alguna parte la instruccion BANDERA = FALSO
para garantizar que en algun momento podamos salir de la estructura repetitiva.

k=10
X
1.2. Ejemplo 1: Calculo de la k [Esquema Cuantitativo]
k=1
Haga un algoritmo que permita calcular la suma de los 10 primeros numeros naturales.

1. Analisis de la Informacion:

a) Datos de entrada: No hay datos de entrada que deba ingresar el usuario.


b) Datos de salida: La suma de los numeros.
c) Proceso:
Para entender bien el problema es necesario analizar como se procede manualmente para calcular
10
X
la sumatoria k. La sumatoria como tal tiene un ndice (en este caso k) el cual toma valores
k=1
desde un ndice inferior (en este caso 1) hasta un ndice superior (en este caso 10). En este caso
el ndice de la sumatoria va aumentando 1 unidad cada vez para generar los termino que se van
a sumar. Para resolver este problema se calcula la sumatoria usando las sumas parciales hasta
llegar a la suma parcial del ultimo termino, la cual constituye el resultado de la sumatoria:

S1 = 1
S2 = S1 + 2
S3 = S2 + 3
...
S10 = S9 + 10

Analizando las secuencia, podemos ver que el problema se reduce a generar cada uno de los
terminos de la sucesion (k) e ir acumulandolos en una variable, la cual en este caso llamaremos
SU M A. Para el caso de este problema, este se puede resolver con los siguientes pasos:
1) Definimos las variables: k, SUMA
2) Inicializamos la variable SUMA en 0, as: SUMA = 0.
3) Generamos el primer termino, k = 1.
4) Calculamos la suma parcial hasta k: SUMA = SUMA + k.
5) Generamos el siguiente termino de la sucesion: k = k + 1.
6) Repetimos los pasos 4 y 5 hasta calcular la suma parcial hasta k = 10.

3
2. Algoritmo en Pseudocodigo:
Los pasos anteriores se resumen en el siguiente pseudocodigo:

1 INICIO
2 ENTERO POSITIVO k , SUMA
3 SUMA = 0
4 k = 1
5 MIENTRAS k <= 10 HAGA
6 SUMA = SUMA + k
7 k = k +1
8 FIN_MIENTRAS
9 ESCRIBA : " La suma obtenida es : " , SUMA
10 FIN

3. Prueba de escritorio:

# INSTRUCCION SUMA k MENSAJE


1 - - -
2 0 - -
3 0 1 -
4 1 1 -
5 1 2 -
6 3 2 -
7 3 3 -
8 6 3 -
9 6 4 -
10 10 4 -
11 10 5 -
12 15 5 -
13 15 6 -
14 21 6 -
15 21 7 -
16 28 7 -
17 28 8 -
18 36 8 -
19 36 9 -
20 45 9 -
21 45 10 -
22 55 10 -
23 55 11 -
24 55 11 La suma obtenida es: 55

Observe que cuando k = 11 se regresa a chequear la condicion k 10 y como la condicion se deja


de cumplir, se termina la ejecucion de la estructura repetitiva. Finalmente se muestran el mensaje en
pantalla.

4. Codificacion en VBA:

1 Sub sumar10 ()
2 Dim k As Integer , SUMA As Integer
3 SUMA = 0
4 k = 1

4
5 Do While k <= 10
6 SUMA = SUMA + k
7 k = k +1
8 Loop
9 MsgBox " La suma obtenida es : " & SUMA
10 End Sub

5. CONCLUSIONES
Este primer ejemplo es importante por las siguientes razones:
a) Permite introducir los conceptos de CONTADOR y ACUMULADOR.
CONTADOR: Es una variable que se utiliza para realizar el conteo de algo. Este tipo de
variable se reconoce pues se inicializa antes de entrar a una estructura repetitiva y reapa-
rece dentro de esta adoptando la siguiente forma: CONTADOR = CONTADOR + <Constante>.
Ejemplo: la variable k del Ejemplo 1.
ACUMULADOR: Es una variable que se utiliza para totalizar alguna cantidad. Este tipo de
variable se reconoce pues se inicializa antes de entrar a una estructura repetitiva y reaparece
dentro de esta adoptando la siguiente forma: ACUMULADOR = ACUMULADOR + <Expresion>.
Ejemplo: la variable SU M A del Ejemplo 1. Notese ademas que un CONTADOR no es mas
que un ACUMULADOR que tiene como incremento como <Expresion> un valor constante,
<Constante>.
b) Permite crear un esquema general para calcular cualquier sumatoria, productoria e incluso esti-
mar integrales definidas. Esta ultima constituye la base de los metodos numericos para calcular
Z b
integrales definidas, los cuales aproximan la integral definida f (x)dx como una sumatoria de
a
xX
i =b

la forma f (xi )xi donde el ndice xi toma valores de acuerdo a una particion que se haya
xi =a
hecho del intervalo [a, b].

1.3. Ejercicios Propuestos


k=10
X
En el Ejemplo 1 se calculo la sumatoria k. Con base en esto analice y resuelva los siguientes interro-
k=1
gantes. Anote sus observaciones. Tenga en cuenta que esto es la base para el calculo numerico por metodos
iterativos de cualquier sumatoria, productoria o integral definida.
k=N
X
1. Explique como modificara el algoritmo para calcular la sumatoria: k.
k=1

k=M
X
2. Explique como modificara el algoritmo para calcular la sumatoria: k.
k=N

k=M
X k=M
X
3. Explique como modificara el algoritmo para calcular la sumatoria: (2k + 1) o sen(2k).
k=N k=N

k=n
Y
4. Explique como modificara el algoritmo para calcular el n! (factorial de n): k.
k=1

5
k=n
Y
5. Explique como modificara el algoritmo para calcular la productoria: (2k + 1).
k=1
Z
6. Explique como modificara el algoritmo para calcular la integral definida sen(x)dx.
0
x=3,14
X
Utilice la sumatoria sen(x)x con x aumentando una cantidad constante x = 0,01.
x=0
Recomendacion: Como el valor de x es muy pequeno, utilice la codificacion en VBA en lugar del
pseudocodigo para chequear los resultados de su analisis.
N X
X M
7. Explique como utilizara el algoritmo planteado para calcular: (i2 + j 2 ).
i=1 j=0

N Y
Y M
8. Explique como utilizara el algoritmo planteado para calcular: (i + j).
i=1 j=1
Z Z
9. Explique como utilizara el algoritmo planteado para calcular: sen(x2 + y 2 )dxdy.
0 0

Ejemplo 2: Suma de numeros [Esquema Cualitativo]


Haga un algoritmo que permita calcular la suma y el promedio de una serie de numeros positivos ingre-
sados de a uno por uno.

1. Analisis de la informacion:
a) Datos de entrada: Cada numero ingresado, NUM
b) Datos de salida: La suma y el promedio de los numeros
c) Proceso: Para resolver el problema se procede de manera analoga al ejemplo anterior, con la
salvedad de que el numero de terminos que se van a sumar no se conoce con antelacion. El
problema se puede resolver usando los siguientes pasos:
1) Definimos las variables: NUM, SUMA, PROMEDIO, CONTADOR
2) Inicializamos la variable SUMA: SUMA = 0
3) Inicializamos la el contador de numeros: CONTADOR = 0
4) Leemos el primer numero, NUM
5) Calculamos la suma parcial: SUMA = SUMA + NUM.
6) Aumentamos el contador de los numeros sumados: CONTADOR = CONTADOR + 1
7) Leemos el siguiente numero: NUM
8) Repetimos los pasos 5 a 7 hasta que el usuario ingrese un numero que no sea positivo.
2. Algoritmo en Pseudocodigo: Los pasos anteriores se resumen en el siguiente pseudocodigo:

1 INICIO
2 REAL NUM , SUMA , PROMEDIO
3 ENTERO POSITIVO CONTADOR
4 SUMA = 0
5 LEA : NUM
6 CONTADOR = 0
7 MIENTRAS NUM > 0 HAGA
8 SUMA = SUMA + NUM

6
9 CONTADOR = CONTADOR + 1
10 PROMEDIO = SUMA / CONTADOR
11 ESCRIBA : " Ingrese el siguiente numero positivo ( o no - positivo para
finalizar ) ."
12 LEA : NUM
13 FIN_MIENTRAS
14 ESCRIBA : " La suma es " , SUMA , " y el promedio es " , PROMEDIO
15 FIN

Vemos que en este caso el numero de repeticiones no se conoce con antelacion y es necesario controlar
el ciclo con una variable adicional, la cual en este caso coincide con el numero ingresado, NUM.

3. Prueba de Escritorio: Una prueba de escritorio de escritorio se muestra en la siguiente tabla:

# INSTR SUMA NUM CONTADOR PROMEDIO MENSAJE


1 - - - - -
2 - - - - -
3 0 - - - -
4 0 20 - - -
5 0 20 0 - -
6 20 20 0 - -
7 20 20 1 - -
4 20 20 1 20 -
8 20 20 1 20 Ingrese el siguien-
te numero positivo
(o no-positivo para
finalizar)
9 20 10 1 20 -
10 30 10 1 20 -
11 30 10 2 20 -
12 30 10 2 15 -
13 30 10 2 15 Ingrese el siguien-
te numero positivo
(o no-positivo para
finalizar)
14 30 18 2 15 -
15 48 18 2 15 -
16 48 18 3 15 -
17 48 18 3 16 -
18 48 18 3 16 Ingrese el siguien-
te numero positivo
(o no-positivo para
finalizar)
19 48 -1 3 16 -
20 48 -1 3 16 La suma es 48 y el pro-
medio es 16

Luego, el resultado impreso en pantalla sera:

La suma es 48 y el promedio es 16

7
Ejemplo 3: Solucion de una ecuacion no lineal [Esquema Cualitativo]
Escriba un algoritmo para calcular el volumen molar del amonaco (N H3 ) gaseoso a una presion de 56
atm y una temperatura de 450 K, usando la Ecuacion de Estado de Redlich-Kwong, si la temperatura crtica
(TC ) y la presion crtica (PC ) del amonaco son 405.5 K y 111.3 atm, respectivamente.

Ecuacion de Estado de Redlich-Kwong:


RT a
P =
V b V (V + b) T
donde: !
5/2
R2 Tc
a = 0,42747
Pc
 
RTc
b = 0,08664
Pc

P: Presion, en atm.
V: Volumen, en l/mol.
T: Temperatura, en K.
atm.l
R: Constante de los gases, R = 0,08206
mol.K
Tc : Temperatura crtica, en K
Pc : Presion crtica, en atm

1. Analisis de la informacion:
a) Datos de entrada: Temperatura crtica (Tc ) y presion crtica (Pc ) del amonaco.
b) Datos de salida: Volumen molar del amonaco (V ).
c) Proceso: El problema se puede resolver usando los siguientes pasos:
1) Definir las variables: T, P, a, b, R, Tc, Pc, V, TOL, Vaux, ITERAR.
2) Especificamos los valores de T, P, R, Tc, Pc y TOL (p.ej. : TOL = 0.0001).
3) Calculamos los parametros a y b.
4) Suponemos un valor inicial para V : V = RT/P [por gas ideal].
5) Inicializamos la bandera ITERAR: ITERAR = VERDADERO
6) Guardamos una copia de V en Vaux : Vaux = V
7) Calculamos V con la ecuacion de Redlich-Kwong:

RT V (V + b) T a(V b)
V = +b
P V (V + b) T
.
8) Si |V V aux| T OL damos por finalizado el calculo haciendo ITERAR = FALSO, sino repe-
timos los pasos 6 a 8.

8
2. Algoritmo en pseudocodigo: Los pasos anteriores se resumen en el siguiente pseudocodigo:

1 INICIO
2 REAL T , P , a , b , R , Tc , Pc , V , TOL , Vaux
3 LOGICO ITERAR
4 T = 450
5 P = 56
6 R = 0.08206
7 Tc = 405.5
8 Pc = 111.3
9 TOL = 0.0001
10 a = 0.42747*( R ^2* Tc ^(5/2) / Pc )
11 b = 0.08664*( R * Tc / Pc )
12 V = R*T/P
13
14 ITERAR = VERDADERO
15 MIENTRAS ITERAR = VERDADERO HAGA
16 Vaux = V
17 V = ( R * T * V *( V + b ) * T ^(1/2) -a *( V - b ) ) /( P * V *( V + b ) * T ^(1/2) ) + b
18 SI |V - Vaux | <= TOL ENTONCES
19 ITERAR = FALSO
20 FIN_SI
21 FIN_MIENTRAS
22 ESCRIBA : " El volumen molar del NH3 es " , V
23 FIN

3. Prueba de escritorio: Haga una prueba de escritorio en VBA (con F8 y la ventana Locales) para
hacerle seguimiento y analizar lo que hace el algoritmo paso a paso. El resultado numerico esperado
es 0.5698 l/mol.
4. Codificacion en VBA:

1 Sub v olMolarRedlichKwong ()
2 Dim T # , P # , a # , b # , R # , Tc # , Pc # , V # , TOL # , Vaux # , ITERAR As Boolean
3 T = 450
4 P = 56
5 R = 0.08206
6 Tc = 405.5
7 Pc = 111.3
8 TOL = 0.0001
9 a = 0.42747*( R ^2* Tc ^(5/2) / Pc )
10 b = 0.08664*( R * Tc / Pc )
11 V = R*T/P
12
13 ITERAR = True
14 Do While ITERAR = True
15 Vaux = V
16 V = ( R * T * V *( V + b ) * T ^(1/2) -a *( V - b ) ) /( P * V *( V + b ) * T ^(1/2) ) + b
17 If abs (V - Vaux ) <= TOL Then
18 ITERAR = False
19 End If
20 Loop
21 MsgBox " El volumen molar del NH3 es " & V & " l / mol . "
22 End Sub

9
MAS ALLA DEL EJERCICIO...
Existen varios metodos numericos iterativos para resolver ecuaciones no lineales (p.ej. Metodo de
la Biseccion, Metodo de la Secante, Metodo de la Falsa Posicion, Metodo de Newton-
Raphson, Metodo de Sustituciones Sucesivas, Metodo de Wegstein, etc.).
En este ejercicio en particular se utilizo el Metodo de Sustituciones Sucesivas.
La diferencia principal entre el Metodo de Sustituciones Sucesivas y los demas metodos es que los demas
metodos necesitan dos o mas valores previos para estimar un nuevo valor de la variable de interes, o
en el caso del Metodo de Newton-Raphson, se necesita conocer un valor previo, el valor de la funcion
en dicho valor y el valor de la derivada de la funcion en dicho valor.

Ejemplo 4: Solucion de un sistema de ecuaciones lineales [Esquema Cualitativo]


Escriba un algoritmo para resolver por metodo iterativo el siguiente sistema de ecuaciones lineales.
0,5D1 + 0,3B1 + 0,1D2 + 0,05B2 = 20 (1)
0,2D1 + 0,6B1 + 0,1D2 + 0,15B2 = 25 (2)
0,1D1 + 0,05B1 + 0,65D2 + 0,1B2 = 35 (3)
0,2D1 + 0,05B1 + 0,15D2 + 0,7B2 = 20 (4)
1. Analisis de la informacion:
a) Datos de entrada: No hay datos de entrada.
b) Datos de salida: Los valores de D1 , B1 , D2 y B2 .
c) Proceso: El problema se puede resolver usando los siguientes pasos:
1) Definir las variables: D1, B1, D2, B2, D1aux, B1aux, D2aux, B2aux, TOL, ITERAR
2) Especificamos el valor de la variable TOL: TOL = 0.0001
3) Suponemos un valor inicial para D1 : D1 = 25.
4) Suponemos un valor inicial para B1 : B1 = 25.
5) Suponemos un valor inicial para D2 : D2 = 25.
6) Suponemos un valor inicial para B2 : B2 = 25.
7) Inicializamos la bandera ITERAR: ITERAR = VERDADERO
8) Guardamos una copia de los valores de D1, B1, D2 y B2 en D1aux, B1aux, D2aux y B2aux,
respectivamente:
D1aux = D1
B1aux = B1
D2aux = D2
B2aux = B2
9) Calculamos nuevos valores para las variables D1, B1, D2 y B2 con las ecuaciones (1), (2),
(3) y (4), respectivamente:
20 0,3B1 0,1D2 0,05B2
D1 =
0,5
25 0,2D1 0,1D2 0,15B2
B1 =
0,6
35 0,1D1 0,05B1 0,1B2
D2 =
0,65
20 0,2D1 0,05B1 0,15D2
B2 =
0,7

10
10) Si se cumple el criterio de convergencia |X Xaux| T OL para todas las variables, damos
por finalizado el calculo, haciendo ITERAR = FALSO, sino repetimos los pasos 8 a 10.
2. Algoritmo en pseudocodigo:
Por cuestiones de espacio, se utilizaron las variables logicas adicionales CONVERGE D1, CONVERGE B1,
CONVERGE D2 y CONVERGE B2. Los pasos descritos se muestran en el siguiente pseudocodigo:

1 INICIO
2 REAL D1 , B1 , D2 , B2 , D1aux , B1aux , D2aux , B2aux , TOL
3 LOGICO ITERAR , CONVERGE_D1 , CONVERGE_B1 , CONVERGE_D2 , CONVERGE_B2
4 TOL = 0.0001
5 D1 = 25
6 B1 = 25
7 D2 = 25
8 B2 = 25
9
10 ITERAR = VERDADERO
11 MIENTRAS ITERAR = VERDADERO HAGA
12 D1aux = D1
13 B1aux = B1
14 D2aux = D2
15 B2aux = B2
16 D1 = (20 - 0.3* B1 - 0.1* D2 - 0.05* B2 ) /0.5
17 B1 = (25 - 0.2* D1 - 0.1* D2 - 0.15* B2 ) /0.6
18 D2 = (35 - 0.1* D1 - 0.05* B1 - 0.1* B2 ) /0.65
19 B2 = (20 - 0.2* D1 -0.05* B1 - 0.15* D2 ) /0.7
20 CONVERGE_D1 = (| D1 - D1aux | <= TOL )
21 CONVERGE_B1 = (| B1 - B1aux | <= TOL )
22 CONVERGE_D2 = (| D2 - D2aux | <= TOL )
23 CONVERGE_B2 = (| B2 - B2aux | <= TOL )
24 SI ( CONVERGE_D1 Y CONVERGE_B1 Y CONVERGE_D2 Y CONVERGE_B2 ) ENTONCES
25 ITERAR = FALSO
26 FIN_SI
27 FIN_MIENTRAS
28 ESCRIBA : " Solucion del Sistema de Ecuaciones : "
29 " D1 =" , D1
30 " B1 =" , B1
31 " D2 =" , D2
32 " B2 =" , B2
33 FIN

3. Prueba de escritorio: Haga una prueba de escritorio en VBA (con F8 y la ventana Locales) para
hacerle seguimiento y analizar lo que hace el algoritmo paso a paso. El resultado numerico esperado
es D1 = 13,56, B1 = 26,03, D2 = 47,82 y B2 = 12,59.
4. Codificacion en VBA:

1 Sub s i stE cu ac ion es Li nea le s ()


2 Dim D1 # , B1 # , D2 # , B2 # , D1aux # , B1aux # , D2aux # , B2aux # , TOL #
3 Dim ITERAR As Boolean , CONVERGE_D1 As Boolean , CONVERGE_B1 As Boolean
4 Dim CONVERGE_D2 As Boolean , CONVERGE_B2 As Boolean
5 TOL = 0.0001
6 D1 = 25
7 B1 = 25
8 D2 = 25

11
9 B2 = 25
10
11 ITERAR = True
12 Do While ITERAR = True
13 D1aux = D1
14 B1aux = B1
15 D2aux = D2
16 B2aux = B2
17 D1 = (20 - 0.3* B1 - 0.1* D2 - 0.05* B2 ) /0.5
18 B1 = (25 - 0.2* D1 - 0.1* D2 - 0.15* B2 ) /0.6
19 D2 = (35 - 0.1* D1 - 0.05* B1 - 0.1* B2 ) /0.65
20 B2 = (20 - 0.2* D1 -0.05* B1 - 0.15* D2 ) /0.7
21 CONVERGE_D1 = ( Abs ( D1 - D1aux ) <= TOL )
22 CONVERGE_B1 = ( Abs ( B1 - B1aux ) <= TOL )
23 CONVERGE_D2 = ( Abs ( D2 - D2aux ) <= TOL )
24 CONVERGE_B2 = ( Abs ( B2 - B2aux ) <= TOL )
25 If ( CONVERGE_D1 And CONVERGE_B1 And CONVERGE_D2 And CONVERGE_B2 ) Then
26 ITERAR = False
27 End If
28 Loop
29 MsgBox " Solucion del Sistema de Ecuaciones : " & _
30 " D1 = " & Round ( D1 , 2) & _
31 " B1 = " & Round ( B1 , 2) & _
32 " D2 = " & Round ( D2 , 2) & _
33 " B2 = " & Round ( B2 , 2)
34 End Sub

MAS ALLA DEL EJERCICIO...


Existen varios metodos numericos iterativos para resolver sistemas de ecuaciones lineales (p.ej. Metodo
de Jacobi, Metodo de Gauss-Seidel, etc.).
En este ejercicio en particular se utilizo el Metodo de Gauss-Seidel.
La diferencia principal entre el Metodo de Jacobi y el Metodo de Gauss-Seidel, es que este ultimo utiliza
los valores mas recientes de las variables en el re-calculo de las variables. Por ejemplo, si quisieramos
aplicar el Metodo de Jacobi para resolver este ejercicio, tocara reemplazar las variables D1, B1, D2 y
B2 por las variables D1aux, B1aux, D2aux y B2aux, respectivamente, al lado derecho del igual en las
expresiones que calculan los nuevos valores de D1, B1, D2 y B2.

12

You might also like