Mostrando entradas con la etiqueta ejercicio resuelto. Mostrar todas las entradas
Mostrando entradas con la etiqueta ejercicio resuelto. Mostrar todas las entradas

domingo, 31 de agosto de 2014

Matriz de la relación predecesor inmediato en c++. – Email – Lawyers – Law Firm – Registros


matriz de la relacion predecesor inmediato

Cuando aprendemos sobre reticulados nos enseñan un algoritmo para conseguir lamatriz de la relación de predecesores inmediatos de un CPO (Conjunto Parcialmente Ordenado) a partir de la matriz de la relación de orden [A,] donde A tiene n elementos.

El algoritmo sería el siguiente:

-Se calcula la matriz de la relación de orden M.

-Determinamos la matriz M = M- In . M es igual a la matriz de relación de orden menos la matriz identidad.

-Calculamos M^2 (M al cuadrado = MxM) haciendo una multiplicación binaria. Es decir, la matriz resultante solo contendrá unos y ceros como entradas.

-Hallamos M = M - M^2 (matriz de la relación predecesor inmediato). La matriz de la relación predecesor inmediato es igual a la matriz M menos la matriz M^2.

Ejercicio de ejemplo:

Dado el CPO [A, /] en dondeA = {200,60,30,10,5,1} y"/" es la relación binaria dedivisibilidad enA, (a/b si y sólo si "a" divide a "b") entonces: Hallar lamatriz de predecesores inmediatos.

Siguiendo el algoritmo calculamos la matriz M:
M=


1 divide a todo número real, por ello todas las entradas de esta fila de la matriz son 1.
5 divide a 5, 10, 30,60,200.
10 divide a 10,30,60,200.
30 divide a 30 y 60.
60 divide a 60.
200 divide a 200.

Siguiente paso, calculamos la matriz M que esta dada por M = M- In.

M=


In =


M = M- In

M =



Luego, calculamos M^2:

M^2 = M x M

X

M^2 =



Finalmente, hallamos la matriz de la relación predecesor inmediato.

M = M - M^2

M =





Una buena opción es desarrollar este algoritmo en algún lenguaje de programación que conozcamos, con el fin de aprender un poco más y a su vez comprobar los ejercicios que realizamos en nuestras horas de estudio. Este algoritmo lo podemos desarrollar enc++ de la siguiente forma:

#include iostream

using namespace std;

int main(){
int filas, colum;
cout "Ingrese la cantidad de filas de la matriz de la relación de orden: " endl;
cin filas;
cout "Ingrese la cantidad de columnas de la matriz de la relación de orden: " endl;
cin colum;
int matrizRO[filas][colum]; //matriz de relación de orden
int matrizRO2[filas][colum];
int matrizm2[filas][colum];
int matrizPI[filas][colum];
// Ingresamos las entradas de la matriz de relación de orden
cout "Ingrese las entradas de la matriz de la relación de orden" endl;
for(int i = 0; i filas; i++){
for(int j = 0; j colum; j++){
cout "Ingrese la entrada a" i j endl;
cin matrizRO[i][j];
}
}
// Restamos la matriz identidad a nuestra matriz
for(int diagonal = 0; diagonal colum; diagonal++)
{
matrizRO[diagonal][diagonal] = 0;
}

//Imprimimos el valor de M

cout "Matriz M: " endl;
for(int i = 0; i filas; i++){
for(int j = 0; j colum; j++){
cout matrizRO[i][j] " ";
}
cout endl;
}

//segunda matriz

for(int i = 0; i filas; i++){
for(int j = 0; j colum; j++){
matrizRO2[i][j] = matrizRO[i][j];
}
}

//

//Calculamos M^2 (Binarizada)
for(int i=0;ifilas;i++){
for(int j=0;jcolum;j++){
matrizm2[i][j]=0;
for(int k=0;kcolum;k++){
if(matrizRO[i][k] == 1 and matrizRO2[k][j] == 1)
matrizm2[i][j] = 1;
}
}
}
// Imprimimos M^2
cout "Matriz M^2: " endl;
for(int i = 0; i filas; i++){
for(int j = 0; j colum; j++){
cout matrizm2[i][j] " ";
}
cout endl;
}

//Calculamos la matriz de la relación predecesor inmediato

for(int i = 0; i filas; i++){
for(int j = 0; j colum; j++){
matrizPI[i][j] = matrizRO[i][j] - matrizm2[i][j];
}
}

//Imprimimos la matriz de la relación predecesor inmediato

cout "Matriz de la relación predecesor inmediato: " endl;
for(int i = 0; i filas; i++){
for(int j = 0; j colum; j++){
cout matrizPI[i][j] " ";
}
cout endl;
}

return 0;
}

