IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> анализ и сравнение, элементов матрицы
сообщение
Сообщение #1


Гость






Дана матрица char[n][m]
Надо подсчитать количество прямоугольников(состоящих из различных символов) разных типов (‘.’ не учитывается)
Пример
###. . .??..+.
###.= .??..+.
###. .. . ...+.
. . . . ???.... .
???...... ===
???. . .####..

# прямоугольников 2
? прямоугольников 3
+ прямоугольников 1
= прямоугольников 2

Подскажите, пожалуйста, хотя бы алгоритм... (как вывести матрицу я, конечно, знаю)
Спасибо
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Я думаю, т.к. матрица задается из файла, то такой заморочки не будет)))
Матрица будет примерно как в примере(простите за тафталогию)...

Спасибо
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Если матрица - примерно как в примере, то всё очень просто.

Считать нужно по левым верхним квадратикам. У каждого прямоугольника есть только один левый верхний квадратик smile.gif, и отличается он от абсолютно всех остальных тем, что над ним, и слева от него символы - другие.

Фрагмент кода будет выглядеть примерно так:

...
var count: array[0 .. 255] of longint;
...
begin
...
fillchar(count, sizeof(count), 0);
for i := 1 to height do
for j := 1 to width do
if s[i, j] <> '.' then
if (i = 1) or (s[i - 1, j] <> s[i, j]) then //сверху нету такого же
if (j = 1) or (s[i, j - 1] <> s[i, j]) then //слева нету такого же
//увеличиваем количество найденных прямоугольников,
//составленных из символов с кодом ord(s[i, j])
Inc(count[ord(s[i, j])]);
...
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Злой человек   анализ и сравнение   14.10.2006 20:24
-Человек-   ##### ##### ##### ### . . ### . . ### . . Для так…   14.10.2006 21:48
Michael_Rybak   Хм, а для такой, получается, 4? ...#... ..###.. .…   14.10.2006 23:21
Человек, нуждающийся в помощи   Я думаю, т.к. матрица задается из файла, то такой …   15.10.2006 23:44
Michael_Rybak   Если матрица - примерно как в примере, то всё очен…   16.10.2006 4:22
Malice   Считать нужно по левым верхним квадратикам. Тогда…   16.10.2006 15:20
Michael_Rybak   А что тогда делать с примером из поста 3? И в пос…   16.10.2006 17:10
Malice   А что тогда делать с примером из поста 3? И в пос…   16.10.2006 19:16
-Человек-   Как я понял, код ищет)) 1 прямоугольник, а как пер…   16.10.2006 21:54
Michael_Rybak   Как я понял, код ищет)) 1 прямоугольник Нет. К…   17.10.2006 0:31
Благодарный человек))   Спасибо за исчерпывающий ответ!!! Но я…   17.10.2006 22:04
klem4   Это какие например ? :blink:   17.10.2006 22:06
-Человек-   ВСЕМ СПАСИБО ОГРОМНОЕ!!!!!…   23.10.2006 0:11
volvo   Чтобы не делать так: For i := 0 to 255 do count[i]…   23.10.2006 0:35


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 10:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name