INSTITUTO POLITÉCNICO NACIONAL
Unidad Profesional Interdisciplinaria en Ingeniería y
Tecnologías Avanzadas.
“Introducción a la programación”
Practica 4 “Manejo de Arreglos
Unidimensionales y Multidimensionales”
Profesor: José Luis Cruz Mora
PRESENTA:
PÉREZ RODRÍGUEZ EDGAR
GRUPO 1MV1
27 DE OCTUBRE DE 2024.
Objetivo
Desarrollar programas aplicando el método de la burbuja y resolver problemas con
arreglos bidimensionales.
Introducción
Es importante conocer y dominar el uso de arreglos en lenguaje c, tanto de forma
unidimensional como multidimensionales, ya que permiten generar múltiples variables
o espacios de memoria para operaciones que requieran múltiples variables, como
matrices o vectores. También se conocerá un método de ordenamiento de datos, útil
cuando se tiene una gran cantidad de datos, facilitando el acceso a uno de estos datos
o la búsqueda de estos en la memoria.
Los arreglos tienen una forma específica de reservar en la memoria, cuando son
arreglos unidimensionales (dependiendo la variable) se reservará cierta cantidad de
espacios de memoria en nuestra computadora para el arreglo, si es un char se reserva
uno por el número que se haya declarado, lo cual es útil para acceder a esta información
de manera consecutiva y mucho más rápido, sin necesidad de hacer saltos de memoria
que ralenticen el proceso.
Por último, se comprenderá como generar números pseudoaleatorios (por que las
computadoras no son capaces de generar números aleatorios totalmente), con el uso
de la variable time y el operador módulo se puede adaptar los dígitos al tamaño
deseado.
Desarrollo
Programa 1: Burbuja
Este programa debe solicitar al usuario un número “n” para generar un arreglo de “n”
variables, después de generar el arreglo, se debe generar un número entre 50 y 300
de forma “aleatoria” y para finalizar el programa debe ordenar todos estos valores y
mostrar su forma tanto ordenada como desordenada.
Para generar las variables pseudoaleatorias se utiliza la función srand( ), esta función
requiere una semilla para a partir de ahí generar un número, pero si la semilla siempre
es la misma entonces el resultado también será el mismo, por lo que se requiere que
la semilla varie constantemente, para hacer esto se le dará uso al reloj interno de la
computadora que varía todo el tiempo. Pero si solo se realiza esto, los números
entregados por la función srand serán muy grandes e incluso se puede observar un
patrón, pero con el uso del operador módulo se puede adaptar el número a las
características que se soliciten.
Para lograr que se generen números entre 50 y 300 se debe aplicar una operación de
modulo 300-50+1=251, de esta forma los valores que se generarán estarán entre 0
y 250, y después se le suma 50, para que de esta forma los valores sean entre 50 y
300.
De esta forma se ve la operación, el arreglo se declara después de que el usuario
escriba el valor de n, porque los arreglos apartan un espacio de memoria que no puede
cambiar, por lo que si se declara antes el programa no funcionará.
Ahora el programa puede generar arreglos con números aleatorios de 50 a 300, pero
estas cantidades están en desorden, para ordenar estos valores se utiliza el método de
la burbuja, este método se puede aplicar de menor a mayor o de mayor a menor, por
lo que utilizando dos ciclos for, uno se utilizará para que pregunte si el primer digito
es menor que n+1 (el siguiente digito), si este digito es menor entonces lo recorrerá y
después volverá a preguntar, hasta que esta condición no se cumpla y salga del ciclo
for y el segundo para repetir esto con los n dígitos que tenga el arreglo. El método de
la burbuja en ordenamiento de mayor a menor se vería de la siguiente forma en el
programa.
Por ultimo se tiene que mostrar el arreglo, en este caso solo se hace uso de un ciclo
for donde i vaya desde cero hasta una cantidad menor a n y muestre los valores de los
arreglos en cada uno de estas iteraciones.
Programa 2: Calculadora de Matrices
Este programa debe solicitar el valor de dos matrices (A y B) de 3x3 y después
mostrar los valores de la suma de esas matrices, la resta y su multiplicación.
Primero se tiene que declarar dos matrices de 3x3 de la siguiente manera.
En este caso las matrices solo permiten valores enteros ya que
no se realizará ningún tipo de división ni tampoco se desea
trabajar con números con punto decimal.
Para ingresar cada valor de la matriz se utilizará un scanf que vaya recorriendo los
espacios de memoria en el arreglo (desde 0 hasta 2 en i y después en j), por lo que
se podría colocar cada posición de la memoria manualmente, pero al hacer uso de un
ciclo for se reduce el tamaño del código. El ciclo se ve de la siguiente forma
Y se hace lo mismo para la matriz B.
Ahora para hacer la suma de matrices se tiene que sumar el elemento 1x1 de A con
el 1x1 de B y así sucesivamente con todos sus elementos, por lo que se creará con la
misma lógica que la declaración de variable, solo que en este caso se ingresa una
nueva variable de 3x3 llamada suma donde se ingresará el resultado de cada valor
de la suma de A con B y agilizar el código se escribió en el mismo for una sentencia
para escribir el arreglo.
Se imprimen los valores de cada suma y
cuando pasan tres iteraciones salta un
espacio y vuelve a imprimir tres valores
y así una vez mas para terminar el
arreglo.
La resta sigue la misma lógica, solamente que con el operador de resta.
En este caso la multiplicación de una matriz funciona de forma distinta que una suma
o resta, ya que no se multiplican los valores de la matriz A con los de la matriz B, sino
que se utiliza una lógica de multiplicar renglones de la matriz A por columnas de la
matriz B y el ciclo se ve de la siguiente manera.
Como se multiplican renglones de A por
columnas de B, las columnas de A deben
tener los mismos espacios de memoria de
los que tienen los renglones de B, por lo
que se igualan estos valores con la
variable k que va desde 0 hasta 2,
después i y j irán iterando para realizar las
multiplicaciones, mult[i][j] siempre se tiene
que inicializar en cero ya que la
multiplicación de matrices es una suma de
multiplicaciones, en este caso las
multiplicaciones son la variable aux y se
irán sumando en la variable mult y para
que el resultado no varie, se tiene que
inicializar en cero todo el tiempo para que
no se le sume ningún valor adicional.
Programa 3: Sistemas 3x3
Este programa debe encontrar los valores de un sistema de tres ecuaciones de
x, y & z, con el uso de matrices, sabiendo que un sistema de ecuaciones de la forma
Se puede representar con tres matrices, la matriz A, la matriz B y la matriz X, si se
conocen los valores de la matriz A y B entonces se puede calcular la matriz X con la
siguiente formula:
De esta forma lo primer que se debe calcular es la matriz inversa de A, que se
𝐴𝑑𝑗(𝐴𝑡 )
obtiene con la siguiente formula 𝐴−1 = por lo que para obtener la matriz
|𝐴|
inversa primero se debe calcular el determinante, si este es igual a cero significará
que el sistema no tiene una única solución o que no tiene soluciones por lo que no se
podrá continuar en el proceso, si el determinante no es igual a cero entonces el
proceso continuará.
Una vez calculado el determinante se debe calcular la matriz transpuesta de A, para
calcular la matriz transpuesta solo se deben intercambiar filas por columnas, por lo
que con dos ciclos for y un arreglo de la misma magnitud (en este caso 3x3) se
igualarán de la siguiente manera:
Ahora con la matriz transpuesta calculada se debe obtener la matriz adjunta de la
matriz transpuesta de A, la cual se obtiene con los cofactores de la matriz, para
obtener el valor de los cofactores se deben de tapar los dígitos que estén en la
misma columna y renglón de la coordenada del cofactor que se esté calculando y
después crear una matriz con los valores restantes y calcular el determinante de esa
matriz reducida, en caso de que la suma de las coordenadas i y j del cofactor sea
impar entonces el resultado debe ser multiplicado por -1, la operación se escribe de
la siguiente manera en el código
Ahora la inversa de la matriz es una división de cada valor dentro de la matriz
anteriormente calculada entre el valor del determinante, por lo que se debe declarar
una variable flotante y se deben castear ambas variables como flotantes para que no
de ningún tipo de problema al momento de obtener su resultado.
Después para obtener la matriz X se debe realizar una multiplicación de matrices de
la matriz A-1 x B, utilizando la misma lógica que en el programa anterior, solamente
que al, la matriz B, ser un vector columna, o sea una matriz de 3x1, se deben cambiar
los valores de los ciclos for como se muestra de la siguiente manera.
La variable j se queda en cero para satisfacer la
multiplicación de A-1 x B.
También en este mismo ciclo se muestra el resultado
en pantalla, obteniendo así los valores solicitados.
Para la comprobación se debe realizar un producto punto entre el vector columna X y
la matriz A, que se muestra de la siguiente forma:
Funciona de forma similar a la multiplicación de matrices en este caso, por ser
vectores columna el caso anterior.
Este programa es capaz de calcular un sistema de ecuaciones mostrado en el
documento, pero para lograr que el programa resuelva sistemas de ecuaciones de
3x3 se debe solicitar al inicio del programa las variables de la matriz A y B, utilizando
el método mostrado en el programa dos.
Resultados
Programa1: Burbuja
El programa se ve de la siguiente forma:
Solicita al usuario un número n de variables y muestra el arreglo de forma
desordenada y después lo ordena de mayor a menor.
Programa 2: Calculadora de Matrices
Este programa muestra la suma resta y multiplicación de las matrices A y B, primero
solicita sus valores.
Programa3: Sistemas 3x3
El programa se ve de la siguiente forma:
Las partes que se encuentran como
anotación en el programa son para
mostrar cada valor de las operaciones
realizadas o en el caso de el inicio, para
realizar la ecuación mostrada en el
documento, el programa muestra los
resultados de los sistemas de
ecuaciones en dos casos, con solución y
sin solución o soluciones infinitas.
Soluciones infinitas o sin solución
Con solución
La matriz x muestra el resultado y el producto punto es la comprobación.
Conclusión
El uso de los arreglos es de suma importancia en áreas como la ingeniería ya que
permite un manejo de información mucho mas fácil, nos permite crear herramientas
matemáticas como programas para solucionar ecuaciones. Se comprendió de una
mejor manera el uso de múltiples valores en una sola variable y como se puede
organizar la información dentro de estos mismos arreglos para una selección mucho
mas rápida si en algún momento se desea buscar algún valor.
El uso de los espacios de memoria es fundamental para la creación de estos
programas y el comprender como funciona fue crucial para saber como se organizan
las matrices dentro de nuestra computadora y de esta forma poder trabajar con ellas.