int matrizRO[filas][colum]; //matriz de relación de orden
int matrizRO2[filas][colum];
int matrizm2[filas][colum];
int matrizPI[filas][colum];

La matrizRO representa la matriz de relación de orden, la matrizRO2 contiene las mismas entradas que la anterior, esta se usará solo para realizar la multiplicación para obtener M^2.
La matrizm2 representa la matriz M^2.
La matrizPI representa la matriz de la relación de predecesores inmediatos.

int filas, colum;
cout "Ingrese la cantidad de filas de la matriz de la relación de orden: " endl;
cin filas;
cout "Ingrese la cantidad de columnas de la matriz de la relación de orden: " endl;
cin colum;

Inicialmente ingresamos la cantidad de filas y columnas que tiene nuestra matriz. Dicha matriz es una matriz cuadrada de orden nxn.

// Restamos la matriz identidad a nuestra matriz
for(int diagonal = 0; diagonal colum; diagonal++)
{
matrizRO[diagonal][diagonal] = 0;
}

Para encontrar el valor de M solo debemos anular la diagonal principal de nuestra matriz.

//Calculamos M^2 (Binarizada)
for(int i=0;ifilas;i++){
for(int j=0;jcolum;j++){
matrizm2[i][j]=0;
for(int k=0;kcolum;k++){
if(matrizRO[i][k] == 1 and matrizRO2[k][j] == 1)
matrizm2[i][j] = 1;
}
}
}

Calculamos M^2 con el anterior algoritmo, tomar en cuenta que como es una matriz binarizada solo tendrá ceros y unos. Al conseguir una coincidencia de dos 1 almacenamos 1 en la matriz M^2.

//Calculamos la matriz de la relación predecesor inmediato

for(int i = 0; i filas; i++){
for(int j = 0; j colum; j++){
matrizPI[i][j] = matrizRO[i][j] - matrizm2[i][j];
}
}

Calculamos la matriz de la relación de predecesor inmediato con la diferencia entre la matriz M y M^2.

Resolviendo el ejercicio anterior con nuestro programa de consola hecho en c++, ésta sería su ejecución:

Ingrese la cantidad de filas de la matriz de la relación de orden:
6
Ingrese la cantidad de columnas de la matriz de la relación de orden:
6
Ingrese las entradas de la matriz de la relación de orden
Ingrese la entrada a00
1
Ingrese la entrada a01
1
Ingrese la entrada a02
1
Ingrese la entrada a03
1
Ingrese la entrada a04
1
Ingrese la entrada a05
1
Ingrese la entrada a10
0
Ingrese la entrada a11
1
Ingrese la entrada a12
1
Ingrese la entrada a13
1
Ingrese la entrada a14
1
Ingrese la entrada a15
1
Ingrese la entrada a20
0
Ingrese la entrada a21
0
Ingrese la entrada a22
1
Ingrese la entrada a23
1
Ingrese la entrada a24
1
Ingrese la entrada a25
1
Ingrese la entrada a30
0
Ingrese la entrada a31
0
Ingrese la entrada a32
0
Ingrese la entrada a33
1
Ingrese la entrada a34
1
Ingrese la entrada a35
0
Ingrese la entrada a40
0
Ingrese la entrada a41
0
Ingrese la entrada a42
0
Ingrese la entrada a43
0
Ingrese la entrada a44
1
Ingrese la entrada a45
0
Ingrese la entrada a50
0
Ingrese la entrada a51
0
Ingrese la entrada a52
0
Ingrese la entrada a53
0
Ingrese la entrada a54
0
Ingrese la entrada a55
1
Matriz M:
0 1 1 1 1 1
0 0 1 1 1 1
0 0 0 1 1 1
0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0
Matriz M^2:
0 0 1 1 1 1
0 0 0 1 1 1
0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Matriz de la relación predecesor inmediato:
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 1
0 0 0 0 1 0
0 0 0 0 0 0
0 0 0 0 0 0

Optimizando el algoritmo en c++:

