los sdkn

38
UNIVERSIDAD CENTRAL DEL ECUADOR INGENIERÍA MATEMÁTICA PROGRAMACIÓN I PROYECTO: MATRIZ MÁGICA INTEGRANTES: ÁGREDA STEFANY BRAVO KEVIN CHICAIZA NATHALY CHUQUILLA DARÍO

Upload: brenda-jazmin

Post on 18-Aug-2015

57 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Los sdkn

UNIVERSIDAD CENTRAL DEL ECUADOR

INGENIERÍA MATEMÁTICA

PROGRAMACIÓN I

 

 

PROYECTO:

MATRIZ MÁGICA

 

 

INTEGRANTES: 

ÁGREDA STEFANY 

BRAVO KEVIN 

CHICAIZA NATHALY 

CHUQUILLA DARÍO 

QUITO, 08 DE JULIO DEL 2015 

Page 2: Los sdkn

ÍNDICE

ÍNDICE......................................................................................................................................................2

TABLA DE ILUSTRACIONES...............................................................................................................2

RESUMEN.................................................................................................................................................3

CAPÍTULO I.............................................................................................................................................4

EL PROBLEMA....................................................................................................................................4

PLANTEAMIENTO DEL PROBLEMA.........................................................................................4

OBJETIVOS......................................................................................................................................5

JUSTIFICACIÓN..............................................................................................................................6

CAPÍTULO II............................................................................................................................................7

MARCO TEÓRICO..............................................................................................................................7

MATRIZ............................................................................................................................................7

CÓDIGO EN VISUAL BASIC:..........................................................................................................14

CÓDIGO EN C:...................................................................................................................................19

CÓDIGO JAVA:.................................................................................................................................24

RECOMENDACIONES.........................................................................................................................29

BIBLIOGRAFÍA.....................................................................................................................................30

TABLA DE ILUSTRACIONES

ILUSTRACIÓN 1: MATRIZ..............................................................................................................6ILUSTRACIÓN 2: MATRIZ MONTOS...............................................................................................8ILUSTRACIÓN 3 MATRIZ MÁGICA..................................................................................................8ILUSTRACIÓN 4: ARREGLO DE DATOS..........................................................................................8ILUSTRACIÓN 5: ENTRADAS Y SALIDAS DEL ALGORITMO...........................................................9

2

Page 3: Los sdkn

RESUMEN

Todas las personas debemos conocer el concepto de una matriz para poder organizar nuestra

información, pero para ello debe generarse la intención de aprender. En programación se busca

tratar de mejorar y facilitar procesos de nuestra vida cotidiana como lo es problemas de

razonamientos matemáticos, por lo cual en nuestro trabajo se presentará un algoritmo que nos

ayude a realizar procesos matemáticos los mismos que indicarán si una matriz que ingresamos es

mágica o no mediante la verificación de la suma de sus filas y columnas pero siempre teniendo

en cuenta que una matriz mágica es una matriz cuadrada.

3

Page 4: Los sdkn

CAPÍTULO I

EL PROBLEMA

PLANTEAMIENTO DEL PROBLEMA

La resolución de problemas matemáticos como lo es de una matriz en el ámbito

académico es de mucha importancia la cual se origina al querer tener datos más ordenados en

filas y columnas para que la presentación de la información sea más clara, entendible y estética, a

medida que el conocimiento va avanzando no solo se la utiliza en matemática sino que también

en diversas áreas derivadas de ella por la cual en la actualidad todo ser humano conoce el

concepto de lo que es una matriz.

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.

Con el estudio de lo que es un matriz se podrá resolver una matriz realizada con bases de

los conceptos que se van estudiar en la cual también se verificará si es mágica (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) o no lo es;

mediante la suma de sus filas, columnas y diagonales la misma que permitirá que los usuarios

que la utilicen se den cuenta la diferencia entre las dos matrices que podrán generar.

El concepto de matrices ha ayudado a ordenar y resolver diversos problemas de la vida

real por lo que su estudio es de gran importancia siendo esta la que ayudará en el presente

proyecto a resolver el objetivo propuesto.

Con la ayuda de un algoritmo se podrá generar la solución de la matriz mágica el mismo

