Está en la página 1de 27

DESARROLLO DE SOFTWARE Ing.

Jaime Farfán
PROGRAMA DE FORMACIÓN REGULAR jfarfan@tecsup.edu.pe
Laboratorio de Algoritmos y Estructuras de Datos Página 1 de 26

Alumno Nota
Lloja Lucero Deysi Rubí
Grupo C24 - B
Ciclo III
Fecha de entrega 23 / 08 / 2022

I.- OBJETIVOS:
• Definir las reglas básicas a seguir para la construcción y la correcta interpretación de los Diagramas de
Flujo, resaltando las situaciones en que pueden, o deben, ser utilizados.
• Elaborar y Diseñar algoritmos con arreglos de una sola dimensión(unidimensional) denominada vectores

II.- SEGURIDAD:
Advertencia:
En este laboratorio está prohibida la manipulación del
hardware, conexiones eléctricas o de red; así como la
ingestión de alimentos o bebidas.

III.- FUNDAMENTO TEÓRICO:


• Revisar el texto guía que está en el campus Virtual.

IV.- NORMAS EMPLEADAS:


• No aplica

V.- RECURSOS:
• En este laboratorio cada alumno trabajará con un equipo con Windows 10.

VI.- METODOLOGÍA PARA EL DESARROLLO DE LA TAREA:


• El desarrollo del laboratorio es individual.

VII.- PROCEDIMIENTO:

EJERCICIO DE APLICACIÓN
Guía de problemas

PARTE I

Loops : 1, 10, 100, 1000, 10000 , 100000

Se muestra un ejemplo referencial


Laboratorio de Algoritmos y Estructuras de Datos Página 2 de 26

from timeit import default_timer as timer

n=10 #0000

start=timer()
for i in range(0,n):
print("I = {}".format(i))
end=timer()
delay=end-start
print("> Time {}".format(delay))

CÒDIGO: INTERACCIÒN N=1

CÒDIGO: INTERACCIÒN N=10


Laboratorio de Algoritmos y Estructuras de Datos Página 3 de 26

CÒDIGO: INTERACCIÒN N=100

CÒDIGO: INTERACCIÒN N=1000


Laboratorio de Algoritmos y Estructuras de Datos Página 4 de 26

CÒDIGO: INTERACCIÒN N=10000

CÒDIGO: INTERACCIÒN N=100000


Laboratorio de Algoritmos y Estructuras de Datos Página 5 de 26

Mostrar en un gráfico las iteraciones vs el tiempo

GRÀFICA:

ANALISÌS:

En la siguiente sentencia se puede observar que el tiempo de ejecución de un


bucle es, como máximo, el tiempo de ejecución de las declaraciones dentro del
bucle (incluidas las pruebas) multiplicado por el número de interacciones, en este
caso se puede observar que el tiempo transcurrido con respecto a cada uno de
las interacciones ha ido aumentando ya que si bien es cierto para calcular el
tiempo se debe de haber importado desde el timeit el defaul_timer como
temporizador, que se encargara de medir o calcular el tiempo que se demora en
ejecutar la operación por cada una de las interacciones. Tomando en cuenta la
información retenida en la gráfica de interacción versus el tiempo se puede ver
que en la interacción 1 el tiempo transcurrido fue de 0.00012 que a diferencia de
la última interacción de 100000 el tiempo que se demoro en ejecutar la dicha
operación fue de 34.80225 segundos.

Nested Loops : 1, 10, 100, 400, 600, 800, 1000, 1100


Laboratorio de Algoritmos y Estructuras de Datos Página 6 de 26

CÒDIGO: INTERACCIÒN N=1

CÒDIGO: INTERACCIÒN N=10


Laboratorio de Algoritmos y Estructuras de Datos Página 7 de 26

CÒDIGO: INTERACCIÒN N=100

CÒDIGO: INTERACCIÒN N=400


Laboratorio de Algoritmos y Estructuras de Datos Página 8 de 26

CÒDIGO: INTERACCIÒN N=600

CÒDIGO: INTERACCIÒN N=800


Laboratorio de Algoritmos y Estructuras de Datos Página 9 de 26

CÒDIGO: INTERACCIÒN N=1000

CÒDIGO: INTERACCIÒN N=1879


Laboratorio de Algoritmos y Estructuras de Datos Página 10 de 26

Mostrar en un gráfico las iteraciones vs el tiempo

GRÀFICA:

ANALISIS:

En nuestro 2do ejercicio nos dice que se trabajaran con bucles anidados, este se
conoce que es un bucle que se encuentra incluido en el bloque de sentencias de
otro bloque. Entonces vamos a analizar de adentro hacia afuera y el tiempo total
de ejecución es el producto de los tamaños de todos los bucles. Para empezar al
igual como el anterior se ha importado el temporizador que se encargara de
calcular la operación, a diferencia del anterior en este caso se trabajaran con
bucles anidados, como se puede notar se ha trabajado bajo varias interacciones
cada uno con su respectiva interacción.

Consecutive statements : : 1, 10, 100, 400, 600, 800, 1000, 1100

n = 10
# Execute n times
for i in range(0,n):
print("i={}".format(i))
# Outer loop executed n times
for i in range(0,n):
for j in range(0,n):
print("i = {} and j = {} ".format(i,j))
Laboratorio de Algoritmos y Estructuras de Datos Página 11 de 26

CÒDIGO: INTERACCIÒN N=1

CÒDIGO: INTERACCIÒN N=10


Laboratorio de Algoritmos y Estructuras de Datos Página 12 de 26

CÒDIGO: INTERACCIÒN N=100

CÒDIGO: INTERACCIÒN N=400


Laboratorio de Algoritmos y Estructuras de Datos Página 13 de 26

CÒDIGO: INTERACCIÒN N=600

CÒDIGO: INTERACCIÒN N=800


Laboratorio de Algoritmos y Estructuras de Datos Página 14 de 26

CÒDIGO: INTERACCIÒN N=1000

CÒDIGO: INTERACCIÒN N=253


Laboratorio de Algoritmos y Estructuras de Datos Página 15 de 26

Mostrar en un gráfico las iteraciones vs el tiempo

GRÀFICA:

ANALISIS:

Como se puede apreciar en la gráfica y las capturas del código adjuntado nuestra
variable num cambiara de números, estos serán las interacciones establecidas,
sin embargo se ha trabajado con una complejidad mucho más, ya que como se
observa en el código se ha utilizado 3 bucles o for, uno esta de manera anidada
es decir dentro de la otra , en este caso se puedo observar que después de que
se haya ejecutado la primera sentencia establecida en el for, de mostrarnos los
números en orden se volverán a ejecutar un i dentro de un j, en este se estableció
que el i ira avanzando de 1 en uno por cada 10 de j, como se puede observar el
799 en caso de la interacción 800, el 799 se repite 10 veces hasta que llega a los
800 para realizar el calculo del tiempo, esa fue la mayor razón por o que los
tiempos transcurridos por cada interacción varían demasiado.
If-then-else : 1, 10, 100, 1000, 10000 , 100000
Laboratorio de Algoritmos y Estructuras de Datos Página 16 de 26

CÒDIGO: INTERACCIÒN N=1

CÒDIGO: INTERACCIÒN N=10


Laboratorio de Algoritmos y Estructuras de Datos Página 17 de 26

CÒDIGO: INTERACCIÒN N=100

CÒDIGO: INTERACCIÒN N=1000


Laboratorio de Algoritmos y Estructuras de Datos Página 18 de 26

CÒDIGO: INTERACCIÒN N=10000

CÒDIGO: INTERACCIÒN N=100000


Laboratorio de Algoritmos y Estructuras de Datos Página 19 de 26

CÒDIGO: INTERACCIÒN N=1000000

Mostrar en un gráfico las iteraciones vs el tiempo

GRÀFICA:

ANALISIS:

En este último ejercicio de la parte 1, se puede notar que se han declarado una condición
en caso de que el número que ingrese sea igual a 1 este muestre un mensaje que el valor
es incorrecto y de por terminada la ejecución sin embargo el temporalizador default_ timer
se encarga de calcular su tiempo de ejecución, caso contrario ejecute la operación de
manera normal y que a lado del número muestre que los valores son correctos, como se
puede notar en las capturas, solo en la parte de la interacción 1, el valor fue incorrecto,
en las demás el valor fue correcto y con respecto a la gráfica se puede observar que en
las primeras interacciones los tiempos no varían mucho con respecto a la última
interacción donde nuestra variable tuvo un valor de 1000000 que el tiempo transcurrido
en ejecutarse fue de 469.7551 segundos marcando la diferencia.
Laboratorio de Algoritmos y Estructuras de Datos Página 20 de 26

