|
|
||||||
Устал искать баг03.08.2011, 17:13. Показов 3316. Ответов 23
Метки нет (Все метки)
Проблемма проста - нужно удалить из вещественной матрицы строку и столбец, верней ряд строк и столбцов (условие - нулевой элемент на главной диагонале, даже привожу рисунок)
Пропускаю матрицу А и вектор свободных членов В через вот такой фильтр
Суть задачи - где в моём коде просчёт?Готов к другим вариантам удаления строк и столбцов, жду...
0
|
||||||
| 03.08.2011, 17:13 | |
|
Ответы с готовыми решениями:
23
Ошибка в коде (очень устал искать) MS Access - УСТАЛ УЖЕ ИСКАТЬ ПРИЧИНУ СВОЕЙ ОШИБКИ Подскажите где искать и что искать |
| 03.08.2011, 18:11 | ||||||||||||||||||
|
Как вариант:
1. Обходим матрицу. Двигаемся только по диагонали. Если встречаем 0. Уменьшаем счетчик столбцов/строк 2. Выделяем память под новую матрицу с размерами согласно текущему полученному счетчику строк/столбцов 3. Опять идем по матрице (по диагонали) и копируем во вторую только то, что нужно (т.е. если элемент в диагонали не равен 0) Добавлено через 1 минуту Добавлено через 6 минут Добавлено через 4 минуты К тому же у вас m не изменяется, а элементы сдвигаются Добавлено через 8 минут
Добавлено через 10 минут Стоп. у вас же double..... А последний параметр memcpy размер в байтах. нет? Добавлено через 6 минут Не проверял. Но вроде так. (Это как я понял ваш алгоритм только без memcpy). Но нужно еще освободить память. Или просто возвращать новый размер
Ах да. Наверно надо в 15 строку вставить
0
|
||||||||||||||||||
|
|
|||||||
| 03.08.2011, 20:14 | |||||||
1
|
|||||||
| 03.08.2011, 20:49 | |
|
Не со всем. Зависит от размера матрицы и платформы. Если размер double - 8 байт. И матрица 8x8 то копировася один следующий элемент. Если размер матрицы 14 то на последнем цикле
a[j][k]=a[j][k+1]; a[j][k+1]= черте что т.к. копировались только 6 байт из 8ми Добавлено через 3 минуты Т.е. при размере матрицы меньше 8 копировался кореженный следующий элемент; больше восьми (m/8) смещались причем с заходом на другую строку.....
1
|
|
|
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
|
||||||
| 04.08.2011, 13:48 | ||||||
|
А что, если просто удалять из массива нужную строчку\ столбец?
Добавлено через 1 час 18 минут Можно например просто удалить вот так delete[] matrix[i]. Это строку/столбец не удалит - только освободит память, где она лежала. Но все указатели (и место в массиве под нее) останется. а при выводе можно делать так:
Вроде неплохая идея(это намного производительней, чем сдвигать строчки\столбцы), а вот реализация хромает.. падает прога
0
|
||||||
| 04.08.2011, 14:02 | |||||||
|
Далее если предположить, что так можно освободить память, почему вы думаете, что там будет NULL? Давайте рассмотрим пример. Для упрощения одномерный массив
что значит test[4] ? Это значит, что у нас есть некая область памяти начинающаяся с адреса А и нам надо получить элемент соответствующего размера со смещением от этого адреса (в байтах) 4*sizeof(int). Но ты уже освободил эту память. И она может быть занята другими переменными. Соответственно по адресу (test+4) может оказаться все, что угодно.....
0
|
|||||||
|
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
|
||||||
| 04.08.2011, 14:09 | ||||||
|
Извините, просто не кинул часть кода..
0
|
||||||
| 04.08.2011, 14:24 | ||||||
|
Ну так сам то внимательно прочитай свой код
![]()
0
|
||||||
|
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
|
|
| 04.08.2011, 14:26 | |
|
Ну так ведь я не прошу вывести то очищенную строчку.. я просто проверяю - если пустая, то не печатаю...
Разве это неправильно?
0
|
|
| 04.08.2011, 14:29 | ||||||||||||
|
однако можно так:
![]() Добавлено через 40 секунд
0
|
||||||||||||
|
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
|
||||||
| 04.08.2011, 14:56 | ||||||
|
Проверка при выводе:
0
|
||||||
| 04.08.2011, 15:16 | ||||||
|
1 Если "доковыривать" твой код. То удалять строку нет необходимости. Достаточно в первом элементе текущей строки поставить 0. И потом при записи в файл проверять это условие. Это будет пошустрее
2. Как удалять столбик, что то не придумывается в таком варианте. только по штучно Вообще алгоритм ТС (естественно после доработок) мне кажется оптимальным. Пробегать каждый элемент накладно (в твоем варианте это тоже есть и вмое предложенном во 2 посте) В моем (заполнение 0-ями) есть подводный камень - может быть реальный 0 не на диагонали Единственное, что можно опробовать запихнуть матрицу в граф. но пока что то кажется не слишщком получится красиво Добавлено через 1 минуту Это условие
0
|
||||||
|
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
|
|
| 04.08.2011, 16:33 | |
|
Нельзя ставить ноль... Ноль в матрице так же может быть элементом.
0
|
|
|
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
|
|
| 04.08.2011, 16:43 | |
|
Вот так и получается, что код не ахти какой((
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
| 04.08.2011, 16:43 | |
|
Можно вообще не удалять ни столбцы, ни строки. Сохранить список "нулевых" индексов и пропускать их при записи в файл. Если дополнительной никакой работы не будет над матрицей происходить после "удаления" строк/столбцов, то это самый эффективный вариант.
0
|
|
|
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
|
|
| 04.08.2011, 16:54 | |
|
?????
0
|
|
| 04.08.2011, 17:13 | |
|
Создаешь еще одну матрицу такого же размера. Заполняешь, например, 1цами. Пройтись по диагонали основной матрицы. А в вспомогательной проставлять 0 в тех элементах, которые должны быть удалены). Потом формируешь результирующую матрицу на основании первых двух.
Добавлено через 11 минут Как бы то ни было в итоге мы все равно получаем по элементное копирование одного массива в другой. ТС предложил неплохой вариант. Массив остается прежний, но копирование происходит только при наличии 0 в диагонали. При чем копирование производим кусками памяти.
0
|
|
| 04.08.2011, 17:13 | |
|
Помогаю со студенческими работами здесь
20
Баг в программе. Без цикла работает нормально. С циклом выдает баг std::regex : баг на сайте или баг компилятора?
Я устал ждать Яша устал? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|