que será realizado en tres diferentes lenguajes de programación los cuales son Visual Basic, C++

y Java, estos lenguajes presentarán un mismo algoritmo pero con características diferentes en sus

lenguajes de códigos e interpretación de los mismos.

4

Page 5: Los sdkn

OBJETIVOS

Objetivo General:

Aprender y analizar el concepto de matrices en programación para realizar algoritmos con las mismas que permitan dar solución a varios problemas, entre ellas la respuesta de una matriz mágica.

Objetivos Específicos: Conocer que es una matriz. Representar conjuntos de datos mediante matrices. Solucionar problemas utilizando matrices.

5

Page 6: Los sdkn

JUSTIFICACIÓN

El presente trabajo realizado por el grupo DSKN es de gran importancia ya que con este

se pretende dar solución a diversos problemas cotidianos mediante la utilización básica de

conceptos de matrices.

Los aspectos novedosos a investigarse en el presente trabajo es como realizar sumas de

filas, columnas y diagonales dentro de una matriz para con ello poder determinar si la matriz que

propone el usuario va a ser mágica o no.

Al ser este una investigación interesante y distractora tendrá gran acogida puesto que es

fácil de utilizarla solo se necesita la imaginación y habilidad del usuario para digitar los números

y así poder comprobar si lo que intenta hacer corresponde a la matriz mágica, una matriz de igual

número de filas y columnas cabe recalcar.

El uso más importante de las matrices es para resolver ecuaciones lineales de muchas

variables en forma sistemática y compacta. (Esto incluye problemas de física de muchos cuerpos

y cualquier aproximación lineal de un problema no lineal).

También se pueden crear las llamadas "matrices de transición" que son matrices que

describen procesos de transición de estados cuánticos. 

6

Page 7: Los sdkn

CAPÍTULO II

MARCO TEÓRICO

MATRIZ

(CALDAS, s.f.) 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: 

Ilustración 1: Matriz

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 Matrices 3 índice de fila e índice de columna, respectivamente. En el seudocódigo, y también en C y C++, las filas y las columnas se numeran desde 0. 

Los lenguajes como C y C++, permiten que el programador declare matrices de cualquier tipo y prácticamente de cualquier tamaño. En el seudocódigo, un matriz se declara usando el siguiente formato:  

7

Page 8: Los sdkn

En este formato aparecen en mayúsculas y entre los caracteres < y > los componentes que el programador puede determinar. Así por ejemplo, si se quiere declarar una matriz con nombre mat, de dimensión 15x4 y que pueda almacenar datos de tipo caracter, se debe escribir la siguiente línea. 

Según el formato anterior, el programador debe bautizar la matriz (ponerle un nombre significativo), debe decir cuál es su dimensión, y también debe decir de qué tipo son los elementos que almacenará. 

Enseguida se dan algunos ejemplos de declaraciones de matrices.  

Si se necesita guardar la información relacionada con el tablero de un juego de tic tac toe (el tradicional triqui), se puede declarar la siguiente matriz:  

tablero : matriz [3][3] de caracter

 Si se requiere guardar las notas que han sacado 35 estudiantes en los 5 talleres y en los 5 laboratorios del curso de Programación de Computadores se pueden declarar las siguientes matrices. 

talleres : matriz [35][5] de real

laboratorios : matriz [35][5] de real

Note que, en ambas matrices, cada fila guarda las notas de un estudiante del curso.   

Si se quiere guardar las letras que conforman una sopa de letras, como aquellas que vienen en los pasatiempos, se puede declarar la siguiente matriz.    

sopa : matriz [10][15] de carácter

 Note que la sopa de letras más grande que se puede guardar es de 10 filas por 15 columnas. Los índices se crearon para permitir que el programador se pueda referir, de forma específica y directa, a una cualquiera de las casillas de la matriz, tanto para guardar un dato en esa casilla,  como para obtener el dato almacenado en ella. En el seudocódigo, para referirse a una casilla particular de una matriz se debe seguir el siguiente formato: 

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:  

8

Page 9: Los sdkn

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,4

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

k:=0MIENTRAS (k<10) HACER

montos[5][k]:= 5,5k:=k+1

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. 

Ilustración 2: Matriz montos

(Microsoft, s.f.) Una matriz tiene las propiedades siguientes:

Una matriz puede ser unidimensional, multidimensional o escalonada. El número de dimensiones y la longitud de cada dimensión se establecen cuando se crea

la instancia de la matriz. Estos valores no se pueden cambiar durante la duración de la instancia.

Los valores predeterminado de los elementos numéricos de matriz se establece en cero y el de los elementos de referencia se establece en null.

Una matriz escalonada es una matriz de matrices y por consiguiente sus elementos son tipos de referencia y se inicializan en null.

Las matrices se indizan basadas en cero: una matriz con n elementos se indiza desde 0 hasta n-1.

Los elementos de una matriz pueden ser de cualquier tipo, incluido el tipo matriz.

9

Page 10: Los sdkn

MATRIZ MÁGICA

(Matriz mágica, s.f.) 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: 

Ilustración 3 Matriz mágica

 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:  

Ilustración 4: Arreglo de datos

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. 

10

Page 11: Los sdkn

Ilustración 5: Entradas y Salidas del Algoritmo

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

REQUIERE: La dimensión de la matriz que debe ser máximo 10x10 Cada elemento de la matriz debe ser un número entero  

GARANTIZA Muestra en pantalla si es mágica o no, y si lo es cuál es el valor de la suma. 

ALGORITMO EN PSEUDOCÓDIGOUna primera versión del algoritmo puede ser la siguiente:  

Inicio  

Paso 1. Leer el tamaño de la matriz  

Paso 2. Leer los elementos de la matriz  

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  

Fin 

Los pasos 1 y 2 son interacciones con el usuario que permiten capturar los datos de entrada. La versión inicial se puede refinar detallando estos pasos y además defiendo las variables para hacerlos:  

Procedimiento principal

variables i, j, cont, dimension, suma: entero //i señala las filas //j señala las columnas 

magica: matriz [10][10] de enterosInicio

escribir(“Por favor digite la dimensión con la que desea trabajar: ”)leer(dimension)

para (i=0 hasta dimension-1) hacer para(j=0 hasta dimension -1) hacer

11

Page 12: Los sdkn

escribir(“Por favor digite el dato en la posición”)escribir(i, j)leer(magica[i][j])

fin_para fin_para

Paso 3Paso 4

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*dimension+2) hacer sumas[i]:=0 fin_para//Sumas correspondientes a las filas para(i=0 hasta dimension -1) hacer para(j=0 hasta dimension -1) hacer sumas[i] =magica[i][j] +sumas[i] fin_para fin_para//Sumas correspondientes a las columnas para(j=0 hasta dimension -1) hacer para(i=0 hasta dimension -1) hacer sumas[j+ dimension]=magica[i][j]+sumas[j+ dimension] fin_para fin_para//Sumas correspondientes a las diagonalespara(i=0 hasta dimension -1) hacer sumas[2* dimension]=magica[i][i]+sumas[2* dimension] fin_para para(i=0 hasta dimension -1) hacer sumas[2* dimension +1]=magica[i][( dimension -1)-i]+sumas[2* dimension +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

12

Page 13: Los sdkn

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* dimension +1) hacer si(con<>sumas[i]) escribir("la matriz no es mágica)

i=2* dimension +3; fin_sifin-parasi(i=2* dimension +2) escribir(“la matriz es mágica y la suma es:”) escribir(con);fin_si

El algoritmo completo se presenta enseguida.

Procedimiento principalvariables i, j, aux, dimension, suma: entero //i señala las filas //j señala las columnascon=0: enteromagica: matriz [10][10] de enterossumas: arreglo [22] de enterosInicioescribir(“Por favor digite la dimensión con la que desea trabajar: ”) leer(dimension)

para (i=0 hasta dimension -1) hacer para(j=0 hasta dimension -1) hacer

escribir(“Por favor digite el dato en la posición”)escribir(i,j)leer(magica[i][j])

fin_para fin_parapara(i=0 hasta 2* dimension +2) hacer sumas[i]:=0fin_para

//Sumas correspondientes a las filaspara(i=0 hasta dimension -1) hacer para(j=0 hasta dimension -1) hacer

13

Page 14: Los sdkn

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

//Sumas correspondientes a las columnaspara(j=0 hasta dimension -1) hacer para(i=0 hasta dimension -1) hacer sumas[j+ dimension]=magica[i][j]+sumas[j+ dimension] fin_parafin_para

//Sumas correspondientes a las diagonalespara(i=0 hasta dimension -1) hacer sumas[2* dimension]=magica[i][i]+sumas[2* dimension]fin_parapara(i=0 hasta dimension -1) hacer sumas[2* dimension +1]=magica[i][( dimension -1)-i]+sumas[2* dimension +1]; fin_paracon=sumas[0];para(i=1 hasta 2* dimension +1) hacer si(con<>sumas[i]) escribir("la matriz no es mágica)

i=2* dimension +3; fin_sifin-parasi(i=2* dimension +2) escribir(“la matriz es mágica y la suma es:”) escribir(con);fin_sifin-procedimiento

CÓDIGO EN VISUAL BASIC:

1. Definiremos las variables q vamos a necesitar:Dim i As IntegerDim j As IntegerDim aux As IntegerDim dimension As IntegerDim cont As IntegerDim Matriz(10, 10) As IntegerDim suma(300) As Integer

2. Desplegaremos el siguiente mensaje:

dimension = InputBox("Porfavor ingrese la dimension de la matriz con la que desea trabajar ")

14

Page 15: Los sdkn

3. Ciclo para generar la matriz:

For i = 0 To dimension - 1 For j = 0 To dimension - 1 Matriz(i, j) = InputBox("Digite los elementos de la matriz en la posicion: " & i & "." & j) Next j Next i

4. Impresión de datos:

Worksheets("Hoja1").Cells(1, 2).Value = ("PROYECTO DE MATRIZ MÁGICA ")Worksheets("Hoja1").Cells(3, 2).Value = ("La matriz es: ")Cells(3, 2).Interior.ColorIndex = 39Cells(3, 2).BorderAround (xlContinuous)Cells(3, 2).BorderAround (xlHairline)For i = 0 To dimension - 1 For j = 0 To dimension - 1 Worksheets("Hoja1").Cells(4 + i, 2 + j).Value = (Matriz(i, j)) Cells(4 + i, 2 + j).Interior.ColorIndex = 40 Cells(4 + i, 2 + j).BorderAround (xlContinuous) Cells(4 + i, 2 + j).BorderAround (xlHairline) Next jNext i

5. Suma filas:

For i = 0 To 2 * dimension + 2 suma(i) = 0Next i

'Suma FilasWorksheets("Hoja1").Cells(9, 1).Value = ("La suma de sus filas es: ")Cells(9, 1).Interior.ColorIndex = 43Cells(9, 1).BorderAround (xlContinuous)Cells(9, 1).BorderAround (xlHairline)For i = 0 To dimension - 1 Worksheets("Hoja1").Cells(10 + i, 1).Value = ("Suma fila " & i + 1) Cells(10 + i, 1).Interior.ColorIndex = 44 Cells(10 + i, 1).BorderAround (xlContinuous) Cells(10 + i, 1).BorderAround (xlHairline) For j = 0 To dimension - 1 suma(i) = suma(i) + Matriz(i, j) Worksheets("Hoja1").Cells(10 + i, 2 + j).Value = (suma(i)) Cells(10 + i, 2 + j).Interior.ColorIndex = 45 Cells(10 + i, 2 + j).BorderAround (xlContinuous) Cells(10 + i, 2 + j).BorderAround (xlHairline)

15

Page 16: Los sdkn

Next jNext i

6. Suma columnas:

'Suma ColumnasWorksheets("Hoja1").Cells(15, 1).Value = ("La suma de sus columnas es: ")Cells(15, 1).Interior.ColorIndex = 10Cells(15, 1).BorderAround (xlContinuous)Cells(15, 1).BorderAround (xlHairline)For j = 0 To dimension - 1 For i = 0 To dimension - 1 suma(j + dimension) = suma(j + dimension) + Matriz(i, j) Worksheets("Hoja1").Cells(16, 1 + j).Value = ("Suma columna " & j + 1) Cells(16, 1 + j).Interior.ColorIndex = 44 Cells(16, 1 + j).BorderAround (xlContinuous) Cells(16, 1 + j).BorderAround (xlHairline) Worksheets("Hoja1").Cells(17 + i, 1 + j).Value = (suma(j + dimension)) Cells(17 + i, 1 + j).Interior.ColorIndex = 45 Cells(17 + i, 1 + j).BorderAround (xlContinuous) Cells(17 + i, 1 + j).BorderAround (xlHairline) Next iNext j

7. Suma diagonales:'Suma Diagonalesj = 0Worksheets("Hoja1").Cells(21, 1).Value = ("La suma de sus diagonales es: ")Cells(21, 1).Interior.ColorIndex = 23Cells(21, 1).BorderAround (xlContinuous)Cells(21, 1).BorderAround (xlHairline)For i = 0 To dimension - 1 Worksheets("Hoja1").Cells(22, 1).Value = ("Suma diagonal izq-der ") Cells(22, 1).Interior.ColorIndex = 46 Cells(22, 1).BorderAround (xlContinuous) Cells(22, 1).BorderAround (xlHairline) suma(2 * dimension) = suma(2 * dimension) + Matriz(i, i) Worksheets("Hoja1").Cells(22 + i, 2 + j).Value = (suma(2 * dimension)) Cells(22 + i, 2 + j).Interior.ColorIndex = 44 Cells(22 + i, 2 + j).BorderAround (xlContinuous) Cells(22 + i, 2 + j).BorderAround (xlHairline) j = j + 1Next iWorksheets("Hoja1").Cells(22, j + 2).Value = ("Suma diagonal der-izq ")Cells(22, j + 2).Interior.ColorIndex = 22Cells(22, j + 2).BorderAround (xlContinuous)

16

Page 17: Los sdkn

Cells(22, j + 2).BorderAround (xlHairline)For i = 0 To dimension - 1 suma(2 * dimension + 1) = suma(2 * dimension + 1) + Matriz(i, (dimension - 1) - i) Worksheets("Hoja1").Cells(22 + i, 3 + j).Value = (suma(2 * dimension + 1)) Cells(22 + i, 3 + j).Interior.ColorIndex = 44 Cells(22 + i, 3 + j).BorderAround (xlContinuous) Cells(22 + i, 3 + j).BorderAround (xlHairline) j = j + 1Next i

8. Verificación de la matriz:

'Verificar si la matriz es magicacont = 0cont = suma(0)

For i = 1 To 2 * dimension + 1 If (cont = suma(i)) Then Worksheets("Hoja1").Cells(27, 1).Value = ("La matriz es magica y su suma es " & cont) Cells(27, 1).Interior.ColorIndex = 3 Else If (cont <> suma(i)) Then Worksheets("Hoja1").Cells(27, 1).Value = ("La matriz no es magica") Cells(27, 1).Interior.ColorIndex = 3 End If End IfNext i

9. Fin del algoritmo:End Sub

AHORA PROCEDEREMOS A REALIZAR LAS DIFERENTES PRUEBAS Y ASÍ VERIFICAR LA VALIDEZ DEL ALGORITMO:

*MATRIZ MÁGICA:

1. Ejecutamos el programa:

2. Escogemos la dimensión con la que trabajaremos: (En este caso=4)

17

Page 18: Los sdkn

3. Digitaremos los valores de nuestra matriz de inicio a fin:

4. Estos son los resultados obtenidos:

*MATRIZ NO MÁGICA:Los pasos 1,2 y 3 serán exactamente iguales, lo que cambiará son los resultados obtenidos:

En el paso 3, los números serán distintos ya que verificaremos una matriz no mágica.

4. Resultados:

18

Page 19: Los sdkn

CÓDIGO EN C:

1. Incluimos las librerías:

#include "stdafx.h"#include "stdio.h"#include "stdlib.h"#include "conio.h"#include "time.h"

int _tmain(int argc, _TCHAR* argv[]){

system("color F0");

2. Definimos las variables:

int i, j, aux, dimension, suma[300], cont;char matriz[10][10];printf("Porfavor ingrese la dimension de la matriz con la que desea trabajar ");//srand(time(NULL)); Únicamente se utiliza para generar números aleatorios pero no fue necesarioscanf_s("%d", &dimension);

3. Ciclo para generar la matriz:

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

for (j = 0; j < dimension; j++)

19

Page 20: Los sdkn

{printf("Digite los elementos de la matriz en la posicion %d %d ", i, j);

scanf_s("%d", &matriz[i][j]);

}

printf("\n\n");}for (i = 0; i < dimension; i++){

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

printf("\t%d", matriz[i][j]);}printf("\n\n");

}printf("\n");printf("+++++ Suma de matriz filas +++++");printf("\n");for (i = 0; i < 2 * dimension + 2; i++){

suma[i] = 0;}

4. Suma filas://suma filasfor (i = 0; i < dimension; i++){

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

suma[i] = suma[i] + matriz[i][j];printf("\t %d", suma[i]);

}printf("\n\n");

}printf("\n");printf("+++++ Suma de matriz columnas +++++");printf("\n");

5. Suma columnas:

//suma columnasfor (j = 0; j < dimension; j++){

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

suma[j + dimension] = suma[j + dimension] + matriz[i][j];

20

Page 21: Los sdkn

printf("\t %d", suma[j + dimension]);}printf("\n\n");

}printf("\n");printf("+++++ Suma de matriz diagonales +++++");printf("\n");

6. Suma diagonales:

//suma diagonalesfor (i = 0; i < dimension; i++){

suma[2 * dimension] = suma[2 * dimension] + matriz[i][i];printf("\t %d", suma[2 * dimension]);

}printf("\n\n");printf("\n");for (i = 0; i < dimension; i++){

suma[2 * dimension + 1] = suma[2 * dimension + 1] + matriz[i][(dimension - 1) - i];printf("\t %d", suma[2 * dimension + 1]);

}printf("\n\n");

7. Verificación de la matriz:

//verificar si la matriz es magicacont = 0;cont = suma[0];for (i = 1; i < 2 * dimension + 1; i++){

