[ Foro de C# ]

ejercicio 6.13 Crear una clase matriz 3*3

23-May-2012 09:20
Jose Mª Rial
1 Respuestas

el enunciado del ejercicio es este:

- Desarrolla una clase "Matriz", que represente a una matriz de 3x3, con métodos para indicar el valor que hay en una posición, leer el valor de una posición, escribir la matriz en pantalla y sumar dos matrices.

Este ejercicio yo lo tengo como el 6.13 en las fotocopias aunque acabo de verlo en la web y esta como 6.14.

Tengo una duda y no doy encontrado que es lo que falla en el ejercicio, la cuestión es que a la hora de sumar las dos matrices dentro de la función sumar no me las reconoce y pone que no se pueden indexar. Os dejo la implementación:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Mat
{
    public class Matrix
    {
        bool hecho = false;
        public int[,] Matriz = new int[3, 3];

        public void CrearMatriz()
        {
            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    {
                        Console.WriteLine("Introduzca el valor de la fila {0}, columna {1}: ", fila, col);
                        Matriz[fila, col] = int.Parse(Console.ReadLine());
                        hecho = true;
                    }
                }
            }
        }
        public void valorPosicion()
        {
            bool hecho = false;
            int fila, columna;

            Console.WriteLine("Indique el numero de fila la cual quiera la posicion: ");
            fila = int.Parse(Console.ReadLine());
            Console.WriteLine("Indique el numero de columna de la cual quiera extraer el valor: ");
            columna = int.Parse(Console.ReadLine());
            Console.WriteLine("El valor de la fila {0} y columna {1} es {2}", fila, columna, Matriz[fila, columna]);
            hecho = true;
        }

        public void escribirMatriz()
        {
            Console.WriteLine("Esta es la matriz dada:");
            int index, ind;
            for (index = 0; index < 3; index++)
            {
                Console.WriteLine("\n");
                for (ind = 0; ind < 3; ind++)
                {
                    Console.Write("   {0}", Matriz[index, ind]);
                }

            }
            Console.WriteLine("\n");

        }

        public void Matriz2()
        {
            int[,] matriz1;
            int[,] matriz2 = new int[3, 3];
            matriz1 = Matriz;
            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    Console.WriteLine("Matriz2, Escriba el valor para la fila {0} columna {1}: ", fila, col);
                    matriz2[fila, col] = int.Parse(Console.ReadLine());
                }
            }
        }
        public static Matrix operator +( Matrix matriz1,Matrix matriz2)
        {
            Matrix[,] matriz3 = new Matrix[3, 3];

            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    matriz3[fila, col] = matriz1 [fila, col] + matriz2[fila, col]; //aquí es el fallo y no entiendo por qué
                }
            }
   
            //return matriz3;
            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    Console.WriteLine("{0}", matriz3[fila, col]);
                }
            }
        
        }

        public class Principal
        {
            public static void Main()
            {
                int opcion;

                Console.WriteLine("Escriba valores para las matrices: ");

                Matrix matriz1 = new Matrix();
                Matrix matriz2 = new Matrix();
                matriz1.CrearMatriz();
                Console.WriteLine("Ahora introducimos los datos de la matriz2");
                matriz2.CrearMatriz();
                do
                {
                    Console.WriteLine("Elija opción: \n\n---------------------------------------------------------------------------------------------");
                    Console.WriteLine("1- para leer valor de una posicion: ");
                    Console.WriteLine("2- Para visualizar matrices: ");
                    Console.WriteLine("3- Para sumar: ");
                    Console.WriteLine("4- ,Para salir");
                    opcion = int.Parse(Console.ReadLine());
                    switch (opcion)
                    {
                        case 1:
                            Console.WriteLine("Para leer posicion de la primera matriz pulse 1 y pulse 2 para leer valor de la segunda");
                            if (opcion == 1)
                            {
                                matriz1.valorPosicion();
                            }

                            if (opcion == 2)
                            {
                                matriz2.valorPosicion();
                            }
                            else
                            {
                                Console.Write("Opcion no valida");
                            }
                            break;
                        case 2:
                            Console.WriteLine("Presione 1 para visualizar la matriz 1 y pulse 2 para visualizar matriz2");
                            if (opcion == 1)
                            {
                                matriz1.escribirMatriz();
                            }
                            if (opcion == 2)
                            {
                                matriz2.escribirMatriz();
                            }
                            else
                            {
                                Console.WriteLine("Opcion no valida");
                            }
                            break;
                        case 3:
                            {
                                Matrix matriz3 = matriz1 + matriz2;

                            }
                            break;
                        case 4:
                            {
                                Console.WriteLine("Salir del programa");
                            }
                            break;
                        default:
                            Console.WriteLine("Opcion no valida");
                            break;
                             
                    }


                }
                while (opcion != 4);
            }
        }
    }
}

         
   
Muchas gracias


25-May-2012 10:24
Cris F

El fallo en sí mismo es que estás creando un objeto de tipo Matrix he intentando inicializarlo en un método de la propia clase como si fuese un array. De todas maneras se podría mejorar algunas cosas.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Mat
{
    public class Matrix
    {
        bool hecho = false;
        public int[,] Matriz = new int[3, 3];/*Puedes inicializar los atributos en un constructor

     public Matrix(){
         Matriz= new int [3,3];
         hecho = false;  
     }*/


        public void CrearMatriz()/*La matriz está creada, mejor un nombre más representativo "Inicializar", por ejemplo*/
        {
            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    {
                        Console.WriteLine("Introduzca el valor de la fila {0}, columna {1}: ", fila, col);
                        Matriz[fila, col] = int.Parse(Console.ReadLine());/*C# tiene el System.Convert.ToInt32() y mejor si pides los datos al usuario desde el Main*/
                        hecho = true;
                    }
                }
            }
        }
        public void valorPosicion()
        {
            bool hecho = false;
            int fila, columna;

            Console.WriteLine("Indique el numero de fila la cual quiera la posicion: ");
            fila = int.Parse(Console.ReadLine());
            Console.WriteLine("Indique el numero de columna de la cual quiera extraer el valor: ");
            columna = int.Parse(Console.ReadLine());
            Console.WriteLine("El valor de la fila {0} y columna {1} es {2}", fila, columna, Matriz[fila, columna]);
            hecho = true;
        }

        public void escribirMatriz()
        {
            Console.WriteLine("Esta es la matriz dada:");
            int index, ind;
            for (index = 0; index < 3; index++)
            {
                Console.WriteLine("\n");
                for (ind = 0; ind < 3; ind++)
                {
                    Console.Write("  {0}", Matriz[index, ind]);
                }

            }
            Console.WriteLine("\n");/*WriteLine ya hace un salto de línea*/

        }

        public void Matriz2()/*Si lo que intentas es almacenar la segunda matriz a sumar, el segundo sumando, con que en el método de "Sumar" te pase como parámetro una variable de tipo Matrix ¡listo!*/
        {
            int[,] matriz1;
            int[,] matriz2 = new int[3, 3];
            matriz1 = Matriz;
            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    Console.WriteLine("Matriz2, Escriba el valor para la fila {0} columna {1}: ", fila, col);
                    matriz2[fila, col] = int.Parse(Console.ReadLine());
                }
            }
        }
        public static Matrix operator +( Matrix matriz1,Matrix matriz2)
        {
            Matrix[,] matriz3 = new Matrix[3, 3]; /*si es de tipo Matrix no lo trates como si fuera un array de int, el fallo es aquí*/

            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    matriz3[fila, col] = matriz1 [fila, col] + matriz2[fila, col]; //aquí es el fallo y no entiendo por qué
/*además necesitarías métodos como un "set" para introducir los datos, los atributos deberían ser privados*/
                }
            }
  
            //return matriz3;
            for (int fila = 0; fila < 3; fila++)
            {
                for (int col = 0; col < 3; col++)
                {
                    Console.WriteLine("{0}", matriz3[fila, col]);
                }
            }
        
        }

        public class Principal
        {
            public static void Main()
            {
                int opcion;

                Console.WriteLine("Escriba valores para las matrices: ");

                Matrix matriz1 = new Matrix();
                Matrix matriz2 = new Matrix();
                matriz1.CrearMatriz();
                Console.WriteLine("Ahora introducimos los datos de la matriz2");
                matriz2.CrearMatriz();
                do
                {
                    Console.WriteLine("Elija opción: \n\n---------------------------------------------------------------------------------------------");
                    Console.WriteLine("1- para leer valor de una posicion: ");
                    Console.WriteLine("2- Para visualizar matrices: ");
                    Console.WriteLine("3- Para sumar: ");
                    Console.WriteLine("4- ,Para salir");
                    opcion = int.Parse(Console.ReadLine());
                    switch (opcion)
                    {
                        case 1:
                            Console.WriteLine("Para leer posicion de la primera matriz pulse 1 y pulse 2 para leer valor de la segunda");
                            if (opcion == 1)
                            {
                                matriz1.valorPosicion();
                            }

                            if (opcion == 2)
                            {
                                matriz2.valorPosicion();
                            }
                            else
                            {
                                Console.Write("Opcion no valida");
                            }
                            break;
                        case 2:
                            Console.WriteLine("Presione 1 para visualizar la matriz 1 y pulse 2 para visualizar matriz2");
                            if (opcion == 1)
                            {
                                matriz1.escribirMatriz();
                            }
                            if (opcion == 2)
                            {
                                matriz2.escribirMatriz();
                            }
                            else
                            {
                                Console.WriteLine("Opcion no valida");
                            }
                            break;
                        case 3:
                            {
                                Matrix matriz3 = matriz1 + matriz2;

                            }
                            break;
                        case 4:
                            {
                                Console.WriteLine("Salir del programa");
                            }
                            break;
                        default:
                            Console.WriteLine("Opcion no valida");
                            break;
                            
                    }


                }
                while (opcion != 4);
            }
        }
    }


Una cosa más, una matriz también puede contener números reales. Si quieres que te haga un ejemplo de muestra, pídelo, pero creo que es mejor que lo trabajes tú.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)