En Venezuela el gobierno venezolano implemento la venta de gasolina subsidiada por numero de finalización de placa, veamos el calendario de Marzo de 2025:
Intente elaborar un programa en el cual usted ingrese una fecha cualquiera comprendida entre el día de hoy 21 de marzo de 2025 y el 31 de diciembre de 2080 y programa retorne el numero de las placas que les correspondería surtir gasolina subsidiada para ese día. (Recuerde que su programa deberá considerar los años bisiestos donde febrero tiene 29 días: 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, 2068, 2072, 2076 y 2080)
Resultado esperado
La solución de este ejercicio se publicará el Lunes 24 de Marzo de 2025.
PROGRAMA
/* Programa: Este programa determina los terminales de las
placas de los vehículos que les toca recibir gasolina
subsidiada en Venezuela en base a una fecha ingresada.
(rango 21 de marzo de 2024 a 31 de dic de 2080)
Elaborado por Carlos Ferrer
Rev: 25 mar del 2025
*/
#include <iostream>
using namespace std;
main()
{
// Inicializamos las Variables día, mes y año a buscar
int a_b = 0;
int mes_b = 0;
int dia_b = 0;
// Variable que indica si el año es bisiesto
bool Bisiesto;
// Cantidad de días del mes en curso
int dia_m;
/* Establecemos la fecha de arranque 21 de marzo de 2025 y las placas=4
(1= 1 y 2 2= 3 y 4 3= 5 y 6 4= 7 y 8 5= 9 y 8)
*/
int dia = 21;
int mes = 3;
int a = 2025;
int placas = 4;
string aux;
string aux2[12] = {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
// Solicitamos el año a buscar
while (a_b < 2024 or a_b > 2070)
{
cout << "Ingrese a#o a buscar = ";
cin >> a_b;
if (a_b < 2025 or a_b > 2080)
{
system("cls");
cout << "Alerta fuera de rango!!!"<<endl;
cout << "debe pertenecer al rango (21 de mar de 2025 a 31 de dic 2080)"<<endl<<endl;
}
}
// Solicitamos el mes a buscar
while (mes_b < 1 or mes_b > 12 or (a_b == 2025 and mes_b < 3))
{
cout << "Ingrese mes a buscar = ";
cin >> mes_b;
if (mes_b < 1 or mes_b > 12 or (a_b == 2025 and mes_b < 3))
{
system("cls");
cout << "Alerta mes fuera de rango!!"<<endl;
cout << "debe pertenecer al rango (21 de mar de 2025 a 31 de dic 2080)"<<endl<<endl;
}
}
// Averiguamos si el año es bisiesto
/* Un año es bisiesto si se cumple cualquiera de las siguientes dos condiciones:
(1) es divisible entre 4 y no lo es entre 100
(2) es divisible entre 4, 100 y 400 */
Bisiesto = ((a_b % 4 == 0 and a_b % 100 != 0) or (a_b % 4 == 0 and a_b % 100 == 0 and a_b % 400 == 0));
// Si es un mes de treinta días establecemos su duración en 30
if (mes_b == 11 or mes_b == 4 or mes_b == 6 or mes_b == 9)
{
dia_m = 30;
}
// Si el año es Bisiesto establecemos que febrero dura 29 días
else if (mes_b == 2 and Bisiesto)
{
dia_m = 29;
}
// Si el año NO es Bisiesto establecemos que febrero dura 28 días
else if (mes_b == 2 and !Bisiesto)
{
dia_m = 28;
}
// Si es un mes de treinta y un días establecemos su duración en 31
else
{
dia_m = 31;
}
// Solicitamos el día a buscar
while (dia_b < 1 or dia_b > dia_m or (a_b == 2025 and mes_b == 3 and dia_b < 21))
{
cout << "Ingrese dia a buscar = ";
cin >> dia_b;
if (dia_b < 1 or dia_b > dia_m or (a_b == 2025 and mes_b == 3 and dia_b < 21))
{
system("cls");
cout << "Alerta dia fuera de rango!!"<<endl;
cout << "debe pertenecer al rango (21 de mar de 2025 a 31 de dic 2080)"<<endl<<endl;
}
}
/* Barremos todas las fechas desde el 01 de Octubre 2024
Hasta conseguir la fecha buscada*/
while (a <= 2080)
{
// Determinamos si el año en movimiento es bisiesto
Bisiesto = ((a % 4 == 0 and a % 100 != 0) or (a % 4 == 0 and a % 100 == 0 and a % 400 == 0));
// Si la fecha es igual a la buscada nos salimos del ciclo
if (a == a_b and mes == mes_b and dia == dia_b)
{
break; //instrucción que te saca del ciclo
}
// De lo contrario incrementamos el día de la semana
dia=dia+1;
placas=placas+1;
// Verificamos un cambio de mes
if (dia == 31 and (mes == 11 or mes == 6 or mes == 4 or mes == 9))
{
dia = 1;
mes=mes+1;
}
else if (dia == 29 and mes == 2 and !Bisiesto)
{
dia = 1;
mes=mes+1;
}
else if (dia == 30 and mes == 2 and Bisiesto)
{
dia = 1;
mes=mes+1;
}
else if (dia == 32)
{
dia = 1;
mes=mes+1;
}
// Verificamos un cambio de año
if (mes == 13)
{
mes = 1;
a=a+1;
}
// Verificamos el reseteo del ciclo
if (placas == 6)
{
placas = 1;
}
}
// Imprimimos el resultado
if (placas == 1)
{
aux = "1 y 2";
}
if (placas == 2)
{
aux = "3 y 4";
}
if (placas == 3)
{
aux = "5 y 6";
}
if (placas == 4)
{
aux = "7 y 8";
}
if (placas == 5)
{
aux = "9 y 0";
}
cout <<endl;
cout << "El " << dia << " del mes de " << aux2[mes-1] << " de " << a << " surtiran"<<endl;
cout << "gasolina los vehiculos con placas que finalicen en: " << aux <<endl;
cout <<endl;
}