/*Programa para determinar si una farmacia esta de turno según
una fecha indicada, la farmacia esta de turno un día si y cuatro
no.
Elaborado por Carlos Ferrer
Rev.: Octubre de 2026
*/
//Biblioteca para enviar y recibir datos a la consola (Pantalla negra)
#include <iostream>
//Biblioteca que permite manejar la letra ñ y los caracteres acentuados.
#include <locale.h>
using namespace std;
main()
{
int dia=1,mes=1,a=2025,aux;
int diab,mesb,ab;
//1=farmacia de turno 0= farmacia no se encuentra de turno nocturno
int turno=5;
//1=año con 29 de febrero 0= año sin 29 de febrero
int bisiesto;
setlocale(LC_ALL,"spanish");
cout <<"Programa para determinar si la farmacia USM PROG I esta de turno";
cout <<endl<<endl;
//Ingresamos la fecha a buscar
do
{
cout <<"Ingrese el año a buscar (>2025) = ";
cin >>ab;
if (ab<2025)
{
cout <<endl<<"Error .... el año debe ser mayor o igual que 2025!!";
cout <<endl<<endl;
}
}
while (ab<2025);
do
{
cout <<"Ingrese el mes a buscar (mes >=1 ó mes<=12) = ";
cin >>mesb;
if (mesb<1 or mesb>12)
{
cout <<endl<<"Error .... el mes debe estar en el rango de 1 a 12!!";
cout <<endl<<endl;
}
}
while (mesb<1 or mesb>12);
/* Determinamos si el año es bisiesto. Un año
Bisiesto es cuando se da cualquiera de las siguiente
dos condiciones:
1ra que el numero del año sea divisible entre 4 pero no
sea divisible entre 100
2da Que sea divisible entre 400
*/
if ((ab%4==0 and ab%100!=0) or (ab%400==0) )
{
bisiesto=1;
}
else
{
bisiesto=0;
}
do
{
if (mesb==2 and bisiesto==1)
{
aux=29;
}
else if (mesb==2 and bisiesto==0)
{
aux=28;
}
else if (mesb==4 or mesb==6 or mesb==9 or mesb==11)
{
aux=30;
}
else
{
aux=31;
}
cout <<"Ingrese el dia a buscar (dia >=1 ó dia<="<<aux<<") = ";
cin >>diab;
if (diab<1 or diab>31)
{
cout <<endl<<"Error .... el dia debe estar en el rango de 1 a 31!!";
cout <<endl<<endl;
diab=32;
}
if (diab>30 and (mesb==4 or mesb==6 or mesb==9 or mesb==11 ))
{
cout <<endl<<"Error .... el mes indicado solo tiene 30 dias!!";
cout <<endl<<endl;
diab=32;
}
if (diab>28 and mesb==2 and bisiesto==0)
{
cout <<endl<<"Error .... el mes de febrero de "<<ab<<" solo tiene 28 días!!";
cout <<endl<<endl;
diab=32;
}
if (diab>29 and mesb==2 and bisiesto==1)
{
cout <<endl<<"Error .... el mes de febrero de "<<ab<<" solo tiene 29 días!!";
cout <<endl<<endl;
diab=32;
}
}
while (diab<1 or diab>31);
/*Escribimos una rutina que evalué día a día desde el 01 de enero de 2025
hasta la fecha a buscar colocando la variable turno en 5 cuando la farmacia este
en turno nocturno, si al finalizar la variable esta en 5 significa que para la fecha
a buscar la farmacia trabajara de noche, de lo contrario no estará disponible. */
while (dia!=diab or mes!=mesb or a!=ab)
{
if ((a%4==0 and a%100!=0) or (a%400==0) )
{
bisiesto=1;
}
else
{
bisiesto=0;
}
dia=dia+1;
if (turno==5)
{
turno=1;
}
else
{
turno=turno+1;
}
/*verificamos si el mes es de 30,
si se cumplio nos pasamos al mes siguiente*/
if (dia==31 and (mes==4 or mes==6 or mes==9 or mes==11))
{
mes=mes+1;
dia=1;
}
/*verificamos si el mes es de 28,
si se cumplio nos pasamos al mes siguiente*/
if (dia==29 and mes==2 and bisiesto==0)
{
mes=mes+1;
dia=1;
}
/*verificamos si el mes es de 29,
si se cumplio nos pasamos al mes siguiente*/
if (dia==30 and mes==2 and bisiesto==1)
{
mes=mes+1;
dia=1;
}
/*verificamos si el mes es de 30,
si se cumplio nos pasamos al mes siguiente*/
if (dia==32)
{
mes=mes+1;
dia=1;
}
//Verificamos el cambio de año
if (mes==13)
{
mes=1;
a=a+1;
}
}
//Presentamos resultados
if (turno==5)
{
cout <<endl<<endl<<"El "<<dia<<"/"<<mes<<"/"<<a;
cout <<" La farmacia esta de turno !!!!!";
}
else
{
cout <<endl<<endl<<"El "<<dia<<"/"<<mes<<"/"<<a;
cout <<" La farmacia NO esta de turno !!!!!";
}
}