Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2012, 21:35   #1
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию C# Описать класс, реализующий тип данных "вещественная матрица"

Добрый день УВ. программисты, помогите пожалуйста с матрицами.

C#
Описать класс, реализующий тип данных "вещественная матрица" и работу с ними. Класс должен реализовывать следующие операции над матрицами:

методы вычисления детерминанта и нормы;
доступ к элементу по индексам
комбинированные операции присваивания(*= ; /= )
Написать программу, демонстрирующую все разработанные элементы класса.

Последний раз редактировалось PROkaZZZniK; 12.04.2012 в 15:58.
PROkaZZZniK вне форума Ответить с цитированием
Старый 12.04.2012, 13:11   #2
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public class Matrix
    {
        double[,] matrix;
        int Row = 0, Col = 0;

        //матрица N x M
        public Matrix(int row, int col)
        {
            matrix = new double[row, col];
            Row = row; Col = col;
        }

        //квадратная матрица
        public Matrix(int N)
        {
            matrix = new double[N, N];
            Row = Col = N;
        }

        //перегрузка индексатора, чтобы обратится к 
        //элементу матрицы как к элементу двумерного массива
        public double this[int i, int j]
        {
            get { return matrix[i, j]; }
            set { matrix[i, j] = value; }
        }
        
        //умножение на число
        public static Matrix operator *(Matrix m, int t)
        {
            Matrix mat = new Matrix(m.Row, m.Col);
            for (int i = 0; i < m.Row; i++)
                for (int j = 0; j < m.Col; j++)
                    mat[i, j] = m[i, j] * t;
            return mat;
        }

        //распечатать матрицу
        public void PrintMatrix()
        {
            for (int i = 0; i < this.Row; i++)
            {
                for (int j = 0; j < this.Col; j++)
                    Console.Write("{0}  ", this[i, j]);
                Console.Write("\n");
            }

        }

        //произведение матриц
        public static Matrix operator *(Matrix first, Matrix second)
        {
            Matrix matr = new Matrix(first.Row, first.Col);
            for (int i = 0; i < first.Row; i++)
            {
                for (int j = 0; j < second.Col; j++)
                {
                    double sum = 0;
                    for (int r = 0; r < first.Col; r++)
                        sum += first[i, r] * second[r, j];
                    matr[i, j] = sum;
                }
            }
            return matr;
        }

        //Возв в степень
        public static Matrix operator ^(Matrix first, int pow)
        {
            Matrix matr = new Matrix(first.Row, first.Col);
            matr = first;
            for (int z = 1; z < pow; z++)
            {
                Matrix bufer = new Matrix(first.Row, first.Col);
                for (int i = 0; i < first.Row; i++)
                {
                    for (int j = 0; j < first.Row; j++)
                    {
                        double sum = 0;
                        for (int r = 0; r < first.Row; r++)
                            sum += matr[i, r] * first[r, j];
                        bufer[i, j] = sum;
                    }
                }
                matr = bufer;
            }
            return matr;
        }
    }

    static void Main(string[] args)
    {
        //размерность
        int N = 3;
        //степень
        int pow = 3;

        Random rand = new Random();
        Matrix first = new Matrix(N);
        Matrix second = new Matrix(N);

        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++)
            {
                first[i, j] = rand.Next(1, 4);
                second[i, j] = rand.Next(1, 4);
            }

        Console.WriteLine("Первая матрица:\n\n");
        first.PrintMatrix();
        Console.WriteLine("\n\nВторая матрица:\n\n");
        second.PrintMatrix();
        Console.WriteLine("\n\nУмножение на число:\n\n");
        (first * 3).PrintMatrix();
        Console.WriteLine("\n\nПроизведение матриц:\n\n");
        (first * second).PrintMatrix();
        Console.WriteLine("\n\n{0} Степень матрицы:\n\n", pow);
        (first ^ pow).PrintMatrix();
        Console.ReadKey();
    }
}
Вот что у меня пока что вышло.
PROkaZZZniK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отсутствует тип источника данных "База данных" still.1 C/C++ Базы данных 0 19.03.2012 18:54
Класс "вещественная матрица". FuglyShmugly Помощь студентам 4 25.02.2012 20:02
C# исправление ошибки. Описать класс, реализующий шестнадцатеричный счетчик PROkaZZZniK Помощь студентам 7 09.02.2012 16:29
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55