PARTE II

1. ¿Cuál es el tiempo de ejecución de la función?. Graficar la función cambianod valores para n = 1, 10, 100,
1000, 10000

Código Ejecución
Interacción 1:

Interacción 10:

Interacción 100:

Para analizar Interacción 1000:

En este ejercicio se puede observar


que cuando lo ponemos un valor
cualquiera a nuestra variable N,
estos valores serán igualados a 1 ya
que como se observa las variables I
y S están igualados a 1. En este
ejercicio se ha definido una función
a N, además se ha establecido una
condición que la variable S sea
menor que la variable N,
posteriormente en caso de que i sea
igual a uno debemos de sumarlo con
el 1, ahora i seria 2, y este i será
sumado con el valor de S valiendo 3.
Laboratorio de Algoritmos y Estructuras de Datos Página 21 de 26

Tal como se observa en las capturas Interacción 10000:


el tiempo recorrido durante la
intersección 1 fue de 0.0000007
segundos, a diferencia de este la
intersección 10 duro 0.000374
segundos, la intersección 100 duro
0.000848, la intersección 1000 duro
0.006682 y la 10000 0.045582
segundos, entonces se concluye
que mientras las variables crecen el
tiempo transcurrido por cada
intersección cambia de manera
decreciente.

GRÀFICO DE INTERACCIONES:

ANALISIS:

El gràfico nos muestra la relaciòn que existe entre la intersecciòn dada por la variable N
frente al tiempo medido en segundos, como se puede apreciar este tiene forma como una
parabola concaba hacia arriba. Y el tiempo de ejecuciòn en las primeras interacciomes de
1,10,100 se mantenieron casi contantes, a diferencia de la interacciòn de 1000 y 10000
que estas si subieron en su totalidad.
Laboratorio de Algoritmos y Estructuras de Datos Página 22 de 26

2. ¿Cuál es el tiempo de ejecución de la función?. Graficar la función cambianod valores para n= 1, 10, 100,
1000

Código Ejecución
Interacción 1:

Interacción 10:

Interacción 100:

Para analizar Interacción 1000:


En caso de este ejercicio en la primera línea
se ha importado la consola timeit, este se
encarga de medir el tiempo de ejecución de
pequeños fragmentos de código,
posteriormente vamos a definir el valor n, para
luego agregar un contador con valor
inicializado en 0, se ha decidido colocar un For
para un bucle de i in con un rango de n//2,n si
se cumple tal función pasara a la siguiente
línea, para ser igualado con j a 1 con su valor Interacción 10000:
inicial, el 2do while se declara bajo la
condición de que el valor j + el valor de n/2, se
igualara con K. como se puede observar en
las capturas adjuntadas el procedimiento se
ha realizado de manera correcta ya que el
código se ejecuta para las diferentes
interacciones.
Laboratorio de Algoritmos y Estructuras de Datos Página 23 de 26

GRÀFICO DE INTERACCIONES:

ANALISIS:
Como se puede apreciar en nuestra gráfica de interacciones se puede observar
que en la interacción 1 el resultado obtenido es 0 y su tiempo transcurrido es de
0.00012 segundos, en la interacción 10 el resultado obtenido es 100 en esta
interacción y el tiempo transcurrido es de 0.00014, el cual se nota que no hubo
una gran diferencia frente al tiempo calculado en la primera interacción, la
interacción 100 el resultado es 1750, notamos que para calcular este resultado
nuestro servidor se demoro 0.00164 segundos, en la interacción 1000 se demoró
//0.19391 segundos.

3. ¿Cuál es el tiempo de ejecución de la función?. Graficar la función cambianod valores para n = 1, 10,
100,1000

Código Ejecución
Interacción 1:

Interacción 10:
Laboratorio de Algoritmos y Estructuras de Datos Página 24 de 26

Interacción 100:

Para analizar

En este ultimo ejercicio se ha empezado


declarando un contador que servirá de
Interacción 1000:
contador cada vez que se iniciara con un 0, se
ha designado un For para establecer una
condición de que la variable i tenga un rango
de valor 2 y si se cumple ejecute las líneas de
código siguiente, en este se iguala al valor de
1, después le daríamos una condición de n/2y
tiene que ser para todos los valores que sean
menores que nuestra variable n, para que se
cumpla y se active el break, este break fue
usado con la finalidad de pausar por si no se
llega a cumplir la parte de la condición
establecida en el while, pero caso contrario
pasa a la siguiente línea donde el valor j será
igualado con el valor j*2 y para luego
imprimirse en la consola del contador, como se Interacción 10000:
puede observar el código imprimido en la línea
18, este nos permitirá conocer el tiempo que
se demora en realizar dicha operación.

Al parecer en cada una de nuestras


interacciones no ubo necesario realizar
algunas pausas como establece el ejercicio de
este código ya que como se puede observar
en cada una de la capturas e interacciones no
ubo pausas si no que se ha imprimido el
tiempo transcurrido en cada operación.
Laboratorio de Algoritmos y Estructuras de Datos Página 25 de 26

GRÀFICO DE INTERACCIONES:

ANALISIS:

Como se puede apreciar en la gráfica de cada interacción con su respectivo tiempo, se


observa que en la interacción 1 el tiempo transcurrido es de 0.0001 segundos, en la
interacción 10 es de 0.00044 segundos, en la interacción 100 el tiempo transcurrido fue
de 0.01123 segundo, cuando nuestra variable tuvo valor como 1000 el tiempo que se
demoro fue de 0.32091 segundos y cuando la interacción fue de 10000 el tiempo
transcurrido fue de 2.26818 segundos. Entonces podemos notar que mientras más
bucles For tenga un algoritmo, la cantidad de tiempo que requería crecerá de forma
exponencial
Laboratorio de Algoritmos y Estructuras de Datos Página 26 de 26

CONCLUSIONES:
1. De acuerdo con los objetivos planteados, podemos sostener que se ha logrado definir las
reglas básicas a seguir o que se necesitaran para la construcción correcta de los diagramas de
flujos, en este caso se ha podido notar que el análisis de algoritmos nos hace ver cuál de todos
ellos nos da una mayor rapidez de reacción o ejecución, verificando cual requiere menos tiempo
para terminar su proceso, es decir este nos permitirá identificar que algoritmo o que sentencia
nos conviene ya que durante el desarrollo de cada ejercicio se ha podido observar que existen
múltiples formas de llegar a calcular el resultado de cada una de las sentencias, a esto se a
sumado la gráfica de interacciones frente al tiempo, que es una muestra de los resultados
obtenidos, con respecto a los diagramas de flujos estos nos permitieron analizar y hacer una
pequeña ejemplificación de cómo será la secuencia de ejecución o que pasos debemos de
seguir para llegar a medir el tiempo, donde comprendimos la importancia de definir nuestra
variable, importar las librerías o consolas que se utilizaran como el temporizador.

2. En síntesis, es importante destacar que el tiempo de ejecución varía según el orden del
código, de lo cual estaríamos optimizando el código. Por ende, elaborar o diseñar algoritmos
con arreglos de una sola dimensión es decir vectores unidimensionales, si bien es cierto los
arreglos unidimensionales es un tipo de dato que permite almacenar un conjunto de datos
homogéneos, es decir, del mismo tipo de dato. Para esto se tiene que haber importado el
temporizador que se encargara de calcular el tiempo que se demoró en ejecutarse, después de
ello debemos de definir nuestra variable, el timer es una subclase que se inicia cuando
llamamos a la función start () correspondiente al temporizador, en muchos de los ejercicios se
han usado condicionales y estructuras repetitivas como el rango que nos establece por cada
for anidado se realizaran n **2 veces.

3. Tras el desarrollo del siguiente laboratorio se ha visto que se ha logrado trabajar con vectores
mediante funciones y se ha calculado el tiempo que se demora por cada tipo de ejercicio e
interacción, como se puede verificar en cada captura, los tiempos transcurridos no son los
mismos ya que en cada ejercicio se ha ido complejizando la sentencia, se ha podido probar con
bucles anidados es decir cuando nuestra variable n se exponía a 4 o hasta 6 respectivamente,
sin embargo el desarrollo de estas sentencias fue un poco complicadas ya que si bien es cierto
se ha tenido que identificar la sintaxis, que a pesar de que las consultas sean diferentes esto
no cambia. Para culminar es importante conocer un poco más de vectores y arreglos ya que si
bien es cierto estas son muy fundamentales.

También podría gustarte