Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 2
Регистрация: 31.03.2010
Сообщений: 13

Вроде бы память...

30.05.2010, 08:53. Показов 839. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

Задачка: данны отрезок(2 точки: А и В) и окружность(радиус и центр), которые пересекаються(в точке С). Известно время прохождения начала и конца отрезка. не обходимо с помощью линейной интерполяции вычислить время прохождения точки пересечения.

С помощью системы я нахожу точку пересечения отрезка с окружностью. Дальше вычисляя длину отрезка АВ и АС, по средствам пропорции нахожу разницу во времени между точками А и С. Остаеться только прибавить ее к времени в точке А.

Проблема заключаеться в следующем
[nikolay@myhost ~]$ ./b
in
ac/ab = 0.448340
ab_tm = 18
ac_tm_mpfr = 8.070113
ac_tm = 8
0 0
out
ac/ab = 0.795765
ab_tm = -3594
ac_tm_mpfr = -2859.980351
ac_tm = -2860
30 30
[nikolay@myhost ~]$ ./b
in
ac/ab = 0.448340
ab_tm = 18
ac_tm_mpfr = 8.070113
ac_tm = 8
0 0
out
ac/ab = 0.795765
ab_tm = -3594
ac_tm_mpfr = -2859.980351
ac_tm = -2860
30 30
[nikolay@myhost ~]$ ./b
in
ac/ab = 0.448340
ab_tm = 18
ac_tm_mpfr = 8.070113
ac_tm = 8
0 0
out
ac/ab = 0.795765
ab_tm = -3594
ac_tm_mpfr = -2859.980351
ac_tm = -2860
30 30
[nikolay@myhost ~]$ ./b
in
ac/ab = 0.448340
ab_tm = 18
ac_tm_mpfr = 8.070113
ac_tm = 8
0 0
out
ac/ab = 0.795765
ab_tm = 6
ac_tm_mpfr = 4.774592
ac_tm = 5
30 30
[nikolay@myhost ~]$ ./b
in
ac/ab = 0.448340
ab_tm = 3618
ac_tm_mpfr = 1622.092704
ac_tm = 1622
0 0
out
ac/ab = 0.795765
ab_tm = 6
ac_tm_mpfr = 4.774592
ac_tm = 5
30 30
[nikolay@myhost ~]$ ./b
in
ac/ab = 0.448340
ab_tm = 18
ac_tm_mpfr = 8.070113
ac_tm = 8
0 0
out
ac/ab = 0.795765
ab_tm = 6
ac_tm_mpfr = 4.774592
ac_tm = 5
30 30
1-ая строка вывода: в какую сторону она пересекает.
2-ая: отношение длин АС к АВ
3-ая: Время (секунды) в точке А
4-ая: Расчетное время в точке С без округления (припомощи библиотеки MPFR)
5-ая: округленное до целого время в точки С
6-ая: я хотел прибавить время но потом столкнулся вот с это проблеммной и не дописал пока еще

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

Ввод данных происходит из файла.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2010, 08:53
Ответы с готовыми решениями:

Пропадает интернет - вроде он есть, а вроде его нет
Приветствую друзья. Собственно вчера все началось. Сижу в ФФ 28.0. Через какое-то время пропадает интернет. Сижу через вайфай роутер,...

HTML-форма, вроде просто, а вроде и нет
Уважаемые форумчане, помогите пожалуйста! Есть HTML-таблица с формой: |______|_A______|_B______| |_Вася_|_input_A_|_input_B_| ...

Непонятки с видеокартой-вроде и пашет, а вроде и нет
В общем такая штука-была у меня раньше старая карточка matrox millenium g550.и рещшил я ее обновить.Купил значится Saphire radeon 3450...

2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
30.05.2010, 13:23
greenjoltiy, Вы бы вместо этого километрового вывода саму программу показали. А так - какая-нибудь переменная не инициализируется...
0
0 / 0 / 2
Регистрация: 31.03.2010
Сообщений: 13
30.05.2010, 15:36  [ТС]
Лучший ответ Сообщение было отмечено greenjoltiy как решение

Решение

Что то я сглупил....

Добавлено через 4 минуты
Но и код достаточно здоровый.

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
void diftim(char *Ax, char *Ay, char *Bx, char *By, char *Cx, char *Cy) {
    ifstream in("points.txt");
    char *p;
    int i, j;
    double ab_tm;
    long ac_tm;
    struct tm t_a, t_b, *t_c;
    time_t ta, tb, tc;
    char *tmp, *axy, *bxy, *tm_a, *tm_b, ch;
    mpfr_t ax, ay, bx, by, cx, cy;
    mpfr_t res1, res2, res3;
    mpfr_t ab_len, ac_len;
    mpfr_t ab_ac;
    mpfr_init(res1);
    mpfr_init(res2);
    mpfr_init(res3);
    mpfr_init(ax);
    mpfr_init(ay);
    mpfr_init(bx);
    mpfr_init(by);
    mpfr_init(cx);
    mpfr_init(cy);
    mpfr_init(ab_len);
    mpfr_init(ac_len);
    mpfr_init(ab_ac);
 
    mpfr_set_str(ax, Ax, 10, GMP_RNDN);
    mpfr_set_str(ay, Ay, 10, GMP_RNDN);
    mpfr_set_str(bx, Bx, 10, GMP_RNDN);
    mpfr_set_str(by, By, 10, GMP_RNDN);
    mpfr_set_str(cx, Cx, 10, GMP_RNDN);
    mpfr_set_str(cy, Cy, 10, GMP_RNDN);
 
    mpfr_sub(res1, bx, ax, GMP_RNDN);
    mpfr_sub(res2, by, ay, GMP_RNDN);
    mpfr_pow_si(res1,res1,2,GMP_RNDN);
    mpfr_pow_si(res2,res2,2,GMP_RNDN);
    mpfr_add(res3, res1, res2, GMP_RNDN);
    mpfr_sqrt(ab_len, res3, GMP_RNDN);
    mpfr_clear(res1);
    mpfr_clear(res2);
    mpfr_clear(res3);
    mpfr_init(res1);
    mpfr_init(res2);
    mpfr_init(res3);
 
    mpfr_sub(res1, cx, ax, GMP_RNDN);
    mpfr_sub(res2, cy, ay, GMP_RNDN);
    mpfr_pow_si(res1,res1,2,GMP_RNDN);
    mpfr_pow_si(res2,res2,2,GMP_RNDN);
    mpfr_add(res3, res1, res2, GMP_RNDN);
    mpfr_sqrt(ac_len, res3, GMP_RNDN);
    mpfr_div(ab_ac, ac_len, ab_len, GMP_RNDN);
    mpfr_printf("ac/ab = %Rf\n", ab_ac);
 
    axy = new char[strlen(Ax)+strlen(Ay)+1];
    bxy = new char[strlen(Bx)+strlen(By)+1];
    tmp = new char[60];
    tm_a = new char[20];
    tm_b = new char[20];
    memset(tm_b, 0, 21);
    sprintf(axy, "%s %s", Ax, Ay);
    sprintf(bxy, "%s %s", Bx, By);
    while(!strstr(tmp, axy))
        in.getline(tmp, 60);
    for (i = 0; tmp[i] != ' '; i++);
    for (i++; tmp[i] != ' '; i++);
    for (i++, j = 0; tmp[i] != '\0'; j++, i++)
        tm_a[j] = tmp[i];
    strptime(tm_a, "%d.%m.%Y %H:%M:%S ", &t_a);
    in.getline(tmp, 60);
    for (i = 0; tmp[i] != ' '; i++);
    for (i++; tmp[i] != ' '; i++);
    for (i++, j = 0; tmp[i] != '\0'; j++, i++)
        tm_b[j] = tmp[i];
    strptime(tm_b, "%d.%m.%Y %H:%M:%S", &t_b);
    ta = mktime(&t_a);
    tb = mktime(&t_b);
    ab_tm = difftime(tb, ta);
    mpfr_clear(res1);
    mpfr_init(res1);
    cout << "ab_tm = " << ab_tm << endl;
    mpfr_mul_si(res1,ab_ac,ab_tm,GMP_RNDN);
    ac_tm = mpfr_get_si(res1,GMP_RNDN);
    mpfr_printf("ac_tm_mpfr = %Rf\n",res1);
    cout << "ac_tm = " << ac_tm << endl;
    tc = ta + ac_tm;
    cout << t_a.tm_sec << ' ';
    t_c = gmtime(&tc);
    cout << t_a.tm_sec << endl;
    delete[] axy;
    delete[] bxy;
    delete[] tmp;
    delete[] tm_a;
    delete[] tm_b;
    mpfr_clear(res1);
    mpfr_clear(res2);
    mpfr_clear(res3);
    mpfr_clear(ax);
    mpfr_clear(ay);
    mpfr_clear(bx);
    mpfr_clear(by);
    mpfr_clear(cx);
    mpfr_clear(cy);
    mpfr_clear(ab_len);
    mpfr_clear(ac_len);
    mpfr_clear(ab_ac);
    in.close();
Сопсна ф-ция которая считаетразницу во времени.

Добавлено через 1 час 45 минут
ща еще прогу по тестил. Как я понял косячит ф-ия
C++
1
2
    ta = mktime(&t_a);
    tb = mktime(&t_b);
либо

C++
1
2
    strptime(tm_a, "%d.%m.%Y %H:%M:%S ", &t_a);
    strptime(tm_b, "%d.%m.%Y %H:%M:%S", &t_b);
Добавлено через 3 минуты
Все-таки

C++
1
2
    ta = mktime(&t_a);
    tb = mktime(&t_b);
Добавлено через 8 минут
еще один вариант что
C++
1
ab_tm = difftime(tb, ta);
дает не верный результат
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2010, 15:36
Помогаю со студенческими работами здесь

Вроде база есть, а вроде её нет
Здравствуйте, загрузил сайт, загрузил базу. Картина получается вот такая - realt-plus.ru В скрипте подключения базы прописал нового...

Вроде переполнение, а вроде бы и нет
День добрый! Интересует, почему си не дает мне сделать следующую штуку. int a = 4999998848; cout &lt;&lt; a*2 &lt;&lt; endl; ...

Когда ставишь память в DIMM2, при этом приходится память переворачивать
Помогите мне. При добавление памяти в столкнулся с проблемой. Когда память стоит в DIMM1 (фото 1) всё работает хорошо. Когда ставишь эту...

Внешняя память PIC: как нарастить внутреннюю память данных?
Я только начал разбираться с ПИКами и пока не все понимаю. Мне нужно организовать систему сбора и обработки информации с газовых датчиков....

Dll на C++ кушает память, как правильно удалять и освобождать память?
Добрый день, совсем мало опыта в программировании на C++, помогите пожалуйста знатоки С++. Есть Dll, типа wrapper для библиотеки...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru