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 !!!!!";
}

}

jueves, 1 de octubre de 2026

01h.- Programación I - Actividad de Laboratorio (02 de Octubre de 2026) - (Semestre 2027 - I)

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.

RESULTADOS ESPERADOS




sábado, 26 de septiembre de 2026

01g.- Programación I - Ejemplos de Ciclos (For - Do While - While - if+Goto) Semestre 2027 - I





Para explicar los arreglos y los ciclos elaboramos tres (3) programas de ordenamiento usando el método de la burbuja.


1.- Hacemos el programa usando únicamente ciclo FOR y ARREGLOS 


/* Este programa ordena 10 elementos ubicados en las posiciones desde la 1 a la 10 de un arreglo de 11 posiciones, aplicando el método de la burbuja usando básicamente ciclos FOR

 

Elaborado por Carlos Ferrer - Rev. marzo 2026*/

 

 #include <iostream>

double num [11]={0};

double aux;

int i,z;

using namespace std;

 

main()

{

         

  for (i=1;i<=10;i=i+1)    

        {

        cout <<"Ingrese num["<<i<<"]= "<<endl;

        cin >>num[i];

        }

     

    for (z=1;z<=10;z=z+1)   // Cantidad de veces que se repite el método

         {

                   for(i=1;i<=9;i=i+1) // 9 comparaciones para 10 elementos, en caso de de requerir se intercambian

                   {

                   if (num[i]>num[i+1])

                            {

                            aux=num[i];

                            num[i]=num[i+1];

                            num[i+1]=aux;

                            }       

            

                   }

         }

 

 

//imprimimos resultados

         cout <<endl<<num[1];

         for (i=2;i<=10;i=i+1)

         {

         cout <<" < "<<num[i];

         }

        

         cout <<endl<<endl;

         system("pause");

}


2.- Hacemos el programa usando únicamente ciclo DO WHILE y ARREGLOS 


/* Este programa ordena 10 elementos ubicados en las posiciones desde la 1 a la 10 de un arreglo de 11 posiciones, aplicando el método de la burbuja usando básicamente ciclos WHILE

 

Elaborado por Carlos Ferrer - Rev. marzo 2026*/

 

 #include <iostream>

double num [11]={0};

double aux;

int i=1,z=1;

using namespace std;

 

main()

{

        do

        {

        cout <<"Ingrese num["<<i<<"]= "<<endl;

        cin >>num[i];

        i=i+1;

        }

        while (i<=10);

         

          do

          

         {

                     i=1;

                     do 

                   {

                   if (num[i]>num[i+1])

                            {

                            aux=num[i];

                            num[i]=num[i+1];

                            num[i+1]=aux;

                            }       

                     i=i+1;

                   }

                    while(i<=9); // 9 comparaciones para 10 elementos, en caso de de requerir se intercambian

          z=z+1;

         }

          while (z<=10);   // Cantidad de veces que se repite el método

 

//imprimimos resultados

         cout <<endl<<num[1];

        i=2; 

        do

         {

         cout <<" < "<<num[i];

         i=i+1;

        }

         while (i<=10);

         cout <<endl<<endl;

         system("pause");

}


3.- Hacemos el programa usando únicamente ciclo WHILE y ARREGLOS 


/* Este programa ordena 10 elementos ubicados en las posiciones desde la 1 a la 10 de un arreglo de 11 posiciones, aplicando el método de la burbuja usando básicamente ciclos WHILE

 

Elaborado por Carlos Ferrer - Rev. marzo 2026*/

 

 #include <iostream>

double num [11]={0};

double aux;

int i,z;

using namespace std;

 

main()

{

    i=1;      

    while (i<=10);  

        {

        cout <<"Ingrese num["<<i<<"]= "<<endl;

        cin >>num[i];

        i=i+1;

        }

 

         z=1;

          while (z<=10)   // Cantidad de veces que se repite el método

         {

                     i=1;

                     while(i<=9) // 9 comparaciones para 10 elementos, en caso de de requerir se intercambian

                   {

                   if (num[i]>num[i+1])

                            {

                            aux=num[i];

                            num[i]=num[i+1];

                            num[i+1]=aux;

                            }       

                     i=i+1;

                   }

          z=z+1;

         }

 

 

//imprimimos resultados

         cout <<endl<<num[1];

        i=2; 

        while (i<=10)

         {

         cout <<" < "<<num[i];

         i=i+1;

        }

        

         cout <<endl<<endl;

         system("pause");

}


4.- Hacemos el programa usando únicamente ciclo IF+ GOTO y ARREGLOS 


/* Este programa ordena 10 elementos ubicados en las posiciones desde la 1 a la 10 de un arreglo de 11 posiciones, aplicando el método de la burbuja usando básicamente ciclos IF GOTO

Elaborado por Carlos Ferrer - Rev. marzo 2026*/


 #include <iostream>

double num [11]={0};

double aux;

int i,z;

using namespace std;


main()

{

 i=1;

 repetir:    

 cout <<"Ingrese num["<<i<<"]= "<<endl;

 cin >>num[i];

     if (i<10)

         {

        i=i+1;    

        goto repetir;

        }          

   z=1;

   Repetir1:

   if (z<=10)   // Cantidad de veces que se repite el método

         {

                     i=1;

                     Repetir2:

                     if(i<=9) // 9 comparaciones para 10 elementos, en caso de de requerir se intercambian

                   {

                   if (num[i]>num[i+1])

                            {

                            aux=num[i];

                            num[i]=num[i+1];

                            num[i+1]=aux;

                            }       


                     i=i+1;

                     goto Repetir2;

                   }

          z=z+1;

          goto Repetir1;

         }


//imprimimos resultados

         cout <<endl<<num[1];

        i=2; 

        Repetir3:

        if (i<=10)

         {

         cout <<" < "<<num[i];

         i=i+1;

         goto Repetir3;

        }

         cout <<endl<<endl;

         system("pause");

}

01f.- Programación I - 1er Laboratorio 24 de Septiembre de 2026 (Semestre 2027-I) - SOLUCIÓN DEL PROFESOR

 Ayudando a Jhon Wick



Jhon Wick desde que comenzó a programar C++ esta obsesionado con la obtención de números primos en el rango de 5000 a 10000, sin embargo su invidente amigo Caine se ha encardo de agregarle retos adicionales a Jhon Wick. como por ejemplo:

Solo los números que su centena sea 1 ó solo los números que tengan 7 como decena. Esta complejidad a atormentado a Jhon Wick y en consecuencia él le ha solicitado ayuda a uds.

El profesor sin embargo modificara el requerimiento por solicitud del propio Caine de manera de incrementar la dificultad. Los alumnos deberán trabajar en pareja para la actividad del día de hoy. 

A ninguno de uds. le conviene quedar mal con el Sr. Wick

Éxitos.


VER VIDEO EXPLICATIVO


Programa


/*Programa para determinar los números primos entre

5000 y 10000 cuya decena sea 7 y su centena sea 1

autor: Carlos Ferrer

Rev Sep 2026*/


#include <iostream>

using namespace std;


main()

{

int n=5000; //n = números a verificar

int div=2,div10,div100,decena,centena; // divisores para verficar si es primo

int residuo;

repetir:

residuo=n%div; //determinamos el residuo

if (residuo!=0) //verificamos si la división dio exacta

{

div=div+1; //Si no dio exacta incrementamos el divisor

}

else

{

if (n==div) //Si el numero es primo lo muestro en consola

{

div10=n/10; //verifico si la decena es 7

div10=div10+3;

decena=div10%10;

div100=n/100; //Verifico si la centena es 1

div100=div100+9;

centena=div100%10;

if (decena==0 and centena==0)

{

cout <<n<<" ";

}

    }

n=n+1; // me paso al siguiente numero

div=2;

}

if (n<=10000)

{

goto repetir;

}

else

{

system("pause");

}

}