USM PROG I
Blog informativo Cátedra de Programación I Profesor: Ing Carlos Ferrer - USM Caracas
lunes, 11 de mayo de 2026
sábado, 25 de abril de 2026
02f.- Programación I - Maquina tragamonedas - Actividad en grupo Jueves 30 de Abril de 2026
Ustedes deberán elaborar un programa que emule una maquina tragamonedas, superior a la que presentó el profesor en el video asociado al siguiente enlace:
Maquina Tragamonedas Versión 2.1 (11 de abril de 2025)
En la versión del video el profesor trabajo con ($, &, %, #), esta vez el profesor les solicita que trabajen con: (♠, ♦, ♣, ♥) en la medida de lo posible. Los estudiantes deberán ubicarse en grupos de tres (3) personas preferiblemente (máximo 4). NO se revisaran trabajos ejecutados de forma individual o en pareja. La ausencia de un miembro del grupo anula la participación de todo el grupo.
Un estudiante del grupo será seleccionado por el profesor para defender el trabajo el día jueves 30 de abril de 2026, el estudiante deberá estar en la capacidad de modificar el programa en caliente y responder cualquier pregunta que le haga el profesor. La calificación de este estudiante es la calificación de todo el grupo.
El programa deberá presentarse en Dev C++ Embarcadero versión 6.3 otros editores no serán aceptado. Para que todos los estudiantes compitan bajo las mismas reglas, solo se aceptarán el uso de las siguientes bibliotecas:
- Iostream
- windows.h
- locale.h
- conio.h
- time.h
- math.h
viernes, 24 de abril de 2026
02e.- Programación I - "Beep" y el "Sleep" (Windows.h), números aleatorios (Time.h) y Kbhit y getch (conio.h) (C++)
En la programación es habitual la necesidad de generar números aleatorios, en su concepto mas simple un numero aleatorio es: un número que se genera al azar, sin seguir un patrón o una secuencia predecible. Se utiliza en una variedad de aplicaciones, como juegos, simulaciones, criptografía y pruebas de estadísticas.
Los números aleatorios se utilizan en muchos campos para simular situaciones aleatorias y realizar experimentos estadísticos. Por ejemplo, en los juegos de azar, los números aleatorios se utilizan para determinar el resultado de cada ronda, y en las pruebas estadísticas, los números aleatorios se utilizan para seleccionar muestras de una población para estudiar.
Es importante tener en cuenta que, aunque un número aleatorio parece ser completamente aleatorio e impredecible, en realidad es generado por un algoritmo o un proceso que sigue ciertas reglas matemáticas o físicas. Sin embargo, estos algoritmos se diseñan para producir números que parezcan aleatorios y que no sigan ningún patrón predecible. En C++ se utilizan generalmente dos bibliotecas para generar números aleatorios la biblioteca "Windows.h" y la "time.h".
Existen otras bibliotecas que también manejan las mismas instrucciones por ejemplo la "stdlib" y la "ctime", para generar los numeros aleatorios el uso de una u otra es indiferente.
Lo primero que se hace es definir la fuente de los números aleatorios para esto se usa la instrucción:
srand(time(NULL)); // srand significa fuente de números aleatorios.
Nota: Se puede usar time(NULL) o time(0), los cuales son en realidad lo mismo, ya que ambos pasan un puntero nulo o un valor entero cero como argumento a la función time(). En otras palabras, time(NULL) y time(0) solicitan a la función time() que devuelva la hora actual del sistema en forma de valor entero sin cambiar ningún valor.
Posteriormente se procede a utilizar la técnica del residuo para obtener nuestro numero aleatorio, recordemos que al dividir un numero A entre un numero B el residuo podrá presentar valores entre 0 y (B-1), por ejemplo al dividir cualquier numero entero entre 10 el residuo de la operación presentara valores entre 0 y 9. Veamos si queremos generar números aleatorios entre 0 y 100 bastaría con colocara la siguiente instrucción:
int aleatorio;
aleatorio = rand()%101;
en pocas palabras cualquier numero entero al dividirse entre 101 presentará en el residuo de la operación números aleatorios entre 0 y 100. Veamos otros ejemplos.
Ejemplo Nro. 1: Números aleatorios entre 50 y 376:
como la diferencia en 376-50=326, bastaría con dividir entre 327 para obtener en el residuo de la operación números entre 0-326,
aleatorio = 50+ rand()%327;
Ejemplo Nro. 2: Números aleatorios entre -200 y 150:
como la diferencia en 150-(-200)=350, bastaría con dividir entre 351 para obtener en el residuo de la operación números entre 0-350,
aleatorio = -200+ rand()%351;
Ejemplo Nro. 3: Números aleatorios entre -0.31 y 0.55:
como la diferencia en 55-(-31)=86, bastaría con dividir entre 87 para obtener en el residuo de la operación números entre 0-86 y luego el resultado dividirlo entre 100.
float aleatorio;
aleatorio = (-31+ rand()%87);
aleatorio=aleatorio/100;
Nota: función rand() retorna enteros, su presencia en cualquier ecuación generará un numero entero, en consecuencia la división entre 100 debe hacerse después de generarse el numero entero. Basados en el ultimo ejemplo elaboremos un programa que genere 10 números aleatorios entre -0..31 y 0.55 cada vez que se genere un numero la PC producirá un sonido de 250 Hertz con duración de un cuarto de segundo, para esto usaremos la instrucción "Beep" de la biblioteca "Windows.h":
PROGRAMA
/*Ejemplo números aleatorios y Beep
elaborado por Carlos Ferrer
rev. Abril 2023*/
#include <iostream>
#include <windows.h>
#include <time.h>
using namespace std;
int main()
{
float aleatorio;
srand(time(NULL)); // Indica que la fuente (Source) de números aleatorios es el contador la hora actual
for (int i = 0; i < 10; i=i+1)
{ // generamos 10 números aleatorios
aleatorio = (-31+ rand()%87);
aleatorio = aleatorio/100;
// generamos un número aleatorio entre -0.31 y 0.55 (usando el residuo de la división entre 87)
Beep(250,250);
// El sonido tarda 250 ms completemos el segundo colocandoles una espera de 750ms
Sleep(750);
cout << aleatorio << " / "; // mostramos el número generado
}
}
jueves, 23 de abril de 2026
02d.- Programación I - Programa bomba Cars 2 utilizando la técnica del Kbhit y del Getch de la biblioteca Conio.h
Video explicativo del Programa
PROGRAMA
/* Programa de desactivación de la bomba de la película
Cars 2 utilizando la técnica del Kbhit y del Getch de
la biblioteca Conio.h
Rev 0;
Elaborado: Carlos Ferrer
*/
#include <iostream>
#include <Windows.h>
#include <conio.h>
using namespace std;
main()
{
int m=5,s=0; //Minutos y Segundos
char tecla='*'; //Retorno de tecla pisada
//Inicializamos la pantalla
system ("cls");
cout <<endl<<"Ingrese letra para desactivar bomba = "<<tecla<<endl;
cout <<endl<<"Tiempo para explotar la bomba = "<<m<<":"<<s;
cout << endl;
//Activamos el reloj de la Bomba
while (m>=0)
{
s=s-1;
if (s<0)
{
s=59;
m=m-1;
}
Sleep (800);
Beep (400,200);
system ("cls");
cout <<endl<<"Ingrese letra para desactivar bomba = "<<tecla<<endl;
cout <<endl<<"Tiempo para explotar la bomba = "<<m<<":"<<s;
cout << endl;
//Detectamos la tecla pisada
if (kbhit()!=0)
{
tecla=getch();
if (tecla=='x' or tecla=='X')
{
goto desactivada;
}
else
{
cout <<endl<<"Clave invalida! se resta 1 min a "<<m<<":"<<s;
cout << endl;
m=m-1;
Beep(800,200);
Beep(600,300);
Beep(400,500);
}
}
}
//Bomba explotando
system("cls");
cout <<endl<<"Tiempo agotado ===> Boooom!!! ";
cout << endl;
Beep(523, 100);
Sleep(50);
Beep(392, 100);
Sleep(50);
Beep(330, 100);
Sleep(50);
Beep(262, 150);
Sleep(50);
Beep(196, 500);
exit(0);
//Desactivar la bomba
desactivada:
cout <<endl<<"Gracias por desactivar la Bomba Sir Miles Axlerod!!! ";
cout << endl;
m=m-1;
Beep(750, 150);
Beep(1000, 150);
Beep(1250, 150);
Beep(1500, 400);
}
lunes, 20 de abril de 2026
02c.- Programación I - Biblioteca "Locale.h" y depuración de variables string
DEPURACIÓN DE VARIABLES STRING
Depurar variables string con la versión oficial 5.9.2 es muy complicado, lamentablemente la versión oficial presenta problemas de depuración, veamos un ejemplo:
Como se puede ver la variable no se visualiza para poder apreciarla, hay que desplegarla:
esto es fastidioso pero tolerable, el real problema es cuando tratas de ejecutar el programa línea a línea con la opción "Siguiente Paso", al llegar a una línea con variable tipo "string", la depuración se queda colgada. En consecuencia No depures variables "string con la versión estándar 5.9.2 (versión azul)"
La alternativa es usar la versión 6.3 de la empresa embarcadero, la cual opera apropiadamente la depuración de variables "string":
SE VISUALIZAN BIEN LAS VARIABLES Y EL PROGRAMA NO SE CUELGA CON LA OPCIÓN SIGUIENTE PASO.
Biblioteca Locale.h
Mucha veces los estudiantes desean trabajar con caracteres acentuados (á, é, í, ó y ú) y la letra eñe (ñ), el dev C++ en su versión oficial 5.9.2 (versión azul) dispone de una biblioteca que permite adecuar el lenguaje de las variable string a el lenguaje que tu desees, esta biblioteca se llama "Locale.h", la misma debe ser incluida en el programa y al iniciar tu programa debes indicarle bajo que lenguaje trabajaras, veamos un ejemplo:
#include <iostream>
#include <locale.h> //LIBRERIA PARA TRABAJAR CON LOS CARACTERES ACENTUADOS Y LA LETRA Ñ
using namespace std;
main()
{
string variable="Este programa utiliza caracteres acentuados y la letra eñe: áéíóúñ ÁÉÍÓÚÑ";
setlocale(LC_ALL, "spanish"); //SETEAR EL LEGUAGE EN ESPAÑOL
cout <<variable<<endl;
}
Por lo tanto si deseas usar caracteres especiales debes incluir esta biblioteca.
La biblioteca "locale.h" trabaja bien en la versión estándar 5.9.2 ya que esta esta diseñada para el mercado mundial. la versión de la empresa embarcadero no trabaja bien con la biblioteca "locale.h", a mediados del año pasado les pase cun correo notificando esta situación, ellos contestaron que dado mi requerimiento harian la corrección para la versión 6.4.
Para trabajar con caracteres acentuados en la versión actual de la empresa embarcadero 6.3 (versión roja), debes primero compilar el programa en la versión estándar 5.9.2 (versión azul) y cerrar la versión azul y abrir el programa en la versión de la empresa embarcadero 6.3 (versión roja) otra opción que funciona es salvar con tro nombre en embarcadero y luego compilar nuevamente, no hace falta que este completo el programa basta con que tenga el encabezado y la biblioteca "locale.h" agregada.
Si por error presionaste "Yes", copia el codigo, cierra embarcadero, abre nuevamente pega el código y repite el proceso desde cero.
A partir de ese momento puedes trabajar el programa y los caracteres acentuados operaran apropiadamente, pero debes recordar que al compilar no debes convertir los caracteres a UTF8, de hacerlo perderás los caracteres acentuados y la letra "ñ". Para que esto no suceda debes seleccionar "NO" cada vez que el programa te lo indique.
Éxito!!!!!










