Jump to content

Duda con Matriz y clases en C#


Recommended Posts

Hola, creo este tema porque hace unos días creé uno y no ententendí muy bien lo que se me dijo, a ver si así es posible que lo entienda.

 

Me gustaría saber cómo utilizando solo dos clases, 'matrices' y 'main', hacer lo siguiente:

 

1º Poder recibir dos matrices de enteros de 'matrices' a 'main'.

2º Darle valores a las matrices desde 'main'.

2º Mandar esas dos matrices desde 'main' a 'matrices', que las sume y muestre en pantalla el resultado.

 

Gracias de antemano.

Edited by Chema_egea
Link to comment
Share on other sites

Con unos pequeños cambios y debería estar listo, en C++ por cierto:

 


#include <iostream.h>
#include <stdlib.h>

int operacion(int [][100], int [][100], int [][100], int , int , int, int, int);

int main()
{
 int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
 cout<<"1  --  Sumar"<<endl<<"2  --  Restar"<<endl<<"Otro numero  --  Salir"<<endl; cin>>n;
 while ((n>0) && (n<3))
   {
 f1=0; c1=0; f2=0; c2=0;
 while ((f1<1) || (f1>101))
  { cout<<"Introduce las filas de la matriz 1 [1-100]: "; cin>>f1; }
 while ((c1<1) || (c1>101))
  { cout<<"Introduce las columnas de la matriz 1 [1-100]: "; cin>>c1; }

 for (f=0; f<=f1; f++)
  {
   for (c=0; c<=c1; c++)
	 { cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; }
  }

 while ((f2<1) || (f2>101))
  { cout<<endl<<"Introduce las filas de la matriz 2 [1-100]: "; cin>>f2; }
 while ((c2<1) || (c2>101))
  { cout<<"Introduce las columnas de la matriz 2 [1-100]: "; cin>>c2; }

 for (f=0; f<=f2; f++)
  {
   for (c=0; c<=c2; c++)
	 { cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; }
  }

 r=operacion(m1,m2,mr,n,f1,f2,c1,c2);
 if (r==-1) cout<<endl<<"No se pudo realizar la operacion ya que el tamaño de las matrices no coincide";
 else
   {
    for (f=0; f<=f2; f++)
	  {
	   for (c=0; c<=c2; c++)
		 cout<<"  "<<mr[f][c]<<"  ";
	   cout<<endl;
	  }
   }
 cout<<endl<<"1  --  Sumar"<<endl<<"2  --  Restar"<<endl<<"Otro numero  --  Salir"<<endl; cin>>n;
   }
 cout<<endl<<"Fin de programa..."<<endl;
 system("PAUSE");
 return 0;
}

int operacion(int m1[][100], int m2[][100], int mr[][100], int n, int f1, int f2,int c1, int c2)
{
 int f,c;
 if ((f1==f2) && (c1==c2)) //si si se pueden sumar/restar
   {
 if (n==1) //suma
   {
    for (f=0; f<=f1; f++)
	 {
	  for (c=0; c<=c1; c++)
	    mr[f][c] = m1[f][c] + m2[f][c];
	 }
   }
 else  //resta
   {
    for (f=0; f<=f1; f++)
	 {
	  for (c=0; c<=c1; c++)
	    mr[f][c] = m1[f][c] - m2[f][c];
	 }
   }
 return 1;
   }
 else
   {return -1;}
}

 

Saludos :krider:

Link to comment
Share on other sites

AshWilliams, quise decir en programación orientada a objetos.

 

Lo que quiero decir es recibiendo una matriz creada de la clase 'matrices', es decir, que en la clase 'matrices' se cree una por cada objeto que quieras crear de esa clase en el main. Y que además pueda usar la clase 'matrices' para sumar las matrices, mandándolas de nuevo a 'matrices'.

 

No sé si me explico bien y no sé si se puede hacer eso que digo... en caso de no ser así lo siento, explicadme cómo hacerlo.

 

Saludos.

Edited by Chema_egea
Link to comment
Share on other sites

Y lo quieres hacer en C# o C++, he ahi mi duda....me confundí con otro post donde pedían algo parecido en Ansi C. De todas formas no te debería tomar mucho el pasar el ejemplo anterior y adaptarlo a tus requerimientos.

 

Saludos :krider:

Link to comment
Share on other sites

Lo digo en el tema del post, en C#.

 

Es que estoy aprendiendo C# y me lío un poco, preferiría que me dijeras cómo es en C#, o que me lo dijera alguien, para saber cómo es exactamente y no tener que adaptarlo.

Link to comment
Share on other sites

Ok, ahi lo tienes, le das un retoque y queda listo:

 

using System;

namespace Matrices
{
class Program
{
 public static void Main(string[] args)
 {
  float [,] mat1; // Las matrices
  float [,] mat2;

  int f1, c1;   // El número de filas y columnas de las matrices
  int f2, c2;

  //Llamamos al menu y recojemos la opción seleccionada
  byte opcion;
  do {
   opcion = menu();
  } while (opcion >= 5);

  switch (opcion)
  {
   case 1: // SUMA

 // Leemos el número de filas y columnas de las matrices 1 y 2
 Console.WriteLine ("Introduzca el número de filas de las matrices 1 y 2");
 f1 = int.Parse (Console.ReadLine());
 Console.WriteLine ("Introduzca el número de columnas de las matrices 1 y 2");
 c1 = int.Parse (Console.ReadLine());

 // Pedimos los datos de filas y columnas
 Console.WriteLine ("Introduzca los datos de la matriz 1 enumerandolos por filas:");
 mat1 = leer(f1,c1);
 Console.WriteLine ("Introduzca los datos de la matriz 2 enumerandolos por filas:");
 mat2 = leer(f1,c1);

 //Mostramos la suma de ambas matrices
 suma(mat1,mat2);
 break;

   case 2: // RESTA

 // Leemos el número de filas y columnas de las matrices 1 y 2
 Console.WriteLine ("Introduzca el número de filas de las matrices 1 y 2");
 f1 = int.Parse (Console.ReadLine());
 Console.WriteLine ("Introduzca el número de columnas de las matrices 1 y 2");
 c1 = int.Parse (Console.ReadLine());


 // Pedimos los datos de filas y columnas
 Console.WriteLine ("Introduzca los datos de la matriz 1 enumerandolos por filas:");
 mat1 = leer(f1,c1);
 Console.WriteLine ("Introduzca los datos de la matriz 2 enumerandolos por filas:");
 mat2 = leer(f1,c1);

 // Mostramos la resta de ambas matrices
 resta (mat1, mat2);
 break;

   case 3: // PRODUCTO POR UN ESCALAR

 // Leemos el número de filas y columnas de la matriz 1
 Console.WriteLine ("Introduzca el número de filas de la matriz 1");
 f1 = int.Parse (Console.ReadLine());
 Console.WriteLine ("Introduzca el número de columnas de la matriz 1");
 c1 = int.Parse (Console.ReadLine());

 float escalar;
 Console.WriteLine ("Introduzca el escalar por el que quiere multiplicar la matriz");
 escalar = float.Parse(Console.ReadLine());

 // Pedimos los datos de filas y columnas
 Console.WriteLine ("Introduzca los datos de la matriz 1 enumerandolos por filas:");
 mat1 = leer(f1,c1);

 // Mostramos la solución
 prodEscalar (mat1,escalar);

 break; 
  }
  Console.ReadKey();
 }

 // Función que muestra el menu de selección de operaciones
 public static byte menu()
 {
  try {
   byte opcion;
   Console.SetCursorPosition(10,1);
   Console.WriteLine("Menú:");
   Console.SetCursorPosition(0,3);
   Console.WriteLine("Elija la operación que quiere hacer:");
   Console.WriteLine("1 - Suma de matrices");
   Console.WriteLine("2 - Resta de matrices");
   Console.WriteLine("3 - Producto por un escalar");

   opcion = byte.Parse (Console.ReadLine());

   if (opcion >=1 && opcion <=3) {
 Console.Clear();
 return opcion;
   }
   else {
 Console.Clear();
 return 5;
   }
  } catch {	 //En caso de error
   Console.Clear();
   return 5;
  }
 }

 // Función que lee los datos de las matrices
 public static float [,] leer(int filas, int columnas)
 {
  float [,] ret = new float [filas, columnas];
  for (int fila = 0; fila < filas; fila++)
  {  
   for (int columna = 0; columna  < columnas; columna++)
   {
 ret[fila,columna] = float.Parse (Console.ReadLine());
   }
  }
  return ret;
 }

 // La función suma
 public static void suma (float [,] mat1, float [,] mat2)
 {
  Console.WriteLine ("La suma de sus dos matrices es (enumeradas por filas)");
  for (int fila = 0; fila <= mat2.GetUpperBound(0); fila++)
  {
   for (int columna = 0; columna <= mat2.GetUpperBound(1); columna++)
   {
 float suma;
 suma = mat1[fila,columna] + mat2[fila,columna];
 Console.WriteLine (suma.ToString());
   }
   Console.WriteLine("");
  }
 }

 // La función resta
 public static void resta (float [,] mat1, float [,] mat2)
 {
  Console.WriteLine ("La resta de sus dos matrices es (enumeradas por filas)");
  for (int fila = 0; fila <= mat2.GetUpperBound(0); fila++)
  {
   for (int columna = 0; columna <= mat2.GetUpperBound(1); columna++)
   {
 float resta;
 resta = mat1[fila,columna] - mat2[fila,columna];
 Console.WriteLine (resta.ToString());
   }
   Console.WriteLine("");
  }
 }

 // Producto por un escalar
 public static void prodEscalar (float [,] mat1, float escalar)
 {
  Console.WriteLine ("La multiplicación del escalar por su matriz es (enumerada por filas)");
  for (int fila = 0; fila <= mat1.GetUpperBound(0); fila++)
  {
   for (int columna = 0; columna <= mat1.GetUpperBound(1); columna++)
   {
 float esc;
 esc = mat1[fila,columna] * escalar;
 Console.WriteLine (esc.ToString());
   }
   Console.WriteLine("");
  }
 }
}
}

 

Saludos :krider:

Link to comment
Share on other sites

Algo así:

 

public class Prueba
{
private char[ ] cadena;
public Prueba(char[ ] pcadena)
{
this.cadena = pcadena;
}
public void VerCadena(  )
{
for(int i=0;i'<'this.cadena.Length;i++)
Console.WriteLine("{0}",this.cadena[i]);
}
}
Código del Main Class. (clase ejecutora)
class MainClass
{
public static void Main(string[ ] args)
{
char[ ] cad = {'1','2','3','4','5'};
Prueba p = new Prueba(cad);
p.VerCadena( );
Console.ReadKey( );
}
}

 

Saludos :krider:

Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...