viernes, 3 de octubre de 2025

01i.- Programación I - Primera Evaluación Jueves 02 de Octubre + SOLUCIÓN + CALIFICACIÓN + CALIFICACIONES ANTERIORES

 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 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