![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Vardes |
![]()
Сообщение
#21
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Блин,точно...
Просто у меня уже голова кипит от этой задачи,но цель уже поставлена,поэтому и пытаюсь всякими извращёнными способами достигнуть её.НУ всё же остаётся поставленный вопрос про генерирование точки в посте №18. Сообщение отредактировано: Vardes - 12.11.2005 21:43 |
volvo |
![]()
Сообщение
#22
|
Гость ![]() |
Значит, у тебя прямоугольник ограничен -5 <= x <= 6 и -7 <= y <= 4?
randomize; Общий случай: чтобы сгенерировать случайное число в интервале [a .. b]: X := random(b - a + 1) + a; |
Vardes |
![]()
Сообщение
#23
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот реализация части програмного кода,до нахождения 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. |
volvo |
![]()
Сообщение
#24
|
Гость ![]() |
To: Vardes
Ну, и что нам делать с этим кодом? Если уж выкладываешь, то или выкладывай полный код (когда закончишь), или задавай вопросы (если что-то не получается...) |
Vardes |
![]()
Сообщение
#25
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Правилен ли будет код для генерации случайных точек и их проверки(ссылаясь на код выше),так как у меня идёт зацикливание.
Код 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 |
volvo |
![]()
Сообщение
#26
|
Гость ![]() |
point_x:=random(round(maxx-minx+1))+minx; |
Vardes |
![]()
Сообщение
#27
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всё исправил,но всё равно идёт зацикливание. не пойму в чём дело.
Код 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. |
volvo |
![]()
Сообщение
#28
|
Гость ![]() |
Данные, которые вводишь, приведи... И объясни, что значит "зацикливание"...
Ну, я же тебе не так говорил делать !!! Внимательно читай пост №20. Условие под последним While может и не закончиться. Вот так перепиши его (нужно же ограничивать перебор числом окружностей): While (i <= n) and (not found) do begin Кстати, а с каким именно X и Y ты производишь операции? Ты их сохранил куда-то (в массив), когда преобразовал из полярной СК? Я у тебя в коде этого не увидел... Более того, у тебя даже массива для этого не описано... |
Vardes |
![]()
Сообщение
#29
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Провожу такой ввод данных:
n- кол-во окружностей и ввожу радиус окружности,переводя его в массив mas[1..n].Вот и все данные. Проблема в том,что постоянно работает цикл while как взял i=1,так постоянно и гоняет себя не переходя на др. значения i.Переделал и всё равно гоняет. |
volvo |
![]()
Сообщение
#30
|
Гость ![]() |
Я тебе уже написал почему... Вот НЕзацикливающийся вариант. Я не проверял все формулы, если там все правильно, то тебе осталось только зациклить генерацию точки, сделать это несколько сот тысяч раз (не меньше 200000-250000, лучше - несколько миллионов), посчитать количество попаданий, и вычислить площадь (как - см. пост №8)...
Прикрепленные файлы ![]() |
Vardes |
![]()
Сообщение
#31
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
значит генерация происходит по одной точке,если я правильно понимаю.Как же тогда можно генерировать несколько тысяч раз,если у нас промежуток по x[-4:5],а по у [-3;9].Принцип не могу понять.
|
volvo |
![]()
Сообщение
#32
|
Гость ![]() |
var amount: longint; у тебя сгенерируется 200000 точек и каждая проверится на попадание в фигуру. Только надо организовать подсчет (вместо Writeln) |
Vardes |
![]()
Сообщение
#33
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
так это всё понятно,я про принцип спрашивал,откуда берётся такое большое кол-во точек,если у нас промежуток маленький.
|
volvo |
![]()
Сообщение
#34
|
Гость ![]() |
To: Vardes
А тебе все равно, какой у тебя промежуток. Если у тебя прямоугольник (граничные точки) размером 5*5, а сама фигура - размером 3*3, я что, не могу сгенерировать 5 миллионов точек, КАЖДАЯ из которых будет находиться в прямоугольнике? И проверить, сколько попадет в фигуру? Пускай из них будет по полмиллиона точек повторяться, это НЕ твоя проблема. Это и есть Monte-Carlo (Метод Рулетки) |
Vardes |
![]()
Сообщение
#35
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну ведь каждая сгенерированная точка имеет свои координаты,для вещественного типа их можно сколько угодно сгенерировать,а если у нас генерирование идёт целых чисел, да и промежуток небольшой,то как тогда поступать.
|
volvo |
![]()
Сообщение
#36
|
Гость ![]() |
Ну, так генерируй с точностью до сотых:
randomize; ![]() |
Altair |
![]()
Сообщение
#37
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Vardes, итоговую программу, выложи пожалуйста здесь. Спасибо. (думаю как метериал для FAQ использовать )
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Vardes |
![]()
Сообщение
#38
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
А почему тогда одно и то же значение он по 100 раз просматривает.
И ещё вопрос,идёт генерация точек,анализируется например 2 пересекаемые окружности,тогда точки попавшие в область пересечения окружностей будут суммироваться относительно первой и второй,или только относительно одной из них(в которую они попадут первыми).Что предусматривает метод Монте-Карло? |
volvo |
![]()
Сообщение
#39
|
Гость ![]() |
To: Vardes
Ты ответы мои ВНИМАТЕЛЬНО читал? Я кому это все пишу? Цитата(Пост №10) Как только точка попала в какую-то окружность, вся дальнейшая работа с этой точкой прекращается, ведь она УЖЕ внутри фигуры, и ты переходишь к следующей точке... Цитата А почему тогда одно и то же значение он по 100 раз просматривает. Это ты к чему? КАКОЕ значение "он" (кстати, кто это ОН?) просматривает по 100 раз. Можно более четко выражать свои мысли? |
Vardes |
![]()
Сообщение
#40
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код write(point_x:3:3, ', ', point_y:3:3); Если приостановить процесс,то увидишь,что значения сгенерированных точек повторяются.Это как объяснить? |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 13:58 |