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.
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 le solicitó a los estudiantes que selecciono que modificaran el programa de forma de que la farmacia estuviera de turno un día si y siete no. Aclaro que la fecha en que inicio operaciones la farmacia se mantenía, en consecuencia los turnos del primer cambiarían a:
El profesor selecciono a un estudiante de cada grupo para que aplicara la modificación al programa posteriormente le solicito de forma aleatoria que respondieran una de las siguientes preguntas:
(a) Cual es el ultimo día del año 2044 en el cual la farmacia estará de turno.
(b) Cual es el ultimo día del año 2064 en el cual la farmacia estará de turno.
El profesor elaboró su versión del programa:
Programa
/*Programa para determinar si una farmacia esta de turno
según una fecha indicada, la farmacia esta de turno nocturno
un día si y siete no.
Elaborado por Carlos Ferrer
Rev.: Oct 2025
*/
//Biblioteca para recibir datos y enviar datos a la consola (Pantalla negra)
#include <iostream>
using namespace std;
main()
{
int dia=1,mes=1,a=2025;
int diab,mesb,ab;
int turno=1;
int bisiesto;
cout<<"Programa para determinar si la farmacia USM PROG I esta de turno"<<endl<<endl;
//Validamos el año de la fecha a revisar
do
{
cout <<"Ingrese el a#o a validar (>2025) = ";
cin >>ab;
if (ab<1980)
{
cout <<endl<<endl<<"Error.. a#o debe ser mayor > 2025!!!!"<<endl<<endl;
}
}
while (ab<2025);
do
{
cout <<"Ingrese el mes a validar (1-12) = ";
cin >>mesb;
if (mesb<1 or mesb>12)
{
cout <<endl<<endl<<"Error.. el rango es de 1 a 12 !!!!"<<endl<<endl;
}
}
while (mesb<1 or mesb>12);
/*Determinamos si el año a validar es bisiesto.
bisiesto= divisible entre 4 y no es divisible
entre 100 ó es divisible entre 100 y 400*/
if ((ab%4==0 and ab%100!=0) or (ab%100==0 and ab%400==0))
{
bisiesto=1;
}
else
{
bisiesto=0;
}
//Validamos el día a ingresar
do
{
cout <<"Ingrese el dia a validar (1-31) = ";
cin >>diab;
if (diab<1 or diab>31)
{
cout <<endl<<endl<<"Error.. el rango es de 1 a 31 !!!!"<<endl<<endl;
diab=32;
}
if (diab>30 and (mesb==4 or mesb==6 or mesb==9 or mesb==11))
{
cout <<endl<<endl<<"Error.. el mes indicado solo tiene 30 dias !!!!"<<endl<<endl;
diab=32;
}
else if (diab>28 and mesb==2 and bisiesto==0)
{
cout <<endl<<endl<<"Error.. En el a#o indicado febrero solo tiene 28 dias"<<endl<<endl;
diab=32;
}
else if (diab>29 and mesb==2 and bisiesto==1)
{
cout <<endl<<endl<<"Error.. En el a#o indicado febrero solo tiene 29 dias"<<endl<<endl;
diab=32;
}
}
while (diab<1 or diab>31);
system("cls");
cout<<"Programa para determinar si la farmacia USM PROG I esta de turno"<<endl<<endl;
while(dia!=diab or mes!=mesb or a!=ab)
{
// bisiesto= divisible entre 4 y no es divisible entre 100 o es divisible entre 100 y 400
if ((a%4==0 and a%100!=0) or (a%100==0 and a%400==0))
{
bisiesto=1;
}
else
{
bisiesto=0;
}
//Incrementamos el día a revisar
dia=dia+1;
/* Si es el octavo día activamos el turno (turno=1) de lo contrario
incrementamos el contador de 8 días (1 día de turno siete libres)*/
if (turno==8)
{
turno=1;
}
else
{
turno=turno+1;
}
/*Verificamos si el mes de 31 días se cumplió y
nos pasamos al mes siguiente*/
if (dia==31 and (mes==11 or mes==6 or mes==4 or mes==9))
{
dia=1;
mes=mes+1;
}
/*Verificamos si el mes de 28 días + año Bisiesto
se cumplió y nos pasamos al mes siguiente*/
else if (dia>28 and mes==2 and bisiesto==0)
{
dia=1;
mes=mes+1;
}
/*Verificamos si el mes de 29 días + año Bisiesto
se cumplió y nos pasamos al mes siguiente*/
else if (dia>29 and mes==2 and bisiesto==1)
{
dia=1;
mes=mes+1;
}
/*Verificamos si el mes de 31 días
se cumplió y nos pasamos al mes siguiente*/
else if (dia==32)
{
dia=1;
mes=mes+1;
}
//Verificamos el cambio de año y nos cambiamos de año
if (mes==13)
{
mes=1;
a=a+1;
}
}
//Presentamos los resultados
if (turno==1)
{
cout <<endl<<endl<<"El "<<dia<<"/"<<mes<<"/"<<a<<" La farmacia esta de turno";
}
else
{
cout <<endl<<endl<<"El "<<dia<<"/"<<mes<<"/"<<a<<" La farmacia NO esta de turno";
}
}
Resultados
Calificaciones Actividad y
Calificaciones anteriores






No hay comentarios.:
Publicar un comentario