El código fuente del algoritmo hecho en c++ está escrito con el mayor detalle posible con el fin de que pueda ser entendido fácilmente. Sin embargo, este puede ser optimizado evitando la creación de algunas matrices no tan necesarias y algunos ciclos repetitivos for. Esto con el fin de minimizar el tiempo de ejecución y reducir el espacio utilizado en la memoria.

#include iostream

using namespace std;

int main(){
int n;
char respuesta;
do{
cout "Ingrese el valor de n para su matriz de orden nxn " endl;
cin n;
int matrizR[n][n]; //matriz de relación de orden y luego de la relación predecesor inmediato.
int matrizm2[n][n];
// Ingresamos las entradas de la matriz de relación de orden
cout "Ingrese las entradas de la matriz de la relación de orden" endl;
for(int i = 0; i n; i++){
for(int j = 0; j n; j++){
cout "Ingrese la entrada a" i j endl;
cin matrizR[i][j];
//Anulando diagonal principal al momento de ingresar la matriz
if(i == j)
matrizR[i][j] = 0;
}
}

//Calculamos M^2 (Binarizada)
for(int i=0;in;i++){
for(int j=0;jn;j++){
matrizm2[i][j]=0;
for(int k=0;kn;k++){
if(matrizR[i][k] == 1 and matrizR[k][j] == 1){
matrizm2[i][j] = 1;
            break;
            }
}
}
}

//Calculamos la matriz de la relación predecesor inmediato y la imprimimos al mismo tiempo
cout "Matriz de la relación predecesor inmediato:" endl;
for(int i = 0; i n; i++){
for(int j = 0; j n; j++){
matrizR[i][j] = matrizR[i][j] - matrizm2[i][j];
cout matrizR[i][j] " ";
}
cout endl;
}
cout "Desea obtener una nueva matriz de la relación predecesor inmediato a partir de otra matriz de relación de orden? si = s no = n" endl;
cin respuesta;
}while(respuesta == 's');
return 0;
}

Inicialmente ingresamos el valor de n, la matriz de la relación de orden es una matriz cuadrada de orden nxn.

Mientras ingresamos las entradas o componentes de la matriz podemos ir anulando automática la diagonal principal, esto lo hacemos cuando los índices i y j son iguales.

if(i == j)
matrizR[i][j] = 0;

Para obtener la matriz M^2 solo necesitaremos conseguir un 1, recordemos que esta matriz debe estar binarizada. Por ello le agregamos el break al ciclo de manera que cuando encuentre un 1 salga del ciclo y no ejecute instrucciones innecesarias.

if(matrizR[i][k] == 1 and matrizR[k][j] == 1){
matrizm2[i][j] = 1;
break;
}

Al momento de obtener la matriz de la relación predecesor inmediato podemos guardar el resultado en la misma matriz inicial, además podemos ir imprimiendo los resultados en paralelo se van obteniendo.

for(int i = 0; i n; i++){
for(int j = 0; j n; j++){
matrizR[i][j] = matrizR[i][j] - matrizm2[i][j];
cout matrizR[i][j] " ";
}
cout endl;
}

Descarga del código fuente del proyecto:
http://www.mediafire.com/download/urr...


También te podría interesar:
4 Ejercicios Básicos de Programación Orientada a Objetos en c++
De sistema decimal a sistema binario en c++ y Java
3 libros sobre programacion orientada a objetos
[Ejercicio resuelto c++ POO Herencia Vectores MVC] Una Asociación de Lancheros trasladan turistas

domingo, 3 de agosto de 2014

4 Ejercicios Básicos de Programación Orientada a Objetos en c++ – Virtual – Abogado



Sí te estas iniciando en la programación y enc++ utilizandoprogramación orientada a objetos seguro estos4 ejercicios te servirán. En la entrada he colocado el planteamiento de cada ejercicio junto al diagrama de clases de cada uno de ellos. Sí deseas realizar el ejercicio tu mismo, puedes hacerlo, a su vez puedes descargar la carpeta de cada uno de los proyectos y observar el código fuente para resolver tus dudas.

Ejercicio Número 1


Planteamiento:
Se conoce de unartículo su costo base y se sabe que se ofrecen 2 precios de venta: aldetal (30% de incremento del costo base) y almayor (15% de incremento del costo base). Se desea conocer los distintos PVP del artículo, al detal y al mayor.

Diagrama de clases:


