Está en la página 1de 17

Facultad de Ingeniería

Escuela de Ingeniería de Sistemas y Computación


Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

INFORME DE LABORATORIO 3
ESTRUCTURAS ITERATIVAS

Cristian Dihork Uparela 1941546-3747


Edgar Mauricio Moreno 1941251-3747
Juan Sebastián Salas 1941487-3747
David De la Rosa 1940779-3747

Docente
Jaime Andrés Pérez Hinestroza

Algoritmia y Programación
Grupo 03

Universidad del valle


2020
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

OBJETIVOS

1. Identificar diferentes estructuras de programación iterativas usadas en la


solución de problemas.
2. Formular la solución de un problema donde se repite la actividad un número
de veces fijo, utilizando la estructura iterativa for o while.
3. Aplicar el tipo de estructura iterativa más adecuada para solución de un
problema planteado.
4. Resolver problemas de repetición de tareas, usando variables
acumuladoras o contadoras.
5. Aplicar el concepto de ciclos anidados en la solución de problemas.
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Problema 1 [20pts]. Promedio de letras en los nombres


1. Análisis del problema
Para este problema debemos crear un programa que pida el nombre de 5
compañeros del usuario y sume el número total de letras que hay entre los 5
nombres y posteriormente lo divida entre 5 e imprima ese resultado (Realice el
promedio de las letras existentes en los nombres de 5 personas) con el siguiente
mensaje: “El promedio de letras de los nombres de sus compañeros es:
_________”
1.1. Entradas y salidas
Para este programa tendremos una sola entrada que será el nombre de los 5
compañeros del usuario, ya que es el único dato que se le pedirá al usuario que
ingrese.
 Nombre Variable tipo Cadena

Por otro lado la Salida para este programa será el promedio de las letras de los
nombres de los 5 compañeros del usuario.
 Promedio Variable tipo Real
1.2. Proceso
Luego de tener definidas nuestras entradas y salidas el proceso que se debe
realizar es el siguiente:
 Definir la función promedio nombres que calculará el promedio
 Declarar número de letras vacío al iniciar el programa para que guarde la
longitud de la cadena que se hará después.
 Declaramos nuestro primer ciclo definiendo el número de letras por medio
de los comandos len y for, len i for i in nombres, lo cual concatenará la
longitud de la cadena (nombres) y lo guardará en la variable número de
letras.
 Definimos el cálculo del promedio, que será la suma del número de letras
sobre len del número de letras.
 Le pedimos a la función que definimos como promedio nombres al inicio
que retorne el promedio.
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

 Para iniciar el segundo ciclo empezamos por declarar nombres vacío al


iniciar el programa para que guarde la instrucción que se dará a
continuación en el ciclo.
 Declaramos nuestro segundo ciclo for i in range (5) hacer, que nos repetirá
la siguiente instrucción 5 veces y nos ahorra el trabajo de tener que escribir
5 veces esta instrucción en el programa.
 Definimos nuestra variable Nombres como nombres + pedir el nombre al
usuario.
 Por ultimo nuestra variable Promedio igual a la función que definimos al
inicio del programa.
 Pedimos que muestre el promedio.

2. Algoritmo en pseudocódigo o programa en Python


Luego de tener definidas las variables de entrada y salida y el proceso de nuestro
programa procedemos a realizar el algoritmo en pseudocódigo de la siguiente
manera:
INICIO

Nombres (Cadena) Variables de entrada y salida


Promedio (Real)

Definir Promedio (nombres) hacer


Declaramos número _ letras como [ ] (para concatenar)
Definimos número _ letras como [len (i) for i in nombres (Primer ciclo guarda
datos en número _letras)
Definimos promedio como sum (número _ letras)/len (número _ letras) (cálculo del
promedio para la función)
Pedimos que retorne Promedio
Declaramos Nombre como [ ] (para concatenar)
Declaramos segundo ciclo como for i in range (5)
Pedir Nombre
Definimos promedio como promedio (nombres)
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Mostrar promedio
FIN

3. Prueba de escritorio

En esta prueba de escritorio se elabora una tabla en la cual tendremos todas las
variables que modifican nuestro programa para así poder identificar el buen
funcionamiento de nuestro programa o de lo contrario identificar algún error y
poder corregirlo antes de realizar la ejecución del mismo.
INSTRUCCIONES Contador Nombre Concatenar Longitud Promedio Mensaje
(i) nombre cadena

- - - - - - -
Pedir nombre y 0 Juan [Juan] - - -
concatenar
Pedir nombre y 1 Manuel [Juan, - - -
concatenar Manuel]
Pedir nombre y 2 Fredy [Juan, - - -
concatenar Manuel,
Fredy]
Pedir nombre y 3 Alexander [Juan, - - -
concatenar Manuel,
Fredy,
Alexander]
Pedir nombre y 4 Leonardo [Juan, - - -
concatenar Manuel,
Fredy,
Alexander,
Leonardo]
Longitud de cadena 4 Leonardo [Juan, [4,6,5,9,8] - -
Manuel,
Fredy,
Alexander,
Leonardo]
Calcular promedio 4 Leonardo [Juan, [4,6,5,9,8] 6.4 -
Manuel,
Fredy,
Alexander,
Leonardo]
Mensaje 4 Leonardo [Juan, [4,6,5,9,8] 6.4 El promedio
Manuel, de las letras
Fredy, de los
Alexander, nombres de
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Leonardo] sus
compañeros
es 6.4

4. Ejecución del programa

Por último, procedemos a codificar y ejecutar nuestro programa en Collaboratory


teniendo en cuenta todos los pasos definidos anteriormente, la codificación del
programa queda definida de la siguiente manera:
Para iniciar nuestro programa definimos la función Promedio (Nombres) que
como su nombre nos indica calculará el promedio de las letras de los nombres que
se ingresarán al programa por el usuario, luego definimos número _ letras como [
] lo cual nos indica que cuando definamos esta variable los datos que se ingresen
serán concatenados, después definimos número _ letras con len i for i in
nombres, cabe aclarar que el comando len lo que hará será ayudarnos a saber la
longitud de la cadena (nombres que se vayan ingresando), procedemos a definir la
variable promedio para nuestra función como sum(número _ letras) / len
(número _ letras) esta es la fórmula que ejecutará el programa para saber el
promedio, por ultimo le pedimos que cuando realice dicho calculo nos retorné la
variable promedio.
Luego de establecer todo esto, tenemos finalizado nuestro primer ciclo que al
codificarlo se ve de la siguiente manera:

Para iniciar nuestro segundo código empezamos por definir la variable Nombres
como [ ] lo cual nos indica que cuando definamos esta variable los datos que se
ingresen serán concatenados, posteriormente, definimos for i in range (5) hacer
lo cual nos indica que la indicación siguiente deberá repetirse 5 veces, y esa
instrucción será pedir nombre, es decir, se pedirá el nombre cinco veces, por
ultimo definimos promedio = promedio(nombres) para que promedio quede
definido como la función que hicimos en el primer ciclo y le pedimos al programa
que muestre el promedio de las letras en los nombres de las cinco personas. Al
codificar esta información nuestro segundo ciclo queda así:
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Al unir los dos ciclos y crear un solo ciclo anidado y ejecutarlo podemos ver la
siguiente información:
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Problema 3 [40pts]. Series de Maclaurin


1. Análisis del problema
Para este problema debemos crear un programa que nos dé una aproximación del
coseno de un valor que debe ser ingresado al programa por el usuario teniendo en
cuenta las series de Maclaurin que nos ayudan a hallar esa aproximación al
coseno por medio de una ecuación de polinomios teniendo en cuenta cierto
número de iteraciones y el número que deben ser ingresados al programa por el
usuario.

1.1. Entradas y salidas


Para este programa nuestros datos de entradas serán:
 Número de iteraciones (n) Variable tipo Entero.
 Número al que se le hallará la aprox del coseno (x) Variable tipo Real.
Por otro lado, nuestros datos de salida serán:
 Aproximación valor del coseno. Variable tipo Real.

1.2. Proceso
 Pedir número de iteraciones (n)
 Pedir X (Número al que se hallará coseno)
 Definir exponente=0 para inicializar el ciclo.
 Definir resultado=0 para inicializar el ciclo.
 Declarar el primer ciclo como i in range (0, n*2,2) hacer, que nos indica que
el número de iteraciones lo multiplicará por dos y hará saltos de 2 en 2, esto
se hace así porque así es la fórmula de la aproximación del coseno.
 Luego de tener el rango se le suma 1 al resultado antes definido. (resultado
+=1)
 Definimos el factorial como No.
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

 Para el siguiente ciclo definimos el ciclo for h in range (i +1) hacer, h es una
nueva variable, no usamos i porque para poder definir el range nuevo
debemos sumar i +1, por cual llamamos h.
 Definimos condicionales para este nuevo ciclo, si h es igual a 0 entonces
factorial es igual a 1
 De lo contario factorial es igual a factorial*=h.
 También debemos considerar que si resultado es módulo de 2 entonces
Exponente-=(x**1)/factorial.
De lo contrario, exponente+=(x**1)/factorial.
 Mostrar iteraciones
 Mostrar valor del coseno.

2. Algoritmo en pseudocódigo o programa en Python


Luego de tener definidas las variables de entrada y salida y el proceso de nuestro
programa procedemos a realizar el algoritmo en pseudocódigo de la siguiente
manera:
INICIO
Número de iteraciones (n) (Entrada tipo Entero) Variables de entrada y salida
Valor a calcular coseno (x) (Entrada tipo Real)
Valor del coseno (Salida tipo Real)

Pedir número de iteraciones


Pedir valor de x
Definir exponente=0
Definir resultado=0
Inicializar ciclo i in range (0,2*n, 2) hacer
Resultado +=1
Definir factorial=NONE
Inicializar segundo ciclo for h in range (i+1) hacer
Si h es igual a cero entonces Factorial es igual a 1
De lo contrario, factorial es igual a factorial*=h
Si el resultado es módulo de 2 entonces exponente-=(x**1)/factorial
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

De lo contrario exponente+=(x**1)/factorial
Mostrar iteraciones
Mostrar valor coseno
FIN
3. Prueba de escritorio
Instrucciones N X Exponent Resultad i Factorial h H=0 %Resultado=0 Mensaje
e o ? ?
Pedir N 5 - - - - - - - - -
Pedir N 5 2 - - - - - - - -
Iniciar 5 2 0 - - - - - - -
exponente
Iniciar 5 2 0 0 - - - - - -
resultado
Iniciar 5 2 0 0 0 - - - - -
contador
Iniciar factorial 5 2 0 1 0 0 - - - -
Iniciar h 5 2 0 1 0 0 0 - - -
H=0? 5 2 0 1 0 0 0 True - -
Entonces 5 2 0 1 0 1 0 True - -
valor factorial
es
%resultado=0? 5 2 0 1 0 1 0 True False -
Entonces 5 2 0 1 0 1 0 True False -
sumar o restar
exponente
Mensaje 5 2 0 1 0 1 0 True False Iteración
1=1
Iteración 1

Iteración 2
Instrucciones N X Exponent Resultad i Factorial h H=0 %Resultado=0 Mensaje
e o ? ?
Pedir N 5 - - - - - - - - -
Pedir N 5 2 - - - - - - - -
Iniciar 5 2 1 - - - - - - -
exponente
Iniciar 5 2 1 2 - - - - - -
resultado
Iniciar 5 2 1 2 2 - - - - -
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

contador
Iniciar factorial 5 2 1 2 2 0 - - - -
Iniciar h 5 2 1 2 2 0 0 - - -
H=0? 5 2 1 2 2 0 0 True - -
Entonces 5 2 1 2 2 1 0 - -
valor factorial
es
5 2 1 2 2 1 1 False - -
5 2 1 2 2 1 2 - -
5 2 1 2 2 1 2 False - -
5 2 1 2 2 2 2 - -
%resultado=0? 5 2 1 2 2 2 2 True True -
Entonces 5 2 -1 2 2 2 2 -
sumar o restar
exponente
Mensaje 5 2 -1 2 2 2 2 Iteración
2=-1

Iteración 3
Instrucciones N X Exponent Resultado i Factorial h H=0 %Resultado=0? Mensaje
e ?
Pedir N 5 - - - - - - - - -
Pedir N 5 2 - - - - - - - -
Iniciar 5 2 -1 - - - - - - -
exponente
Iniciar 5 2 -1 3 - - - - - -
resultado
Iniciar 5 2 -1 3 4 - - - - -
contador
Iniciar factorial 5 2 -1 3 4 0 - - - -
Iniciar h 5 2 -1 3 4 0 0 - - -
H=0? 5 2 -1 3 4 0 0 True - -
Entonces 5 2 -1 3 4 1 0 - -
valor factorial
es
5 2 -1 3 4 1 1 False - -
5 2 -1 3 4 1 2 - -
5 2 -1 3 4 1 2 False - -
5 2 -1 3 4 2 2 - -
5 2 -1 3 4 2 3 - -
5 2 -1 3 4 2 3 False - -
5 2 -1 3 4 6 3 -
5 2 -1 3 4 6 4
5 2 -1 3 4 6 4 False - -
5 2 -1 3 4 24 4 - - -
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

%resultado=0 5 2 -1 3 4 24 4 False False -


?
Entonces 5 2 -1 3 4 24 4 -
sumar o restar
exponente
Mensaje 5 2 -1 3 4 24 4 Iteración
3=-0.33

Iteración 4

Instrucciones N X Exponente Resultado i Factorial h H=0? %Resultado=0? Mensaje


Pedir N 5 - - - - - - - - -
Pedir N 5 2 - - - - - - - -
Iniciar 5 2 -0.33 - - - - - - -
exponente
Iniciar 5 2 -0.33 4 - - - - - -
resultado
Iniciar 5 2 -0.33 4 6 - - - - -
contador
Iniciar factorial 5 2 -0.33 4 6 0 - - - -
Iniciar h 5 2 -0.33 4 6 0 0 - - -
H=0? 5 2 -0.33 4 6 0 0 True - -
Entonces valor 5 2 -0.33 4 6 1 0 - -
factorial es
5 2 -0.33 4 6 1 1 False - -
5 2 -0.33 4 6 1 1 - -
5 2 -0.33 4 6 1 2 - -
5 2 -0.33 4 6 1 2 False - -
5 2 -0.33 4 6 2 2 - -
5 2 -0.33 4 6 2 3 - -
5 2 -0.33 4 6 2 3 False -
5 2 -0.33 4 6 6 3
5 2 -0.33 4 6 6 4 - -
5 2 -0.33 4 6 6 4 False - -
5 2 -0.33 4 6 24 4 -
5 2 -0.33 4 6 24 5 -
5 2 -0.33 4 6 24 5 False -
5 2 -0.33 4 6 120 5 -
5 2 -0.33 4 6 120 6 -
5 2 -0.33 4 6 120 6 False -
5 2 -0.33 4 6 720 6 -
5 2 -0.33 4 6 720 6 -
%resultado=0? 5 2 -0.33 4 6 720 6 True
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Entonces 5 2 -0.33 4 6 720 6 True -


sumar o restar
exponente
Mensaje 5 2 -0.33 4 6 720 6 Iteración 4=-
0.4222

Iteración 5
Instrucciones N X Exponent Resultad i Factoria h H=0 %Resultado=0 Mensaj Mensaje
e o l ? ? e final
Pedir N 5 - - - - - - - - - -
Pedir N 5 2 - - - - - - - - --
Iniciar 5 2 -0.422 - - - - - - - -
exponente
Iniciar 5 2 -0.422 5 - - - - - - -
resultado
Iniciar 5 2 -0.422 5 8 - - - - - -
contador
Iniciar 5 2 -0.422 5 8 0 - - - - -
factorial
Iniciar h 5 2 -0.422 5 8 0 0 - - - -
H=0? 5 2 -0.422 5 8 0 0 True - - -
Entonces 5 2 -0.422 5 8 1 0 - - -
valor factorial
es
5 2 -0.422 5 8 1 1 Fals - - -
e
5 2 -0.422 5 8 1 1 - - -
5 2 -0.422 5 8 1 2 - - -
5 2 -0.422 5 8 1 2 Fals - - -
e
5 2 -0.422 5 8 2 2 - - -
5 2 -0.422 5 8 2 3 - - -
5 2 -0.422 5 8 2 3 Fals - -
e
5 2 -0.422 5 8 6 3 -
5 2 -0.422 5 8 6 4 - - -
5 2 -0.422 5 8 6 4 Fals - - -
e
5 2 -0.422 5 8 24 4 - -
5 2 -0.422 5 8 24 5 - ---
5 2 -0.422 5 8 24 5 Fals - -
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

e
5 2 -0.422 5 8 120 5 - --
5 2 -0.422 5 8 120 6 - -
5 2 -0.422 5 8 120 6 Fals - -
e
5 2 -0.422 5 8 720 6 - -
5 2 -0.422 5 8 720 7 - -
5 2 -0.422 5 8 720 7 Fals -
e
5 2 -0.422 5 8 5040 7 -
5 2 -0.422 5 8 5040 8 -
5 2 -0.422 5 8 5040 8 Fals -
e
5 2 -0.422 5 8 40320 8 -
%resultado=0 5 2 -0.422 5 8 40320 8 False -
?
Entonces 5 2 -0.422 5 8 40320 8 false - -
sumar o restar
exponente
Mensaje 5 2 -0.422 5 8 40320 8 False Iteración -
5=-
0.415
Mensaje 5 2 -0.422 5 8 40320 8 Cos(x)=
0.41587
3

4. Ejecución del programa


Para iniciar nuestro programa le pedimos al usuario que ingrese los datos de
entrada que corresponden al valor de x que es el número al cuál le hallaremos el
coseno y el número de iteraciones, esto lo hacemos por medio del comando input,
luego de que se le pida al usuario estos datos definimos resultado y exponente
como cero, esto lo hacemos para inicializar el ciclo y nos sirve para que cuando el
programa inicie a ejecutarse si hay alguna suma o resta pueda concatenarse en
estas variables que están en cero (esto va a pasar).
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Procedemos a inicializar nuestro primer ciclo, haciendo uso de los comandos for
y range de la siguiente, for i in range (0,2*n, 2) lo que esto nos indica es que el
range estará entre cero y n*2 dando saltos de dos en dos, cabe aclarar que se
multiplica n*2 por que en la fórmula de series Maclaurin los exponentes van de dos
en 2 al igual que los denominadores de los polinomios, y lo que debe hacer este
ciclo es que para cada i de dicho rango debe sumarle 1 al resultado que habíamos
inicializado en cero (Resultado+=1).

Ahora inicializamos nuestros segundo ciclo que nos determinará el factorial, para
ello empezamos por definir factorial como none ya que así le damos un valor a
esta variable sin necesidad de darle un número, seguido a eso declaramos el ciclo
como for h in range (i + 1) la h funciona igual que la i en el primer ciclo, solo que
ahora se define como h porque necesitamos el valor de la i calculado en el ciclo
anterior para hallar el range del nuevo ciclo, es decir, en caso de usar otra vez la i
en este ciclo en lugar de cualquier otra letra se presentaría un error.
Luego de tener definido nuestro ciclo de esta manera debemos asignarle algunas
condiciones, para ello hacemos uso de los condicionales if y else de la siguiente
manera, si h es igual a cero entonces el factorial será de lo contrario el programa
deberá multiplicar el valor del h por factorial, del mismo modo, si el resultado es
módulo de 2 entonces se debe realizar la siguiente operación exponente-=
(x**i)/factorial de lo contrario la operación que deberá realizar es la siguiente
exponente-= (x**i)/factorial, por ultimo le pedimos al programa que imprima las
iteraciones y el valor aproximado del coseno.
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

Nuestro segundo ciclo se verá así:

Por último todo nuestro código se verá de la siguiente manera al ejecutarlo:

Y al ejecutarlo, obtenemos el siguiente resultado:


Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Algoritmia y Programación Grupo 03 Laboratorio 3
Docente Jaime Andrés Pérez Hinestroza
Cristian Uparela, Sebastián Salas, Mauricio Moreno y David De la Rosa

También podría gustarte