1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Здравствуйте! при написании одного из модулей программы я столкнулся с такой проблемой как наложение фигур друг на друга. Как сделать так чтоб последующая фигура рисовалась на свободном месте экрана и не накладывалась на другие?
uses Crt, Graph; const k=100; var GraphDriver, GraphMode: Integer; X1,y1, r: Integer;ch:char; begin GraphDriver := Detect; InitGraph(GraphDriver, GraphMode, ' '); if GraphResult<> grOk then Halt(1); repeat ch:=readkey; if ch=chr(13) then begin X1 := Random(640-k)+k; y1 := Random(480-k)+k; r:=Random(k)+1; circle(X1,y1,r); end; until ch=chr(27); CloseGraph; end.
Предлагаю придумать не потенциально-бесконечный алгоритм.
Действительно, стоит изменить лишь одну константу: r := Random(k) + 20; чтобы потенциально бесконечный алгоритм превратился в реально бесконечный. Действительно, хороший алгоритм должен: 1. Давать правильный результат при корректных данных. 2. Давать предсказуемый результат (в частности, отсутствие деструктивных действий таких как завершение программы по ошибке, зацикливание, порча памяти...) при некорректных данных. Очевидно, если алгоритм приводит к зацикливанию программы при изменении внешних констант (т.е. таких, которые не являются имманентной частью алгоритма), то это плохой алгоритм. Желательно также, чтобы он сообщал пользователю о конкретной ошибке. Предлагаю что-то вроде.
ok := true; for i := 1 to curr do ok := ok and (sqr(C[i].X - X1) + sqr(C[i].Y - Y1) > sqr(R + C[i].R)); inc(IntIt); until ok or (IntIt > MaxIt); inc(curr); if IntIt > MaxIt then writeln('Ошибка: невозможно разместить ',curr,'-ю окружность');
Да, прошу еще обратить внимание на порядок, в котором определяются характеристики окружностей, и как именно это сделано (3-5 строки листинга).