![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 17
|
![]()
Помогите пожалуйста заполнить массив таким образом, чтобы в нем рандомно появлялись значения из нулей и едениц, но еденицы составляли произвольные прямоугольники и различные прямоугольники не соприкасались друг с другом.
Я создала массив, проблема только с его заполнением таким образом... Помогите пожалуйста! P.S. Программа в Delphi Последний раз редактировалось Оля 19; 20.11.2010 в 13:56. Причина: Дополнение |
![]() |
![]() |
![]() |
#2 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
![]()
Я бы сделал так:
цикл от единицы до N(рандом): 1) рандомно выбираем координаты верхнего левого угла прямоугольника и длины его сторон. 2) пробегаем по каждой ячейке, которую "задевает" прямоугольник, включая координаты на 1 за его границами 3) если в п.2 не встретили ни одной "1", то рисуем этот прямоугольник //таким образом нарисуем от 1 до N прямоугольников
Alar, верни репу!
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 17
|
![]()
спасибо, все равно не поняла...
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Оля 19
1) давайте Ваш код создания массива 2) нарисуйте (просто в виде рисунка или приведите заполнение) массива "еденицы составляли произвольные прямоугольники " кстати, единица пишется через И просто хочется посмотреть, что в Вашем представлении "не соприкасались друг с другом" 3) а что считать окончанием процесса? Сколько должно быть прямоугольников? Или на сколько матрица должна состоять из единиц и нулей? p.s. задачка по сути простейшая, и алгоритм предложенный Naive вполне работоспособен... |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 17
|
![]()
Вот код
Код:
например 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. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 17
|
![]()
Все, тема не актуальна, буду из файла читать...
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
а с генерацией, может и правильно, что выбран способ ручного задания. заполнить произвольными прямоугольниками достаточно просто. я могу написать пример. НО! Проблема в том, если нужно получить ЗАДАННОЕ число прямоугольников! Вот тут уже получается либо надо эвристики придумывать, либо какой-то красивый алгоритм изобретать... да и может и вообще не решается задача, если задать достаточно большое N А вот просто сгенерировать несколько прямоугольников и заполнить матрицу - это несложно... |
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 17
|
![]()
нет, число специально задавать ненадо
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 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, но не так как в файле |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 17
|
![]()
Вообщем спасибо Naive, спасибо Serge_Bliznykov за ваше внимание!
Придется самой думать поинтенсивнее |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Площадь прямоугольников | 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 |