viernes, 26 de septiembre de 2025

01h.- Programación I - Primera Evaluación Jueves 02 de Octubre

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





01g.- Programación I - Programa elaborado en clase 20 de marzo 2025

  /*Programa que calcula los primeros 200 números divisibles entre

tres (3) que terminan en siete (7) en un rango ingresado por el usuario.

para guardarlos posteriormente en un arreglo y presentarlos en pantalla

Elaborado por Carlos Ferrer

Rev. 26 de septiembre de 2025*/


#include <iostream>

using namespace std;


main()

{

//Rangos a=valor menor b=Valor mayor

int menor, mayor;


// Numero a estudiar

int num;


// Arreglo donde guardaremos los resultados

int resultado[201];


//índice 

int i;


//Borramos el contenido del arreglo colocando -1 a todos sus elementos

for (i=0;i<=200;i=i+1)

{

resultado[i]=-1;

}

//recibimos los rangos

do

{

cout <<"Ingrese valor inferior del rango (>0) = ";

cin >>menor;

system("cls");

}

while (menor<0);


do

{

cout <<"Ingrese valor superior del rango = ";

cin >>mayor;

system("cls");

}

while (mayor<menor);

// Determinamos los numeros requerido y los metemos en el arreglo

i=1;

for (num=menor;num<=mayor;num=num+1)


{

    //Determinamos si es divisible entre 3 y si termina en 7

if (num%3==0 and (num+3)%10==0) 

{

     resultado[i]=num;

     i=i+1;

}

}

//presentamos los resultados

cout <<endl<<"Numeros divisibles entre 3 "<<endl;

cout <<"que terminan en 7 en el rango de "<<endl;

cout <<menor<<" hasta "<<mayor<<endl;

cout <<"(maximo 200 numeros)"<<endl<<endl;

cout <<"------------------------------------------------------------------"<<endl<<endl;


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

{

if (resultado[i]==-1)

{

cout <<endl<<endl;

break;

}

cout <<resultado[i]<<" ";

}


}

Resultados





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

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 - 26 de septiembre de 2025*/

 

 #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 - 26 de septiembre de 2025*/

 

 #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 - 26 de septiembre de 2025*/

 

 #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 - 26 de septiembre de 2025*/


 #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");

}

jueves, 25 de septiembre de 2025

01e.- Programación I - Programa para presentar en la consola Números Primos en un rango especifico que terminen en una cifra especifica

Inicialmente se les entrego a los estudiantes un programa elaborado por el profesor que presenta en pantalla todos los números primos contenidos en un rango a partir del numero 2. (Números primos son números que solo pueden ser divididos exactamente entre 1 y ellos mismos)

Programa Inicial

 /* Programa elaborado: Carlos Ferrer 

Este programa presenta en la consola todos los números primos

en un rango especifico

fecha: 25-sep-2025

*/


#include<iostream> //Biblioteca para manejar la consola

using namespace std; // Instrucción para evitar escribir std constantemente


main()

{

int menor,mayor; //Rango a estudiar

int n; //Numero a estudiar

int div; //Divisor


// Se solicita el rango a estudiar


cout <<"ingrese el limite inferior del rango a estudiar (>=2) = ";

cin >>menor;


cout <<"ingrese el limite superior del rango a estudiar (>=limite menor) = ";

cin >>mayor;


//Se imprime el encabezado


cout <<endl<<"NUMEROS primos ENTRE "<<menor<<" Y "<<mayor<<endl<<endl;


// Se determina si el numero n es primo


n=menor;

evaluar_otro_numero:

div=2;


seguir_dividiendo:

if (n%div==0) //Se verifica si la división fue exacta

{

/*Se verifica si el divisor es menor que el numero de estudio

  de ser así el numero no es primo*/ 

if (div<n)  

{

        n=n+1; //Se pasa al numero siguiente

        }

else // El numero es primo y se presenta en la consola

cout <<n<<" "; 

n=n+1;

}

goto evaluar_otro_numero; //se pasa al numero siguiente

}


//Si el divisor no divide exactamente aumentamos el divisor


if (n<mayor) 

   {

div=div+1;

goto seguir_dividiendo;

   }



Posteriormente el profesor les indico a los estudiantes que modificaran el programa para presentar los números primos que finalizaran en siete (7).

Uno de los estudiantes propuso la idea de que: Se le sumara al numero primo 3 y posteriormente se dividiera entre 10, si esa operación no presentaba residuo el numero terminaba en siete (7), al profesor le gusto la idea del estudiante y les solicito a los alumnos que la pusieran en marcha. Veamos como lo programó el profesor: 

 

2do Programa - Solo los que terminan en 7


 /* Programa elaborado: Carlos Ferrer 

Este programa presenta en la consola todos los números primos que terminan en 7

en un rango especifico

fecha: 25-sep-2025

*/


#include<iostream> //Biblioteca para manejar la consola

using namespace std; // Instrucción para evitar escribir std constantemente


main()

{

int menor,mayor; //Rango a estudiar

int n; //Numero a estudiar

int div; //Divisor


// Se solicita el rango a estudiar


cout <<"ingrese el limite inferior del rango a estudiar (>=2) = ";

cin >>menor;


cout <<"ingrese el limite superior del rango a estudiar (>=limite menor) = ";

cin >>mayor;


//Se imprime el encabezado


cout <<endl<<"NUMEROS primos que terminan en 7 ENTRE "<<menor<<" Y "<<mayor<<endl<<endl;


// Se determina si el numero n es primo


n=menor;

evaluar_otro_numero:

div=2;


seguir_dividiendo:

if (n%div==0) //Se verifica si la división fue exacta

{

/*Se verifica si el divisor es menor que el numero de estudio

  de ser así el numero no es primo*/ 

if (div<n)  

{

        n=n+1; //Se pasa al numero siguiente

        }

else // El numero es primo y se presenta en la consola

            if((n+3)%10==0) //Verificamos que termine en 7

                {

        cout <<n<<" "; 

                }

n=n+1;

}

goto evaluar_otro_numero; //se pasa al numero siguiente

}


//Si el divisor no divide exactamente aumentamos el divisor


if (n<mayor) 

   {

div=div+1;

goto seguir_dividiendo;

   }


Luego el profesor les indico a los estudiantes que modificaran que solicitara el numero de finalización al principio.
 Veamos como lo programó el profesor: 

3er Programa  - Solicitando el nro. de finalización

 /* Programa elaborado: Carlos Ferrer 

Este programa presenta en la consola todos los números primos que terminan

en una cifra especifica en un rango especifico

fecha: 25-sep-2025

*/


#include<iostream> //Biblioteca para manejar la consola

using namespace std; // Instrucción para evitar escribir std constantemente


main()

{

int menor,mayor; //Rango a estudiar

int n; //Numero a estudiar

int div; //Divisor

int cifra_final; //cifra final de los números primos a presentar


// Se solicita el rango a estudiar


cout <<"ingrese el limite inferior del rango a estudiar (>=2) = ";

cin >>menor;


cout <<"ingrese el limite superior del rango a estudiar (>=limite menor) = ";

cin >>mayor;


//solicitamos la cifra de finalización

cout <<"ingrese la cifra de final de los numeros primo = ";

cin >>cifra_final;

//Se imprime el encabezado


cout <<endl<<"NUMEROS primos que terminan en "<<cifra_final<<" ENTRE "<<menor<<" Y "<<mayor<<endl<<endl;


// Se determina si el numero n es primo


n=menor;

evaluar_otro_numero:

div=2;


seguir_dividiendo:

if (n%div==0) //Se verifica si la división fue exacta

{

/*Se verifica si el divisor es menor que el numero de estudio

  de ser así el numero no es primo*/ 

if (div<n)  

{

        n=n+1; //Se pasa al numero siguiente

        }

else // El numero es primo y se presenta en la consola

            if((n+(10-cifra_final))%10==0) //Verificamos que termine en la cifra exigida

                {

        cout <<n<<" "; 

                }

n=n+1;

}

goto evaluar_otro_numero; //se pasa al numero siguiente

}


//Si el divisor no divide exactamente aumentamos el divisor


if (n<mayor) 

   {

div=div+1;

goto seguir_dividiendo;

   }


LO MAS IMPORTANTE ES QUE PARA HACER ESAS MODIFICACIONES EL PROFESOR USO LA TÉCNICA DE LA DEPURACIÓN (DEBUGGING) DE FORMA DE CORREGIR LO QUE IMPLEMENTABA HASTA LOGRAR EL RESULTADO ESPERADO.

INTENTE HACERLO UD. SIN VER EL PROGRAMA ORIGINAL.

EXITO!!!!!!