0% encontró este documento útil (0 votos)
59 vistas5 páginas

Optimización de Memoria en C++ para Simulación de Carrera

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
59 vistas5 páginas

Optimización de Memoria en C++ para Simulación de Carrera

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD DE INGENIERÍA Y TECNOLOGÍA

PROYECTO 1 - TEORÍA
CARRERA DE AUTOS

Curso:

Programación II - Teoría 1

Profesor:

Fiestas Iquira, Jose Antonio

Integrantes:

Quispe Ipurre, Miluzka Xiomara - Sección 1.04


Rodriguez Huayta, Diego Alessandro - Seccion 1.02
Ricse Roca, Irene Fernanda - Sección 1.05

2024 - I
INFORME DE PROYECTO
Pregunta 1: Presente el diagrama de flujo correspondiente al algoritmo
empleado.
Pregunta 2: Señale de qué forma, utilizando C++, pudo optimizar el uso de
memoria en el ejercicio desarrollado. Y qué buenas prácticas de programación ha
utilizado en el ejercicio.

De acuerdo a nuestro código, optimizamos el uso de memoria haciendo:

1. Uso de vectores:
En lugar de utilizar arrays estáticos, se ha optado por utilizar vectores de la
biblioteca <vector>. Los vectores son estructuras de datos dinámicas que pueden
crecer o reducir su tamaño según sea necesario, lo que evita tener que definir un
tamaño fijo de antemano.

2. Inicialización de vectores:
Cuando inicializamos los vectores nombres y pasos, hemos utilizado la sintaxis
vector<tipo>(tamaño, valor_inicial). Esto permite inicializar los vectores con un
tamaño específico y un valor inicial para cada elemento, en lugar de tener que
agregar elementos uno por uno.

3. Uso de referencias en la función simular_carrera:


En la función simular_carrera, se ha pasado los vectores nombres y pasos por
referencia (vector<string> &nombres, vector<int> &pasos). Esto evita la creación
de copias de los vectores, lo que reduciría el uso de memoria.

4. Uso de static_cast en la generación de números aleatorios:


En la función avanzar_auto, se ha utilizado static_cast<double>(rand()) /
RAND_MAX para generar un número aleatorio entre 0 y 1. Esto es más eficiente
que generar un número aleatorio y luego dividirlo manualmente.

Las buenas prácticas de programación utilizadas son:

Uso de using namespace std: Permite utilizar los elementos de la biblioteca


estándar de C++ sin necesidad de escribir std:: antes de cada uno.

Inicialización de números aleatorios: En el main, se inicializa el generador de


números aleatorios utilizando srand y time(NULL), lo que asegura que cada
ejecución del programa genere números diferentes.

Uso de vector: Utilizar vector en lugar de arreglos estáticos permite un manejo


más flexible de los datos, ya que el tamaño del vector puede cambiar
dinámicamente según las necesidades del programa.
Inicialización de vectores: Los vectores distancias y pasos se inicializan con
valores predeterminados (0) utilizando constructores de vector, lo que evita tener
que inicializar manualmente cada elemento.

Uso de bool para controlar el bucle: En la función simular_carrera, se utiliza


una variable booleana carrera_terminada para controlar el bucle principal, lo que
hace que el código sea más legible y fácil de entender.

Uso de static_cast: En la función avanzar_auto, se utiliza static_cast para


convertir el resultado de rand() a double, lo que evita advertencias de conversión
de tipos.

Uso de do-while: En la función ordenar_resultados, se utiliza un bucle do-while


para asegurar que el algoritmo de ordenamiento se ejecute al menos una vez,
incluso si la condición inicial es falsa.

Intercambio de elementos: En la función ordenar_resultados, se utiliza una


variable temporal para intercambiar los elementos de los vectores nombres y
pasos, lo que evita tener que crear vectores temporales adicionales.

Mostrar resultados: En el main, se muestran los tres primeros puestos de la


carrera, lo que proporciona una salida clara y concisa del programa.

En conclusión, las optimizaciones realizadas en el código nos han permitido


reducir el uso de memoria en el programa, lo cual es importante cuando se
trabaja con grandes cantidades de datos o en sistemas con recursos limitados. Al
igual que las buenas prácticas de programación que contribuyen a la legibilidad,
mantenibilidad y eficiencia del código.

Pregunta 3: Señale una mejora a la solución del problema que podría optimizar
el código presentado.

Para mejorar la eficiencia de la simulación de la carrera, podemos reducir el


número de iteraciones innecesarias en el bucle principal.

Actualmente, el bucle principal sigue ejecutándose hasta que todos los autos
hayan terminado la carrera, verificando al final de cada iteración si algún auto ha
alcanzado los 10,000 metros. Esto resulta en muchas iteraciones innecesarias,
especialmente cuando algunos autos ya han terminado la carrera pero otros no.
La mejora consiste en verificar inmediatamente después de cada avance si un
auto ha alcanzado los 10,000 metros. Si un auto ha terminado, lo contabilizamos
y evitamos realizar pasos adicionales para ese auto en futuras iteraciones. De
esta manera, reducimos el número de iteraciones del bucle principal.

Esta optimización hace que la simulación sea más eficiente, especialmente


cuando hay muchos autos o la distancia a recorrer es mayor. Al reducir el número
de iteraciones innecesarias, se mejora el rendimiento general del programa.

Porcentaje de participación:

Quispe Ipurre, Miluzka Xiomara - 100%


Rodriguez Huayta, Diego Alessandro - 100%
Ricse Roca, Irene Fernanda - 100%

También podría gustarte