![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.12.2011
Сообщений: 11
|
![]()
Написать подпрограмму,которая в таблице обнуляет элементы,стоящие в строках или столбцах,содержащих нули.
Я написала следующее: Begin For i:=1 to n do For j:=1 to m do Begin If x^[i]^[j]=0 then For k:=1 to n do {зануление по столбцам} x^[k]^[j]:=0; For l:=1 to m do {зануление по строчкам} x^[i]^[l]:=0; end; end; Проблема в том,что зануляется полностью вся таблица, мне посоветовали ввести массив,который сначала будет обнулять строчки,содержащие нули,а уже потом столбцы,содержащие нули,а как это сделать я не понимаю. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Да ) Тебе нужно добавить массив, в котором запомнить все положения нулей. А потом обнулять.
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
я бы рекомендовал воспользовать дополнительно таблицей. Куда переписать исходную. А потом по этой дополнительно проверять, где нули и, когда найден ноль - занулять соответствующую строку и столбец.
p.s. а покажите, пожалуйста, каким образом у Вас в программе определена (описана в секции var) переменная-массив X. Это что, указатель?.. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 28.12.2011
Сообщений: 11
|
![]()
p.s. а покажите, пожалуйста, каким образом у Вас в программе определена (описана в секции var) переменная-массив X. Это что, указатель?..[/QUOTE]
Type Telem=single; Pline=^Tline; Tline=array[1..1] of Telem; Ptable=^Ttable; Ttable=array[1..1] of Pline; Function NULI(x:Ptable; Var m,n:integer):boolean; Var S:Telem; i,j,k,l:integer; |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 13.12.2007
Сообщений: 788
|
![]() Код:
UPD: Да, забыл еще об одном - т.к. Вы строку и столбец обнуляете целиком, получается так, что дальше программа тоже будет считать что во всей строке нули и затрет все... Значит нужно сделать так: Ввести матрицу из элементов boolean (например назовем ее T) Если в исходной матрице нашли ноль, то в этой же позиции дополнительной матрицы (T) записываем true После основного цикла повторяем его и смотрим, если элемент матрицы T = true, то обнуляем строку и столбец у исходной (как у вас уже сделано в принципе) И еще... Код:
благодарность - сюда (не забываем писать от кого)
Последний раз редактировалось Zer0; 29.12.2011 в 06:37. |
![]() |
![]() |
![]() |
#6 | |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]() Цитата:
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
|
![]() |
![]() |
![]() |
#7 |
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]()
и так хочу показать своё решение этой проблемы!
и так нам надо обнулить столбцы и строки в которых есть нулевые элементы! Возможные способы решения: Это создание доп. матрицы для поиска 0 элементов, что бы при нахождении обнулять в исходной строки и столбцы (с) Serge_Bliznykov Ввести матрицу из элементов boolean (например назовем ее T) Если в исходной матрице нашли ноль, то в этой же позиции дополнительной матрицы (T) записываем true (с) Zer0 И так, что предлагаю я Это использование множеств исключения без использования доп матриц смотрим код Код:
Суть моего предложения заключается в том, что бы при нахождении нулевого элемента запоминать его позицию чтобы в дальнейшем проверять для хранения использую два множества iski, iskj: set of byte; соответсвенно для i и j! и так проверяем мной введено Код:
Код:
по багам просьба оставлять комментарии! ну и +++ А ну конечно главный + моего способа в том, что не используются доп. массивы и т.д что экономит память! )
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 13.12.2007
Сообщений: 788
|
![]()
Hacker19_90, условие
Код:
Например для Цитата:
А в целом, решение хорошее ![]()
благодарность - сюда (не забываем писать от кого)
Последний раз редактировалось Zer0; 29.12.2011 в 07:39. |
|
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Таким образом реализуется создание (и работа) с динамическими массивами. и будет работать не только с матрицей 3 на 3: Код:
Код:
другой вопрос, зачем ЭТО использует TC... ведь задача ЯВНО учебная. и тут использование обычного статичного массива было бы, имхо, более уместным.. Hacker19_90, на мой взгляд, идея Вашего решения отличная! Только надо учитывать, что больше, чем 255x255 у Вас матрицы обрабатываются не могут (конструктивные ограничения типа множество ![]() Но я бы всё же, по старинке, использовал матрицу той же размерности, что и входная. можно булевского типа (хранить признак "в данной ячейке ноль или не ноль") |
|
![]() |
![]() |
![]() |
#10 | |||||
Delphi Warrior
Старожил
Регистрация: 15.08.2008
Сообщений: 2,502
|
![]()
и так всем спасибо за комменты и за тестинг моего способа всем + 1
вот подумал немного изменил Код:
но есть один баг! при вводе Цитата:
Цитата:
Цитата:
лан во FreePascal получил следующее при том же вводе Цитата:
Цитата:
Mess with the best, die like the rest.
![]() Лабораторные, курсовые на Delphi\Pascal\C++ ya.flex-freelance@yandex.ru Icq - 636-954-303 Последний раз редактировалось Hacker19_90; 29.12.2011 в 09:09. |
|||||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Turbo Pascal и Free Pascal , в чем разница? | antoxann | Паскаль, Turbo Pascal, PascalABC.NET | 31 | 09.11.2011 07:52 |
формирование таблицы из элементов другой таблицы с удалением повторяющихся значений | Selicat | Microsoft Office Excel | 1 | 20.10.2011 22:36 |
Free Pascal | GreenDay | Помощь студентам | 0 | 03.05.2011 08:55 |
а free pascal не читает задачи которые написаны на turbo pascal? | demonara | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 25.05.2009 16:28 |
Free pascal | Иллидан | Свободное общение | 5 | 17.04.2008 12:22 |