Descarga código fuente del proyecto:
https://mega.co.nz/#!hQtkgT4D...

Ejercicio Número 2


Planteamiento:
Se conoce de unalumno:cédula,nombre y tres notas parciales (nota1, nota2, nota3). El programa debe imprimir: cédula, nombre, nota final e indique con un mensaje si el alumno aprobó (nota final = 48) o no aprobó (nota final 48) la asignatura.

Diagrama de clases:


Descarga código fuente del proyecto:
https://mega.co.nz/#!YIEVyASC...

Ejercicio Número 3


Planteamiento:
Dado laaltura y labase de unrectángulo, calcule su área (base * altura) y perímetro (2*base + 2*altura).

Diagrama de clases:


Descarga código fuente del proyecto:
https://mega.co.nz/#!tYVywYQS...

Ejercicio Número 4


Planteamiento:
Se conoce de unapersona elnombre, eldía,mes yaño de nacimiento, escriba un programa que lea la fecha de hoy, comodía,mes yaño e imprima el nombre de la persona y su edad.

Diagrama de clases:


Descarga código fuente del proyecto:

También te podría interesar:
  1. De sistema decimal a sistema binario en c++ y Java
  2. 3 libros sobre programacion orientada a objetos
  3. [Ejercicio resuelto c++ POO Herencia Vectores MVC] Una Asociación de Lancheros trasladan turistas
  4. [Ejercicio resuelto c++ POO Herencia MVC] Línea de autobuses “El Cardenalito”
  5. Cuenta regresiva de minutos y segundos con c++
  6. Escribir en bloc de notas con c++ [Archivo/Ficheros c++]
  7. Abrir una direccion web con c++



sábado, 31 de mayo de 2014

[Ejercicio resuelto Progranimate] Promedio de notas de una sección – Law Firm – Miami – Virtual



Planteamiento:
"Se conoce la cantidad de estudiantes de una sección y la nota de cada uno de ellos. Determinar el promedio de la sección."

Código fuente JavaScript:

script type="text/javascript"
//Program:Untitled

var cantidad = 0;
var i = 0;
var j = 0;
var nota = 0;
var AcumuladorNotas = 0;
var promedio = 0;

alert("Ingrese la cantidad de estudiantes de la sección");
cantidad = pronpt("","");

for ( i = 0 ; i cantidad ; i = i + 1 )
{
j = i + 1;
alert("Ingrese la nota numero " + j);
nota = pronpt("","");
AcumuladorNotas = AcumuladorNotas + nota ;
}//End For

promedio = AcumuladorNotas / cantidad ;
alert("El promedio de la sección es de: " + promedio);

//End of Program
/script

Diagrama de flujo:


Ejecución:

Ingrese la cantidad de estudiantes de la sección
5
Ingrese la nota numero 1
20
Ingrese la nota numero 2
11
Ingrese la nota numero 3
14
Ingrese la nota numero 4
17
Ingrese la nota numero 5
16
El promedio de la sección es de: 15.6


[Ejercicio resuelto Progranimate] Determine sí la edad de una persona es mayor o igual a 18 – Forex – Promotional Code – Auto – Forex



Planteamiento:
"Se conoce la edad de una persona. Sí la edad es mayor o igual a 18 imprimir: "Mayor de edad", en caso contrario, imprimir: "Menor de edad"

Código fuente JavaScript:

script type="text/javascript"
//Program:Untitled

var edad = 0;

alert("Ingrese la edad de la persona");
edad = pronpt("","");

if (edad = 18 )
{
alert("Mayor de edad");
}//End If
else
{
alert("Menor de edad");
}//End Else


//End of Program
/script

Diagrama de flujo:


Ejecución:

Siendo la edad ingresada mayor o igual a 18:

Ingrese la edad de la persona
24
Mayor de edad

Siendo la edad ingresada menor a 18:

Ingrese la edad de la persona
15
Menor de edad


[Ejercicio resuelto Progranimate] Determinar Sueldo de un Empleado – Record – cancer – Motor



Planteamiento:
"Se tiene un empleado del que se conoce su nombre, cédula y cantidad de horas trabajadas. Determinar su sueldo sabiendo que cada hora trabajada tiene un valor de 14. Además imprimir su nombre, cédula y sueldo"

Código fuente JavaScript:

script type="text/javascript"
//Program:Untitled

var nombre;
var cedula;
var horas = 0;
var sueldo = 0;

