Форум программистов, компьютерный форум CyberForum.ru

Вычисление площади трапеции методом Монте-Карло - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Запись слова в динамический массив http://www.cyberforum.ru/cpp-beginners/thread1012171.html
помогите пожалуйста, пользователь вводит слово, надо записать это слово по буквам в массив (1 буква, одна ячейка массива) , как определить размер создаваемого массива? и как слово по буквам разделить?
C++ Класс ВРЕМЯ Ребят, с классами проблема, не понимаю вообще, а нужно сдать 2 проги. если кому не трудно или у кого-то есть помогите)) 1)Создать класс "время" с компонентными данными: число, месяц, год. Определить компонентные функции: получить каждый элемент класса по отдельности, вывести значение на экран, добавить к данному времени n часов, добавить n минут, добавит n секунд. Описать дружественную... http://www.cyberforum.ru/cpp-beginners/thread1012154.html
C++ Вычисление разности двух массивов с помощью функции
написать прогу для вычисления разности двух массивов с помощью функции.
C++ Правильный ли цикл
Хочу сделать в цикле следующее: есть массив из 1022 элементов из ноликов и единичек(Exit). Если нолик, то его заменяю на 40 и добавляю ещё одно число 40 следом за ним, если идиничка, то заменяю её на -40, и следом пишу ещё -40. Например, было 10110, должно стать - -40 -40 40 40 -40 -40 -40 -40 40 40. Правильный ли код (просто у меня CodeBlocks виснет при зпуске)? for(int s=0; s<2044; s++){ ...
C++ Как из файла/строки вытянуть данные? http://www.cyberforum.ru/cpp-beginners/thread1012065.html
ну в смысле данные, есть например файл содержащий 854 634 6436 2357 457345 вопщем неважно какие числа, ну к примеру я их уже вытянул в строку и хочу каждую строку распихать в переменую пока идеи только такие находим переход на новую строку и его запоминаем for(int i=0;i<bs.length();i++)
C++ Даны натуральное число n, действительное число x. Вычислить: Даны натуральное число n, действительное число x. Вычислить: __________________________________________________________________ Я новичок, поэтому до меня никак не доходит как реализовать эту задачу( подробнее

Показать сообщение отдельно
Sapfira71
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 2
19.11.2013, 17:23     Вычисление площади трапеции методом Монте-Карло
Здравствуйте, уважаемые форумчане! Возникла проблема при написании одной из программ курсовой работы (см. заголовок темы). Проблема 1: собственно, в С++ (консоль), насколько я поняла, нет рандома, в котором и границами, и генерируемыми числами были бы double-значения (плюс равномерное распределение, которое на целых числах выглядело бы так: xA + rand()*(xC-xA), насколько я знаю). Проблема 2: как ни странно, не могу сделать божескую таблицу результатов. Огромная просьба помочь, ибо по первой проблеме я уже, кажется, излазила все, что можно, но результаты не подходили, а по второй не получается из-за рук кривых). Код представлен ниже, если кто еще какие проблемы увидит, буду премного благодарна.
main1.cpp
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
#include "class.h"
#include <time.h>
#include <math.h>
#include <random>
using namespace std;
double koef(Point a, Point b)
{
   return (double)(b.Y - a.Y) / (double)(b.X - a.X);
}
double koefb(Point a, Point b)
{
   return a.Y-koef(a, b)*a.X;
}
int main()
{
    setlocale(LC_ALL, "rus");
    int xa=0, ya=0, xb=0, yb=0, xc=0, yc=0, xe=0, ye=0;
    double b1, b2, k1, k2;
    srand(time(NULL));
    cout << "Вычисление площади трапеции методом Монте-Карло  \n";
    cout << "------------------------------------------------\n";
    cout << "    ^ y                                          \n";
    cout << "    |                   b               c        \n";
    cout << "    |       ------------o---------------o       \n";
    cout << "    |      |            <<<<<<<<<<<<<<<<|        \n";
    cout << "    |      |          <<<<<<<<<<<<<<<  |         \n";
    cout << "    |      |        <<<<<<<<<<<<<< |             \n";
    cout << "    |      |      <<<<<<<<<<<<<        |         \n";
    cout << "    |      |    <<<<<<<<<<<<       |             \n";
    cout << "    |      |  <<<<<<<<<<<      |                 \n";
    cout << "    |      |<<<<<<<<<<         |    x            \n";
    cout << "    |------o---------o----------------------->  \n";
    cout << "    0      a         e                           \n";
    cout << "                                                 \n";
    cout << "------------------------------------------------\n";
metka1:
    cout << "Выберете необходимый пункт.\n";
    cout << "1 - Контрольный пример 1.\n";
    cout << "2 - Контрольный пример 2.\n";
    cout << "3 - Контрольный пример 3.\n";
    cout << "4 - Ввести значения вручную.\n";
    int n; cin >> n;
    switch (n)
    {
    case 1:
              xa=1; ya=0; xb=6; yb=10; xc=10; yc=10; xe=5; ye=0;
              goto metka2;
    case 2:
              xa=100; ya=0; xb=150; yb=300; xc=250; yc=300; xe=250; ye=0;
              goto metka2;
    case 3:
              xa=100; ya=0; xb=150; yb=300; xc=250; yc=300; xe=300; ye=0;
              goto metka2;
    case 4:
              cout << "Введите значения вручную (a.x, a.y, b.x, b.y, c.x, c.y, e.x, e.y):\n";
              cin >> xa >> ya >> xb >> yb >> xc >> yc >> xe >> ye; cout << endl;
              goto metka2;
    }
metka2:
    Point A = Point(xa, ya);
    Point B = Point(xb, yb);
    Point C = Point(xc, yc);
    Point E = Point(xe, ye);
    Point rands = Point();
    Rect Rec= Rect(A, B, C, E);
    cout << "Точки имеют координаты:\n";
    cout << "Точкa A: (" << A.X << ";" << A.Y << ")\n";
    cout << "Точкa B: (" << B.X << ";" << B.Y << ")\n";
    cout << "Точкa C: (" << C.X << ";" << C.Y << ")\n";
    cout << "Точкa E: (" << E.X << ";" << E.Y << ")\n";
    cout << "Точная площадь трапеции: " << Rec.TrapSquare(A, B, C, E) << "\tПлощадь описанного прямоугольника: " << Rec.RectSquare(A, B, C, E) << endl;
    b1 = koefb(A, B);
    b2 = koefb(E, C);
    k1 = koef(A, B);
    k2 = koef(E, C);
    cout << "-----------------------------------------------------------------\n";
    cout << "|  Количество |  Точек   |    Площадь   |Погрешность|   Время   | \n";
    cout << "|    точек    |  попало  |              |    (%)    |    (ms)   | \n";
    cout << "-----------------------------------------------------------------\n";
    for (int N = 1000; N < 100000000; N *= 10)
    {
       int vnutri = 0;
       time_t start = time(NULL)*1000;
       for (int i = 0; i < N; i++)
       {
          if (C.X >E.X)
          {
            rands.X = ((C.X - A.X) * ((double)rand() / (double) RAND_MAX)) + C.X;
            rands.Y = ((B.Y - A.Y) * ((double)rand() / (double) RAND_MAX)) + A.Y;
            if ((rands.Y <= k1 * rands.X + b1) && (rands.Y >= k2 * rands.X + b2))
               vnutri++;
          }
          if (C.X==E.X)
          {
            rands.X = ((C.X - A.X) * ((double)rand() / (double) RAND_MAX)) + A.X;
            rands.Y = ((B.Y - A.Y) * ((double)rand() / (double) RAND_MAX)) + A.Y;
            if ((rands.Y <= k1 * rands.X + b1))
               vnutri++;
          }
          if (C.X<E.X)
          {
            rands.X = ((E.X - A.X) * ((double)rand() / (double) RAND_MAX)) + A.X;
            rands.Y = ((B.Y - A.Y) * ((double)rand() / (double) RAND_MAX)) + A.Y;
            if ((rands.Y <= k1 * rands.X + b1) && (rands.Y <= k2 * rands.X + b2))
               vnutri++;
          }
       }
       time_t end = time(NULL)*1000;
       double pltrmc = Rec.RectSquare(A, B, C, E) * vnutri / N;
       time_t TimeResult = end - start;
       double Pogr = (abs(Rec.TrapSquare(A, B, C, E) - pltrmc) / Rec.TrapSquare(A, B, C, E)) * 100;
       cout << "|" << N << "    |" << vnutri << "\t|" << pltrmc << "\t|" << Pogr << "\t|" << TimeResult << "\t|\n";
       cout << "|_____________|__________|______________|___________|___________| \n";
    }
    cout << "Выберете дальнейшее действие:\n";
    cout << "1 - Оставить текущие координаты, и сгенерировать новые точки\n";
    cout << "2 - Изменить текущие координаты, и сгенерировать новые точки\n";
    cout << "3 - Выйти из программы\n";
    int vib;
    cin >> vib;
    switch (vib)
    {
       case 1: goto metka2;
       case 2: goto metka1;
       case 3: break;
    }
    system("pause");
    return 0;
}
class.h
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
#include <iostream>
using namespace std;
class Point
{
    public: int X, Y;
    public: 
    Point()
    {
       X = 0;
       Y = 0;
    }
    Point(int x, int y)
    {
       X = x;
       Y = y;
    }
};
class Rect
{
    public: Point A, B, C, E;
    public: 
        Rect(Point a, Point b, Point c, Point d)
        {
            A = a;
            B = b;
            C = c;
            E = d;
        }
        double RectSquare(Point a, Point b, Point c, Point e)
        {
            if (e.X<=c.X) return ((double)(b.Y - a.Y) * (double)(c.X - a.X));
            else return ((double)(b.Y - a.Y) * (double)(e.X - a.X));
        }
        double TrapSquare(Point a, Point b, Point c, Point e)
        {
            return (((double)(c.X - b.X + e.X - a.X) / 2) * (double)(b.Y - a.Y));
        }
};
P.S. Еще интересует, правильно ли я написала вычисление времени выполнения одной итерации цикла (необходим результат в милисекундах). + Я еще не вводила контроль вводимых вручную значений (думаю, сама потом справлюсь).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru