viernes, 2 de octubre de 2026

01i.- Programación I - Actividad de Laboratorio (02 de Octubre de 2026) - (Semestre 2027 - I) - SOLUCIÓN DEL PROFESOR

 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:




RESULTADOS ESPERADOS





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