alert("Ingrese el nombre del empleado");
nombre = pronpt("","");
alert("Ingrese la cedula del empleado");
cedula = pronpt("","");
alert("Ingrese la Cantidad de horar trabajadas");
horas = pronpt("","");
sueldo = horas * 14 ;
alert("Nombre: " + nombre);
alert("Cedula: " + cedula);
alert("Sueldo: " + sueldo);

//End of Program
/script

Diagrama de flujo:


Ejecución:
Ingrese el nombre del empleado
"Francves"
Ingrese la cedula del empleado
99.999.999
Ingrese la Cantidad de horar trabajadas
40
Nombre: "Francves"
Cedula: 99.999.999
Sueldo: 560


[Ejercicio resuelto Progranimate] Puntaje respuestas correctas e incorrectas – Accident – Credit – dinero



Planteamiento:
"Elaborar un algoritmo que solicite la cantidad de respuestas correctas, incorrectas y en blanco, correspondiente a postulantes, y muestre su puntaje final considerando, que por cada respuesta correcta tendrá 4 puntos, respuestas incorrectas tendrá -1 y respuestas en blanco tendrá 0."

Código fuente JavaScript:

script type="text/javascript"
//Program:Untitled

var cantRC = 0;
var cantRB = 0;
var cantRI = 0;
var puntaje = 0;

alert("Ingrese la cantidad de respuestas correctas: ");
cantRC = pronpt("","");
alert("Ingrese la cantidad de respuestas en blanco: ");
cantRB = pronpt("","");
alert("Ingrese la cantidad de respuestas incorrectas: ");
cantRI = pronpt("","");
puntaje = cantRC * 4 + cantRI * -1 ;
alert("Puntaje final obtenido:" + puntaje);

//End of Program
/script

Diagrama de flujo:


Ejecución:

Ingrese la cantidad de respuestas correctas:
3
Ingrese la cantidad de respuestas en blanco:
1
Ingrese la cantidad de respuestas incorrectas:
1
Puntaje final obtenido:11


[Ejercicio resuelto Progranimate] Promedio estudiante – Lawyers – php – World – dinero



Planteamiento:
"Se necesita obtener el promedio de un estudiante a partir de sus tres notas parciales."

Código fuente JavaScript:

script type="text/javascript"
//Program:Untitled

decimal nota1 = 0;
decimal nota2 = 0;
decimal nota3 = 0;
decimal resultado = 0;

alert("Ingrese las tres notas parciales del estudiante una por una");
nota1 = pronpt("","");
nota2 = pronpt("","");
nota3 = pronpt("","");
resultado = (nota1 + nota2 + nota3)/ 3 ;
alert("El promedio del estudiante es: " + resultado);

//End of Program
/script

Diagrama de flujo:



sábado, 18 de enero de 2014

[Ejercicio resuelto Java] Cuadrante en que se encuentra un punto en el plano – programmers – Virtual – Miami



PLANTEAMIENTO:
"Escribir un programa que pida ingresar la coordenada de un punto en el plano, es decir dos valores enteros x e y (distintos a cero). Posteriormente imprimir en pantalla en que cuadrante se ubica dicho punto."

Inicialmente debemos considerar quesí el punto se encuentra en el primer cuadrante entoncesX yYdeben ser mayor que 0 (x 0 Y y 0). Sí el punto está en el segundo cuadrante X debe ser menor que 0 y Y mayor que 0. ( x 0 Y y 0) y así mismo debemos observamos como se comportan los valores para el tercer y cuarto cuadrante (Ver imagen).


cuadrantes.java
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;

public class cuadrantes {
public static void main(String [] args){
Scanner tec= new Scanner(System.in);
int x, y;
System.out.println("Ingrese un valor para el punto X (Distinto de 0)");
x= tec.nextInt();
System.out.println("Ingrese un valor para el punto Y (Distinto de 0)");
y = tec.nextInt();
if(x 0 && y 0){
System.out.println("El punto (" + x + "," + y + ") esta en el primer cuadrante");
}
else
if(x 0 && y 0){
System.out.println("El punto (" + x + "," + y + ") esta en el segundo cuadrante");
}
else
if(x 0 && y 0){
System.out.println("El punto (" + x + "," + y + ") esta en el tercer cuadrante");
}
else
if(x 0 && y 0){
System.out.println("El punto (" + x + "," + y + ") esta en el cuarto cuadrante");
}
}
}


sábado, 11 de enero de 2014

[Ejercicio resuelto Java] Sumar dos matrices de orden nxn – Platform – Teleconferencias – Register


Hace poco coloque una entrada sobre comoSumar dos matrices de orden 2x2 en java. Pero que sucedería si nuestras matrices no son tan simples y éstas son de otro orden, quizás de 3x3, 4x4, 5x4, 4x2... entre otras posibilidades.

A continuación les muestro como podemos sumar matrices de orden nxn usando java.


nxn.java
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.util.Scanner;

public class nxn {
private Scanner tec;
private int[][] matrizA;
private int[][] matrizB;
private int[][] matrizC;
private int filas, columnas;


public void CargarElementos(){
tec = new Scanner(System.in);
System.out.println("Ingrese la cantidad de filas de las matrices");
filas = tec.nextInt();
System.out.println("Ingrese la cantidad de columnas de las matrices");
columnas = tec.nextInt();
matrizA = new int[filas][columnas];
matrizB = new int[filas][columnas];
System.out.println("Ingrese los elementos de la matriz A: \n");
for(int i=0; i filas; i++){
int f=i+1;
for(int j=0; j columnas; j++){
int c = j+1;
System.out.println("Ingrese el elemento a"+f+c + " de la matriz");
matrizA[i][j] = tec.nextInt();
}
}

System.out.println("\nIngrese los elementos de la matriz B: \n");
for(int i=0; i filas; i++){
int f=i+1;
for(int j=0; j columnas; j++){
int c = j+1;
System.out.println("Ingrese el elemento b"+f+c + " de la matriz");
matrizB[i][j] = tec.nextInt();
}
}
}

public void Suma(){
matrizC = new int[filas][columnas];
for(int i=0; i filas; i++){
for(int j=0; j columnas; j++){
matrizC[i][j] = matrizA[i][j] + matrizB[i][j];
}
}
}

public void Imprimir(){
//Matriz C:
System.out.println("La Suma de ambas matrices es:");
for(int i = 0; i filas; i++){
System.out.println("");
for(int j=0; j columnas; j++){
System.out.print(matrizC[i][j] + " ");
}
}
//-----------------------------------------------------------------
System.out.println("\n Elementos de la matriz C: \n");
for(int i=0; i filas; i++){
int f=i+1;
for(int j=0; j columnas; j++){
int c = j+1;
System.out.println("Elemento c"+ f + c + ": " + matrizC[i][j]);
}
}
}

public static void main(String[] ar){
nxn n = new nxn();
n.CargarElementos();
n.Suma();
n.Imprimir();
}
}

Inicialmente leemos mediante el teclado la cantidad de filas y columnas de nuestras matrices.La teoría de matrices nos dice que para sumar dos matrices éstas deben ser del mismo orden, por ello no leemos el orden de las matrices por separado, sino que leemos una sola vez para ambas matrices.

Necesitaremosdos ciclos for, uno que se repetirá tantas veces como filas posean las matrices, es decir, representa la cantidad de filas de las matrices. El otro ciclo for debe ir dentro del anterior, éste se repetirá tantas veces como columnas posean las matrices.Sí lo vemos, ésto nos da la posibilidad de ir asignando valores a los componentes de la matriz uno por uno. a11, a12, 13, a1n... a21, a22, a23, a2n... ann...

Las lineas int f = i+1 y int c = j+1 nos ayudan a dar un mensaje al usuario refiriéndonos a los componentes de las matrices de una manera matemática,hay que recordar que en java el primer elemento en una matriz es el a00, pero en matemáticas (álgebra lineal) el primer elemento es a11. Por lo tanto, si aij = a00 entonces, como f=i+1 y c=j+1 ; afc = a11.

Tanto para leer, sumar e imprimir los elementos de las matrices usaremos los dos ciclos for, es decir, trabajaremos análogamente para realizar dichas tareas.

Además, para sumar ambas matrices lo que haremos será tener una nueva matriz la que llamaremos matrizc[i][j] en la cual almacenaremos los componentes de las matrices A y B sumados.

Nota: Si desean saber un poco mas sobre matrices en java pueden observar la siguiente entrada:

Finalmente la salida sería la siguiente:



viernes, 3 de enero de 2014

[Ejercicio resuelto Java] Sumar dos matrices de orden 2x2 – Texas – Platform


Anteriormente escribí una entrada en el blog en la cual hablo un poco de algunas formas de manejar lasmatrices en java. En esta entrada veremos como sumar los elementos de dos matrices de orden 2x2 (2 filas, 2 columnas).

Enunciado:
"Realizar un programa en java el cual sume dos matrices de orden 2x2".

SumMatrices.java
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.util.Scanner;

public class SumMatrices {
private Scanner tec;
private int[][] matrizA;
private int[][] matrizB;
private int[][] matrizC;


public void CargarElementos(){
tec = new Scanner(System.in);
matrizA = new int[2][2];
matrizB = new int[2][2];
System.out.println("Ingrese los elementos de la matriz A: \n");
System.out.println("Ingrese el elemento a11 de la matriz");
matrizA[0][0] = tec.nextInt();
System.out.println("Ingrese el elemento a12 de la matriz");
matrizA[0][1] = tec.nextInt();
System.out.println("Ingrese el elemento a21 de la matriz");
matrizA[1][0] = tec.nextInt();
System.out.println("Ingrese el elemento a22 de la matriz");
matrizA[1][1] = tec.nextInt();
//Matriz A:
System.out.println("A= " + matrizA[0][0] + " " + matrizA[0][1]);
System.out.println(" " + matrizA[1][0] + " " + matrizA[1][1]);
//----------------------------------------------------------------
System.out.println("\nIngrese los elementos de la matriz B: \n");
System.out.println("Ingrese el elemento b11 de la matriz");
matrizB[0][0] = tec.nextInt();
System.out.println("Ingrese el elemento b12 de la matriz");
matrizB[0][1] = tec.nextInt();
System.out.println("Ingrese el elemento b21 de la matriz");
matrizB[1][0] = tec.nextInt();
System.out.println("Ingrese el elemento b22 de la matriz");
matrizB[1][1] = tec.nextInt();
//Matriz B:
System.out.println("B= " + matrizB[0][0] + " " + matrizB[0][1]);
System.out.println(" " + matrizB[1][0] + " " + matrizB[1][1]);
//-----------------------------------------------------------------
}

public void Suma(){
matrizC = new int[2][2];
matrizC[0][0] = matrizA[0][0] + matrizB[0][0];
matrizC[0][1] = matrizA[0][1] + matrizB[0][1];
matrizC[1][0] = matrizA[1][0] + matrizB[1][0];
matrizC[1][1] = matrizA[1][1] + matrizB[1][1];
}

public void Imprimir(){
System.out.println("La Suma de ambas matrices es: \n");
//Matriz C:
System.out.println("C= " + matrizC[0][0] + " " + matrizC[0][1]);
System.out.println(" " + matrizC[1][0] + " " + matrizC[1][1]);
//-----------------------------------------------------------------
System.out.println("\n Elementos de la matriz C: \n");
System.out.println("Elemento c11: " + matrizC[0][0]);
System.out.println("Elemento c12: " + matrizC[0][1]);
System.out.println("Elemento c21: " + matrizC[1][0]);
System.out.println("Elemento c22: " + matrizC[1][1]);
}

public static void main(String[] ar){
SumMatrices sm = new SumMatrices();
sm.CargarElementos();
sm.Suma();
sm.Imprimir();
}
}

Explicación:
Declaramos tres matrices del tipo entero:
private int[][] matrizA;
private int[][] matrizB;
private int[][] matrizC;

Sí lo desean los elementos pueden ser también número reales, es decir, del tipo float.

Definimos el tamaño de nuestras matrices:
matrizA = new int[2][2];
matrizB = new int[2][2];

Luego, empezamos a cargar los elementos de ambas matrices, al finalizar la carga de los elementos de cada matriz, estos serán mostrados en pantalla para su comprobación.

El método Suma() será el encargado de sumar los elementos de ambas matrices y el resultado almacenarlo en una nueva matriz llamadamatrizC.

public void Suma(){
matrizC = new int[2][2];
matrizC[0][0] = matrizA[0][0] + matrizB[0][0];
matrizC[0][1] = matrizA[0][1] + matrizB[0][1];
matrizC[1][0] = matrizA[1][0] + matrizB[1][0];
matrizC[1][1] = matrizA[1][1] + matrizB[1][1];
}

Finalmente imprimimos los resultados en pantalla con el métodoImprimir().

Salida: