Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 29.09.2015
Сообщений: 30

Описать класс, реализующий тип данных «вещественная матрица» и работу с ними

29.09.2015, 21:48. Показов 3902. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описать класс, реализующий тип данных «вещественная матрица» и работу с
ними. Класс должен реализовывать следующие операции над матрицами:
• сложение, вычитание, умножение, деление (+, -, *, / ) (умножение и деление
как на другую матрицу, так и на число);
• комбинированные операции присваивания (+=, -=, *=, /==);
• операции сравнения на равенство/неравенство;
• операции вычисления обратной и транспонированной матрицы, операцию
возведения в степень;
• методы вычисления детерминанта и нормы;
• методы, реализующие проверку типа матрицы (квадратная, диагональная, нулевая,
единичная, симметрическая, верхняя треугольная, нижняя треугольная);
• операции ввода/вывода в стандартные потоки (см. с. 284).
Написать программу, демонстрирующую работу с этим классом. Программа должна
содержать меню, позволяющее осуществить проверку всех методов класса.

Программу желательно написать на C#
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2015, 21:48
Ответы с готовыми решениями:

Описать класс, реализующий тип данных «вещественная матрица» и работу с ними
Помогите пожалуйста, сделать лабу :cry: Лабораторная работа 8. Классы и операции Каждый разрабатываемый класс должен, как правило,...

Описать класс, реализующий тип данных «вещественная матрица» и работу с ними
Доброго времени суток, необходима помощь в написании программы. Описать класс, реализующий тип данных «вещественная матрица» и работу...

Описать класс, реализующий тип данных «вещественная матрица» и работу с ними
Ребята помогите пожалуйста) Описать класс, реализующий тип данных «вещественная матрица» и работу с ними. Класс должен реализовывать...

18
30.09.2015, 15:06

Не по теме:


OpenCV Вам в помощь

0
Заблокирован
30.09.2015, 15:12
Цитата Сообщение от vositovt Посмотреть сообщение
Программу желательно написать на C#
vositovt, желательно, но не обязательно?
0
4 / 4 / 0
Регистрация: 20.04.2012
Сообщений: 26
30.09.2015, 15:13
Так если можно пользоваться внешними библиотека, то OpenCV и обертку EmguCV для работы в C#
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
30.09.2015, 16:51
Если разрешено использовать обёртки, то там и писать ничего почти не остаётся. Наверняка всё нужно ручками делать.
0
Заблокирован
30.09.2015, 16:58
Julli_bmstu, и зачем тут нужен EmguCV?
0
1 / 1 / 0
Регистрация: 29.09.2015
Сообщений: 30
30.09.2015, 20:30  [ТС]
нет, не обязательно на с#. можно и на других языках. главное понять алгоритм...
0
Заблокирован
30.09.2015, 20:34
vositovt, я могу помочь написать на F#. Переносить тему в соответствующий раздел?
0
1 / 1 / 0
Регистрация: 29.09.2015
Сообщений: 30
30.09.2015, 20:37  [ТС]
нуу давай
0
Заблокирован
30.09.2015, 20:44
Отлично, тогда с завтрашнего дня будем последовательно выполнять задачу. Предлагаю такой вариант:
Я пишу код одного пункта с комментариями, если возникают вопросы - спрашивайте, я, или кто другой, попробую вам объяснить. В качестве закрепления, предлагаю вам переводить код на C# - это будет несложно, и к тому-же вы лучше поймете методы.
0
1 / 1 / 0
Регистрация: 29.09.2015
Сообщений: 30
01.10.2015, 16:28  [ТС]
Понятно. я готов. вы уже написали?
0
Заблокирован
01.10.2015, 17:24
vositovt, начинаем:

F#
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
//Класс матрица:
//Основной конструктор: количество строк, столбцов и функция генератор для элементов
type Matrix(n:int, m:int, func: unit -> int) =
    let mutable matrix = Array2D.init n m (fun _ _ -> func())
 
    //свойства - матрица в виде двумерного прямоугольного массива
    member val Matrix = matrix
    member val RowCount = n with get
    member val ColumnCount = m with get
 
    //второй конструктор, элементы матрицы инициализируются 0 по умолчанию
    new(n:int, m:int) = 
        let zero() = 0
        new Matrix(n, m, zero)
 
    //переопределяем метод .ToString() для вывода
    override this.ToString() =
        sprintf "Matrix [%ix%i]\n%A" this.RowCount this.ColumnCount this.Matrix 
 
//проверяем правильность:
let rand = (new System.Random())
let generate() = rand.Next(10)
 
let somematrix = new Matrix (2,3,generate)
somematrix |> printfn "%A"
 
let somematrix2 = new Matrix (3,2)
somematrix2 |> printfn "%A"
Code
1
2
3
4
5
6
7
Matrix [2x3]
[[1; 9; 9]
 [6; 4; 2]]
Matrix [3x2]
[[0; 0]
 [0; 0]
 [0; 0]]
https://dotnetfiddle.net/lY8i4Y

Попробуйте разобраться в коде.
Для закрепления этой части можно добавить к классу еще один конструктор - для случая квадратной матрицы.

Я вечером постораюсь добавить еще первый пункт, хотя бы частично
0
1 / 1 / 0
Регистрация: 29.09.2015
Сообщений: 30
01.10.2015, 19:57  [ТС]
Ev_Hyper,
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
func: unit -> int
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
mutable
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Array2D.init n m (fun _ _ -> func())
пока вот эти части не понятны. дальше еще не смотрел...
0
Заблокирован
02.10.2015, 17:35
vositovt,
1. Даем возможность пользователю заполнять матрицу с помощью своей функции, у которой нет входных аргументов (unit) и которая возвращает int
2. В F# переменные по умолчанию неизменяемые. Чтобы указать, что её можно изменить, указывают явно - mutable
3. Array2D тоже самое, что в C# прямоугольный массив - int[n,m]. Третьим параметром - функция для инициализации.

Добавлено через 19 часов 34 минуты
Изменил основной конструктор и добавил простые операции:


F#
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
//Класс матрица:
type Matrix(arr:double[,]) =
    let mutable matrix = arr
 
    //свойства - матрица в виде двумерного прямоугольного массива
    member val Matrix = matrix
    member val RowCount = arr.GetLength(0) with get
    member val ColumnCount = arr.GetLength(1) with get
 
    static member (.+) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map((+) b))
 
    static member (./) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map(fun x -> x / b))
 
    static member (.-) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map(fun x -> x - b))
 
    static member (.*) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map((*) b))
 
    //второй конструктор, элементы матрицы инициализируются 0 по умолчанию
    new(n:int, m:int) = 
        let zero() = 0.0
        new Matrix(n, m, zero)
 
    new(n:int, m:int, def:double) = 
        let zero() = def
        new Matrix(n, m, zero)
 
    new(n:int, m:int, func: unit -> double) = 
        new Matrix(Array2D.init n m (fun _ _ -> func()))
 
    //переопределяем метод .ToString() для вывода
    override this.ToString() =
        sprintf "Matrix [%ix%i]\n%A" this.RowCount this.ColumnCount this.Matrix 
 
let somematrix2 = new Matrix (3,2,1.0)
somematrix2 |> printfn "%A"
 
somematrix2 .* 3.0 |> printfn "%A"
somematrix2 .+ 3.0 |> printfn "%A"
somematrix2 .- 3.0 |> printfn "%A"
somematrix2 ./ 3.0 |> printfn "%A"
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Matrix [3x2]
[[1.0; 1.0]
 [1.0; 1.0]
 [1.0; 1.0]]
Matrix [3x2]
[[3.0; 3.0]
 [3.0; 3.0]
 [3.0; 3.0]]
Matrix [3x2]
[[4.0; 4.0]
 [4.0; 4.0]
 [4.0; 4.0]]
Matrix [3x2]
[[-2.0; -2.0]
 [-2.0; -2.0]
 [-2.0; -2.0]]
Matrix [3x2]
[[0.3333333333; 0.3333333333]
 [0.3333333333; 0.3333333333]
 [0.3333333333; 0.3333333333]]
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
03.10.2015, 09:46
Ev_Hyper,
F#
1
2
3
4
5
6
7
8
9
10
let somematrix2 = new Matrix (3, 2, 1.0)
let somematrix3 = new Matrix (somematrix2.Matrix)
somematrix2 |> printfn "%A"
somematrix3 |> printfn "%A"
printfn ""
 
somematrix2.Matrix.[1,1] <- 8.0
 
somematrix2 |> printfn "%A"
somematrix3 |> printfn "%A"
Matrix [3x2]
[[1.0; 1.0]
[1.0; 1.0]
[1.0; 1.0]]
Matrix [3x2]
[[1.0; 1.0]
[1.0; 1.0]
[1.0; 1.0]]

Matrix [3x2]
[[1.0; 1.0]
[1.0; 8.0]
[1.0; 1.0]]
Matrix [3x2]
[[1.0; 1.0]
[1.0; 8.0]
[1.0; 1.0]]

мутабельность она такая
1
Заблокирован
03.10.2015, 10:39
pycture, спасибо, не обратил внимание...Пофиксил:
F#
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
type Matrix(arr:double[,]) =
    //свойства - матрица в виде двумерного прямоугольного массива
    member val Matrix = Array2D.copy arr with get
    member val RowCount = arr.GetLength(0) with get
    member val ColumnCount = arr.GetLength(1) with get
 
    static member (.+) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map((+) b))
    static member (.+) (a:double,b:Matrix) = 
        b .+ a
    static member (.+) (a:Matrix,b:Matrix) = 
        if a.RowCount <> b.RowCount || a.ColumnCount <> b.ColumnCount then
            new System.ArgumentOutOfRangeException("Недопустимая операция") |> raise              
        Matrix(Array2D.mapi(fun i j x -> x + b.Matrix.[i,j]) a.Matrix)
 
    static member (./) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map(fun x -> x / b))
    static member (./) (a:double,b:Matrix) = 
        Matrix(b.Matrix |> Array2D.map((/) a))
    static member (./) (a:Matrix,b:Matrix) = 
        if a.RowCount <> b.RowCount || a.ColumnCount <> b.ColumnCount then
            new System.ArgumentOutOfRangeException("Недопустимая операция") |> raise
        Matrix(Array2D.mapi(fun i j x -> x / b.Matrix.[i,j]) a.Matrix)
 
    static member (.-) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map(fun x -> x - b))
    static member (.-) (a:double,b:Matrix) = 
        Matrix(b.Matrix |> Array2D.map((-) a))
    static member (.-) (a:Matrix,b:Matrix) = 
        if a.RowCount <> b.RowCount || a.ColumnCount <> b.ColumnCount then
            new System.ArgumentOutOfRangeException("Недопустимая операция") |> raise
        Matrix(Array2D.mapi(fun i j x -> x - b.Matrix.[i,j]) a.Matrix)
 
    static member (.*) (a:Matrix,b:double) = 
        Matrix(a.Matrix |> Array2D.map((*) b))
    static member (.*) (a:double,b:Matrix) = 
        b .* a
    static member (.*) (a:Matrix,b:Matrix) = 
       if a.RowCount <> b.RowCount || a.ColumnCount <> b.ColumnCount then
            new System.ArgumentOutOfRangeException("Недопустимая операция") |> raise
       Matrix(Array2D.mapi(fun i j x -> x * b.Matrix.[i,j]) a.Matrix)
 
 
    //второй конструктор, элементы матрицы инициализируются 0 по умолчанию
    new(n:int, m:int) = 
        new Matrix(Array2D.zeroCreate n m)
 
    new(n:int, m:int, def:double) = 
        new Matrix(Array2D.create n m def)
 
    new(n:int, m:int, func: unit -> double) = 
        new Matrix(Array2D.init n m (fun _ _ -> func()))
 
    //переопределяем метод .ToString() для вывода
    override this.ToString() =
        sprintf "Matrix [%ix%i]\n%A" this.RowCount this.ColumnCount this.Matrix
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
03.10.2015, 21:14
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
new System.ArgumentOutOfRangeException("Недо пустимая операция") |> raise
"new" лишний, он вообще нужен очень редко.
если сильно не замарачиватся вместо всего этого есть
F#
1
failwith "Недопустимая операция"
1
Модератор
 Аватар для Curry
5158 / 3480 / 536
Регистрация: 01.06.2013
Сообщений: 7,542
Записей в блоге: 9
19.10.2015, 19:51
Цитата Сообщение от pycture Посмотреть сообщение
мутабельность она такая
Насколько я понял, не мутабельность тут такая, а массивы такие - ссылочные. Ибо
F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type MyClass(value:double) =
    let mutable Val = value
 
    member val Value = Val with get,set 
 
    override this.ToString() =
        sprintf "MyClass Value = %f\n" this.Value
 
[<EntryPoint>]
let main argv = 
    let a = new MyClass(1.2)
    let b = new MyClass(a.Value)
    a.Value <- 3.4
    b |> printfn "%A"
никаких "парадоксов" не вызывает. Что естественно. Скаляр и так копируется. А с массивами, значит, вот оно как. И, наверно, не только с массивами.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
19.10.2015, 22:07
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
никаких "парадоксов" не вызывает
здесь - да. но a и b в это примере никак не связаны между собой. если пример немного изменить (по аналогии работы массива)
F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type Wrap<'a> (value: 'a) =
    let mutable Val = value
 
    member val Value = Val with get,set 
 
    override this.ToString() =
        sprintf "Value = (%A)" this.Value
 
 
[<EntryPoint>]
let main argv = 
    let array_item = Wrap(1.2)
    let array = Wrap(array_item)
    array_item.Value <- 3.4
    array |> printfn "%A"
то мутабельность и ссылочность дадут о себе знать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2015, 22:07
Помогаю со студенческими работами здесь

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

Классы (Описать класс, реализующий тип данных «вещественная матрица» и работу с ними)
само задание звучит так:Описать класс, реализующий тип данных «вещественная матрица» и работу с ними. Класс должен реализовывать следующие...

Описать класс, реализующий тип данных ≪вещественная матрица≫ и работу с ними
Написал код программы но не могу понять как работать с классом если кто поможет добавить код класса буду очень признателен Описать...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru