Помощь - Поиск - Пользователи - Календарь
Полная версия: Окружности на Паскале
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Алиса Глупенькая
Помогите, пожалуйста, написать программу: пользователь вводит с клавиатуры число окружностей. Программа рисует данное число окружностей
sheka
readln(n);
for i := 1 to n do
circle(random(300)+100,random(300)+100,random(100));

как-то так
Алиса Глупенькая
Спасибо!!А как теперь сделать так чтобы все окружности полностью распологались на экране?
Алиса Глупенькая
задача: ввести с клавиатуры число окружностей и нарисовать их. А как сделать так чтобы все окружности полностью располагались на экране???
IUnknown
Изменить "магические константы" в параметрах Random на функции, определяющие максимально возможные координаты для установленного у тебя граф. режима. То есть, если сделать так:

   readln(n);
for i := 1 to n do
begin
R := random(90) + 10;
circle(random(getmaxx - 2*R) + R, random(getmaxy - 2*R) + R, R);
end;
, то окружности в принципе не смогут вылезти за пределы экрана: если радиус окружности = R, то координата X должна лежать в диапазоне R .. (getmaxx - R), чтобы окружность не вылезла из границ экрана (бррр... ужас, представил себе окружность, которая торчит из монитора)... Аналогично и для Y-координаты.

В примере у Шеки также была небольшая вероятность того, что сгенерируется окружность с нулевым радиусом, ты ее не увидишь, и посчитаешь, что одна окружность вылезла за пределы экрана.
Алиса Глупенькая
Нажмите для просмотра прикрепленного файла
Цитата(IUnknown @ 1.06.2011 14:14) *

Изменить "магические константы" в параметрах Random на функции, определяющие максимально возможные координаты для установленного у тебя граф. режима. То есть, если сделать так:

   readln(n);
for i := 1 to n do
begin
R := random(90) + 10;
circle(random(getmaxx - 2*R) + R, random(getmaxy - 2*R) + R, R);
end;
, то окружности в принципе не смогут вылезти за пределы экрана: если радиус окружности = R, то координата X должна лежать в диапазоне R .. (getmaxx - R), чтобы окружность не вылезла из границ экрана (бррр... ужас, представил себе окружность, которая торчит из монитора)... Аналогично и для Y-координаты.

В примере у Шеки также была небольшая вероятность того, что сгенерируется окружность с нулевым радиусом, ты ее не увидишь, и посчитаешь, что одна окружность вылезла за пределы экрана.

нет что то все равно не работает.
Вот полный текст задания:
В текстовом режиме ввести число окружностей и их радиус. Перейти в графический режим работы с драйвером EGA, что соответствует константе 3, с режимом работы EGALo, что соответствует константе 0 (на экране при таком режиме 640Х200 точек), вывести окружности на экран, меняя цвет прорисовки каждой. Окружности должны полностью располагаться на экране.
и вот что у меня написано
Program x1;
uses crt, graph;
const

var
driver, mode: integer;
x, y: integer;
r , k, i, n: integer;
begin
writeln ('VVeDITe r');
readln®;
writeln ('vvedite n ');
readln(n);
begin
driver:=3;
mode:=0;
initgraph (driver, mode, '' );
begin

randomize;
for i:=1 to n do
begin
rectangle(0,0,637,198);
setviewport (0, 0, 637, 198, clipon);

x:= random(getmaxx -2*r )+r;
y:= random(getmaxy - 2*r )+r;
setbkcolor(green);
setcolor (succ(random(16)));
circle(x, y, r);
end;
readln;
end;
end;
end.
В чем ошибка (он не все окружности на экран выводит)

Добавлено через 5 мин.
да еще они все теперь разного радиуса
IUnknown
Цитата
да еще они все теперь разного радиуса
Эти сказки будешь рассказывать кому-нибудь другому. В твоей программе они НИКАК не могут быть разного радиуса, у тебя R не изменяется. Это первое. Второе: у тебя что, действительно инициализируется режим 640*200, или ты так хитро решила показать КАК БЫ инициализацию 640*200? Зачем строка
Цитата
setviewport (0, 0, 637, 198, clipon);
? Просто так, ресурсы процессора поразбазаривать? Если режим и так инициализировался такой, как ты говоришь - то это сделается без тебя, не надо дублировать работу компилятора. Если же ты ПОКАЗЫВАЕШЬ, что у тебя "вот такой экран, и вот так располагаются окружности" - то будь добра и координаты окружностей генерировать не по реальному разрешению, а по мнимому, по тому, которое ты подразумеваешь. Обманывать можешь своего преподавателя, со мной это не проходит, я достаточно хорошо знаю язык, чтобы меня можно было на таких вещах ввести в заблуждение.

Зачем меняешь цвета окружностей? А если цвет случайно совпадет с цветом фона - ты окружность увидишь? Я - нет. И будешь считать, что программа отрабатывает неправильно, хотя она просто сделала то, что он нее просили. Хотя бы проверяй, если сгенерированный цвет совпадает с фоновым - то генерируй другой...

Вот это:
   initgraph (driver, mode, '' );

rectangle(0,0,637,198);
{setviewport (0, 0, 637, 198, clipon); }
randomize;
for i:=1 to n do
begin
x:= random(640 -2*r )+r;
y:= random(200 - 2*r )+r;
writeln(x:10, y:10);
circle(x, y, r);
end;
должно отрисовать N одинаковых окружностей белого цвета. Если этого не происходит - то выброси свой компилятор. А если происходит - то тогда уже добавляй изменение цвета, с учетом того что я написал выше.

Кстати, твоя программа вообще не откомпилируется, ибо раздел const - пустой. Как же ты говоришь, что программа работает? Опять одно из двух: либо врешь, что работает, либо показываешь ДРУГУЮ программу. Ни в том ни в другом случае у меня нет желания тебе помогать.
Алиса Глупенькая
О боже! Сколько желчи! Я уже все разобрала сама, а не получалось потому что у меня сам паскаль иногда зависает чтоли или не знаю как это назвать но он прадолжает выполнять старую программу хотя написано уже другое.

Добавлено через 3 мин.
А setviewport (0, 0, 637, 198, clipon) я применяла потому что думала что это поможет мне чтобы окружности за экран не вылезали, но это оказалось другое. Я же за помощью обращаюсь следовательно я в этом не разбираюсь, и уж тем боллее обманывать тут кого то мне точно нет смысла.
TarasBer
> О боже! Сколько желчи!

Где желчь? Если ты даже его (ну жестковат, но всё в пределах нормы) стиля разговора испугалась, то что же дальше будет. Хорошо, что ты ещё Луговского не видела...

Запомни - важна не форма, а содержание. Не бойся человека, если он хамит или грубит. Такие люди на самом деле наимеее опасны, потому что они прямо говорят, что думают, и всегда знаешь, чего от них ждать. А вот те, кто сладкими словами по ушам красиво умеют ездить - на самом деле как раз очень коварны и опасны, и от них хрен знаешь, чего ждать. Избегай таких людей.
sheka
Цитата
Если же ты ПОКАЗЫВАЕШЬ, что у тебя "вот такой экран, и вот так располагаются окружности" - то будь добра и координаты окружностей генерировать не по реальному разрешению, а по мнимому, по тому, которое ты подразумеваешь

В данном случае по 637, 198 ?
IUnknown
Цитата
В данном случае по 637, 198 ?
В данном случае - да.
Алиса Глупенькая
Цитата(TarasBer @ 1.06.2011 17:02) *

> О боже! Сколько желчи!

Где желчь? Если ты даже его (ну жестковат, но всё в пределах нормы) стиля разговора испугалась, то что же дальше будет. Хорошо, что ты ещё Луговского не видела...

Запомни - важна не форма, а содержание. Не бойся человека, если он хамит или грубит. Такие люди на самом деле наимеее опасны, потому что они прямо говорят, что думают, и всегда знаешь, чего от них ждать. А вот те, кто сладкими словами по ушам красиво умеют ездить - на самом деле как раз очень коварны и опасны, и от них хрен знаешь, чего ждать. Избегай таких людей.

Хорошо я учту, что это он на меня не ругался) Спасибо за помощь!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.