Chema_egea Posted April 12, 2012 Report Share Posted April 12, 2012 (edited) 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 April 12, 2012 by Chema_egea Link to comment Share on other sites More sharing options...
AshWilliams Posted April 12, 2012 Report Share Posted April 12, 2012 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 More sharing options...
Chema_egea Posted April 12, 2012 Author Report Share Posted April 12, 2012 (edited) 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 April 12, 2012 by Chema_egea Link to comment Share on other sites More sharing options...
AshWilliams Posted April 12, 2012 Report Share Posted April 12, 2012 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 More sharing options...
Chema_egea Posted April 12, 2012 Author Report Share Posted April 12, 2012 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 More sharing options...
AshWilliams Posted April 13, 2012 Report Share Posted April 13, 2012 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 More sharing options...
Chema_egea Posted April 15, 2012 Author Report Share Posted April 15, 2012 Pero es que yo quiero saber cómo pasar valores entre clases, no entre funciones... Link to comment Share on other sites More sharing options...
AshWilliams Posted April 15, 2012 Report Share Posted April 15, 2012 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 More sharing options...
fenrir Posted May 21, 2012 Report Share Posted May 21, 2012 jajaja...haciendole las tareas! Link to comment Share on other sites More sharing options...
AshWilliams Posted May 21, 2012 Report Share Posted May 21, 2012 jajaja...haciendole las tareas!Evitemos este tipo de comentarios ;) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now