Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 13.07.2012, 12:32   #1
addons
Новичок
Джуниор
 
Регистрация: 13.07.2012
Сообщений: 4
По умолчанию Подсчет объектов на клетчатом поле

Здравствуйте. Уже очень много времени сижу над одной задачей, никак не могу ее решить. Кто-нибудь может помочь? или хотя бы намекнуть как решать ее?

5. На клетчатом поле размером n×n клеток расположены прямоугольные объекты, ориентированные по вертикали или по горизонтали. На входе программы задается значение для n, а затем n2 числовых значений для клеток поля. Число 0 означает незанятую клетку, число 1 – клетку, занятую объектом. Один объект занимает подряд по вертикали и горизонтали несколько клеток. Объекты не накладываются друг на друга и не соприкасаются. Найти и вывести количество горизонтальных, вертикальных и квадратных объектов (у горизонтальных объектов ширина больше высоты, у вертикальных – наоборот).
addons вне форума   Ответить с цитированием
Старый 13.07.2012, 13:14   #2
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Создаёте поле (n+1)x(n+1), это нужно для того, чтобы вокруг поля с фигурами было дополнительное пространство, заполненное нулями.
Алгоритм такой:
Идём по полю, если встречаем верхний левый угол фигуры, то считаем её длину по вертикали и горизонтали.
Код:
int getvertlength(int i, int j)
{
	int vert = 0;
	while (a[i][j] == 1)
	{
		vert += 1;
		i += 1;
	}
	return vert;
}

int gethorizlength(int i, int j)
{
	int hor = 0;
	while (a[i][j] == 1)
	{
		vert += 1;
		j += 1;
	}
	return horiz;
}

//это в main запихать
for (i = 1; i < n-1; i++)
	for (j = 0; j < n-1; j++)
	{
		if	(a[i][j] == 1 && a[i-1][j] == 0 && a[i][j-1] == 0)
		{
			vert = getvertlength(i, j);
			hor = gethorizlength(i, j);
			if (vert > hor) 
				vertcount += 1;
				else
					horcount += 1;
		}
	}
}
Пол-жизни сидючи, в монитор глядючи...
Last вне форума   Ответить с цитированием
Старый 13.07.2012, 13:38   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,203
По умолчанию

Last, +1

а вообще, ничто не ново под луной..
вот этой теме "МИННОЕ ПОЛЕ В Delphi" приведено пару рабочих решений...
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 13.07.2012, 13:49   #4
addons
Новичок
Джуниор
 
Регистрация: 13.07.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Last Посмотреть сообщение
Создаёте поле (n+1)x(n+1), это нужно для того, чтобы вокруг поля с фигурами было дополнительное пространство, заполненное нулями.
Алгоритм такой:
Идём по полю, если встречаем верхний левый угол фигуры, то считаем её длину по вертикали и горизонтали.
Код:
int getvertlength(int i, int j)
{
	int vert = 0;
	while (a[i][j] == 1)
	{
		vert += 1;
		i += 1;
	}
	return vert;
}

int gethorizlength(int i, int j)
{
	int hor = 0;
	while (a[i][j] == 1)
	{
		vert += 1;
		j += 1;
	}
	return horiz;
}

//это в main запихать
for (i = 1; i < n-1; i++)
	for (j = 0; j < n-1; j++)
	{
		if	(a[i][j] == 1 && a[i-1][j] == 0 && a[i][j-1] == 0)
		{
			vert = getvertlength(i, j);
			hor = gethorizlength(i, j);
			if (vert > hor) 
				vertcount += 1;
				else
					horcount += 1;
		}
	}
}
а что, если объект будет выглядеть , к примеру, как буква "П" или как перевернутая буква "П". что тогда?
addons вне форума   Ответить с цитированием
Старый 13.07.2012, 13:50   #5
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Цитата:
Сообщение от addons Посмотреть сообщение
а что, если объект будет выглядеть , к примеру, как буква "П" или как перевернутая буква "П". что тогда?
Задание читать не пробовали?
Цитата:
расположены прямоугольные объекты
UPD: А вообще можно написать ещё простенькую функцию, которая пробегает поле от (i,j) до (i+vert, j+hor) и если встречает ноль, то возвращает ошибку.
Пол-жизни сидючи, в монитор глядючи...

Последний раз редактировалось Last; 13.07.2012 в 13:54.
Last вне форума   Ответить с цитированием
Старый 13.07.2012, 14:07   #6
addons
Новичок
Джуниор
 
Регистрация: 13.07.2012
Сообщений: 4
По умолчанию

Дак, а что разве "П" - это не прямоугольный объект? есть 2 прямых угла, это судя по двум "ногам" вертикальный объект. походу у меня не лады с пониманием условия ((

п.с. пишу на паскале )) но ваш подход понятен, спасибо!
addons вне форума   Ответить с цитированием
Старый 13.07.2012, 14:13   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,203
По умолчанию

Цитата:
Дак, а что разве "П" - это не прямоугольный объект? есть 2 прямых угла, это судя по двум "ногам" вертикальный объект. походу у меня не лады с пониманием условия ((
вы определённо не хотите читать исходное условие задачи!
Цитата:
На клетчатом поле размером n×n клеток расположены прямоугольные объекты, ориентированные по вертикали или по горизонтали. На входе программы задается значение для n, а затем n2 числовых значений для клеток поля. Число 0 означает незанятую клетку, число 1 – клетку, занятую объектом. Один объект занимает подряд по вертикали и горизонтали несколько клеток. Объекты не накладываются друг на друга и не соприкасаются.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 13.07.2012, 21:51   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Last Посмотреть сообщение
Создаёте поле (n+1)x(n+1), это нужно для того, чтобы вокруг поля с фигурами было дополнительное пространство, заполненное нулями.
По моим подсчетам получается (n+2)x(n+2).
s-andriano вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет объектов на бинарном изображении Servent Помощь студентам 0 12.05.2012 11:32
Создание и уничтожение объектов. Время жизни объектов C++/C# Anett// Помощь студентам 0 24.10.2011 23:26
Java а квадратном клетчатом листе бумаги размерами 100х100 нарисовано несколько прямоугольников. подсчитать сколько. Marisa21 Помощь студентам 1 20.06.2011 05:41
Подсчет текущего количества GUI объектов N-Cat Win Api 7 25.02.2011 17:15
движение объектов в поле Chart weezmei Помощь студентам 0 22.05.2010 01:09


11:12.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.