jueves, 5 de noviembre de 2026

03g.- Programación I - Regla de Cramer (Sistema de tres ecuaciones con tres incognitas)



En algebra lineal uno de los métodos más usados para resolver sistemas de tres (3)  ecuaciones con tres (3) incógnitas es la famosa "Regla de Cramer".

Veamos el siguiente ejemplo de un sistema de tres (3) ecuaciones con tres (3) incógnitas.



La regla de Cramer consiste en:

1ro.- Hallar el “Determinante de la matriz” que se construye a partir de los coeficientes que multiplican a las incógnitas de las tres ecuaciones (Para nuestro ejemplo x - y - z). Este determinante se denomina ∆.

Por ejemplo:


Para hallar el valor del determinante (∆) se copian las primeras dos (2) filas al final del determinante generando un matriz de cinco (5) filas por tres (3) columnas, para nuestro ejemplo la matriz quedaría de la siguiente forma:


Posteriormente se halla el determinante (∆), el cual es igual a la sumatoria de los productos de las diagonales de tres (3) elementos de izquierda a derecha menos la sumatoria de los productos de las diagonales de tres (3) elementos de derecha a izquierda. Veamos el cálculo según nuestro ejemplo:





2do.- Después de hallar el “Determinante de la matriz” se procede a hallar el determinante de cada variable, para nuestro ejemplo hallaremos ∆x. Para hallar ∆x se sustituye el resultado de las ecuaciones en la columna de la variable que queremos determinar, veamos el ejemplo para hallar ∆x:



Ahora repetimos el mismo procedimiento que usamos para hallar ∆ en ∆x. Copiamos las dos primeras filas al final y la convertimos en una matriz de 5 filas y 3 columnas:





Ahora hallamos ∆x:


En consecuencia al conocer ∆ y ∆x podemos obtener el valor de x, 

3ro.- Se repite el proceso para halla ∆y y ∆z. Una vez hallados ambos valores y conociendo el determinante ∆ podemos encontrar los valores de y y z que satisfacen las tres (3) ecuaciones.


En C++ existe la posibilidad de elaborar arreglos de múltiples dimensiones, en consecuencia se podría elaborar un programa que emule la Regla de Cramer, a continuación les presento dos versiones del mismo programa, una sencilla y la otra más elaborada: 


PROGRAMA Nro 1. (Simple Programa del video - Sin comentarios)

#include<iostream>

#include<locale.h>

using namespace std;


main()

{

double m1[4][4];

double s[4];

double m2[6][4];

double delta,deltaX,deltaY,deltaZ,aux1,aux2,X,Y,Z;

setlocale(LC_ALL,"spanish");

int f=1,c=1;

while (f<=3)

{

while (c<=3)

{

cout <<"Favor ingrese M1["<<f<<","<<c<<"]= ";

cin >>m1[f][c];

c=c+1;

}

f=f+1;

c=1;

}

f=1;

repite:

cout <<"Favor ingrese resultado de la ecuación nro. 0"<<f<<" = ";

cin >>s[f];

f=f+1;

if (f<=3)

{

goto repite;

}

for (f=0;f<=3;f=f+1)

{

for(c=0;c<=3;c=c+1)

{

m2[f][c]=m1[f][c];

}

}

for (f=4;f<=5;f=f+1)

{

for(c=0;c<=3;c=c+1)

{

m2[f][c]=m1[f-3][c];

}

}

aux1= m2[1][1]*m2[2][2]*m2[3][3]+m2[2][1]*m2[3][2]*m2[4][3]+m2[3][1]*m2[4][2]*m2[5][3];

aux2= m2[1][3]*m2[2][2]*m2[3][1]+m2[2][3]*m2[3][2]*m2[4][1]+m2[3][3]*m2[4][2]*m2[5][1];

delta=aux1-aux2;


m2[1][1]=s[1];

m2[2][1]=s[2];

m2[3][1]=s[3];

m2[4][1]=s[1];

m2[5][1]=s[2];

aux1= m2[1][1]*m2[2][2]*m2[3][3]+m2[2][1]*m2[3][2]*m2[4][3]+m2[3][1]*m2[4][2]*m2[5][3];

aux2= m2[1][3]*m2[2][2]*m2[3][1]+m2[2][3]*m2[3][2]*m2[4][1]+m2[3][3]*m2[4][2]*m2[5][1];

deltaX=aux1-aux2;

X=deltaX/delta;



for (f=0;f<=3;f=f+1)

{

for(c=0;c<=3;c=c+1)

{

m2[f][c]=m1[f][c];

}

}

for (f=4;f<=5;f=f+1)

{

for(c=0;c<=3;c=c+1)

{

m2[f][c]=m1[f-3][c];

}

}

m2[1][2]=s[1];

m2[2][2]=s[2];

m2[3][2]=s[3];

m2[4][2]=s[1];

m2[5][2]=s[2];


aux1= m2[1][1]*m2[2][2]*m2[3][3]+m2[2][1]*m2[3][2]*m2[4][3]+m2[3][1]*m2[4][2]*m2[5][3];

aux2= m2[1][3]*m2[2][2]*m2[3][1]+m2[2][3]*m2[3][2]*m2[4][1]+m2[3][3]*m2[4][2]*m2[5][1];

deltaY=aux1-aux2;

Y=deltaY/delta;


for (f=0;f<=3;f=f+1)

{

for(c=0;c<=3;c=c+1)

{

m2[f][c]=m1[f][c];

}

}

for (f=4;f<=5;f=f+1)

{

for(c=0;c<=3;c=c+1)

{

m2[f][c]=m1[f-3][c];

}

}

m2[1][3]=s[1];

m2[2][3]=s[2];

m2[3][3]=s[3];

m2[4][3]=s[1];

m2[5][3]=s[2];


aux1= m2[1][1]*m2[2][2]*m2[3][3]+m2[2][1]*m2[3][2]*m2[4][3]+m2[3][1]*m2[4][2]*m2[5][3];

aux2= m2[1][3]*m2[2][2]*m2[3][1]+m2[2][3]*m2[3][2]*m2[4][1]+m2[3][3]*m2[4][2]*m2[5][1];

deltaZ=aux1-aux2;

Z=deltaZ/delta;


cout <<endl<<endl<<"Según la regla de Kramer el sistema nos daría los siguientes resultados: "<<endl;

cout <<endl<<"Delta= "<<delta<<endl;

cout <<"DeltaX= "<<deltaX<<endl;

cout <<"DeltaY= "<<deltaY<<endl;

cout <<"DeltaZ= "<<deltaZ<<endl<<endl;


cout <<"Por lo tanto...."<<endl<<endl;

cout <<"X= "<<X<<"  Y= "<<Y<<"  Z= "<<Z<<endl<<endl;


}

PROGRAMA Nro 2. (Mas elaborado)


/* Programa para resolver sistemas de 3 ecuaciones 

   con 3 incógnitas aplicando el método de Cramer

   elaborado por Carlos Ferrer

   rev 24 de May de 2026

*/


#include <iostream>

#include <locale.h>


using namespace std;


main()

{


int fila,col,i,j,k,m,fin;

int ma [4][5]={0};

int aux [6][4]={0};

int delta,deltax,deltay,deltaz;

string frase;

char delt=30;


setlocale (LC_ALL,"spanish");

cout <<"Método de Cramer resolver sistemas de tres ecuaciones"<<endl;

cout <<"con tres incógnitas"<<endl<<endl;


// Leemos los coeficientes de las tres ecuaciones


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

{

for (j=1;j<=4;j=j+1)

{

if (j==1)

{

frase="el coeficiente de la variable X";

}

if (j==2)

{

frase="el coeficiente de la variable Y";

}

if (j==3)

{

frase="el coeficiente de la variable Z";

}

if (j==4)

{

frase="el valor del resultado";

}

cout <<endl<<endl<<"Ingrese "<<frase<<" de la"<<endl;

cout <<"ecuación Nro. "<<i <<"= ";

cin >>ma[i][j];

system("cls");

// Presentamos las ecuaciones en la medida que se escriben

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

{

cout <<endl;

if (m==i)

{

fin=j;

    }

else

{

fin=4;

}

for (k=1;k<=fin;k=k+1)

{

if(k==1)

{

cout <<ma[m][k]<<"x";

}

if(k==2 and ma[m][k]>0)

{

cout <<"+"<<ma[m][k]<<"y";

}

if(k==2 and ma[m][k]<0)

{

cout <<ma[m][k]<<"y";

}

if(k==3 and ma[m][k]>0)

{

cout <<"+"<<ma[m][k]<<"z";

}

if(k==3 and ma[m][k]<0)

{

cout <<ma[m][k]<<"z";

}

if(k==4)

{

cout <<"="<<ma[m][k];

}

}

}

}

}

cout <<endl<<endl;

//Imprimimos la matriz ingresada

for (fila=1;fila<=3;fila=fila+1)

{

cout <<"|";

for (col=1;col<=3;col=col+1)

    {

    cout <<ma[fila][col];

if (ma[fila][col]<0)

{

cout <<" ";

}

else

{

cout <<"  ";

}

}

    cout <<"|";

cout<<endl;

}


// Copiamos la matriz ingresada en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila][col]=ma[fila][col];

}

}


// Copiamos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

    aux[fila+3][col]=aux[fila][col];

}

}



// Calculamos delta


delta=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

delta=delta+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Copiamos la matriz original en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila][col]=ma[fila][col];

}

}


//Copiamos los resultados en la primera columna


aux[1][1]=ma[1][4];

aux[2][1]=ma[2][4];

aux[3][1]=ma[3][4];


// Repetimos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila+3][col]=aux[fila][col];

}

}


// Calculamos delta x

deltax=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

deltax=deltax+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Copiamos la matriz original en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

  {

      aux[fila][col]=ma[fila][col];

}

}


//Copiamos los resultados en la segunda columna


aux[1][2]=ma[1][4];

aux[2][2]=ma[2][4];

aux[3][2]=ma[3][4];


// Repetimos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila+3][col]=aux[fila][col];

}

}

// Calculamos delta y

deltay=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

deltay=deltay+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Copiamos la matriz original en la matriz aux

for (fila=1;fila<=3;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila][col]=ma[fila][col];

}

}


//Copiamos los resultados en la tercera columna


aux[1][3]=ma[1][4];

aux[2][3]=ma[2][4];

aux[3][3]=ma[3][4];


// Repetimos las dos primeras filas en las filas cuatro y cinco

for (fila=1;fila<=2;fila=fila+1)

{

for (col=1;col<=3;col=col+1)

    {

      aux[fila+3][col]=aux[fila][col];

}

}

// Calculamos delta z


deltaz=0;

col=1;

for (fila=1;fila<=3;fila=fila+1)

{

deltaz=deltaz+ ((aux[fila][1]*aux[fila+1][2]*aux[fila+2][3])-(aux[fila][3]*aux[fila+1][2]*aux[fila+2][1]));

}



// Presentamos resultados


cout <<endl<<delt<<"="<<delta<<endl;

cout <<delt<<"x="<<deltax<<endl;

cout <<delt<<"y="<<deltay<<endl;

cout <<delt<<"z="<<deltaz<<endl;


cout <<endl<<"El valor de la variable x="<<deltax/delta<<endl;

cout <<"El valor de la variable y="<<deltay/delta<<endl; 

cout <<"El valor de la variable z="<<deltaz/delta<<endl;

}




lunes, 2 de noviembre de 2026

02f.- 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); 

}


sábado, 24 de octubre de 2026

02e.- Programación I - Juego de Muertos y Heridos

 ACTIVIDAD PARA EL JUEVES 29 DE OCTUBRE

Los alumnos deberán intentar programar el juego de los "Muertos y los Heridos".




El cual consiste en descubrir un numero de cuatro dígitos generados por el computador de forma aleatoria. El numero debe estar conformado por dígitos distintos, como por ejemplo 3257. Números con dígitos repetidos no serán considerados por el programa, por ejemplo 3378 o 4894 

El numero a buscar será generado por el programa de forma aleatoria, usando la libreria "time.h" y el comando srand(time(NULL)) entre otros.

El jugador deberá disponer de 7 intentos para descubrir el numero, en cada intento el programa le retornara la información de la cantidad de "Muertos y Heridos" de su apuesta. Los "Muertos" representan los dígitos que pertenecen a la respuesta y se encuentran en la posición correcta, los "Heridos" son dígitos que pertenecen a la respuesta y se encuentran en una posición incorrecta.

Por ejemplo para el numero aleatorio = 5286

El jugador tratando de descubrir arranca en su primer intento indicando que el numero es el 3769, el programa le reporta que su apuesta tiene un (1) herido y cero (0) muertos, o sea, uno (1) de los dígitos pertenece a la respuesta y esta en una posición incorrecta, en este caso el numero 6. Indirectamente informa que tres dígitos no pertenecen a la respuesta en este caso son los dígitos 3, 7 y 9.

En su segundo intento prueba con el numero 1234, el programa le responde que hay cero (0) heridos y un (1) muerto, para este caso es el dígito 2 que se encuentra en la misma posición dentro del numero de la solución. Indirectamente también informa que tres (3) dígitos no pertenecen a los que forman parte de la solución en este caso son los dígitos 1, 3 y 4.

Para el tercer intento prueba con 6285, el programa le indica que hay dos (2) heridos y dos (2) muertos, todas los dígitos son iguales a los que conforman al numero de la solución, dos (2) de ellos están ubicadas en la misma posición y las otras dos (2) se encuentran mal ubicados, para este ejemplo son las cifras 5 y 6. 

EL PROGRAMA SOLO DEBE INFORMAR LA CANTIDAD DE HERIDOS Y MUERTOS, NO DEBE DAR MAS INFORMACIÓN.

LOS NUMERO DEL JUGADOR DEBERAN SER INGRESADO DE FORMA COMPLETA, O SEA LOS CUATRO DIGITOS DE UNA VEZ, SI EL JUGADOR INGRESA LOS DIGITOS DE FORMA SEPARADA, SU PROGRAMA NO CALIFICARÁ PARA SER EVALUADO.

El programa debe informar si el jugador PERDIÓ en caso de que se agoten las siete (7) oportunidades y no acierte el número o si GANÓ en caso de que acierte el número (4 muertos) antes de que se agoten las siete (7) oportunidades.

El numero de vidas deberá ser indicadas de manera que el jugador conozcan cuantos intentos les quedan.

Cada numero apostado así como la información de los Muertos y los Heridos, debe mantenerse en pantalla, de manera que el jugador analice todas las jugadas previas.

El programa deberá al principio deberá solicitar el nombre del jugador y tratarlo en todo momento por su nombre.

Agregue sonidos y cualquier adicional que usted considere para hacer el juego lo más profesional posible. SEAN CREATIVOS USTEDES COMPITEN CONTRAS SUS COMPAÑEROS (SONIDOS, COLORES, APUESTAS EN DOLARES, ETC..).

Esta actividad deberá ser presentada en los laboratorios del día Jueves 04 de Mayo, los grupos no deben ser mayores de 3 personas ni menores de 2 personas. Se le consultará a un solo integrante del grupo detalles del programa y se le solicitará que haga una modificación al mismo, se calificará positivamente a los mejores programas pero recuerde la calificación del grupo corresponderá al desempeño del estudiante que defienda el programa. 

No hay tiempo en el laboratorio para desarrollar la actividad la misma deberá estar elaborada antes de entrar al laboratorio.

EXITO!!!!!!