0% encontró este documento útil (0 votos)
3 vistas8 páginas

Librerías y Funciones Esenciales en C++

El documento detalla el uso de bibliotecas estándar de C++ y su importancia en la construcción de un sistema de reportes, incluyendo funciones para convertir texto a mayúsculas, manejar estructuras de datos y limpiar el buffer de entrada. Se describe la implementación de un sistema que permite registrar reportes de fallas, utilizando un struct para organizar datos y un unordered_map para traducir abreviaciones. Además, se explica la generación de estadísticas a partir de los reportes ingresados, resaltando la eficiencia y claridad del código.

Cargado por

paola
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)
3 vistas8 páginas

Librerías y Funciones Esenciales en C++

El documento detalla el uso de bibliotecas estándar de C++ y su importancia en la construcción de un sistema de reportes, incluyendo funciones para convertir texto a mayúsculas, manejar estructuras de datos y limpiar el buffer de entrada. Se describe la implementación de un sistema que permite registrar reportes de fallas, utilizando un struct para organizar datos y un unordered_map para traducir abreviaciones. Además, se explica la generación de estadísticas a partir de los reportes ingresados, resaltando la eficiencia y claridad del código.

Cargado por

paola
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

🟥 1.

Bibliotecas incluidas
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>
#include <limits>

¿Qué es esto y por qué se usa?

Son librerías estándar de C++, cada una tiene un papel crucial en tu programa:

Librería Para qué sirve Por qué es necesaria

Entrada y salida por consola Sin esto, no puedes interactuar con el


<iostream>
(cin, cout) usuario

Arreglos dinámicos (listas Ideal para guardar todos los reportes sin
<vector>
expandibles) límites

<string> Manejo de texto Todo tu programa trabaja con texto

Para traducir M → MANTENIMIENTO y


<unordered_map> Diccionarios tipo clave-valor
generar estadísticas

Funciones útiles como Lo usamos para pasar texto a mayúsculas


<algorithm>
transform() fácilmente

Para limpiar el buffer del


<limits> Evita errores al mezclar cin y getline
teclado

Conclusión:
Cada una es necesaria, y juntas forman la base para construir un sistema robusto y
eficiente.

🟥 2. Función upper() – Convertir todo a mayúsculas


string upper(const string &s) {
string r = s;
transform([Link](), [Link](), [Link](), ::toupper);
return r;
}
¿Qué hace?

Convierte un texto cualquiera en MAYÚSCULAS.

¿Por qué existe?

• Evita errores por minúsculas o combinaciones raras.


• Asegura que si el usuario escribe “m”, “M”, “mantenimiento”, todo se procesa
igual.
• Mejora la estabilidad del programa.

¿Por qué se usa transform?

Es la forma óptima y correcta de recorrer un string y modificarlo caracter por caracter.

🟥 3. Mapas para traducir abreviaciones


unordered_map<string, string> fallaCompleta = {
{"M", "MANTENIMIENTO"},
{"E", "ELECTRICA"},
{"C", "CALIBRACION"},
{"A", "AJUSTE"},
{"O", "OTROS"}
};

¿Qué es esto realmente?

Un unordered_map es parecido a un diccionario en Python.


Funciona con una lógica de tabla hash interna que vuelve las búsquedas muy rápidas
(O(1)).

¿Para qué sirve aquí?

Para que el usuario escriba solo una letra (M/E/C/A/O) y el programa convierta eso en:

MANTENIMIENTO, ELECTRICA, CALIBRACION, AJUSTE, OTROS

¿Por qué es importante?

• Reduce el error del usuario.


• Hace más fácil llenar el reporte.
• Mantiene estandarización.
🟥 4. Estructura del reporte
struct Reporte {
string fecha_reporte;
string servicio;
string equipo;
string marca;
string modelo;
string serial;
string fecha_entrada;
string tipo_falla;
string descripcion;
string repuestos;
string observaciones;
bool operativo;
string tecnico;
};

¿Qué es un struct?

Es un "contenedor" o "caja" que agrupa datos relacionados.

¿Por qué es perfecto aquí?

Un reporte real en electromedicina tiene campos definidos, y un struct permite


representarlo con la misma estructura mental.

¿Ventajas?

• Claridad en el código.
• Organización.
• Fácil mantenimiento.
• No hay riesgo de mezclar campos.

🟥 5. Base de datos en memoria


vector<Reporte> reportes;

¿Por qué un vector?

Porque:

• Crece automáticamente.
• Es veloz accediendo por índice.
• Mantiene el orden en que se registraron los reportes.
• Permite recorrerlos secuencialmente para estadísticas.
¿Alternativas?

• list: pero no se necesita.


• deque: tampoco aporta ventajas aquí.

El vector es lo correcto.

🟥 6. Función para limpiar el buffer


void limpiar() {
[Link](numeric_limits<streamsize>::max(), '\n');
}

¿Para qué sirve?

Soluciona el clásico problema:

cin >> variable;


deja un salto de línea pendiente
y getline() lo lee accidentalmente vacío.

Aquí se elimina toda la basura del buffer.

🟥 7. Función auxiliar input()


string input(const string &msg) {
cout << msg;
string s;
getline(cin, s);
return s;
}

¿Para qué existe esta función?

Para evitar escribir muchas veces:

cout << "Mensaje: ";


getline(cin, variable);

Reduce código repetido → mejora la mantenibilidad.


🟥 8. Función ingresarReporte()

Esta es la función más importante del sistema.

Voy a explicarte cada fragmento:

➤ Encabezado y estética
cout << "\n==============================\n";
cout << " REPORTE DE FALLA\n";
cout << "==============================\n";

No es obligatorio, pero es buena práctica:

• Mejora legibilidad.
• Separa visualmente secciones.

➤ Entrada de datos pura

Cada línea:

cout << "Fecha del reporte... ";


getline(cin, r.fecha_reporte);

Hace:

• Solicita información.
• La captura en la variable correspondiente del struct.

➤ Bloque especial del tipo de falla

Este es más inteligente:

string tf;
cout << "Tipo de falla [M/E/C/A/O]: ";
getline(cin, tf);
tf = upper(tf);

if ([Link](tf))
r.tipo_falla = fallaCompleta[tf];
else
r.tipo_falla = "OTROS";
¿Qué hace este bloque?

• Convierte la letra a mayúsculas.


• La busca en el diccionario.
• Traduce el código a texto completo.
• Si no coincide → asigna “OTROS”.

¿Por qué es tan útil?

Reduce errores y homogeniza los datos.

➤ Estado operativo/inoperativo
string estado;
cout << "Estado del equipo [O = Operativo / I = Inoperativo]: ";
getline(cin, estado);
estado = upper(estado);
[Link] = (estado == "O");

¿Qué hace exactamente?

• Si el usuario escribe “O”, el bool queda true.


• Si escribe “I”, queda false.

¿Por qué usar un bool?

• Es más eficiente
• Facilita cálculos e iteraciones
• Evita validaciones repetitivas

🟥 9. Generación de estadísticas

Esta función procesa todos los reportes y calcula resúmenes.

Se usan tres mapas:

unordered_map<string,int> freqServicio;
unordered_map<string,int> freqFalla;
unordered_map<string,int> freqTecnico;

¿Para qué sirven?

Para contar:
• cuántas veces aparece cada servicio
• qué tipo de falla fue más común
• qué técnico registró más

Es el equivalente a hacer una tabla dinámica.

Recorrido principal
for (auto &r : reportes)

Dentro:

• Se incrementan los contadores.


• Se actualiza el conteo de operativos / inoperativos.
• Se comparan fechas para determinar el rango.

Cálculo del elemento más repetido

Este bloque:

auto maxCount = [](unordered_map<string,int> &m) { ... };

Es una lambda function, una función anónima localizada.

¿Por qué usarla aquí?

• Reduce código repetido


• Hace elegante la extracción del máximo

🟥 10. Función main()

Representa el flujo general:

while (true) {
ingresarReporte();
pedir R/E
si R → continuar
si E → salir del ciclo
}
generarEstadisticas();
¿Qué significa esto?

• El usuario puede registrar reportes ilimitados.


• Solo cuando elige E se generan estadísticas.
• El programa termina ordenadamente.

Este es un ciclo controlado por usuario, ideal en un programa de consola.

También podría gustarte