FACULTAD REGIONAL MULTIDISCIPLINARIA DE CARAZO
IV Trabajo de Computación (Programación)
Programa de doctorado en Matemática Aplicada
Aprendizaje basadoenla resoluciónde problemas, mediante la
programación C
Los arreglos bidimensionales y los parámetros por referencia
Autores
 Cliffor Jerry Herrera Castrillo
 Norman Rafael López Sánchez
 Donald Ariel Hernández Muñoz
 Ileana María Martínez Méndez
Docente:
Dr. Harold Ramiro Gutiérrez Marcenaro.
09 Agosto 2019
Índice
I. Introducción
La programación y las matemáticas van de la mano, esto por la estrecha relación que existe
entre ambas, si bien se dice que la programación nace de las matemáticas, las cuales son muy
importantes y esenciales ya que todo código, sistema, circuito, software y algoritmo por muy
sencillo que se vea las utiliza, esto conlleva a darle importancia al uso y entendimiento de
esta, donde prácticamente todos los avances tecnológicos, los nuevos software, equipos entre
otras cosas que son ahora la representación viva de los avances científicos, es la
conformación pura de la matemática.
Este informe aborda dos aspectos muy importantes que complementan el repertorio de
conocimientos básicos que todo programador de computadoras debe poseer: Los arreglos
bidimensionales y los parámetros por referencia.
A través de los arreglos bidimensionales se pueden representar matrices numéricas y por ende
se tiene la posibilidad de implementar a través de ellos una amplia gama de métodos
matemáticos. Habitualmente, la forma de procesamiento de los arreglos bidimensionales es
por filas y columnas, en ese orden, para lo cual se utilizan ciclos for anidados, que
generalmente utilizan los índices i,j.
La metodología de análisis del Problema único, de la cuarta evaluación del Módulo de
Computación (programación), se basa en la explicación a detalle, describiendo la forma que
se utilizó para llegar a la solución del problema, así mismo se hacen comentarios de los
integrantes de este trabajo, los cuales contribuyeron a encontrar el algoritmo, que si bien es
una forma de hacerlo existen otras (con variaciones) en dependencia del estilo del
programador, además de forma implícita se presentan comentario sobre los aciertos y
dificultades en la resolución del problema, resaltando el proceso heurístico inherente y la
serendipia.
II. Objetivos
1. Hacer uso de la programación estructurada, modular y descendente, para resolver
problemas computacionales de nivel intermedio y avanzado.
2. Desarrollar técnicas de programación orientadas a la creación de programas robustos,
eficaces, eficientes, expandibles y reutilizables.
3. Reconocer la importancia de la dimensión estética de la programación, que contribuya a
la creación de su propio estilo como programador.
III. Desarrollo
EJERCICIO ÚNICO: La regla de Cramer es una técnica de solución adecuada cuando se
tiene un sistema pequeño de ecuaciones. Su implementación requiere del cálculo de
determinantes:
Tomando como referencia a (Chapra & Canale, 2007, págs. 250-251):
Determinantes: El determinante se puede ilustrar para un sistema de tres ecuaciones
simultáneas:
[A] {X} = {B}
Donde [A] es la matriz de coeficientes:
a11 a12 a13
[A]= a21 a22 a23
a31 a32 a33
El determinante D de este sistema se forma, a partir de los coeficientes del sistema, de la
siguiente manera:
a11 a12 a13
D= a21 a22 a23
a31 a32 a33
Aunque el determinante D y la matriz de coeficientes [A] se componen de los mismos
elementos, son conceptos matemáticos completamente diferentes. Por esto, para distinguirlos
visualmente se emplean corchetes para encerrar la matriz y líneas rectas verticales para el
determinante. En contraste con una matriz, el determinante es un simple número. Por
ejemplo, el valor del determinante de segundo orden
D=
a11 a12
a21 a22
Se calcula como
D = a11a22 - a12a21
En el caso del determinante de tercer orden … el determinante, que es un simple valor
numérico, se calcula así
D = a11
a22 a23
- a12
a21 a23
+ a13
a21 a22
a32 a33 a31 a33 a31 a32
Donde a los determinantes de 2 por 2 se les llama menores.
…
Regla de Cramer
Esta regla establece que cada incógnita de un sistema de ecuaciones lineales algebraicas
puede expresarse como una fracción de dos determinantes con denominador D y con el
numerador obtenido a partir de D, al reemplazar la columna de coeficientes de la incógnita
en cuestión por las constantes b1,b2,…,bn. Por ejemplo, x1 se calcula como
b1 a12 a13
x1= b2 a22 a23
b3 a32 a33
D
Realice un programa que implemente la técnica de la Regla de Cramer para la resolución de
un sistema de tres ecuaciones. Tome en cuenta lo siguiente:
a) Haga uso de la programación modular, diseñando subprogramas que realicen
procesos específicos, dejando a la función main solamente las instrucciones más
generales.
b) Tome en consideración las recomendaciones y convenciones sobre el diseño de
funciones y sobre el diseño de procedimientos.
Diseñe el dialogo de interacción con el usuario de la manera más estéticamente posible y
comunicacionalmente correcta, en función de la naturaleza del problema a resolver
//Problema aplicando CRAMER
#include <stdio.h>
#include <conio.h>
#define TAM 3
void llenarmatriz(int [][TAM], int [TAM]);
void imprimirmatriz(int [][TAM], int resaltar=-1);
int determinantematriz(int [][TAM]);
int resolvervariable(int [][TAM], int [TAM], int);
void esperar();
int main(){
int M[TAM][TAM]; // Una matriz de 3 x 3
int independientes[TAM]; // Los valores independientes de
las 3 ecuaciones.
llenarmatriz(M, independientes);
clrscr();
printf("La matriz ingresada fue:nn");
imprimirmatriz(M);
printf("Con valores independientes: n");
textcolor(YELLOW);
for(int i = 0; i < TAM; i++){
cprintf("%d", independientes[i]);
printf("n");
}
textcolor(WHITE)
esperar();
// Calcular el determinante de la matriz completa.
int D = determinantematriz(M);
int valores[TAM];
printf("El determinante de la matriz es: %dn", D);
if (D == 0){
printf("El sistema de ecuaciones no tiene una solucion
definida.n");
} else {
// Recorrer cada columna en la matriz
for(int i = 0; i < TAM; i++){
printf("nResolviendo variable %d.n", i+1);
int valorvariable = resolvervariable(M,
independientes, i);
printf("El valor de la variable %d es: %d.n", i+1,
valorvariable);
valores[i] = valorvariable;
esperar();
}
}
printf("nValores: x= %d, y= %d, z= %d.n", valores[0],
valores[1], valores[2]);
printf("Saliendon");
//return 0;
getch();
}
void llenarmatriz(int M[TAM][TAM], int independientes[TAM]){
printf("Por favor, llene la matriz de tamano %d X %dnn",
TAM, TAM);
for(int i = 0; i < TAM; i++){
clrscr();
printf("Ecuacion %d: nn", i+1);
for(int j = 0; j < TAM; j++){
printf("Matriz[%d][%d] = ", i+1, j+1);
scanf("%d", &M[i][j]);
printf("n");
}
printf("El valor independiente de la ecuacion %d es:
", i+1);
scanf("%d", &independientes[i]);
}
}
void imprimirmatriz(int M[TAM][TAM], int resaltar){
for(int i = 0; i < TAM; i++){
for(int j = 0; j < TAM; j++){
// Por si hay que resaltar la columna reemplazada
// por los valores independientes.
if (resaltar > -1 && j == resaltar)
textcolor(YELLOW);
cprintf("%4d", M[i][j]);
textcolor(WHITE);
}
printf("n");
}
printf("n");
}
int determinantematriz(int M[][TAM]){
int determinante = 0;
// El determinante se calculara con
// la primera fila en la matriz.
for(int k = 0; k < TAM; k++){
int cofactor = M[0][k]; // El cofactor o pivote para
la determinante
// Una matriz de 2x2
// con los elementos de la original
// que no comparten fila ni columna
// con el cofactor.
int submatriz[TAM-1][TAM-1];
// Para llenar la matriz mas pequeña.
int sub_i = 0;
for(int i = 0; i < TAM; i++){
int sub_j = 0;
if (i != k){
for(int j = 0; j < TAM; j++){
if(j != 0){
submatriz[sub_j][sub_i] = M[j][i];
sub_j++;
}
}
sub_i++;
}
}
// La diagonal primaria en el menor.
int subdiagonalp = submatriz[0][0] * submatriz[1][1];
// La diagonal secundaria en el menor.
int subdiagonals = submatriz[0][1] * submatriz[1][0];
int sub_determinante = subdiagonalp - subdiagonals;
int resultado = cofactor * sub_determinante;
// El resultado de este proceso alterna entre sumarse
// y restarse al resultado final
// Al ser de 3x3 la matrix, la unica ocasion en que
// se resta es cuando el indice es 1.
if (k == 1) {
determinante -= resultado;
} else {
determinante += resultado;
}
}
return determinante;
}
int resolvervariable(int M[TAM][TAM], int independientes[TAM],
int var){
int D = determinantematriz(M);
if(D == 0){
printf("No hay una solucion definida para el sistema
de ecuaciones.n");
}
// Para aplicar la regla de Cramer
// se debe reemplazar la columna de
// la variable deseada (x, y, z) por
// Los valores independientes.
int reemplazada[TAM][TAM];
for(int i = 0; i < TAM; i++){
for(int j = 0; j < TAM; j++){
if (j == var){
// Si es la columna de la variable buscada
// Se toma el valor independiente de esta fila.
reemplazada[i][j] = independientes[i];
} else {
reemplazada[i][j] = M[i][j];
}
}
}
// Imprimir la matriz reemplazada resaltando los valores
diferentes.
imprimirmatriz(reemplazada, var);
int Dvar = determinantematriz(reemplazada);
printf("Determinante de %d: %dn", var+1, Dvar);
// El valor de la variable deseada es su determinante entre
// el de la matriz original.
return Dvar/D;
}
void esperar(){
printf("Presione una tecla par continuar...nn");
getch();
}
Explicación
Al correr el ejercicio (ver Carpeta comprimida Guía 4) se muestran lo que se obteniendo al
final, para esto se ira detallando a continuación.
Siempre se inicia declarando las bibliotecas a utilizar
#include <stdio.h>
#include <conio.h>
 El ejercicio pide 3 ecuaciones, las cuales fueron probadas y pide también el valor de
los coeficientes las variables y los valores independiente
Una matriz que es bidimensional va a tener 2 pares de arreglos, separados por corchetes, el
primero representa la fila y el segundo es la columna, la primer fila será 2 en valor 11, 3 y 1
y luego se pide el valor independiente de la ecuación.
Al pedir la segunda ecuación la fila cambia a 2, entonces 1 - 2 = 1 y el valor independiente
de esa ecuación es cero, se pasa a la ecuación 3, el valor de la fila 3 es 3, 1 – 1 y el valor
independiente es 3, los valores independientes 6, 0, 3 (cambia de color) según la regla debe
calcular primero el determínate de la matriz, que es 21.
Se resuelve la variable 1 (𝑥) donde se marca la columna que es sustituida por el término
independiente, igualmente se realiza el cálculo de la variable 2 (𝑦) tomando en cuenta que la
columna 2 será sustituida por los términos independientes y de igual manera se hace para la
variable 3 (𝑧) considerando que los términos independientes sustituyen a la columna 3.
#define TAM 3
void llenarmatriz(int [][TAM], int [TAM]);
void imprimirmatriz(int [][TAM], int resaltar=-1);
int determinantematriz(int [][TAM]);
int resolvervariable(int [][TAM], int [TAM], int);
void esperar();
int main(){
int M[TAM][TAM]; // Una matriz de 3 x 3
int independientes[TAM]; // Los valores independientes de
las 3 ecuaciones.
llenarmatriz(M, independientes);
clrscr();
printf("La matriz ingresada fue:nn");
imprimirmatriz(M);
printf("Con valores independientes: n");
textcolor(YELLOW);
for(int i = 0; i < TAM; i++){
cprintf("%d", independientes[i]);
printf("n");
}
Retomando lo anterior el programa queda descrito de la manera siguiente.
 Se declara una variable constante TAM caracterizada por tener un valor constante
asignado en el caso de este ejercicio es tres.
 Se hace uso de varias funciones, tomando la primera con la finalidad de llenar la
matriz, la segunda que permita imprimir la matriz, esta sería la salida, una tercera para
encantar determinante, la cuarta que permite el cálculo de las variables 𝑥, 𝑦, 𝑧 y por
último una de mensaje.
 Se inicia el main.
 Una matriz 3x3 la que forma un arreglo bidimensional.
 Se declara una matriz unidimensional, a la cual se le pasa el tamaño y en ella se
encontraran los valores de los términos independientes los cuales irán reemplazando
a la columna de acuerdo con la variable que se esté utilizando.
 Se efectúa el llamado de la función llenar matriz a la cual se le pasa dos parámetros,
estos corresponden a la matriz 3𝑥3 y la otra que es el arreglo bidimensional que
corresponde a términos independientes.
 Se procede a digitar fila, en este caso la fila no se mueve, esta representa la ecuación,
por tal razón ecuación 1 cambia hasta que se produce el cambio el primer par. Las
filas están representadas por i, las que van de 0 hasta i y están relacionadas con el
primer ciclo for.
Se limpia pantalla con clrscr()
 Para efectos visuales se le sumo uno para que aparezca la ecuación con el número que
le corresponde, pero se tiene claro que en los arreglos se inicia con cero.
 Las columnas representadas por 𝑗 desde 0 hasta 𝑗, se pide el valor de la matriz y de
igual manera que se hizo con las filas se le suma 1 por efectos visuales. Se procede a
leer lo digitalizado que se asigna a la matriz 𝑚.
 Se realiza un salto antes de pedir el valor de términos independientes, los que se
asignan a la variable unidimensional.
 El cálculo del determínate se realiza fijando la primera fila y se eliminando la
columna que corresponde a cada elemento de la fila lo cual da como resultados
matrices de 2𝑥2.
 Se vuelve al main, después de llenada la matriz manda la matriz ingresada.
 Se llama la función imprimir matriz.
 Se pide imprimir la matriz 𝑚 𝑖𝑗
 Se hizo uso de cprin para poder darle color a la columna que se va sustituyendo por
los valores independientes.
 Se continua con main y se llama la función esperar.
 Se procede a realizar el primer cálculo de la matriz completa que es el determinante,
a la variable main declarada de tipo entero se le asigna una función que le pasa m, se
busca la función llamada determinante matriz. El determinante se calcula en función
de la primera fila que al que ser eliminada sus elementos serán cero y se utiliza una
variable llamada K que corre hasta el tamaño, es así que se forma una submatriz luego
de ir eliminando cada columna y su tamaño corresponde a fila menos 1 y columna
menos 1 y para llenar la matriz 2x2 se utilizan dos ciclos for tanto para las filas i y las
columnas 𝑗.
 Con la matriz 2𝑥2 se realiza el cálculo de diagonal principal y diagonal secundaria,
cuya diferencia de ambas diagonales son asignadas a una variable la que será
multiplicada por el cofactor.
 Se vuelve al main.
 En el cálculo del determinante se condiciona que si es cero el sistema no tiene
solución porque toda división entre cero no está definida.
 Pero si el valor de la determinante es diferente de cero entonces se establece un ciclo
for calcular el valor de cada variable de la matriz introducida.
 Se llama a imprimir los valores de cada incógnita como lo es 𝑋, 𝑌 𝑦 𝑍, en las
posiciones 0,1 𝑦 2, con un retorno cuando ese sea cero.
 Se establece dos for 𝑖 y 𝑗, el valor j rellena la matriz internamente debido a que los
arreglos seria [0][0] [0][1] [0][2]y hasta la fila dos que sería la última de la matriz.
 Se suma a 𝑖 y 𝑗 uno por observación de la matriz al momento de introducir los valores
de cada ecuación en su arreglo.
 El determinante se calculará con la primera fila en la matriz.
 El cofactor o pivote para la determinante Una matriz de 2𝑥2 con los elementos de la
original que no comparten fila ni columna con el cofactor.
 Para llenar la matriz más pequeña se define una nueva matriz con un arreglo menos
como se menciona anteriormente.
 Se realiza este proceso para definir las determinantes de cada variable como lo
implementamos el método de Cramer para calcular cada uno de sus valores
correspondientes.
 La diagonal primaria en el menor y la diagonal secundaria en el menor.
 El resultado de este proceso alterna entre sumarse y restarse al resultado final Al ser
de 3x3 la matriz, la única ocasión en que se resta es cuando el índice es 1.
 Recordar que en una matriz de 3𝑥3 se toma como referencia los signos de cada
columna lo que es +, – 𝑦 +, sin estos no sería posible tener una respuesta
significativa.
 Para aplicar la regla de Cramer se debe reemplazar la columna de la variable deseada
(x, y, z) por los valores independientes.
 Si es la columna de la variable buscada Se toma el valor independiente de esta fila.
 Imprimir la matriz reemplazada resaltando los valores diferentes.
 El valor de la variable deseada es su determinante entre el de la matriz original.
IV. Conclusiones
Una vez analizado el problema y después de encontrar un modelo matemático adecuado para
su solución y obtenido la información, que se generó conjuntamente con el análisis de cada
programa, se procede a presentar las siguientes conclusiones, de acuerdo a los logros,
dificultades y aprendizajes obtenidos:
 Se destaca la importancia de este trabajo tanto en su condición de investigación así
como de la contribución al fortalecimiento en proceso de aprendizaje de
doctorandos
 Una matriz que es bidimensional va a tener 2 pares de arreglos, separados por
corchetes, el primero representa la fila y el segundo es la columna
 Dentro de las principales dificultades, se destaca el factor tiempo, para profundizar
más a fondo, también dificultad para encontrar un algoritmo de solución
 Se realizó revisión documental vinculada con el tema de investigación, en diferentes
fuentes, tales como libros, sitios web y videos. Ello permitió fundamentar cada
problema hasta llegar a la elaboración y resolución de los mismos.
 Como aprendizaje por descubrimiento (Heurística), se constató que la programación
modular es una de las técnicas fundamentales de la programación. Y que se apoya
en el diseño descendente y en la filosofía de "divide y vencerás”. Además, como
descubrimiento se encontró el algoritmo adecuado para evaluar y ejecutar de manera
satisfactoria.

Más contenido relacionado

PDF
Ejercicio 1 diagrama de flujo
PDF
Ejercicio 2 diagrama de flujo
PPTX
Que es la marca de clase y como calcularla
DOCX
calculo diferencial
DOCX
Mapa conceptual de algoritmos
PDF
INTERVALOS
PDF
Arreglos o dimensiones en pseint
PDF
LIMITE DE FUNCIONES INDETERMINADAS
Ejercicio 1 diagrama de flujo
Ejercicio 2 diagrama de flujo
Que es la marca de clase y como calcularla
calculo diferencial
Mapa conceptual de algoritmos
INTERVALOS
Arreglos o dimensiones en pseint
LIMITE DE FUNCIONES INDETERMINADAS

La actualidad más candente (20)

PPTX
Ejercicios Resueltos de Diagrama de flujo
PPTX
Funciones básicas excel
PDF
Arreglos vectores pseint
PPTX
Formulas de Excel
DOC
Suma Y Resta De Matrices
PPS
Estructura selectiva simple
PPTX
Base de datos con conclusion
PPTX
Diagrama de flujo para exponer
DOCX
Sistemas de ecuaciones lineales. Métodos Gauss- Jordan y Gauss
PDF
El concepto del limite (Cálculo I)
PDF
Estructura Repetitiva MIENTRAS (While) con PSeInt
PPTX
COMANDOS DE SISTEMAS OPERATIVOS MS-DOS - CMD
PPT
Aplicaciones del calculo integral
PDF
Simbología de Diagramas de Flujo
PDF
Arreglos Bidimensionales - Java - NetBeans
PPTX
Conceptos básicos y metodología de la programación
PDF
ALGORITMO RESUELTOS EN PSEINT
PDF
Metodologia de la programación - expresiones
PPTX
¿Como hacer un pseudocodigo y diagrama de flujo?
PDF
Intervalos
Ejercicios Resueltos de Diagrama de flujo
Funciones básicas excel
Arreglos vectores pseint
Formulas de Excel
Suma Y Resta De Matrices
Estructura selectiva simple
Base de datos con conclusion
Diagrama de flujo para exponer
Sistemas de ecuaciones lineales. Métodos Gauss- Jordan y Gauss
El concepto del limite (Cálculo I)
Estructura Repetitiva MIENTRAS (While) con PSeInt
COMANDOS DE SISTEMAS OPERATIVOS MS-DOS - CMD
Aplicaciones del calculo integral
Simbología de Diagramas de Flujo
Arreglos Bidimensionales - Java - NetBeans
Conceptos básicos y metodología de la programación
ALGORITMO RESUELTOS EN PSEINT
Metodologia de la programación - expresiones
¿Como hacer un pseudocodigo y diagrama de flujo?
Intervalos
Publicidad

Similar a Programación - Matrices (20)

PDF
1 Oviedo Matrices Sistemas.pdf
PDF
Matrices y determinates en forma manual y con excel
PPTX
Proyecto final algebra lineal
PPTX
Presentacion del proyecto de algebra lineal, segundo ciclo de ingenieria en s...
PDF
Matrices y determinates en forma manual y con excel
PDF
Matematica 1
PPTX
Introduccion a los Determinantes y a sus operaciones
PPTX
Determinantes
DOCX
Aritmetica
PPTX
S07. 1 PPT_Sesión 07 - Determinantes. Sistema de Ecuaciones. Regla de Cramer....
PDF
Álgebra 2 bachillerato Evau.
PDF
Determinante
PPTX
El metodo doolittle
PDF
Sistemas lineales casos especiales
1 Oviedo Matrices Sistemas.pdf
Matrices y determinates en forma manual y con excel
Proyecto final algebra lineal
Presentacion del proyecto de algebra lineal, segundo ciclo de ingenieria en s...
Matrices y determinates en forma manual y con excel
Matematica 1
Introduccion a los Determinantes y a sus operaciones
Determinantes
Aritmetica
S07. 1 PPT_Sesión 07 - Determinantes. Sistema de Ecuaciones. Regla de Cramer....
Álgebra 2 bachillerato Evau.
Determinante
El metodo doolittle
Sistemas lineales casos especiales
Publicidad

Más de Cliffor Jerry Herrera Castrillo (20)

DOCX
Lista de cotejo - Resolución de problemas.docx
PPTX
Recurso Educativo - Semana 4 para componente integrador
PPTX
Recurso de Aprendizaje para investigación
PPTX
Recurso de Aprendizaje Tema 4 Regresión Lineal Múltiple.pptx
PPTX
TALLER PROCESAMIENTO DE DATOS PARA DATOS
PPTX
La importancia de la labor investigativa en la transformación social y académ...
DOCX
Informe de pruebas de verficación de capaciidades - FM 2024.docx
PPTX
copiar-Ejemplo_Plantilla_JUDC_2024 EAE 08-11-24.pptx
PDF
Enlaces de conexiones- 18-22 nov. 2024 (1).pdf
PPTX
Metodología Activa para la Evaluación por competencia en el aprendizaje de Ci...
PPTX
Experimentación y demostración de los postulados de Broglie y las propiedades...
PPTX
Guías de aprendizaje para el desarrollo del componente Teoría Especial de la ...
PPTX
Ejemplo_Plantilla_JUDC_2024 UNAN-Managua
PPTX
Unidad 1: Espacios métricos y normados -
PPTX
Matrices en Álgebra Lineal - Carrera Matemáticas
PPTX
Guía de Trabajo Independiente de Álgebra Lineal
PPTX
Presentación Encuentro 1 | Seminario de Graduación
PPTX
Unidad IV El Diccionario Álgebra - Geometría.pptx
PPTX
Resolución de problemas relativos a la geometría de la eliminación y la impli...
PPTX
Anillos de polinomios y su importancia en Álgebra Computacional.pptx
Lista de cotejo - Resolución de problemas.docx
Recurso Educativo - Semana 4 para componente integrador
Recurso de Aprendizaje para investigación
Recurso de Aprendizaje Tema 4 Regresión Lineal Múltiple.pptx
TALLER PROCESAMIENTO DE DATOS PARA DATOS
La importancia de la labor investigativa en la transformación social y académ...
Informe de pruebas de verficación de capaciidades - FM 2024.docx
copiar-Ejemplo_Plantilla_JUDC_2024 EAE 08-11-24.pptx
Enlaces de conexiones- 18-22 nov. 2024 (1).pdf
Metodología Activa para la Evaluación por competencia en el aprendizaje de Ci...
Experimentación y demostración de los postulados de Broglie y las propiedades...
Guías de aprendizaje para el desarrollo del componente Teoría Especial de la ...
Ejemplo_Plantilla_JUDC_2024 UNAN-Managua
Unidad 1: Espacios métricos y normados -
Matrices en Álgebra Lineal - Carrera Matemáticas
Guía de Trabajo Independiente de Álgebra Lineal
Presentación Encuentro 1 | Seminario de Graduación
Unidad IV El Diccionario Álgebra - Geometría.pptx
Resolución de problemas relativos a la geometría de la eliminación y la impli...
Anillos de polinomios y su importancia en Álgebra Computacional.pptx

Último (20)

DOC
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
PDF
LIBRO 2-SALUD Y AMBIENTE-4TO CEBA avanzado.pdf
DOCX
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
PDF
TALLER DE ESTADISTICA BASICA para principiantes y no tan basicos
DOCX
PLAN DE CASTELLANO 2021 actualizado a la normativa
PDF
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
PPTX
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
PPTX
BIZANCIO. EVOLUCIÓN HISTORICA, RAGOS POLÍTICOS, ECONOMICOS Y SOCIALES
DOCX
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - CUARTO GRADO.docx
PDF
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
PDF
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
PDF
CURRICULAR DE PRIMARIA santa ursula..pdf
PDF
E1 Guía_Matemática_5°_grado.pdf paraguay
PPTX
MATEMATICAS GEOMETRICA USO TRANSPORTADOR
PPTX
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
PDF
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
PDF
MODULO I ENFERMERIA BASICA.pdf HIstoria en enfermeria
PDF
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
PDF
Introduccion a la Investigacion Cualitativa FLICK Ccesa007.pdf
DOCX
PLANES DE área ciencias naturales y aplicadas
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
LIBRO 2-SALUD Y AMBIENTE-4TO CEBA avanzado.pdf
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
TALLER DE ESTADISTICA BASICA para principiantes y no tan basicos
PLAN DE CASTELLANO 2021 actualizado a la normativa
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
BIZANCIO. EVOLUCIÓN HISTORICA, RAGOS POLÍTICOS, ECONOMICOS Y SOCIALES
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - CUARTO GRADO.docx
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
CURRICULAR DE PRIMARIA santa ursula..pdf
E1 Guía_Matemática_5°_grado.pdf paraguay
MATEMATICAS GEOMETRICA USO TRANSPORTADOR
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
MODULO I ENFERMERIA BASICA.pdf HIstoria en enfermeria
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
Introduccion a la Investigacion Cualitativa FLICK Ccesa007.pdf
PLANES DE área ciencias naturales y aplicadas

Programación - Matrices

  • 1. FACULTAD REGIONAL MULTIDISCIPLINARIA DE CARAZO IV Trabajo de Computación (Programación) Programa de doctorado en Matemática Aplicada Aprendizaje basadoenla resoluciónde problemas, mediante la programación C Los arreglos bidimensionales y los parámetros por referencia Autores  Cliffor Jerry Herrera Castrillo  Norman Rafael López Sánchez  Donald Ariel Hernández Muñoz  Ileana María Martínez Méndez Docente: Dr. Harold Ramiro Gutiérrez Marcenaro. 09 Agosto 2019
  • 3. I. Introducción La programación y las matemáticas van de la mano, esto por la estrecha relación que existe entre ambas, si bien se dice que la programación nace de las matemáticas, las cuales son muy importantes y esenciales ya que todo código, sistema, circuito, software y algoritmo por muy sencillo que se vea las utiliza, esto conlleva a darle importancia al uso y entendimiento de esta, donde prácticamente todos los avances tecnológicos, los nuevos software, equipos entre otras cosas que son ahora la representación viva de los avances científicos, es la conformación pura de la matemática. Este informe aborda dos aspectos muy importantes que complementan el repertorio de conocimientos básicos que todo programador de computadoras debe poseer: Los arreglos bidimensionales y los parámetros por referencia. A través de los arreglos bidimensionales se pueden representar matrices numéricas y por ende se tiene la posibilidad de implementar a través de ellos una amplia gama de métodos matemáticos. Habitualmente, la forma de procesamiento de los arreglos bidimensionales es por filas y columnas, en ese orden, para lo cual se utilizan ciclos for anidados, que generalmente utilizan los índices i,j. La metodología de análisis del Problema único, de la cuarta evaluación del Módulo de Computación (programación), se basa en la explicación a detalle, describiendo la forma que se utilizó para llegar a la solución del problema, así mismo se hacen comentarios de los integrantes de este trabajo, los cuales contribuyeron a encontrar el algoritmo, que si bien es una forma de hacerlo existen otras (con variaciones) en dependencia del estilo del programador, además de forma implícita se presentan comentario sobre los aciertos y dificultades en la resolución del problema, resaltando el proceso heurístico inherente y la serendipia.
  • 4. II. Objetivos 1. Hacer uso de la programación estructurada, modular y descendente, para resolver problemas computacionales de nivel intermedio y avanzado. 2. Desarrollar técnicas de programación orientadas a la creación de programas robustos, eficaces, eficientes, expandibles y reutilizables. 3. Reconocer la importancia de la dimensión estética de la programación, que contribuya a la creación de su propio estilo como programador.
  • 5. III. Desarrollo EJERCICIO ÚNICO: La regla de Cramer es una técnica de solución adecuada cuando se tiene un sistema pequeño de ecuaciones. Su implementación requiere del cálculo de determinantes: Tomando como referencia a (Chapra & Canale, 2007, págs. 250-251): Determinantes: El determinante se puede ilustrar para un sistema de tres ecuaciones simultáneas: [A] {X} = {B} Donde [A] es la matriz de coeficientes: a11 a12 a13 [A]= a21 a22 a23 a31 a32 a33 El determinante D de este sistema se forma, a partir de los coeficientes del sistema, de la siguiente manera: a11 a12 a13 D= a21 a22 a23 a31 a32 a33 Aunque el determinante D y la matriz de coeficientes [A] se componen de los mismos elementos, son conceptos matemáticos completamente diferentes. Por esto, para distinguirlos visualmente se emplean corchetes para encerrar la matriz y líneas rectas verticales para el
  • 6. determinante. En contraste con una matriz, el determinante es un simple número. Por ejemplo, el valor del determinante de segundo orden D= a11 a12 a21 a22 Se calcula como D = a11a22 - a12a21 En el caso del determinante de tercer orden … el determinante, que es un simple valor numérico, se calcula así D = a11 a22 a23 - a12 a21 a23 + a13 a21 a22 a32 a33 a31 a33 a31 a32 Donde a los determinantes de 2 por 2 se les llama menores. … Regla de Cramer Esta regla establece que cada incógnita de un sistema de ecuaciones lineales algebraicas puede expresarse como una fracción de dos determinantes con denominador D y con el numerador obtenido a partir de D, al reemplazar la columna de coeficientes de la incógnita en cuestión por las constantes b1,b2,…,bn. Por ejemplo, x1 se calcula como b1 a12 a13 x1= b2 a22 a23 b3 a32 a33 D
  • 7. Realice un programa que implemente la técnica de la Regla de Cramer para la resolución de un sistema de tres ecuaciones. Tome en cuenta lo siguiente: a) Haga uso de la programación modular, diseñando subprogramas que realicen procesos específicos, dejando a la función main solamente las instrucciones más generales. b) Tome en consideración las recomendaciones y convenciones sobre el diseño de funciones y sobre el diseño de procedimientos. Diseñe el dialogo de interacción con el usuario de la manera más estéticamente posible y comunicacionalmente correcta, en función de la naturaleza del problema a resolver //Problema aplicando CRAMER #include <stdio.h> #include <conio.h> #define TAM 3 void llenarmatriz(int [][TAM], int [TAM]); void imprimirmatriz(int [][TAM], int resaltar=-1); int determinantematriz(int [][TAM]); int resolvervariable(int [][TAM], int [TAM], int); void esperar(); int main(){ int M[TAM][TAM]; // Una matriz de 3 x 3
  • 8. int independientes[TAM]; // Los valores independientes de las 3 ecuaciones. llenarmatriz(M, independientes); clrscr(); printf("La matriz ingresada fue:nn"); imprimirmatriz(M); printf("Con valores independientes: n"); textcolor(YELLOW); for(int i = 0; i < TAM; i++){ cprintf("%d", independientes[i]); printf("n"); } textcolor(WHITE) esperar(); // Calcular el determinante de la matriz completa. int D = determinantematriz(M); int valores[TAM]; printf("El determinante de la matriz es: %dn", D); if (D == 0){ printf("El sistema de ecuaciones no tiene una solucion definida.n"); } else {
  • 9. // Recorrer cada columna en la matriz for(int i = 0; i < TAM; i++){ printf("nResolviendo variable %d.n", i+1); int valorvariable = resolvervariable(M, independientes, i); printf("El valor de la variable %d es: %d.n", i+1, valorvariable); valores[i] = valorvariable; esperar(); } } printf("nValores: x= %d, y= %d, z= %d.n", valores[0], valores[1], valores[2]); printf("Saliendon"); //return 0; getch(); } void llenarmatriz(int M[TAM][TAM], int independientes[TAM]){ printf("Por favor, llene la matriz de tamano %d X %dnn", TAM, TAM); for(int i = 0; i < TAM; i++){ clrscr(); printf("Ecuacion %d: nn", i+1);
  • 10. for(int j = 0; j < TAM; j++){ printf("Matriz[%d][%d] = ", i+1, j+1); scanf("%d", &M[i][j]); printf("n"); } printf("El valor independiente de la ecuacion %d es: ", i+1); scanf("%d", &independientes[i]); } } void imprimirmatriz(int M[TAM][TAM], int resaltar){ for(int i = 0; i < TAM; i++){ for(int j = 0; j < TAM; j++){ // Por si hay que resaltar la columna reemplazada // por los valores independientes. if (resaltar > -1 && j == resaltar) textcolor(YELLOW); cprintf("%4d", M[i][j]); textcolor(WHITE); } printf("n"); }
  • 11. printf("n"); } int determinantematriz(int M[][TAM]){ int determinante = 0; // El determinante se calculara con // la primera fila en la matriz. for(int k = 0; k < TAM; k++){ int cofactor = M[0][k]; // El cofactor o pivote para la determinante // Una matriz de 2x2 // con los elementos de la original // que no comparten fila ni columna // con el cofactor. int submatriz[TAM-1][TAM-1]; // Para llenar la matriz mas pequeña. int sub_i = 0; for(int i = 0; i < TAM; i++){ int sub_j = 0; if (i != k){ for(int j = 0; j < TAM; j++){ if(j != 0){ submatriz[sub_j][sub_i] = M[j][i];
  • 12. sub_j++; } } sub_i++; } } // La diagonal primaria en el menor. int subdiagonalp = submatriz[0][0] * submatriz[1][1]; // La diagonal secundaria en el menor. int subdiagonals = submatriz[0][1] * submatriz[1][0]; int sub_determinante = subdiagonalp - subdiagonals; int resultado = cofactor * sub_determinante; // El resultado de este proceso alterna entre sumarse // y restarse al resultado final // Al ser de 3x3 la matrix, la unica ocasion en que // se resta es cuando el indice es 1. if (k == 1) { determinante -= resultado; } else { determinante += resultado; }
  • 13. } return determinante; } int resolvervariable(int M[TAM][TAM], int independientes[TAM], int var){ int D = determinantematriz(M); if(D == 0){ printf("No hay una solucion definida para el sistema de ecuaciones.n"); } // Para aplicar la regla de Cramer // se debe reemplazar la columna de // la variable deseada (x, y, z) por // Los valores independientes. int reemplazada[TAM][TAM]; for(int i = 0; i < TAM; i++){ for(int j = 0; j < TAM; j++){ if (j == var){ // Si es la columna de la variable buscada // Se toma el valor independiente de esta fila. reemplazada[i][j] = independientes[i]; } else {
  • 14. reemplazada[i][j] = M[i][j]; } } } // Imprimir la matriz reemplazada resaltando los valores diferentes. imprimirmatriz(reemplazada, var); int Dvar = determinantematriz(reemplazada); printf("Determinante de %d: %dn", var+1, Dvar); // El valor de la variable deseada es su determinante entre // el de la matriz original. return Dvar/D; } void esperar(){ printf("Presione una tecla par continuar...nn"); getch(); } Explicación Al correr el ejercicio (ver Carpeta comprimida Guía 4) se muestran lo que se obteniendo al final, para esto se ira detallando a continuación. Siempre se inicia declarando las bibliotecas a utilizar #include <stdio.h>
  • 15. #include <conio.h>  El ejercicio pide 3 ecuaciones, las cuales fueron probadas y pide también el valor de los coeficientes las variables y los valores independiente Una matriz que es bidimensional va a tener 2 pares de arreglos, separados por corchetes, el primero representa la fila y el segundo es la columna, la primer fila será 2 en valor 11, 3 y 1 y luego se pide el valor independiente de la ecuación. Al pedir la segunda ecuación la fila cambia a 2, entonces 1 - 2 = 1 y el valor independiente de esa ecuación es cero, se pasa a la ecuación 3, el valor de la fila 3 es 3, 1 – 1 y el valor independiente es 3, los valores independientes 6, 0, 3 (cambia de color) según la regla debe calcular primero el determínate de la matriz, que es 21. Se resuelve la variable 1 (𝑥) donde se marca la columna que es sustituida por el término independiente, igualmente se realiza el cálculo de la variable 2 (𝑦) tomando en cuenta que la columna 2 será sustituida por los términos independientes y de igual manera se hace para la variable 3 (𝑧) considerando que los términos independientes sustituyen a la columna 3. #define TAM 3 void llenarmatriz(int [][TAM], int [TAM]); void imprimirmatriz(int [][TAM], int resaltar=-1); int determinantematriz(int [][TAM]); int resolvervariable(int [][TAM], int [TAM], int); void esperar(); int main(){ int M[TAM][TAM]; // Una matriz de 3 x 3
  • 16. int independientes[TAM]; // Los valores independientes de las 3 ecuaciones. llenarmatriz(M, independientes); clrscr(); printf("La matriz ingresada fue:nn"); imprimirmatriz(M); printf("Con valores independientes: n"); textcolor(YELLOW); for(int i = 0; i < TAM; i++){ cprintf("%d", independientes[i]); printf("n"); } Retomando lo anterior el programa queda descrito de la manera siguiente.  Se declara una variable constante TAM caracterizada por tener un valor constante asignado en el caso de este ejercicio es tres.  Se hace uso de varias funciones, tomando la primera con la finalidad de llenar la matriz, la segunda que permita imprimir la matriz, esta sería la salida, una tercera para encantar determinante, la cuarta que permite el cálculo de las variables 𝑥, 𝑦, 𝑧 y por último una de mensaje.  Se inicia el main.  Una matriz 3x3 la que forma un arreglo bidimensional.  Se declara una matriz unidimensional, a la cual se le pasa el tamaño y en ella se encontraran los valores de los términos independientes los cuales irán reemplazando a la columna de acuerdo con la variable que se esté utilizando.
  • 17.  Se efectúa el llamado de la función llenar matriz a la cual se le pasa dos parámetros, estos corresponden a la matriz 3𝑥3 y la otra que es el arreglo bidimensional que corresponde a términos independientes.  Se procede a digitar fila, en este caso la fila no se mueve, esta representa la ecuación, por tal razón ecuación 1 cambia hasta que se produce el cambio el primer par. Las filas están representadas por i, las que van de 0 hasta i y están relacionadas con el primer ciclo for. Se limpia pantalla con clrscr()  Para efectos visuales se le sumo uno para que aparezca la ecuación con el número que le corresponde, pero se tiene claro que en los arreglos se inicia con cero.  Las columnas representadas por 𝑗 desde 0 hasta 𝑗, se pide el valor de la matriz y de igual manera que se hizo con las filas se le suma 1 por efectos visuales. Se procede a leer lo digitalizado que se asigna a la matriz 𝑚.  Se realiza un salto antes de pedir el valor de términos independientes, los que se asignan a la variable unidimensional.  El cálculo del determínate se realiza fijando la primera fila y se eliminando la columna que corresponde a cada elemento de la fila lo cual da como resultados matrices de 2𝑥2.  Se vuelve al main, después de llenada la matriz manda la matriz ingresada.  Se llama la función imprimir matriz.  Se pide imprimir la matriz 𝑚 𝑖𝑗  Se hizo uso de cprin para poder darle color a la columna que se va sustituyendo por los valores independientes.  Se continua con main y se llama la función esperar.
  • 18.  Se procede a realizar el primer cálculo de la matriz completa que es el determinante, a la variable main declarada de tipo entero se le asigna una función que le pasa m, se busca la función llamada determinante matriz. El determinante se calcula en función de la primera fila que al que ser eliminada sus elementos serán cero y se utiliza una variable llamada K que corre hasta el tamaño, es así que se forma una submatriz luego de ir eliminando cada columna y su tamaño corresponde a fila menos 1 y columna menos 1 y para llenar la matriz 2x2 se utilizan dos ciclos for tanto para las filas i y las columnas 𝑗.  Con la matriz 2𝑥2 se realiza el cálculo de diagonal principal y diagonal secundaria, cuya diferencia de ambas diagonales son asignadas a una variable la que será multiplicada por el cofactor.  Se vuelve al main.  En el cálculo del determinante se condiciona que si es cero el sistema no tiene solución porque toda división entre cero no está definida.  Pero si el valor de la determinante es diferente de cero entonces se establece un ciclo for calcular el valor de cada variable de la matriz introducida.  Se llama a imprimir los valores de cada incógnita como lo es 𝑋, 𝑌 𝑦 𝑍, en las posiciones 0,1 𝑦 2, con un retorno cuando ese sea cero.  Se establece dos for 𝑖 y 𝑗, el valor j rellena la matriz internamente debido a que los arreglos seria [0][0] [0][1] [0][2]y hasta la fila dos que sería la última de la matriz.  Se suma a 𝑖 y 𝑗 uno por observación de la matriz al momento de introducir los valores de cada ecuación en su arreglo.  El determinante se calculará con la primera fila en la matriz.  El cofactor o pivote para la determinante Una matriz de 2𝑥2 con los elementos de la original que no comparten fila ni columna con el cofactor.
  • 19.  Para llenar la matriz más pequeña se define una nueva matriz con un arreglo menos como se menciona anteriormente.  Se realiza este proceso para definir las determinantes de cada variable como lo implementamos el método de Cramer para calcular cada uno de sus valores correspondientes.  La diagonal primaria en el menor y la diagonal secundaria en el menor.  El resultado de este proceso alterna entre sumarse y restarse al resultado final Al ser de 3x3 la matriz, la única ocasión en que se resta es cuando el índice es 1.  Recordar que en una matriz de 3𝑥3 se toma como referencia los signos de cada columna lo que es +, – 𝑦 +, sin estos no sería posible tener una respuesta significativa.  Para aplicar la regla de Cramer se debe reemplazar la columna de la variable deseada (x, y, z) por los valores independientes.  Si es la columna de la variable buscada Se toma el valor independiente de esta fila.  Imprimir la matriz reemplazada resaltando los valores diferentes.  El valor de la variable deseada es su determinante entre el de la matriz original.
  • 20. IV. Conclusiones Una vez analizado el problema y después de encontrar un modelo matemático adecuado para su solución y obtenido la información, que se generó conjuntamente con el análisis de cada programa, se procede a presentar las siguientes conclusiones, de acuerdo a los logros, dificultades y aprendizajes obtenidos:  Se destaca la importancia de este trabajo tanto en su condición de investigación así como de la contribución al fortalecimiento en proceso de aprendizaje de doctorandos  Una matriz que es bidimensional va a tener 2 pares de arreglos, separados por corchetes, el primero representa la fila y el segundo es la columna  Dentro de las principales dificultades, se destaca el factor tiempo, para profundizar más a fondo, también dificultad para encontrar un algoritmo de solución  Se realizó revisión documental vinculada con el tema de investigación, en diferentes fuentes, tales como libros, sitios web y videos. Ello permitió fundamentar cada problema hasta llegar a la elaboración y resolución de los mismos.  Como aprendizaje por descubrimiento (Heurística), se constató que la programación modular es una de las técnicas fundamentales de la programación. Y que se apoya en el diseño descendente y en la filosofía de "divide y vencerás”. Además, como descubrimiento se encontró el algoritmo adecuado para evaluar y ejecutar de manera satisfactoria.