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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2012, 19:30   #1
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
Вопрос C# Детерминант и нормы.

Добрый день УВ гуру. Появилась проблема с матрицами. По заданию нужно сделать класс вещ. квадратных матриц, и провести операции над ними: 1. Умножение матриц между собой так и на число
2. Возведение в степень.
3. методы вычисления Детерминант и нормы.

С 3 заданием полный стопор... Не знаю как описать класс. В программировании и в матрицах не очень силен. Прошу помочь с данным заданием. Не силен в C#, по этому и написал. Алгоритм вроде бы составлен(Перебрать матрицу, выбрать нужные элементы, умножить): 1.Детерминант-умножение матрицы по диагоналям. 2.определить элементы на диагонали. 3. перебрать двумерный массив и найти диагональные элементы. 4.Двумерный массив перебирается двумя циклами - один в другом. 5.Диагональные элементы имеют определенные индексы в массиве -1 строчка 1 стобец; 2строчка 2столбец; 3 строчка 3 столбец. Вот только не получается это реализовать в виде кода. С нормами вообще беда... В общем прошу помощи!
Код:
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 вне форума Ответить с цитированием
Старый 10.05.2012, 15:41   #2
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Кто нибудь, выручите пожалуйста.
PROkaZZZniK вне форума Ответить с цитированием
Старый 12.05.2012, 15:23   #3
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

помогите...
PROkaZZZniK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сводные нормы servtit Microsoft Office Excel 3 17.02.2011 14:50
Вычисление нормы матрицы Monomah Общие вопросы C/C++ 2 05.12.2010 17:27
Нужно из итоговой суммы вычесть за ошибки которые сверх нормы tgm Microsoft Office Excel 2 05.09.2010 16:21
С++, найти ошибку в вычислении бесконечной нормы матрицы OffyGhost Помощь студентам 2 09.03.2010 14:18
Синтаксис и нормы. Правильность кода. Winlook JavaScript, Ajax 0 16.11.2009 16:57