Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 8

Задача "игла Бюффона на Си"

08.03.2013, 18:50. Показов 7074. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Будьте любезны пожалуйста помочь. Я пишу программу, по определению числа пи, при условии x<=l*sin(θ), где 0<θ<pi, 0<x<l - эта проекция угла θ, а l - единичная длина иглы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <omp.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<iostream>
 
int main()
{
    int a,l,n,m;
double p,val,pi,x,fi,eps;
double mp;
x=1;
l=1;
srand(time(NULL));
pi = 4 * ((double)atan(1.0));
for(int i = 0; i < 10; ++i)
{
mp = (double)(rand()%22)/7;
printf("%f \n",mp);
}
eps=0.01;a=1;l=1;
printf("dsds \n");
do
{
fi=(double)(rand()%22)/7;
n=n+1;
if (x<=l*sin(fi))
{
m=m+1;
p=(2*n/m);
}
printf("steps %d pi: %e \n",m,p);
}
while(fabs(p-pi)<eps);
 
 
getche();
}
Диагноз: неверный результат, и есть ли библиотечная переменная может быть, в которой затабулировано исходное число пи? Ни где этого не нашёл
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2013, 18:50
Ответы с готовыми решениями:

Задача Бюффона: Какова вероятность того, что игла, упав, пересечет хотя бы одну прямую
Помогите пожайлуста написать программу!!!!

Игла Бюффона
Задача игла Бюффона, Мне надо рассчитать погрешность в lable где вывод должен быть using System; using System.Collections.Generic; ...

Игла Бюффона. Составить программу, позволяющую экспериментально решить следующую задачу по теории вероятностей
Здравствуйте, Помогите пожалуйста хорошему студенту который плохо ладит с программированием. Составить программу, позволяющую...

5
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
08.03.2013, 22:52
Цитата Сообщение от bimbum Посмотреть сообщение
исходное число пи
Задайте сами:
C++
1
const double      Pi = 3.14159265358979323846;
В любом случае, метод Бюффона даст очень грубую оценку. И посмотрите обсуждение здесь: Buffon's needle C++
1
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 8
08.03.2013, 23:41  [ТС]
Цитата Сообщение от gazlan Посмотреть сообщение
Задайте сами:
C++
1
const double      Pi = 3.14159265358979323846;
В любом случае, метод Бюффона даст очень грубую оценку. И посмотрите обсуждение здесь: Buffon's needle C++
Вот подправленный кусок:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
do
{
    k = (double)rand()/(RAND_MAX)*360;       // random angle
 
    x = (double)rand()/(RAND_MAX*2);         // random x (0 do 1)
n++;
if (x<=(l) * sin (k))
{
m++;
}
p=(2*n/m);
}
while(fabs(p-pi)<eps); 
printf("steps %d pi: %f \n",n,p);
printf("x: %f k: %f\n",x,k);
Но она не работает! Т.е. не обошли проблему с rand(); сами пожалуйста, посмотрите, аргумент k для синуса порядка сотни у меня выдаёт, а если *360 под скобку, то аргумент синуса станет порядка 10^-3 степени, какие ещё варианты есть, чтобы интервал выборки для аргумента угла задать от 0<fi<до пи ?!

Добавлено через 12 минут
Цитата Сообщение от bimbum Посмотреть сообщение
Вот подправленный кусок:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
do
{
    k = (double)rand()/(RAND_MAX)*360;       // random angle
 
    x = (double)rand()/(RAND_MAX*2);         // random x (0 do 1)
n++;
if (x<=(l) * sin (k))
{
m++;
}
p=(2*n/m);
}
while(fabs(p-pi)>eps); // знак "<" на ">"  
printf("steps %d pi: %f \n",n,p);
printf("x: %f k: %f\n",x,k);
Но она не работает! Т.е. не обошли проблему с rand(); сами пожалуйста, посмотрите, аргумент k для синуса порядка сотни у меня выдаёт, а если *360 под скобку, то аргумент синуса станет порядка 10^-3 степени, какие ещё варианты есть, чтобы интервал выборки для аргумента угла задать от 0<fi<до пи ?!
Вообщем был бы рад, чего нового услышать по этой программе, но она все-таки заработала, но нельзя ли как-нибудь придумать, чтобы k аргумент до пи был?!
Спс. за помощь)
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
09.03.2013, 00:31
Во-первых, не советую вообще использовать встроенный rand().
Во-вторых, возьмите что-либо уже приведенное к диапазону 0.0..1.0, ваше преобразование некорректно.

Для примера:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// FRAND.C - Public domain by Larry Hudson
 
#define TEN_PI    (31.41592653589793)
#define E         (2.718281828459045)
 
// Return random double between 0.0 and 1.0
// If n is negative it will randomize the seed, based on the
// current MSDOS time.
// If n is zero it will return the next random number.
// If n is positive it will set the seed to a value based on
// the value of n.
 
double FRrandom(int iNum)
{
   static double  fSeed = E;
 
   double   fDummy;
   time_t   TTime;
 
   if (iNum < 0)
   {
      time(&TTime);
 
      fSeed = (double)TTime;
   }
   else if (iNum > 0)
   {
      fSeed = (double)iNum * E;
   }
 
   fSeed = modf(fSeed * TEN_PI + E,&fDummy);
   
   return fSeed;
}
1
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 8
09.03.2013, 01:39  [ТС]
Цитата Сообщение от gazlan Посмотреть сообщение
Во-первых, не советую вообще использовать встроенный rand().
Во-вторых, возьмите что-либо уже приведенное к диапазону 0.0..1.0, ваше преобразование некорректно.

Для примера:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// FRAND.C - Public domain by Larry Hudson
 
#define TEN_PI    (31.41592653589793)
#define E         (2.718281828459045)
 
// Return random double between 0.0 and 1.0
// If n is negative it will randomize the seed, based on the
// current MSDOS time.
// If n is zero it will return the next random number.
// If n is positive it will set the seed to a value based on
// the value of n.
 
double FRrandom(int iNum)
{
   static double  fSeed = E;
 
   double   fDummy;
   time_t   TTime;
 
   if (iNum < 0)
   {
      time(&TTime);
 
      fSeed = (double)TTime;
   }
   else if (iNum > 0)
   {
      fSeed = (double)iNum * E;
   }
 
   fSeed = modf(fSeed * TEN_PI + E,&fDummy);
   
   return fSeed;
}
ужас
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
09.03.2013, 02:16
Цитата Сообщение от bimbum Посмотреть сообщение
ужас
Если убрать комментарии и инициализацию, останется единственная строчка - классический Linear PRNG - http://en.wikipedia.org/wiki/L... _generator.

Встроенный rand() использует в точности тот же метод (точнее, в MSVC их два, чуть отличающихся), но весьма ограничен по диапазону.

А если вам нужен действительно качественный PRNG, рекомендую Mersenne twister
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2013, 02:16
Помогаю со студенческими работами здесь

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

Задача Бюффона об игле
Помогите пожалуйста запрограммировать!

Задача Бюффона с квадратной сеткой
Подскажите, пожалуйста, что будет с результирующей вероятностью в задаче Бюффона, если взять вместо прямых квадратную сетку? Верно ли то,...

Определение числа пи на основе задача Бюффона
Пожалуйста помогите! Не могу придумать алгоритм определение числа пи на основе задача Бюффона

Проект-реализация задачи Бюффона (задача с иголками и послом Пи)
Подсобите материалом или готовой реализацией задачи Бюффона. Заранее премного благодарен


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru