Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Matrices Transversal de Programación Básica, Monografías, Ensayos de Álgebra Lineal

Matrices. Matrices Transversal de Programación Básica Proyecto

Tipo: Monografías, Ensayos

2019/2020

Subido el 04/08/2020

rom-terrazas
rom-terrazas 🇧🇴

3.3

(4)

11 documentos

1 / 17

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
1 Matrices
Matrices
2013
TransversaldeProgramaciónBásica
ProyectoCurriculardeIngenieríadeSistemas
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Vista previa parcial del texto

¡Descarga Matrices Transversal de Programación Básica y más Monografías, Ensayos en PDF de Álgebra Lineal solo en Docsity!

Matrices

Transversal de Programación Básica

Proyecto Curricular de Ingeniería de Sistemas

Objetivos

 Representar conjuntos de datos mediante matrices.  Solucionar problemas utilizando matrices.

Introducción

La utilización de matrices constituye actualmente una parte esencial en los lenguajes de programación, ya que la mayoría de los datos se introducen en los ordenadores como tablas organizadas en filas y columnas: hojas de cálculo, bases de datos, etc. También son utilizadas para resolver problemas matemáticos, por ejemplo en la resolución de sistemas de ecuaciones lineales, de las ecuaciones diferenciales y de las derivadas parciales.

1. Definición

Una matriz es una estructura de datos, o más técnicamente, un espacio de memoria que permite almacenar una colección de elementos, todos del mismo tipo. La diferencia con los arreglos está en que, en las matrices, los elementos no están organizados linealmente sino que su organización es bidimensional, es decir, en filas y columnas. Conviene imaginar una matriz como una organización de celdas de memoria, o casillas , en cada una de las cuales se puede guardar un elemento de la colección. Además, es usual dibujarla como lo ilustra la figura siguiente:

Esta figura representa un matriz de cuatro filas (numeradas verticalmente de 0 a 3) y seis columnas (numeradas horizontalmente de 0 a 5). En cada una de las 24 celdas o casillas se puede guardar un dato. La dimensión o tamaño de una matriz es el número filas por el número de columnas. Debe ser claro entonces que la figura anterior es la gráfica de una matriz de dimensión 4x6.

La numeración de las filas y las columnas determina que cada una de las casillas de una matriz tiene asociados dos números que la identifican de manera única. A estos números se les llama

como para obtener el dato almacenado en ella. En el seudolenguaje, para referirse a una casilla particular de una matriz se debe seguir el siguiente formato:

[<INDICE‐DE‐FILA>][<INDICE‐DE‐COLUMNA>]

es decir, se debe escribir el nombre de la matriz seguido por el índice de fila y por el índice de columna, ambos entre paréntesis cuadrados, de la casilla que se quiere consultar.

Para los siguientes ejemplos, suponga que se declara la matriz montos , de la siguiente manera:

montos : matriz [6][10] de real

 La siguiente instrucción asigna o guarda el número 10,4 en la casilla de la esquina superior izquierda de esta matriz:

montos[0][0]:= 10,

 La siguiente instrucción iterativa guarda 5,5 en cada una de las casillas de la última fila de esta matriz:

k:= MIENTRAS (k<10) HACER montos[5][k]:= 5, k:=k+ FIN‐MIENTRAS

La siguiente figura muestra la matriz montos después de ejecutadas las instrucciones de los dos ejemplos anteriores. Las casillas vacías no tienen valores definidos.

Ejemplo

Una matriz mágica es una matriz cuadrada (tiene igual número de filas que de columnas) que tiene como propiedad especial que la suma de las filas, las columnas y las diagonales es igual. Por ejemplo:

En esta matriz las sumas son 15.

Considere el problema de construir un algoritmo que compruebe si una matriz de datos enteros es mágica o no, y en caso de que sea mágica escribir la suma. El usuario ingresa el tamaño de la matriz máximo hasta 10. Además debe guardar la suma de las filas, las columnas y las diagonales en un arreglo en el orden siguiente:

0 1 2 3 4 5 6 7

Fila 0 Fila 1 Fila 2 …^ Columna 0 Columna 1 Columna 2 …^ Diagonal 1 Diagonal 2

Las entradas (datos conocidos) para el algoritmo son:  La dimensión de la matriz  Los números que contiene la matriz

La salida esperada (datos desconocidos) es:  La matriz es mágica o no, y si es mágica cuál es el valor de la suma.

En este problema, los arreglos son útiles para guardar los datos que conforman la matriz. Los números que contiene la matriz se pueden guardar en una variable entera. La siguiente gráfica resume las entradas y salidas del algoritmo que se pretende diseñar. Además bautizan todas las variables mencionadas.

Las condiciones iniciales y finales se pueden expresar mediante las cláusulas REQUIERE y GARANTIZA:

tam

mágica

suma

mensaje

escribir(“Por favor digite el dato en la posición”)

escribir(i,j)

leer(magica[i][j])

fin_para

fin_para

Paso 3. Determinar si la matriz es mágica o no

Paso 4. Si la matriz es mágica mostrar el valor de la suma

Se puede observar que el primer ciclo para tiene como contador la variable i, esto indica que se llenará la matriz por filas, el segundo ciclo para que tiene como contador la variable j, recorrerá la fila columna a columna para ubicar allí el dato correspondiente.

La parte nuclear de la solución es el paso 3. En este problema en particular se sabe que el número de filas y de columnas es igual y que hay dos diagonales. Para el ejemplo mostrado al inicio sería 3 filas, 3 columnas y dos diagonales. Para almacenar las sumas en un arreglo este tendrá una dimensión de 2*tam+2. La declaración del arreglo sumas es:

sumas: arreglo [22] de enteros

Ahora para calcular las sumas se puede hacer lo siguiente:

Paso 3.1: Inicializar el arreglo de sumas en cero Paso 3.2: Sumar fila por fila, columna por columna y las diagonales y guardar su valor en el arreglo. para(i=0 hasta 2*tam+2) hacer

sumas[i]:=

fin_para

//Sumas correspondientes a las filas

para(i=0 hasta tam‐1) hacer

para(j=0 hasta tam‐1) hacer

sumas[i]=magica[i][j]+sumas[i]

fin_para

fin_para

//Sumas correspondientes a las columnas

para(j=0 hasta tam‐1) hacer

para(i=0 hasta tam‐1) hacer

sumas[j+tam]=magica[i][j]+sumas[j+tam]

fin_para

fin_para

//Sumas correspondientes a las diagonales

para(i=0 hasta tam‐1) hacer

sumas[2tam]=magica[i][i]+sumas[2tam]

fin_para

para(i=0 hasta tam‐1) hacer

sumas[2tam+1]=magica[i][(tam‐1)‐i]+sumas[2tam+1];

fin_para

Paso 4: Para determinar si la matriz es mágica se va a recorrer y comparar el vector sumas, si en algún momento se encuentra un valor diferente se muestra en pantalla que la matriz no es mágica y se lleva el contador i más allá del final del arreglo, si por el contrario se llega al final del arreglo, es decir que todo este contiene el mismo valor y la matriz si cumple con las características evaluadas, se muestra en pantalla que la matriz es mágica.

//Comparar el vector suma y muestra el resultado

int con=0;

con=sumas[0];

para(i=1 hasta 2*tam+1) hacer

si(con<>sumas[i])

escribir("la matriz no es mágica)

fin_para

para(i=0 hasta 2*tam+2) hacer

sumas[i]:=

fin_para

//Sumas correspondientes a las filas

para(i=0 hasta tam‐1) hacer

para(j=0 hasta tam‐1) hacer

sumas[i]=magica[i][j]+sumas[i]

fin_para

fin_para

//Sumas correspondientes a las columnas

para(j=0 hasta tam‐1) hacer

para(i=0 hasta tam‐1) hacer

sumas[j+tam]=magica[i][j]+sumas[j+tam]

fin_para

fin_para

//Sumas correspondientes a las diagonales

para(i=0 hasta tam‐1) hacer

sumas[2tam]=magica[i][i]+sumas[2tam]

fin_para

para(i=0 hasta tam‐1) hacer

sumas[2tam+1]=magica[i][(tam‐1)‐i]+sumas[2tam+1];

fin_para

con=sumas[0];

Nota : ver anexo

Problemas para desarrollar en clase

1. El dueño de un restaurante entrevista a cinco clientes de su negocio y les pide que califiquen de 1 a 10 los siguientes aspectos: (1 es pésimo y 10 es excelente o inmejorable)

 Atención de parte de los empleados  Calidad de la comida  Justicia del precio (el precio que pagó le parece justo?)  Ambiente (muebles cómodos?, música adecuada?, iluminación suficiente?, decoración, etc.)

Escriba un algoritmo que pida las calificaciones de los cinco clientes a cada uno de estos aspectos, y luego escriba el promedio obtenido en cada uno de ellos. La lista debe aparecer ordenada del aspecto mejor calificado al peor calificado.

2. En una hacienda hay un hato que se compone de N vacas. Diseñe un algoritmo que guarde en una matriz de dimensión 7xN la producción de leche diaria (en litros) de cada una de las vacas, durante una semana. Además, el algoritmo debe calcular la producción total del hato en cada uno de los siete días, y el número de la vaca que dio más leche en cada día.

para(i=1 hasta 2*tam+1) hacer

si(con<>sumas[i])

escribir("la matriz no es mágica)

i=2*tam+3;

fin_si

fin‐para

si(i=2*tam+2)

escribir(“la matriz es mágica y la suma es:”)

escribir(con);

fin_si

fin‐procedimiento

 La traspuesta de una matriz. Si A es una matriz de dimensión NxM, la matriz B=At se calcula haciendo que B[i][j] = A[j][i], para todo i y j válidos. Note que esto quiere decir que las filas se convierten en columnas y que la dimensión de B es MxN.  La traza de una matriz cuadrada. Si A es una matriz de dimensión NxN, la matriz traza es la suma de todos los elementos de la diagonal principal.  La multiplicación de dos matrices. Si A y B son matrices de dimensiones nxm y mxk, respectivamente, la matriz C=A*B , de dimensión nxk, se calcula haciendo que:

1

0

[][ ] [][ ]* [ ][ ]

m

p

Ci j Ai p Bp j

Especifique y escriba un algoritmo para cada una de estas operaciones.

Anexos

En esta sección se mostrara como es la codificación de la teoría vista en clase, para ello se

utilizara como herramienta de codificación: C++.

Codificación en C++ de arreglos y matrices

Seudocódigo C++ Matriz : matriz [][] de

[][];

Ejemplo En C++

#include <iostream.h>

#include <stdlib.h>

#include <conio.h>

/****Este programa lee los datos de una matriz 3x4 y muestra en pantalla la suma de los datos de cada fila *****/ main(){

int matriz[3][4];

int arreglo[3];

int i,j;

//Ingreso de los datos

for (i=0;i<3;i++){

for (j=0;j<4;j++){

cout << "Ingrese el numero entero correspondiente a la posicion ["<<i<<"] ["<<j<<"]:"; cin >> matriz[i][j];

}

}

//Muestra en pantalla la matriz ingresada

cout << "\nLa matriz que usted ingreso es: \n\n";

for (i=0;i<3;i++){

for (j=0;j<4;j++){

cout << matriz[i][j]<<" ";

}

cout << "\n";

}

//Suma los datos de cada fila

for (i=0;i<3;i++){

arreglo[i]=0;

for (j=0;j<4;j++){

arreglo[i]=arreglo[i]+matriz[i][j];

}

}

//Muestra en pantalla los resultados

for (i=0;i<3;i++){

cout << "\nLa suma de los datos de la fila "<<i<<" es: " << arreglo[i];

sumas [i]=0;

}

//filas

for (i=0; i<= tam‐1; i++){

for (j=0; j<=tam‐1; j++){

sumas[i]=magica[i][j]+sumas[i];

}

}

//columnas

for (j=0; j<= tam‐1; j++){

for (i=0; i<=tam‐1; i++){

sumas[i+tam]=magica[i][j]+sumas[i+tam];

}

}

//Diagonales

for (i=0; i<=tam‐1; i++){

sumas[2tam]=magica [i][i]+sumas[2tam];

}

for (i=0; i<=tam‐1; i++){

sumas[2tam+1]=magica [i][(tam‐1)‐i]+sumas[2tam+1];

}

con= sumas[0];

//imprimir arreglo sumas

cout<<"arreglo suma \n" ;

for (i=0; i<= 2*tam+1; i++){

cout<< i << "= " <<sumas [i] << endl;

}

// Verificar la suma en el arreglo

for (i=1; i<= 2*tam+1; i++){

if (con != sumas [i]){

cout<< "la matriz no es magica \n";

i=2*tam+3;

}

}

if (i == 2*tam+2)

cout << "la matriz es mágica y la suma es: "<< con << endl;

system("PAUSE");

return EXIT_SUCCESS;

}

Lectura de Profundización

 Texto tomado de http://dis.unal.edu.co/~programacion/book/modulo3.pdf

Imágenes:

Las imágenes utilizadas en este documento fueron tomadas de www.google.com

Fuentes:  http://www.slideshare.net/Edw1a/guia8‐programacion‐ 14671287  http://www.slideshare.net/gonmrod/vectores‐matrices‐i  http://www.atc.us.es/asignaturas/fi/curso_de_c/Array_bidimensional_o_matriz.html  http://www2.caminos.upm.es/departamentos/matematicas/Fdistancia/PIE/matlab/temas matlab/TEMA%203.pdf  http://trevinca.ei.uvigo.es/~jgarcia/TO/cursilloCpp/5_manejo_matrices.html