Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 13.12.2011, 09:24   #1
Anasta88
Новичок
 
Регистрация: 13.12.2011
Сообщений: 1
Репутация: 10
По умолчанию определить вид квадратной матрицы в C#

Помогите, очень надо Решить задачу. Вот мой исходник:
Код:
class Matrix
    {
        int n;
        double[,] data;


        public double this[int i, int j]
        {
            get { return data[i, j]; }
            set { data[i, j] = value; }
        }

        public Matrix(int n)
        {
            this.n = n;
            data = new double[n, n];            
        }

        
 
        public void CreateA()
        {

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write("Введите элемент [" + i.ToString() + ";" + j.ToString() + "]" + "\t");
                    data[i, j] = Convert.ToInt32(Console.ReadLine());
                }
            }

        }
        public void CreateB()
        {

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write("Введите элемент [" + i.ToString() + ";" + j.ToString() + "]" + "\t");
                    data[i, j] = Convert.ToInt32(Console.ReadLine());
                }
            }

        }

        public void PrintA()
        {
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write(data[i, j] + "\t");
                }
                Console.WriteLine();
            }
        }
        public void PrintB()
        {
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write(data[i, j] + "\t");
                }
                Console.WriteLine();
            }
        }
        public void Vid()
        {
            int P = 0;
            int k = 0;
            int t = 0;

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                    if (j > i)
                    {
                        if (data[i, j] == 0) k++;
                    }
                    else if (j < i)
                    {
                        if (data[i, j] == 0) t++;
                    }
                P++;
            }
            if (k == P) Console.WriteLine("Матрица_нижнетреугольная");
            else if (t == P) Console.WriteLine("Матрица_верхнетреугольная");
            else Console.WriteLine("обычная");
        }
                   
                  
        public static Matrix operator +(Matrix A, Matrix B)
        {     
            Matrix C= new Matrix(A.n);
            for (int i = 0; i < A.n; i++)
            {
                for (int j = 0; j < A.n; j++)
                {
                    C.data[i,j] = A.data[i,j] + B.data[i,j];
                }                    
            }
            return C;
        }
 
        public static Matrix operator -(Matrix A, Matrix B)
        {
            Matrix D = new Matrix(A.n);
            for (int i = 0; i < A.n; i++)
            {
                for (int j = 0; j < A.n; j++)
                {
                    D.data[i, j] = A.data[i, j] - B.data[i, j];
                }
            }
            return D;
        }
 
        public static Matrix operator *(Matrix A, Matrix B)
        {
            Matrix E = new Matrix(A.n);
            for (int i = 0; i < A.n; i++)
            {
                for (int j = 0; j < A.n; j++)
                {
                    E.data[i, j] = 0;
                    for (int k = 0; k < A.n; k++)
                    {
                        E.data[i, j] = E.data[i, j] + A.data[k, j] * B.data[i, k];
                    }
                }
            }
            return E;
        }
        public static Matrix operator *(Matrix A, int k)
        {
            Matrix R = new Matrix(A.n);
            for (int i = 0; i < A.n; i++)
            {
                for (int j = 0; j < A.n; j++)
                {
                    R.data[i, j] =A.data[i, j] * k;
                }            
            }
            return R;
        }       
              
   
    }
Anasta88 вне форума   Ответить с цитированием
Старый 14.12.2011, 06:02   #2
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Адрес: Киев
Сообщений: 143
Репутация: 30
По умолчанию

1. Чем отличаются методы PrintA и PrintB, CreateA и CreateB?
2. При сложении любых объектов со строкой метод ToString вызывается автоматически, его можно не писать.
3. Вместо такого
Код:
E.data[i, j] = E.data[i, j] + A.data[k, j] * B.data[i, k];
обычно пишут
Код:
E.data[i, j] += A.data[k, j] * B.data[i, k];
.
4. Зачем делать операции как статические методы если ты создаешь класс Matrix? Логичнее реализовать их как обычные методы реализующие соответствующие операции с this(текущей матрицей) вместо первого параметра.
5.Метод Vid можно несколько укоротить и подправить с учетом того, что:
1)первый индекс - номер строки, второй - номер столбца
2)матрица может одновременно быть нижнетреугольной и верхнетреугольной
3)элементов выше главной диагонали, как и элементов нижней диагонали n(n-1)/2
Код:
public void Vid()
{
	int k = 0;
	int t = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if ((j > i) && (data[i, j] == 0)) k++;
			if ((j < i) && (data[i, j] == 0)) t++;
		}
	}
	if (t == n(n-1)/2) Console.WriteLine("Матрица_нижнетреугольная");
	if (k == n(n-1)/2) Console.WriteLine("Матрица_верхнетреугольная");
	if ((k != n(n-1)/2) && (t != n(n-1)/2)) Console.WriteLine("обычная");
}
__________________
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.

Последний раз редактировалось Lasur; 14.12.2011 в 06:07.
Lasur вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транспонирование квадратной матрицы Djeki Microsoft Office Excel 1 18.05.2011 00:02
Заполнение Квадратной Матрицы Konrak Помощь студентам 3 16.05.2011 19:03
Создание квадратной матрицы Sl@m Помощь студентам 2 26.11.2010 09:39
транспонирование квадратной матрицы 777UFO777 Общие вопросы Delphi 1 04.12.2008 20:31


17:25.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru