//==============================================================================//
// Programa de cotización del servicio de transporte de mercadería en C++ //
// Autores: //
// -Julio Rodrigo Huamán Guerrero (U202012908) //
// -Quispe Pumayalli Angel Anthony (U20231A692) //
// -Orizano Salvador Diego Elias (U20191E833) //
// -Noriega Suárez, María Alejandra (U202321787) //
//==============================================================================//
#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
int CalcularCantidadVehiculos(int peso) {
int cantidadVehiculos = 0;
double pesoRestante=0.0;
if (peso >= 0 && peso < 4) {
cantidadVehiculos = 1;
} else if (peso >= 4 && peso <= 5) {
cantidadVehiculos = 1;
} else if (peso >= 6 && peso <= 8) {
cantidadVehiculos = 1;
} else if (peso > 8) {
cantidadVehiculos = peso / 8;
pesoRestante = peso - (cantidadVehiculos * 8);
if (peso % 8 != 0) {
cantidadVehiculos++;
}
}
return cantidadVehiculos;
}
int main() {
// Declaración de variables
double distancia, costoAdicional, costoFinalVehiculo, costoTotal = 0.0;
double pesoRestante=0.0, costoAuxiliares;
string tipoCarga, tipo_vehiculo;
char desea_auxiliares, agregar_vehiculo;
int peso,auxiliares, cantidadVehiculos;
// Costo del servicio por el vehículo pequeño
const double costo_vehiculo_pequeno = 100.0;
// Costo del servicio por el vehículo mediano
const double costo_vehiculo_mediano = 150.0;
// Costo del servicio por el vehículo pesado
const double costo_vehiculo_pesado = 200.0;
// Cada vehículo siempre tendrá un chofer y un auxiliar y costo del servicio por estos es:
const double chofer_y_auxiliar = 150.0;
// Iniciamos el bucle do-while
do {
// Iniciamos el costo final del vehículo actual en 0.
costoFinalVehiculo = 0.0;
costoAdicional = 0.0; // Aseguramos que costoAdicional se inicialice en cada iteración
// Datos de entrada
cout << "Ingrese el peso de la carga en toneladas: ";
cin >> peso;
cout << "Ingrese el tipo de carga (MATPEL, IQBF o REFRIGERADO): ";
cin >> tipoCarga;
cout << "Ingrese la distancia del viaje en kilómetros: ";
cin >> distancia;
cout << "¿Desea que el servicio tenga auxiliares? (s/n): ";
cin >> desea_auxiliares;
if (desea_auxiliares == 's' || desea_auxiliares == 'S') {
cout << "Ingrese la cantidad de auxiliares adicionales deseados: ";
cin >> auxiliares;
// Calcular costo adicional por auxiliares
costoAuxiliares = auxiliares * 50.0;
} else {
auxiliares = 0;
costoAuxiliares = 0.0;
}
// Validar el tipo de vehículo y cantidad de vehículos necesarios según el peso
// Vehículo pequeño (3 toneladas máximo)
if (peso < 4) {
tipo_vehiculo = "Pequeno";
cantidadVehiculos = CalcularCantidadVehiculos (peso);
costoFinalVehiculo = costo_vehiculo_pequeno + (distancia * 1.20) + peso * 1.1;
cout << "\nTipo de vehículo: " << tipo_vehiculo << endl;
cout << "Cantidad de vehículos: " << cantidadVehiculos << endl;
} else if (peso >= 4 && peso <= 5) { // Vehículo mediano (de 4 a 5 toneladas)
tipo_vehiculo = "Mediano";
cantidadVehiculos = CalcularCantidadVehiculos (peso);
costoFinalVehiculo = costo_vehiculo_mediano + distancia * 1.50 + peso * 1.3;
cout << "\nTipo de vehículo: " << tipo_vehiculo << endl;
cout << "Cantidad de vehículos: " << cantidadVehiculos << endl;
} else if (peso >= 6 && peso <= 8) { // Vehículo pesado (de 6 a 8 toneladas)
tipo_vehiculo = "Pesado";
cantidadVehiculos =CalcularCantidadVehiculos (peso) ;
costoFinalVehiculo = costo_vehiculo_pesado + distancia * 1.70 + peso * 1.5;
cout << "\nTipo de vehículo: " << tipo_vehiculo << endl;
cout << "Cantidad de vehículos: " << cantidadVehiculos << endl;
} else if (peso > 8) { // Si se necesita más de un vehículo
tipo_vehiculo = "Pesado";
cantidadVehiculos =CalcularCantidadVehiculos (peso);
costoFinalVehiculo = costo_vehiculo_pesado + (cantidadVehiculos * (distancia * 1.70)) +
(pesoRestante * 1.5) + peso * 1.5;
cout << "\nTipo de vehículo: " << tipo_vehiculo << endl;
cout << "Cantidad de vehículos: " << cantidadVehiculos << endl;
}
// Calcular costo adicional según el tipo de carga
if (tipoCarga == "MATPEL") {
// Costo adicional del 10% del costo final si la carga es MATPEL
costoAdicional = 0.10 * costoFinalVehiculo;
} else if (tipoCarga == "IQBF") {
// Costo adicional del 15% del costo final si la carga es IQBF
costoAdicional = 0.15 * costoFinalVehiculo;
} else if (tipoCarga == "REFRIGERADO") {
// Costo adicional del 20% del costo final si la carga es REFRIGERADO
costoAdicional = 0.20 * costoFinalVehiculo;
}
// Calcular costo total del vehículo actual
costoFinalVehiculo += costoAdicional + chofer_y_auxiliar + costoAuxiliares;
// Sumar al costo total general
costoTotal += costoFinalVehiculo;
// Preguntar si se desea agregar otro vehículo
cout << "\n¿Desea agregar otro tipo de vehículo? (s/n): ";
cin >> agregar_vehiculo;
} while (agregar_vehiculo == 's' || agregar_vehiculo == 'S');
// Mostrar el costo total del servicio
cout << "\n--------------------------------------------------" << endl;
cout << "El costo total del servicio es: " << costoTotal << " soles" << endl;
// Numero de compra (aleatorio)
const int N = 1; // Cantidad de terminos a generar
const int d = 6; // Numero de digitos de c/d termino
const int TOT = 5000; // Capacidad maxima del vector
int lista[TOT]; // Vector (arreglo unidimensional)
int i; // Controla el indice (posicion) de un elem
int vmax, vmin; // Valores maximo y minimo del rango
vmin = pow(10, (d-1));
vmax = pow(10, d) - 1;
i = 0 ;
while ( i < N ) {
lista[i] = rand() % (vmax - vmin + 1) + vmin ;
i = i + 1;
}
// Proceso Principal
cout << "\nNUMERO DE COMPRA:" << endl;
for ( i = 0 ; i < N ; i = i + 1){
if ( (i) % 5 == 0 ) {
cout << endl;
}
cout << lista[i] << "\t";
}
return 0;
}