powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Умножение 2-х матриц (Возникновение ошибки)
13 сообщений из 13, страница 1 из 1
Умножение 2-х матриц (Возникновение ошибки)
    #39103170
Aleksandr1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

Прошлой теме я написал программу для умножение 2-х матриц с количеством 2-х столбцов и 2-х строк.

Решив ее изменить, где пользователь смог бы вести n количество строк и m количество столбцов.

Но при вводе элемента массива сразу же выдается мне ошибка. Помогите пожалуйста начинающему.

NullReferenceException Was Unhandled

Object reference not set to an instance of an object.

А вот и сама программа

class Program
{
static void Main(string[] args)
{
Math mathe = new Math();

Matrix l1 = new Matrix();

int first, second, nn1, nn2, t,z;

Console.Write("Pervoye cislo ravno: ");
first = int.Parse(Console.ReadLine());

Console.Write("Vtoroye cislo ravno: ");
second = int.Parse(Console.ReadLine());

Console.Write("Vvedute kolicestvo strok: ");

nn1=int.Parse(Console.ReadLine());

Console.Write("Vvedute kolicestvo stolbcov: ");
nn2 = int.Parse(Console.ReadLine());

l1.Get_nm(nn1,nn2);

Matrix m1 = new Matrix();
Matrix m2 = new Matrix();

for (int i = 0; i < nn1; i++)

for (int j = 0; j < nn2; j++)
{
Console.Write("m1.Mass[{0},{1}]=", i, j);
m1.mas[i, j] = int.Parse(Console.ReadLine());
}
for (int i = 0; i < nn1; i++)
for (int j = 0; j < nn2; j++)
{
Console.Write("m2.Mass[{0},{1}]=", i, j);
m2.mas[i, j] = int.Parse(Console.ReadLine());
}


Console.ReadLine();
Console.WriteLine("Summa dvux cisel sostavlyayet {0} ", mathe.Sum(first,second));

Console.WriteLine("\n Proizvedeniye dvux matric sostavlyayet ");

Matrix result_2 = mathe.Sum(m1, m2);

for (int i=0; i<2; i++)
for (int j = 0; j < 2; j++)
{
Console.WriteLine("result[{0}, {1}]={2}", i, j, result_2.mas[i, j]);
}

Console.ReadLine();
}
}

class Matrix

{
public int[,] mas;

public void Get_nm(int n, int m)
{
mas = new int[n,m];
}

}
class Math
{
public int s;
public int Sum(int first, int second)
{
return first + second;

}

public Matrix Sum(Matrix first, Matrix second)
{
Matrix resul_1 = new Matrix();

Matrix n = new Matrix();


for (int i = 0; i <n.mas.Length; i++)
{

for (int j = 0; j < n.mas.Length; j++)
{
s = 0;
for (int l = 0; l < n.mas.Length; l++)
{
s = s + first.mas[i, l] * second.mas[l, j];
}

resul_1.mas[i, j] = s;

}

}

return resul_1;
}
}
}

Заранее спасибо за ваш ответ.
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103173
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr1980, неужели так сложно научиться оформлять свой код подобающим образом? Я такой код даже читать не буду.
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103175
Aleksandr1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот отредактировал

class Program
{
static void Main(string[] args)
{
Math mathe = new Math();

Matrix l1 = new Matrix();

int first, second, nn1, nn2, t,z;

Console.Write("Pervoye cislo ravno: ");
first = int.Parse(Console.ReadLine());

Console.Write("Vtoroye cislo ravno: ");
second = int.Parse(Console.ReadLine());

Console.Write("Vvedute kolicestvo strok: ");

nn1=int.Parse(Console.ReadLine());

Console.Write("Vvedute kolicestvo stolbcov: ");
nn2 = int.Parse(Console.ReadLine());

l1.Get_nm(nn1,nn2);

Matrix m1 = new Matrix();
Matrix m2 = new Matrix();

for (int i = 0; i < nn1; i++)

for (int j = 0; j < nn2; j++)
{
Console.Write("m1.Mass[{0},{1}]=", i, j);
m1.mas[i, j] = int.Parse(Console.ReadLine());
}
for (int i = 0; i < nn1; i++)
for (int j = 0; j < nn2; j++)
{
Console.Write("m2.Mass[{0},{1}]=", i, j);
m2.mas[i, j] = int.Parse(Console.ReadLine());
}


Console.ReadLine();
Console.WriteLine("Summa dvux cisel sostavlyayet {0} ", mathe.Sum(first,second));

Console.WriteLine("\n Proizvedeniye dvux matric sostavlyayet ");

Matrix result_2 = mathe.Sum(m1, m2);

for (int i=0; i<2; i++)
for (int j = 0; j < 2; j++)
{
Console.WriteLine("result[{0}, {1}]={2}", i, j, result_2.mas[i, j]);
}

Console.ReadLine();
}
}

class Matrix

{
public int[,] mas;

public void Get_nm(int n, int m)
{
mas = new int[n,m];
}

}
class Math
{
public int s;
public int Sum(int first, int second)
{
return first + second;

}

public Matrix Sum(Matrix first, Matrix second)
{
Matrix resul_1 = new Matrix();

Matrix n = new Matrix();


for (int i = 0; i <n.mas.Length; i++)
{

for (int j = 0; j < n.mas.Length; j++)
{
s = 0;
for (int l = 0; l < n.mas.Length; l++)
{
s = s + first.mas[i, l] * second.mas[l, j];
}

resul_1.mas[i, j] = s;

}

}

return resul_1;
}
}
}
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103176
Aleksandr1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно я отредактировал опять так стало.
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103177
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr1980,
Используй теги из SRC для C#
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103179
Aleksandr1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
этот тег надо писать в начале и в конце кода ?
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103180
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr1980, ты не иниициализируешь массив внутри класса Matrix перед записью. У тебя есть код вида:
Код: c#
1.
2.
3.
4.
5.
6.
Matrix m1 = new Matrix();
Matrix m2 = new Matrix();
// циклы пропущены ...
{
    m1.mas[i, j] = int.Parse(Console.ReadLine()); // Здесь будет исключение т.к. поле mas не инициализировано
}


Нужно сделать так:
Код: c#
1.
2.
3.
4.
Matrix m1 = new Matrix();
Matrix m2 = new Matrix();
m1.Get_nm(nn1,nn2);
m2.Get_nm(nn1,nn2);



Aleksandr1980Ну вот отредактировал
Надо использовать теги оформления кода. Читай правила и советы по оформлению кода .
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103192
Aleksandr1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь проблема возникла вот в этом мместе


Код: c#
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.
 public Matrix Sum(Matrix first, Matrix second)
        {           
            Matrix resul_1 = new Matrix();

            Matrix n = new Matrix();

            
            for (int i = 0; i <[color=red]n.mas.Length;[/color] i++)
            {

                for (int j = 0; j < n.mas.Length; j++)
                {
                    s = 0;
                    for (int l = 0; l < n.mas.Length; l++)
                    {
                        s = s + first.mas[i, l] * second.mas[l, j];
                    }

                    resul_1.mas[i, j] = s;
                    
                }

            }

            return resul_1;
        }
    }

}

Выходит та же самая ошибка. Там я хочу Matrix.mas.Length но увы у меня цикл mas не видет
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103298
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr1980, это аналогичная ошибка. Подумай сам как её исправить.
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103354
Aleksandr1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile объесните пожалуйста почему я должен писать

m1.Get_nm(nn1,nn2);
m2.Get_nm(nn1,nn2);
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103403
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr1980, без этих строк поле mas остается неинициализированным. Так mas это массив, то есть ссылочный тип, то она будет иметь значение null. Поэтому обращения к нему и приводят к NullReferenceException.
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103432
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr1980,
Код: c#
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.
    class Program
    {
        static void Main()
        {
          var matrix1=new Matrix(2,2);
            matrix1[0, 0] = 4;
            matrix1[0, 1] = 4;
            matrix1[1, 1] = 4;
            matrix1[1, 0] = 4; 
            matrix1.Print();
            Console.WriteLine("_____________________");
          var matrix2 = new Matrix(2, 2);
          matrix2[0, 0] = 4;
          matrix2[0, 1] = 4;
          matrix2[1, 1] = 4;
          matrix2[1, 0] = 4;
          matrix2.Print();
          Console.WriteLine("_____________________");
            var resMatrix = matrix1*matrix2;
            resMatrix.Print();
            Console.Read();

        }

    }

    internal class Matrix
    {
       
        readonly int[,] _matrix;

        public Matrix(int i, int j)
        {
           _matrix=new int[i,j];
        }

        public int GetLength(int dimension)
        {
            return _matrix.GetLength(dimension);
        }

        public int this[int i, int j]
        {
            get { return _matrix[i, j]; }
            set { _matrix[i, j] = value; }
        }
        public static Matrix operator *(Matrix a, Matrix b)
        {
            if (a.GetLength(1) != b.GetLength(0)) throw new Exception("Матрицы нельзя перемножить, не совпадают размерности :)");
            var res = new Matrix(a.GetLength(0), b.GetLength(1));
            for (var i = 0; i < a.GetLength(0); i++)
            {
                for (var j = 0; j < b.GetLength(1); j++)
                {
                    for (var k = 0; k < b.GetLength(0); k++)
                    {
                        res[i, j] += a[i, k] * b[k, j];
                    }
                }
            }
            return res;
        }
        public void Print()
        {
            for (var i = 0; i < _matrix.GetLength(0); i++)
            {
                for (var j = 0; j < _matrix.GetLength(1); j++)
                {
                    Console.Write("{0} ", _matrix[i, j]);
                }
                Console.WriteLine();
            }
        }
    }
...
Рейтинг: 0 / 0
Умножение 2-х матриц (Возникновение ошибки)
    #39103739
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr1980bazile объесните пожалуйста почему я должен писать

m1.Get_nm(nn1,nn2);
m2.Get_nm(nn1,nn2);

Кстати, вы свободный человек, никому ничего не должны, ни четать, ни песать, ни объеснять.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Умножение 2-х матриц (Возникновение ошибки)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]