Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2010, 13:35   #1
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию массив прямоугольников из едениц

Помогите пожалуйста заполнить массив таким образом, чтобы в нем рандомно появлялись значения из нулей и едениц, но еденицы составляли произвольные прямоугольники и различные прямоугольники не соприкасались друг с другом.

Я создала массив, проблема только с его заполнением таким образом...
Помогите пожалуйста!

P.S. Программа в Delphi

Последний раз редактировалось Оля 19; 20.11.2010 в 13:56. Причина: Дополнение
Оля 19 вне форума Ответить с цитированием
Старый 20.11.2010, 14:42   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Я бы сделал так:
цикл от единицы до N(рандом):
1) рандомно выбираем координаты верхнего левого угла прямоугольника и длины его сторон.
2) пробегаем по каждой ячейке, которую "задевает" прямоугольник, включая координаты на 1 за его границами
3) если в п.2 не встретили ни одной "1", то рисуем этот прямоугольник
//таким образом нарисуем от 1 до N прямоугольников
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 20.11.2010, 17:30   #3
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

спасибо, все равно не поняла...
Оля 19 вне форума Ответить с цитированием
Старый 20.11.2010, 21:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Оля 19
1) давайте Ваш код создания массива
2) нарисуйте (просто в виде рисунка или приведите заполнение) массива "еденицы составляли произвольные прямоугольники "
кстати, единица пишется через И
просто хочется посмотреть, что в Вашем представлении "не соприкасались друг с другом"

3) а что считать окончанием процесса? Сколько должно быть прямоугольников? Или на сколько матрица должна состоять из единиц и нулей?

p.s. задачка по сути простейшая, и алгоритм предложенный Naive вполне работоспособен...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.11.2010, 22:58   #5
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

Вот код
Код:
const
  n=100;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a:array[0..n,0..n] of integer;
i,j:integer;
begin
 randomize;
 for i:=0 to n do
 for j:=0 to n do
 begin
 a[i,j]:=random(2);
 Stringgrid1.Cells[i,j]:=inttostr(a[i,j]);

end;
здесь он расставляет цифры в рандомном порядке, а нужно чтобы массив выглядел так:
например

11100000000000000000000
11100000000000000000000
00000000111110000000000
00000000111110000000000
11100000111110000000000
11100000111110000000000
11100000000000000000000
00000000000000011110000
00000000000000011110000

другими словами элемент a[i,j]=1, если клетка [i,j] принадлежит какому-либо прямоугольнику и A[i,j]=0 в противном случае.
И чтобы при нажатии на кнопку были возможны различные варианты расстановки прямоугольников их количество, и они были произвольных размеров...

Последний раз редактировалось Stilet; 21.11.2010 в 00:16.
Оля 19 вне форума Ответить с цитированием
Старый 22.11.2010, 15:30   #6
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

Все, тема не актуальна, буду из файла читать...
Оля 19 вне форума Ответить с цитированием
Старый 22.11.2010, 20:42   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Все, тема не актуальна, буду из файла читать...
Молодец, что написала!

а с генерацией, может и правильно, что выбран способ ручного задания.
заполнить произвольными прямоугольниками достаточно просто.
я могу написать пример.
НО! Проблема в том, если нужно получить ЗАДАННОЕ число прямоугольников! Вот тут уже получается либо надо эвристики придумывать, либо какой-то красивый алгоритм изобретать...
да и может и вообще не решается задача, если задать достаточно большое N

А вот просто сгенерировать несколько прямоугольников и заполнить матрицу - это несложно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.11.2010, 20:36   #8
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

нет, число специально задавать ненадо
Оля 19 вне форума Ответить с цитированием
Старый 24.11.2010, 20:28   #9
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
Лампочка

Ребят, подскажите как из файла правильно читать...
я записала в блокноте массив из 0 и 1, без пробела. Правильно ли?
Надо считать этот массив в Delphi, желательно в Stringgrid.
Я начала читать...
код:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;

type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
n=100;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a:array[0..n,0..n] of integer;
i,j:integer;
f:Textfile;
s: string;

begin
Assignfile(f,'ìèííîå ïîëå.txt');
{$I-}
reset(f);
{$I+}
while not EOF(f) do begin
readln(f,s);
for i:=0 to n do
for j:=0 to n do

begin
readln(f,s);
Stringgrid1.Cells [i,j]:= inttostr(a[i,j]);
end;
closefile(f);
end;
end.

Он заполняет Stringgrid, но не так как в файле
Оля 19 вне форума Ответить с цитированием
Старый 26.11.2010, 19:06   #10
Оля 19
Пользователь
 
Аватар для Оля 19
 
Регистрация: 20.11.2010
Сообщений: 17
По умолчанию

Вообщем спасибо Naive, спасибо Serge_Bliznykov за ваше внимание!
Придется самой думать поинтенсивнее
Оля 19 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Площадь прямоугольников savraska Помощь студентам 7 04.06.2010 16:42
Площади прямоугольников.С++ evgenij9241 Помощь студентам 1 15.01.2010 15:33
Получить последовательность bi....bn из нулей и едениц,в которой bi=1, когда в i-ой строке число символов R_A_M_I_L7777777 Помощь студентам 3 19.05.2009 16:03
Определить количество едениц продукции каждого типа, который должна изготавливать фирма LeMystere Microsoft Office Excel 2 25.12.2008 12:54
5 прямоугольников Carbon Помощь студентам 10 08.11.2007 10:08