if ((cont != suma[i])){

printf("La matriz no es magica");i = 2 * dimension + 3;

}

elseif (i = 2 * dimension + 2){

printf("La matriz es magica y su suma es %d", cont);}

}8. Fin del algoritmo:

21

Page 22: Los sdkn

getchar();getchar();return 0;

}

AHORA PROCEDEREMOS A REALIZAR LAS DIFERENTES PRUEBAS Y ASÍ VERIFICAR LA VALIDEZ DEL ALGORITMO:

*MATRIZ MÁGICA:

1. Ejecutamos el programa:

2. Escogeremos la dimensión con la que vamos a trabajar: (En este caso =4)

3. Digitaremos los valores de la matriz de inicio a fin:

4. Resultados:

22

Page 23: Los sdkn

*MATRIZ NO MÁGICA:Los pasos 1,2 y 3 serán exactamente iguales, lo que cambiará son los resultados obtenidos:

En el paso 3, los números serán distintos ya que verificaremos una matriz no mágica.

4. Resultados:

23

Page 24: Los sdkn

CÓDIGO JAVA:package javaapplication1;import java.util.*;

public class JavaApplication1 {

public static void main(String[] args) {

1. Definimos variables: int i, j, aux, dimension, cont; Scanner dato=new Scanner(System.in);

2. Desplegamos el siguiente mensaje para elegir la dimensión:

System.out.print("Porfavor ingrese la dimension de la matriz con la que desea trabajar "); dimension=dato.nextInt(); int matriz[][]=new int[10][10];

int suma[]=new int[300];

3. Ciclo para generar la matriz:

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

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

System.out.print("Digite los elementos de la matriz en la posicion " + i + j+": " );matriz[i][j]=dato.nextInt();

} System.out.print("\n\n");

} System.out.println("La matriz es: ");

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

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

System.out.print("\t"+matriz[i][j]);}System.out.print("\n");

}System.out.print("\n");System.out.println("+++++ Suma de matriz filas +++++");

24

Page 25: Los sdkn

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

suma[i] = 0;}

4. Suma filas :

//suma filasfor (i = 0; i < dimension; i++){

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

suma[i] = matriz[i][j]+suma[i];System.out.print("\t" + suma[i]);

}System.out.print("\n\n");

}System.out.print("\n");System.out.println("+++++ Suma de matriz columnas +++++");

5. Suma columnas:

//suma columnasfor (j = 0; j < dimension; j++){

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

suma[j + dimension] = matriz[i][j]+suma[j + dimension] ;System.out.print("\t "+ suma[j + dimension]);

}System.out.print("\n\n");

}System.out.print("\n");System.out.println("+++++ Suma de matriz diagonales +++++");

6. Suma diagonales:

//suma diagonalesfor (i = 0; i < dimension; i++){

suma[2 * dimension] = matriz[i][i]+suma[2 * dimension] ;System.out.print("\t "+ suma[2 * dimension]);

}System.out.println("\n\n");for (i = 0; i < dimension; i++){

25

Page 26: Los sdkn

suma[2 * dimension + 1] = matriz[i][(dimension - 1) - i]+suma[2 * dimension + 1] ;

System.out.print("\t "+ suma[2 * dimension + 1]);}System.out.print("\n\n");

7. Verificación de la matriz:

//verificar si la matriz es magicacont = 0;cont = suma[0];for (i = 1; i < 2 * dimension+1 ; i++){

if (cont != suma[i]){

System.out.println("La matriz no es magica"); i=2*dimension+3;

} else { if (cont == suma[i]) { System.out.println("La matriz es magica y su suma es "+cont); i=2*dimension+3; } } } }}

8. Fin de ciclo

AHORA PROCEDEREMOS A REALIZAR LAS DIFERENTES PRUEBAS Y ASÍ VERIFICAR LA VALIDEZ DEL ALGORITMO:

*MATRIZ MÁGICA:

1. Ejecutamos el programa y elegimos la dimensión con la que trabajemos: (En este caso = 4)

26

Page 27: Los sdkn

2. Digitamos los valores de nuestra matriz de inicio a fin :

3. Resultados:

*MATRIZ NO MÁGICA:

Los pasos 1,2 y 3 serán exactamente iguales, lo que cambiará son los resultados obtenidos:

En el paso 3, los números serán distintos ya que verificaremos una matriz no mágica.

4. Resultados:

27

Page 28: Los sdkn

28

Page 29: Los sdkn

CONCLUSIONES

En nuestra época la tecnología ocupa un papel muy importante en la sociedad ya que se ha convertido en una de las herramientas más utilizadas por la sociedad.

La programación es inevitable en la vida diaria de las personas para cada cosa que hacemos hay un orden o una sucesión de pasos para llegar a un objetivo.

Nuestro programa servirá de ayuda al usuario del modo que le permita realizar los procesos matemáticos de una manera más rápida y con mayor eficiencia.

El presente algoritmo funcionará exitosamente, si el operador realiza correctamente las indicaciones dadas.

Como resultado obtendremos que si la suma de las filas, columnas y diagonales de una matriz son iguales, ésta se declarará como mágica.

RECOMENDACIONES

Se deberá usar la tecnología como medio de información para la investigación sin embargo se recomienda utilizar correctamente

Es necesario tener claro el concepto de matriz, para poder utilizarlo en cualquier ámbito de la programación, en este caso como algoritmo.

Se recomienda buscar la mejor alternativa posible para la solución del problema, ya que el presente algoritmo no es el único método para desarrollar una matriz mágica.

El proyecto presentado puede ser modificado de acuerdo a la necesidad del operador. Los profesores de los diferentes centros educativos deberían motivar más al uso de la

programación.

29

Page 30: Los sdkn

BIBLIOGRAFÍA

CALDAS, U. D. (s.f.). Matrices. Obtenido de http://ingenieria1.udistrital.edu.co/udin/pluginfile.php/26700/mod_resource/content/2/Matrices.pdf

Matriz mágica. (s.f.). Obtenido de http://dis.unal.edu.co/~programacion/book/modulo3.pdf

Microsoft. (s.f.). Matrices (Guía de programación de C#). Obtenido de https://msdn.microsoft.com/es-es/library/9b9dty7d.aspx

LIBRO DE PROGRAMACIÓN EN INGLÉS:

Walkenbach, J. (10 de Mayo de 2010). Excel 2010 Power Programming with VBA . Obtenido de http://www.amazon.com/Excel-2010-Power-Programming-VBA/dp/0470475358

 

 

30