Los estudiantes de Ingeniería de la USM se asociaron con el celebre doctor Hannibal Lecter e inauguraron el 01 de Enero de 2025 la farmacia mejor equipada de Caracas, FARMACIA USM PROG I, el plan es que la farmacia opere en horario normal todos los días y de noche cada 5 días.
El primer mes la farmacia estuvo de turno nocturno los días indicados en la siguiente imagen:
Se requiere que usted elabore un programa en el cual se ingrese cualquier fecha posterior al 1ro de enero de 2025 y el programa determine si la farmacia esta de turno.
NOTA 1: El profesor todavía no ha explicado como escribir las letras acentuadas y la letra ñ en C++, para cualquier efecto sustituya la letra ñ por #.
NOTA 2: El programa debe considerar los años bisiestos, o sea, años de 366 días (años con 29 de febrero), los años bisiestos son aquellos que cumplen con cualquiera de las siguientes condiciones:
- (1) Son divisible de forma exacta entre cuatro y no lo son entre 100
- (2) Son divisibles de forma exacta entre 400
El programa deberá ser desarrollado en grupos de mínimo 2 y máximo 3 estudiantes.
El profesor escogerá a uno de los estudiantes del grupo para que pase al laboratorio con el programa y ejecute una pequeña modificación que será solicitada por el profesor. De hacerlo bien todo el grupo será calificado positivamente, de hacerlo mal ninguno miembro del grupo obtendrá punto alguno.
NOTA 3: Si el grupo no esta completo el día de la defensa ninguno de los integrantes podrá defender el programa.
Solución del Profesor
El profesor elaboró su versión del programa:
PROGRAMA DEL PROFESOR
/*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 !!!!!";
}
}




No hay comentarios.:
Publicar un comentario