![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
Здравствуйте.
Не так давно занимаюсь программированием на Delphi, накопился ряд нерешённых пока проблем. По порядку: Имеется потребность в работе с большим количеством матричных выражений (сложение, умножение матриц, векторов). Для упрощения записи данных операций имеется замечательный инструмент - перегрузка операторов, однако он доступен только для переменных типа Record. Определил типы для вектора и матрицы следующим образом: Код:
2. Основная проблема при работе с такими типами состоит в том, что для выполнения любой операции над данными требуется обращаться к методу М (например SetLength(MyMatrix.M, NewLength), что очень раздражает. К сожалению, не знаю как выполнить перегрузку стандартных функций и процедур из библиотеки System (процедуры setlength и функций length и high), а переопределение этих функций замещает таковые из System. 3. Отсутствует возможность обратиться к строке матрицы через свойство по-умолчанию (default), так как оно уже занято обращением к коэффициенту. 4. Описанные типы предназначены для работы с матрицами и векторами, наполненными переменными типа extended, существует ли возможность использовать те же типы для работы матрицами и векторами, наполненными комплексными числами? (комплексное число имеет тип record и имеет все необходимые перегруженные операторы). Последний раз редактировалось Rhasta-Rhasta; 19.09.2015 в 12:53. |
![]() |
![]() |
![]() |
#2 | |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
![]() Цитата:
2. Компилятор должен по умолчанию подгружать все стандартные функции. Вам тут понадобится три модуля: System, Windows, SysUtils, Math. 3,4 - не очень понял.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. ![]() |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
1. Указатели пробовал использовать, получается неудобно: такой подход вынуждает для каждой матрицы прописывать MyPoiner:=@MyMatrix.M, что при большом количестве матриц весьма напряжно. Тип extended трогать не будем: нужна высокая точность.
2. Он и подгружает, проблемы появляются если переопределить функции из стандартной библиотеки (к ним тогда приходится добираться через System). 3. Попробую переформулировать: описанный тип позволяет обращаться за чтением и записью к элементу матрицы MyMatrix[i,j] через свойство по-умолчанию; на уровне логики хотелось бы, чтобы объект MyMatrix[i] имел тип TVect, но, как я понял, более одного свойства default определить нельзя. 4. Чем и как нужно дополнить тип, чтобы иметь возможность наполнять матрицы не только переменными типа extended, но и переменными другого типа (в моём случае это комплексные числа, для них определены все необходимые перегруженные операторы)? И возможно ли это в принципе? Надеюсь, пояснил.. Последний раз редактировалось Rhasta-Rhasta; 19.09.2015 в 14:50. |
![]() |
![]() |
![]() |
#4 | |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
![]() Цитата:
А на счет типа можно записать массив указателей на запись TVector. Скажем так: Код:
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
Смысл высокой точности не в том, чтобы из конечного результата извлечь десяток знаков после запятой, а в том, что итерационный мат. метод может терять сходимость при недостаточном количестве знаков после запятой.
Цитата:
4. Действительно, мне следовало использовать термин "пользовательский тип", но думаю, из контекста это было понятно. Приведу описание типа "комплексное число": Код:
Последний раз редактировалось Rhasta-Rhasta; 19.09.2015 в 19:18. |
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
![]()
Векторы задаются координатами(а если быть точным, то перемещением по осям координат от начала вектора до конца). Из матрицы я думал, что речь могла идти об определителе.
Компилятор будет матерится на тип. В данном случае можно вообще вынести из записи функции и процедуры, оставив только свойства в виде переменных. Короче сделать так: Код:
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. ![]() |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
Можно организовать комплексные числа по-разному, спору нет, но в данном случае мне удобно работать с таким представлением. И это всё не относится к изначальной теме поста!
|
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
![]() Цитата:
А так мой вариант является логическим решением вашей проблемы: Вам нужно хранить в одной переменной разного типа данные, так по логике и статье в вики, они являются все числами. Вот статья в справочнике по типу Extended: http://www.delphibasics.ru/Extended.php Так скажите по логике: Что вам ещё надо хранить в этих переменных? Строки? Указатели на объекты и динамические переменные? Объекты? Символы? Байты - это числа от 0 до 255.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. ![]() |
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 13.09.2015
Сообщений: 16
|
![]()
По всей видимости имеет место недопонимание с моей стороны. Предлагаю откатить чуть назад и по порядку:
1. Есть потребность выполнять векторно-матричные операции с использованием перегруженных операций. 2. Самый минимум, который для этого нужен (в моём видении) выглядит так: Код:
Код:
Код:
Код:
В связи с этим вопрос: есть ли иной способ упростить доступ к содержимому вектора или матрицы? Последний раз редактировалось Rhasta-Rhasta; 20.09.2015 в 12:12. |
![]() |
![]() |
![]() |
#10 | |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
![]() Цитата:
инициализация Код:
Код:
Код:
Код:
Код:
кстати автор о птичках, при такой организации класса-структуры, у тебя появляется возможность выполнения пакетных операций используя множество команд процессора XMM
95% сбоев и ошибок приложений, находится в полу метрах от монитора
![]() Последний раз редактировалось JUDAS; 20.09.2015 в 13:09. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с матрицами (Delphi) | Elenachu | Помощь студентам | 0 | 15.01.2014 00:25 |
Работа с Матрицами (Delphi 7) | Дмитрий5 | Помощь студентам | 0 | 22.12.2011 21:36 |
Работа с матрицами (Delphi) | Вета | Помощь студентам | 0 | 15.04.2009 15:37 |
Работа с матрицами (Delphi) | roman09 | Помощь студентам | 6 | 11.04.2009 11:32 |
Работа с матрицами (delphi) | Майструк Татьяна | Помощь студентам | 3 | 07.04.2009 20:33 |