viernes, 28 de noviembre de 2025

03d.- Programación I - Funciones

Una función en C++ es un fragmento de código que se puede llamar desde cualquier punto de un programa principal (main). En C++ podemos diferenciar entre dos tipos de funciones:

  • Aquellas que no tienen retorno void  (Vacias).
  • Aquellas que retornan un tipo de dato (como int, double o cualquier otro),

IMPORTANTE: NO SOBREUTILICE LAS FUNCIONES, EL USO DE LAS MISMAS SE JUSTIFICA SI DENTRO DE LOS PROGRAMAS HAY PROCEDIMIENTOS QUE SE REPITEN MULTIPLES VECES.

ORGANIZAR UN PROGRAMA CON EL USO DE LAS FUNCIONES  PUEDE SER UNA COSTUMBRE INAPROPIADA.


Ejemplo de función tipo void:



#include <iostream>
using namespace std;

void sumaDosEnteros (int entero1, int entero2) 
{
    int resultado = 0;
    resultado = entero1 + entero2;
  cout <<endl<<"Si sumamos "<<entero1<<" + "<<entero2<< " obtenemos el numero = "<<resultado<<endl<<endl;
     system("pause");
     return; 
}
int main() 
{
 int numero[3]={0};
 int i;
 cout<<"Bienvenidos al programa que suma 2 numeros usando funciones con void"<<endl;
 cout<<"Elaborado por Carlos Ferrer"<<endl;

 for(i=1;i<=2;i=i+1)
     {
     cout <<endl<<"Ingrese numero "<<i<<" = ";
     cin >>numero[i];
     }

 sumaDosEnteros(numero[1],numero[2]);
 return 0;
}

Veamos el mismo programa usando función de retorno:

#include <iostream>
using namespace std;

int sumaDosEnteros (int entero1, int entero2) 
    {
     int resultado = 0;
     resultado = entero1 + entero2;
     return resultado; 
    }

main() 
{
 int numero[3]={0};
 int i;
 cout<<"Bienvenidos al programa que suma 2 numeros usando funciones de retorno de dato"<<endl;
 cout<<"Elaborado por Carlos Ferrer"<<endl;

 for(i=1;i<=2;i=i+1)
     {
     cout <<endl<<"Ingrese numero "<<i<<" = ";
     cin >>numero[i];
     }
cout <<endl<<"Si sumamos "<<numero[1]<<" + "<<numero[2]<< " obtenemos el numero = "<<sumaDosEnteros(numero[1],numero[2])<<endl<<endl;
 system("pause");
 }

Como vemos, las funciones las hemos situado antes de la función main. Alternativamente, podemos situar el cuerpo de las funciones después de la función main. Veamos nuevamente los dos programas haciendo ese ajuste de posición (Colocando la función al final).

 

Ejemplo de función tipo void - colocando la función al final (Noten la doble declaración):


#include <iostream>
using namespace std;

int main() 
{
 int numero[3]={0};
 int i;
 void sumaDosEnteros (int entero1, int entero2); //PRIMERA DECLARACIÓN

 cout<<"Bienvenidos al programa que suma 2 numeros usando funciones con void"<<endl;
 cout<<"Elaborado por Carlos Ferrer"<<endl;

  for(i=1;i<=2;i=i+1)
 {
 cout <<endl<<"Ingrese numero "<<i<<" = ";
 cin >>numero[i];
 }

sumaDosEnteros(numero[1],numero[2]); 
return 0;

}

void sumaDosEnteros (int entero1, int entero2) //2da DECLARACION Y DESARROLLO
{
 int resultado = 0;
 resultado = entero1 + entero2;
cout <<endl<<"Si sumamos "<<entero1<<" + "<<entero2<< " obtenemos el numero = "<<resultado<<endl<<endl;

 system("pause");
 return; 
}

Veamos el mismo programa usando función de retorno - colocando la función al final (Noten nuevamente la doble declaración):


#include <iostream>
using namespace std;

int main() 

{

 int numero[3]={0};
 int i;
 int sumaDosEnteros (int entero1, int entero2);  //1ra DECLARACIÓN

 cout<<"Bienvenidos al programa que suma 2 numeros usando funciones de retorno de dato"<<endl;
 cout<<"Elaborado por Carlos Ferrer"<<endl;

 for(i=1;i<=2;i=i+1)
 {
 cout <<endl<<"Ingrese numero "<<i<<" = ";
 cin >>numero[i];
 }

 cout <<endl<<"Si sumamos "<<numero[1]<<" + "<<numero[2]<< " obtenemos el numero = "<<sumaDosEnteros(numero[1],numero[2])<<endl<<endl;
 system("pause");

 return 0;

}

int sumaDosEnteros (int entero1, int entero2) //2da DECLARACIÓN Y DESARROLLO
{
 int resultado = 0;
 resultado = entero1 + entero2;
 return resultado; 
}

Por último, les dejo un programa sencillo, con el cual un profesor de primaria calcula la nota promedio de sus alumnos - máximo 20 alumnos, que pueden cursar hasta un máximo de 10 materias distintas. El ejemplo usa una función de retorno de datos. En este caso especifico se le envía un arreglo a la función, y la función recibe el arreglo sin importar la cantidad de elementos que son enviados.

#include <iostream>
using namespace std;

main() 
{

    float notas[11];
    string nombre[21]={""};
    string opcion="s";
    int n, i, j=1;
    float notas_finales[21]={0};
    float promedio(float valores[], int cantidad); 

   cout<<"Elaborado por Carlos Ferrer"<<endl;

    while ((opcion== "s" or opcion == "S") and j<20)
    {
        cout<<"Escriba el apellido del alumno nro "<<j<<" (Max 20)= ";
        cin>> nombre[j];
n=0;
while(n<1 or n>10)
{
cout<<"Cuantas notas tiene "<<nombre[j]<<" (Max 10)= ";
    cin>> n;
}

       for (i = 0; i < n; i=i+1) 
      {
         notas[i]=-1;
         while(notas[i]<0 or notas[i]>20)
{
cout<<"  Nota "<< i + 1<<" (Rango 0-20)= ";
                cin>> notas[i];
                }
      }
        notas_finales[j]=promedio(notas, n);
        cout<<"El promedio de "<<nombre[j]<<" es: "<< notas_finales[j]<<endl;

        cout<<"Desea calcular mas promedios (S=continuar)? ";
        cin>> opcion;
        j=j+1;
       system ("cls");

    }
    i=1;
    cout <<endl<<"RESUMEN"<<endl;
    while (nombre[i] != "" and i<21)
    {
    cout<<"El alumno "<<nombre[i]<<" tiene un promedio de = "<<notas_finales[i]<<endl;
    i=i+1;
   }

}



float promedio (float valores[], int cantidad) 

{

    int i;
    float suma = 0.0;     /*El ciclo for cuenta el número de notas que desea promediar*/

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

    {
    suma=suma+valores[i];
    }

    suma=suma/cantidad;
    return suma;

}

IMPORTANTE: Para retornar mas de un datos desde una función se puede utilizar datos de memoria con la técnica de los apuntadores.

Éxitos !!!!

martes, 25 de noviembre de 2025

03c.- Programación I - Actividad Financiera para el Jueves 27 de Nov de 2025 (semestre 2026-I)

El siguiente enlace los conducirá a un vídeo donde se ejecuta el estudio de los Prestamos o Créditos de cuota fija con interés fijo y plazo variable.

Video Explicativo - Actividad Financiera

Muchas veces se les permite a los solicitantes hacer aportes extraordinarios para reducir los periodos de pagos, en nuestro caso permitiremos un (1) solo pago extraordinario.

Se elaboró una hoja en Excel con detalles de un préstamo con la posibilidad  de ejecutar aportes extraordinarios. La misma indica como se van calculando los intereses y se van ejecutando los pagos.

El archivo en Excel puede descargarse desde el siguiente enlace:

Prestamos o Créditos Prestamos de cuota fija con interés fijo y con posibilidad de ejecución aportes extraordinarios.

El profesor elaboró un programa que ejecuta el cálculo similar a como lo hace Excel. El siguiente enlace contiene el ejecutable del programa elaborado por el profesor:

Programa Para Prestamos o Créditos Prestamos de cuota fija con interés fijo y con posibilidad de ejecución aportes extraordinarios. Elaborado por Carlos Ferrer


El programa deberá manejar las siguientes condiciones:

  • Intereses entre 2% y 10%.
  • Periodos de pago de 12 a 48 meses.
  • El programa deberá manejar al menos una estructura
  • El programa deberá maximizar el uso de arreglos.

Se recomienda elaborar esta actividad aunque se aclara que ESTA ACTIVIDAD SERÁ EVALUADA

Éxito!!!!

ARCHIVO DE EXCEL




PROGRAMA




REPORTE (ARCHIVO DE TEXTO)




03b.- 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 una versión rápida del mismo: 


PROGRAMA 


/* Programa para resolver sistemas de 3 ecuaciones 

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

   elaborado por Carlos Ferrer

   rev 24 de Nov de 2025

*/


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

}