Está en la página 1de 42

2.

RESPUESTA
IF X >= 10 THEM
DO
X=X-5
IF X < 50 EXIT
ENDDO
ELSEIF X < 5
X=5
ELSE
X = 7.5
ENDIF
PRINT X
2.2
Vuelva a escribir el
seudocódigo siguiente, con
el uso de la indentación
apropiada.

DO RESPUESTA
DO
I=I+1 I=I+1
IF Z > 50 EXIT IF Z > 50 EXIT
X=X+5 X=X+5
IF X > 5 THEM
IF X > 5 THEM Y=X
Y=X ELSE
ELSE Y=0
ENDIF
Y=0 Z=X+Y
ENDIF ENDDO
Z=X+Y
ENDDO
2.3
En cada una de las tarjetas de un conjunto de cartas índice, se registra un valor para la
concentración de un contaminante en un lago. Al final del conjunto, se coloca una carta
marcada como “fin de los datos”. Escriba un algoritmo para determinar la suma, el
promedio y el máximo de dichos valores.

RESPUESTA
Sub contaminante()
Dim n As Integer
Dim i As Integer
Dim dato As Integer
Dim vmay As Integer
Dim suma As Integer
Dim prom As Integer

prom = 0
suma = 0

n = InputBox("introduce la cantidad de contaminantes del lago", "")


For i = 1 To n
dato = InputBox("ingrese dato" & i & ": ")
If i = 1 Then
vmay = dato
End If
If dato > vmay Then
vmay = dato
End If
suma = suma + dato

Next i
prom = suma / n

MsgBox "La suma de los valores de los contaminantes del lago es: " & suma
MsgBox "el promedio de los valores de los contaminantes del lago es: " & prom
MsgBox "el mayor es" & vmay

End Sub
El desarrollo de ese algoritmo depende de reconocer que la
aproximación en serie del seno se representa de manera concisa
por la suma.

Donde i = el orden de la aproximación. El siguiente algoritmo implementa esta suma:


Paso 1: comenzar.
Paso 2: entrada a evaluar (X) y orden máxima (n).
Paso 3: establecer el orden (i) igual a uno.
Paso 4: ajuste el acumulador para aproximación (aprox) a cero.
Paso 5: establecer el acumulador para el producto factorial (fac) igual a uno.
Paso 6: calcular el verdadero valor de sin (x).
Paso 7: si el orden es mayor que n, continúe con el paso 13 de lo contrario, continúe con el siguiente.
Paso 8: calcular la aproximación con la fórmula.

Paso 9: determinar el error.

Paso 10: incrementa el pedido en uno.


Paso 11: determine la factorial para la próxima iteración.
Paso 12: regrese al paso 7.
Paso 13: fin.
úe con el siguiente.
Sub problema6(n, x)
Dim i As Integer
Dim approx As Integer
Dim factor As Integer
Dim error As Double
verdadero = Math.Cos(x)
i=1
approx = 0
factor = 1
Do
If i > n Then Exit Do
approx = approx + (-1) ^ (i - 1) * x^(2 * i - 1) / factor
error = Math.Abs((verdadero - approx) / verdadero) * 100
MsgBox "i :" & i
MsgBox "verdadero :" & verdadero
MsgBox "aproximado :" & approx
MsgBox "error :" & error
i=i+1
factor = factor * (2 * i - 2) * (2 * i - 1)
Loop
End Sub
EJERCICIO 2.7

Seudocódigo
Diagrama de flujo
E

EJERCICIO 2.8
EJERCICIO 2.9
SEUDOCODIGO
2.10 El método antiguo de dividir y promediar, para obtener el valor aproximado de la raíz cuadrada de cualquier número
positivo a se puede formular como 𝑥=(𝑋+𝑎/𝑥)/2
a) Escriba un seudocódigo bien estructurado para implementar este algoritmo como se ilustra en la fi gura P2.10. Utilice l
indentación apropiada para que la estructura sea clara. b) Desarrolle, depure y documente un programa para implementa
ecuación en cualquier lenguaje de algo nivel, o de macros, de su elección. Estructure su código de acuerdo con la fi gura P

solucion

función [root, err] = divideAndAverage (a, e)


Método% DIVIDE Y PROMEDIO para aproximar la raíz cuadrada de
% un número
% de entrada:
% a - número cuya raíz cuadrada estimamos
% e - tolerancia al error de aproximación
% de salida:
% root: la aproximación de sqrt (a) para la tolerancia dada
% e - el error de aproximación
bandera = 0; % si a <0, establecemos flag = 1 para que podamos agregar una unidad imaginaria al final
if a == 0
raíz = 0;
err = 0;
regreso
elseif a <0
bandera = 1;
a = -a;
final
err = Inf; % de inicialización para estimación de error
x_old = a; % de inicialización para aproximación de la raíz
while (1)
x_new = (x_old + a / x_old) / 2;
err = abs ((x_new-x_old) / x_new);
if err <e
rotura;
final
x_old = x_new;
final
root = x_new;
if bandera
raíz = raíz * sqrt (-1);
final
final
 
adrada de cualquier número

a en la fi gura P2.10. Utilice la


n programa para implementar esta
o de acuerdo con la fi gura P2.10.

maginaria al final
2.11 Se invierte cierta cantidad de dinero en una cuenta en la que el interés se capitaliza al final del periodo. Debe
determinarse el valor futuro, F, que se obtiene con cierta tasa de interés, i, después de n periodos, por medio de la
fórmula siguiente: 𝐹 = 𝑃 〖 (1 + 𝑖) 〗 ^𝑛
Escriba un programa que calcule el valor futuro de una inversión para cada año, desde 1 hasta n. La entrada para la
función debe incluir la inversión inicial, P, la tasa de interés, i (en forma decimal), y el número de años, n, para el que
ha de calcularse el valor futuro. La salida debe consistir en una tabla con encabezados y columnas para n y F. Corra el
programa para P = $100 000, i = 0.06, y n = 5 años
 

 
solucion

Sub problema11()
Dim valorfuturo As Double
Dim inversioninicial As Double
Dim tasainteres As Double
Dim years As Double
Dim contador As Integer
Dim exponente As Double
Dim texto As String

inversioninicial = 100000
tasainteres = 0.06
years = 5
contador = 0
exponente = 1
texto = " años | valor futuro" & vbCr

Do
exponente = (1 + tasainteres) * exponente
valorfuturo = inversioninicial * exponente

contador = contador + 1
texto = texto & " " & contador & " | " & valorfuturo & vbCr

If contador >= years Then Exit Do


Loop

valorfuturo = inversioninicial * exponente


MsgBox texto

End Sub
 
 
 
 
 
 
End Sub
 
 
 
 
 
 
nal del periodo. Debe
odos, por medio de la

a n. La entrada para la
de años, n, para el que
mnas para n y F. Corra el
2.12 Las fórmulas económicas están disponibles para calcular los pagos anuales de
préstamos. Suponga que obtiene en préstamo cierta cantidad de dinero P y acuerda
devolverla en n pagos anuales con una tasa de interés de i. La fórmula para calcular el
pago anual A es:
𝐴=𝑝 (𝑖 〖 (𝑖+1) 〗 ^𝑛)/( 〖 (𝑖+1) 〗 ^𝑛−1)
Escriba un programa para calcular A. Pruébelo con P = $55 000 y una tasa de interés de
6.6% (i = 0.066). Calcule los resultados para n = 1, 2, 3, 4 y 5, y muestre los resultados en
forma de tabla con encabezados y columnas para n y A.

PASO v(12) t (%)


2 49.96 -5.2
1 48.7 -2.6
0.5 48.09 -1.3

El error se reduce a la mitad cuando el paso se reduce a la mitad


e a la mitad
PROBLEMA 2.13

PARA EL INCISO a)

Sub temperatura()

Dim prom As Double


Dim pi As Double PARA EL INCISO b)
Dim ts As Integer
Dim te As Integer Sub temperatura()
Dim Tm As Double
Dim Tpf As Double Dim prom As Double
Dim w As Double Dim pi As Double
Dim TF As Double Dim ts As Integer
Dim tp As Integer Dim te As Integer
Dim T As Integer Dim Tm As Double
Dim Tpf As Double
tp = 205 Dim w As Double
pi = 4 * Atn(1) Dim TF As Double
w = 2 * pi / 365 Dim tp As Integer
Tm = 21.1 Dim T As Integer
Tpf = 28.3
ts = 0 tp = 205
te = 59 pi = 4 * Atn(1)
T = te - ts w = 2 * pi / 365
TF = 0 Tm = 10.7
n=0 Tpf = 22.9
ts = 180
For i = 0 To T te = 242
T = te - ts
TF = Tm + (Tpf - Tm) * Cos(w * (ts - tp)) TF = 0
ts = ts + 1 n=0
n = TF + n
For i = 1 To T
Next i
TF = Tm + (Tpf - Tm) * Cos(w * (ts - tp))
prom = n / T ts = ts + 1
n = TF + n

MsgBox "Temperatura diaria promedio es:" & prom Next i

End Sub prom = n / T

Resultado:
MsgBox "Temperatura diaria promedio es:" & pro
Temperatura promedio diaria es 14.50741983
End Sub

Resultado:

Temperatura promedio diaria es 22.277212


Cos(w * (ts - tp))

diaria promedio es:" & prom

ria es 22.277212
PROBLEMA 2.14
DATOS
Sub fisica()
Dim g As Double g 9.8 m/s^2
Dim c As Double m 68.1 kg
Dim m As Double
Dim step As Double c 12.5 kg/s
Dim vf As Double
Dim vo As Double
Dim t As Double
g = 9.8 tamaño de pa
vo = 0
t=0
tiempo(s)
m = InputBox("introduce la masa", "") 0
c = InputBox("introduce el coeficiente", "")
step = InputBox("introduce el tamaño de paso", "") 1
2
MsgBox "Cuando t(" & t & "), la velocidad es " & vo 3
For i = 0 To 30 Step step 4
5
vf = vo + (g - c / m * vo) * step 6
t = t + step
7
MsgBox "Cuando t(" & t & "), la velocidad es " & vf 8
9
vo = vf
10
Next i

End Sub

EL USO DE UN TAMAÑO DE PASO M


tamaño de paso 0.5

tiempo(s) velocidad(m/s)
0 0
0.5 4.9
1 9.350293685756
1.5 13.3921536632
2 17.06306467062
1 2.5 20.397071217
3 23.42509331529
velocidad(m/s) 3.5 26.17521323863
0 4 28.67293595902
9.8 4.5 30.94142568378
17.801174743025 5 33.00172068343
24.33370507654 5.5 34.87292840338
29.66716596557 6 36.57240266886
34.0216509205 6.5 38.11590462656
37.57685449603 7 39.51774891561
40.47948766489 7.5 40.79093642335
42.84933207295 8 41.947274857333
44.78418301404 8.5 42.99748825148
46.36388510397 9 43.951316422236
9.5 44.81760529685
10 45.60438895169

E UN TAMAÑO DE PASO MÁS PEQUEÑO PROPORCIONA UN VALOR DE VELOCIDAD MAS PRECISO


PROBLEMA 2.15
INGRESO DE DATOS
1
Sub metburbuja() 3
4
8
Dim join As Integer
Dim temporal As Double 10
20
join = 20 14
Dim numbers(20) As Integer
Dim numbers2(20) As Integer 15
31
42
53
MsgBox "Introduzca los numeros" 9
27
For i = 0 To join - 1
48
numbers(i) = InputBox("", "") 38
37
Next i 50
5
For j = 0 To join - 1
30
For k = 0 To join - 2 7
If numbers(k) > numbers(k + 1) Then

temporal = numbers(k)
numbers(k) = numbers(k + 1)
numbers(k + 1) = temporal

End If

Next k

Next j

For l = 0 To join - 1
MsgBox "" & numbers(l)

Next l

End Sub
SALIDA ORDENADA
1
3
4
5
7
8
9
10
14
15
20
27
30
31
37
38
42
48
50
53
*Problema 2.16
Function volument(d, r)
Pi = 3.14
If d <= r Then
volcono = ((Pi) * (r ^ 2) * d) / 3
vt = volcono
MsgBox "el volumen es:" & vt
ElseIf r < d & d <= 3 * r Then
hc = d - r
volcono = ((Pi) * (r ^ 2) * d) / 3
volcilindro = (Pi) * (r ^ 2) * hc
vt = volcono + volcilindro
MsgBox "el volumen es:" & vt

Else
MsgBox "error"
End If
End Function
*Problema 2.17
Function polares(x, y)
Pi = 3.14
teta = 0

If 0 < x & 0 < y Then


teta = Math.Atn(y / x)
MsgBox "el valor de teta:" & teta
ElseIf x < 0 & 0 < y Then
teta = Math.Atn(y / x) + Pi
MsgBox "el valor de teta:" & teta
ElseIf x < 0 & y < 0 Then
teta = Math.Atn(y / x) - Pi
MsgBox "el valor de teta:" & teta
ElseIf x < 0 & y = 0 Then
teta = Pi
MsgBox "el valor de teta:" & teta
ElseIf x = 0 & 0 < y Then
teta = Pi / 2
MsgBox "el valor de teta:" & teta
ElseIf x = 0 & y < 0 Then
teta = -Pi / 2
MsgBox "el valor de teta:" & teta
ElseIf x = 0 & y = 0 Then
teta = 0
MsgBox "el valor de teta:" & teta
End If

End Function
*Problema 2.18
Function nota(n)

If 90 <= n & n <= 100 Then


MsgBox "A"
ElseIf 80 <= n & n < 90 Then
MsgBox "B"
ElseIf 70 <= n & n < 80 Then
MsgBox "C"
ElseIf 60 <= n & n < 70 Then
MsgBox "D"
ElseIf n < 60 Then
MsgBox "f"
End If

End Function
*Problema 2.19
Function factorial(n)
fac = 1
For i = 1 To n
fac = fac * i
Next i
MsgBox "elvalor es" & fac

End Function
Function vector()
'problema 2.19
Dim v(1 To 5) As Integer
Dim i As Integer
v(1) = 5
v(2) = 42
v(3) = 36
v(4) = 2
v(5) = 8
menor = 0
For i = 0 To 4
If v(i) < v(i + 1) Then
menor = v(i)
Else
menor = v(i + 1)
Next i
MsgBox "el menor es:" & menor
End Function
Function promedio()
'problema 2.19
Dim v(1 To 5) As Integer
Dim i As Integer
v(1) = 5
v(2) = 42
v(3) = 36
v(4) = 2
v(5) = 8
suma = 0
For i = 0 To 4
If v(i) < v(i + 1) Then
suma = suma + v(i)
Next i
promedio = suma / 5
MsgBox "el promedio es:" & promedio

End Function

También podría gustarte