IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

3 страниц V < 1 2 3 >  
 Ответить  Открыть новую тему 
> Площадь фигуры,образованная окружностями.
Vardes
сообщение 12.11.2005 21:42
Сообщение #21


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Блин,точно...
Просто у меня уже голова кипит от этой задачи,но цель уже поставлена,поэтому и пытаюсь всякими извращёнными способами достигнуть её.НУ всё же остаётся поставленный вопрос про генерирование точки в посте №18.

Сообщение отредактировано: Vardes - 12.11.2005 21:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.11.2005 22:23
Сообщение #22


Гость






Значит, у тебя прямоугольник ограничен -5 <= x <= 6 и -7 <= y <= 4?
randomize;
point_x := random(12) - 5;
point_y := random(12) - 7


Общий случай: чтобы сгенерировать случайное число в интервале [a .. b]:
X := random(b - a + 1) + a;
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 12:46
Сообщение #23


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Вот реализация части програмного кода,до нахождения max и min значения x и y.
Код


const
pi=3.14159;
var
n,i:integer;
miny,maxy,minx,maxx,r,x,y:real;
mas:array[1..50] of real;
begin
Writeln('‚Введите кол-во окружнростей-');
readln(n);
Writeln('‚Введите радиус окружностей-');
minx:=0;maxx:=0;
miny:=0;maxy:=0;
for i:=1 to n do
readln(mas[i]);
  for i:=1 to n do begin

x:=mas[i]*(cos(2*pi/n*(i-1)));{нахождение декартовых координат}
y:=mas[i]*(sin(2*pi/n*(i-1)));
writeln(x:2:2,'   ',y:2:2);
{нахождение min и max значения x и y}

if x-mas[i]<=minx then minx:=x-mas[i];  
if x+mas[i]>=maxx then maxx:=x+mas[i];
  if y-mas[i]<=miny then miny:=y-mas[i];
    if y+mas[i]>=maxy then maxy:=y+mas[i];
end;
writeln(minx:2:2,'  ',maxx:2:2,'  ',miny:2:2,'  ',maxy:2:2)
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 12:52
Сообщение #24


Гость






To: Vardes
Ну, и что нам делать с этим кодом? Если уж выкладываешь, то или выкладывай полный код (когда закончишь), или задавай вопросы (если что-то не получается...)
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 14:16
Сообщение #25


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Правилен ли будет код для генерации случайных точек и их проверки(ссылаясь на код выше),так как у меня идёт зацикливание.
Код

var
found:boolean;
point_x,point_y:integer;
begin
randomize;
point_x:=random(round((maxx-minx+1)+minx));
point_y:=random(round((maxy-miny+1)+miny));
Sum:=0;
For i:=1 to n do
While not found do begin
If Sqrt(sqr(point_x-x)+sqr(point_y-y))<=mas[i] then found:=true;
Inc(Sum);
end;


Сообщение отредактировано: Vardes - 13.11.2005 14:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 15:26
Сообщение #26


Гость






point_x:=random(round(maxx-minx+1))+minx;
point_y:=random(round(maxy-miny+1))+miny;
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 16:09
Сообщение #27


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Всё исправил,но всё равно идёт зацикливание. не пойму в чём дело.
Код
const
pi=3.14159;
var
found:boolean;
sum,n,i:integer;
point_x,point_y,miny,maxy,minx,maxx,r,x,y:real;
mas:array[1..50] of real;
begin
Writeln('‚Введите кол-во окружнростей-');
readln(n);
Writeln('‚Введите радиус окружностей-');
minx:=0;maxx:=0;
miny:=0;maxy:=0;
for i:=1 to n do
readln(mas[i]);
 for i:=1 to n do begin

x:=mas[i]*(cos(2*pi/n*(i-1)));{нахождение декартовых координат}
y:=mas[i]*(sin(2*pi/n*(i-1)));
writeln(x:2:2,'   ',y:2:2);
{нахождение min и max значения x и y}

if x-mas[i]<=minx then minx:=x-mas[i];  
if x+mas[i]>=maxx then maxx:=x+mas[i];
 if y-mas[i]<=miny then miny:=y-mas[i];
   if y+mas[i]>=maxy then maxy:=y+mas[i];
end;
writeln(minx:2:2,'  ',maxx:2:2,'  ',miny:2:2,'  ',maxy:2:2)
begin
randomize;
point_x:=random(round(maxx-minx+1))+minx;
point_y:=random(round(maxy-miny+1))+miny;
Sum:=0;
For i:=1 to n do
While not found do begin
If Sqrt(sqr(point_x-x)+sqr(point_y-y))<=mas[i] then found:=true;
Inc(Sum);
end;
writeln(sum);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 16:10
Сообщение #28


Гость






Данные, которые вводишь, приведи... И объясни, что значит "зацикливание"...

Ну, я же тебе не так говорил делать !!! Внимательно читай пост №20.
Условие под последним While может и не закончиться. Вот так перепиши его (нужно же ограничивать перебор числом окружностей):
While (i <= n) and (not found) do begin


Кстати, а с каким именно X и Y ты производишь операции? Ты их сохранил куда-то (в массив), когда преобразовал из полярной СК? Я у тебя в коде этого не увидел... Более того, у тебя даже массива для этого не описано...
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 16:27
Сообщение #29


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Провожу такой ввод данных:
n- кол-во окружностей и ввожу радиус окружности,переводя его в массив
mas[1..n].Вот и все данные.
Проблема в том,что постоянно работает цикл while как взял i=1,так постоянно и гоняет себя не переходя на др. значения i.Переделал и всё равно гоняет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 16:38
Сообщение #30


Гость






Я тебе уже написал почему... Вот НЕзацикливающийся вариант. Я не проверял все формулы, если там все правильно, то тебе осталось только зациклить генерацию точки, сделать это несколько сот тысяч раз (не меньше 200000-250000, лучше - несколько миллионов), посчитать количество попаданий, и вычислить площадь (как - см. пост №8)...


Прикрепленные файлы
Прикрепленный файл  __circle.pas ( 1.22 килобайт ) Кол-во скачиваний: 247
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 17:17
Сообщение #31


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


значит генерация происходит по одной точке,если я правильно понимаю.Как же тогда можно генерировать несколько тысяч раз,если у нас промежуток по x[-4:5],а по у [-3;9].Принцип не могу понять.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 17:20
Сообщение #32


Гость






var amount: longint;
...
for amount := 1 to 200000 do begin
randomize;
point_x:=random(round(maxx-minx+1))+minx;
point_y:=random(round(maxy-miny+1))+miny;

i := 1; found := False;
While (i <= n) and not found do begin
If Sqrt(sqr(point_x-x[i])+sqr(point_y-y[i]))<=mas[i] then found:=true
else inc(i);
end;
write(point_x:3:3, ', ', point_y:3:3);
if found then writeln(' is inside circle #', i)
else writeln(' is outside');
end;

у тебя сгенерируется 200000 точек и каждая проверится на попадание в фигуру. Только надо организовать подсчет (вместо Writeln)
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 17:45
Сообщение #33


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


так это всё понятно,я про принцип спрашивал,откуда берётся такое большое кол-во точек,если у нас промежуток маленький.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 17:58
Сообщение #34


Гость






To: Vardes
А тебе все равно, какой у тебя промежуток. Если у тебя прямоугольник (граничные точки) размером 5*5, а сама фигура - размером 3*3, я что, не могу сгенерировать 5 миллионов точек, КАЖДАЯ из которых будет находиться в прямоугольнике? И проверить, сколько попадет в фигуру? Пускай из них будет по полмиллиона точек повторяться, это НЕ твоя проблема. Это и есть Monte-Carlo (Метод Рулетки)
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 18:12
Сообщение #35


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Ну ведь каждая сгенерированная точка имеет свои координаты,для вещественного типа их можно сколько угодно сгенерировать,а если у нас генерирование идёт целых чисел, да и промежуток небольшой,то как тогда поступать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 18:27
Сообщение #36


Гость






Ну, так генерируй с точностью до сотых:
  randomize;
point_x:=(random(100*round(maxx-minx))+100*minx)/100;
point_y:=(random(100*round(maxy-miny))+100*miny)/100;

blush.gif Теперь более ясно? Можно увеличить множитель до 1000, только не перестарайся, макс. число допустимое как параметр для Random должно быть 65535 ...
 К началу страницы 
+ Ответить 
Altair
сообщение 13.11.2005 18:29
Сообщение #37


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Vardes, итоговую программу, выложи пожалуйста здесь. Спасибо. (думаю как метериал для FAQ использовать )


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 18:54
Сообщение #38


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


А почему тогда одно и то же значение он по 100 раз просматривает.
И ещё вопрос,идёт генерация точек,анализируется например 2 пересекаемые окружности,тогда точки попавшие в область пересечения окружностей будут
суммироваться относительно первой и второй,или только относительно одной из них(в которую они попадут первыми).Что предусматривает метод Монте-Карло?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.11.2005 18:58
Сообщение #39


Гость






To: Vardes
Ты ответы мои ВНИМАТЕЛЬНО читал? Я кому это все пишу?
Цитата(Пост №10)
Как только точка попала в какую-то окружность, вся дальнейшая работа с этой точкой прекращается, ведь она УЖЕ внутри фигуры, и ты переходишь к следующей точке...


Цитата
А почему тогда одно и то же значение он по 100 раз просматривает.

Это ты к чему? КАКОЕ значение "он" (кстати, кто это ОН?) просматривает по 100 раз. Можно более четко выражать свои мысли?
 К началу страницы 
+ Ответить 
Vardes
сообщение 13.11.2005 19:06
Сообщение #40


Пионер
**

Группа: Пользователи
Сообщений: 131
Пол: Мужской

Репутация: -  0  +


Код

write(point_x:3:3, ', ', point_y:3:3);

Если приостановить процесс,то увидишь,что значения сгенерированных точек повторяются.Это как объяснить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V < 1 2 3 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 13:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"