Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30

Не могу понять, куда пропадают сотые

17.11.2017, 23:37. Показов 1371. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include<iostream> 
#include<iomanip> 
#include <stdio.h>
#include  <math.h>
class money
{
public:
    money(bool pr = true);
    void display();
    money add(money s1);
    money sub(money s1);
    double div(money s1);
    money mulreal(double s1);
    money divreal(double s1);
    int equal(money s1);
private:
    unsigned long int x;
    int y;
};
 
int main(int argc, char* argv[])
{
    //setlocale(LC_ALL, "Russian");
    money x1(true), y1(true), z(false);
    double rez, koef;
    int rez1;
    scanf("%lf", &koef);
    z = x1.add(y1); //Сумма
    z.display();
    z = x1.sub(y1); //Разность
    z.display();
    rez = x1.div(y1); //Деление сумм
    printf("%10.6lf\n", rez);
    z = x1.divreal(koef); //Деление первой суммы на дробь
    z.display();
    z = y1.divreal(koef); //Деление второй суммы на дробь
    z.display();
    z = x1.mulreal(koef); //Уножение первой суммы на дробь
    z.display();
    z = y1.mulreal(koef); //Умножение второй суммы на дробь
    z.display();
    rez1 = x1.equal(y1);
    if (rez1 == 0) printf("equal \n");
    if (rez1 == 1) printf("greate \n");
    if (rez1 == -1) printf("less \n");
    int i, n;
    scanf("%ld", &n);
    money *mas;
    //mas = new money[n];
    for (i = 0; i<n; i = i + 1)
    {
 
        mas = new money[2];
        scanf("%lf", &koef);
        z = mas[0].add(mas[1]);
        z.display();
        z = mas[0].sub(mas[1]);
        z.display();
        rez = mas[0].div(mas[1]);
        printf("%10.6lf\n", rez);
        z = mas[0].divreal(koef); 
        z.display();
        z = mas[1].divreal(koef);
        z.display();
        z = mas[0].mulreal(koef);
        z.display();
        z = mas[1].mulreal(koef);
        z.display();
        rez1 = x1.equal(y1);
        rez1 = mas[0].equal(mas[1]);
        if (rez1 == 0) printf("equal \n");
        if (rez1 == 1) printf("greate \n");
        if (rez1 == -1) printf("less \n");
    }
    system("PAUSE");
    return 0;
}
money::money(bool pr)
{
    double prom;
    if (pr)
    {
        scanf("%lf", &prom); x = (int)prom; y = (int)((prom - x) * 100 + 0.5);
    }
    else
    {
        x = 0; y = 0;
    };
    //printf("x= %9d , y= %2d   ЧТО ТЫ ТАКОЕ\n",x,y);
};
void money::display()
{
    printf("%10d,%02d   \n", x, y);
};
money money::add(money s1)
{
    money temp(false);
    temp.x = x + s1.x;
    temp.y = y + s1.y;
    if (temp.y>100) { while (temp.y>100) { temp.y = temp.y - 100; temp.x = temp.x + 1; } };
    return temp;
};
money money::sub(money s1)
{
    money temp(false);
    long int prom1;
    if (x<s1.x) { temp.x = -x + s1.x; temp.y = -y + s1.y; };
    if (x>s1.x) { temp.x = x - s1.x;  temp.y = y - s1.y; };
    if (x == s1.x) { temp.x = 0; temp.y = abs(y - temp.y); };
    //printf(" sub %10d  %5d \n",temp.x,temp.y);
    if (temp.y<0) {
        //printf("yes \n");
        while (temp.y<0) { temp.y = temp.y + 100; temp.x = temp.x - 1; }
    };
    //printf("%10d  %5d\n",temp.x,temp.y);
    return temp;
};
double money::div(money s1)
{
    double temp; double prom1, prom2;
    prom1 = x + y / 100.0;
    prom2 = s1.x + s1.y / 100.0;
    temp = prom1 / prom2;
    //printf("%10.6lf\n",temp);
    return temp;
};
money money::mulreal(double s1)
{
    money temp(false);
    int del;
    double prom;
    prom = x + y / 100.00;
    prom = prom*s1;
    temp.x = prom;
    temp.y = ((prom - temp.x) * 100 +0.5);
    return temp;
};
money money::divreal(double s1)
{
    money temp(false);
    int del;
    double prom;
    prom = x + y / 100.00;
    prom = prom / s1;
    temp.x = (int)prom;
    temp.y = (int)((prom - temp.x) * 100 + 0.5);
    return temp;
};
int money::equal(money s1)
{
    int tmp;
    long int temp;
    temp = x * 100 - s1.y - s1.x * 100 + y;
    if (temp<0) tmp = -1;
    if (temp == 0) tmp = 0;
    if (temp>0) tmp = 1;
    return tmp;
};
Имеется такой код. Не могу понять, куда пропадают сотые доли при делении и умножении в divreal и mulreal. При чем они пропадают как-то рандомно, в некоторых вычислениях все хорошо, а в некоторых не хватает... Округление не помогает никак вообще.
Миниатюры
Не могу понять, куда пропадают сотые  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2017, 23:37
Ответы с готовыми решениями:

не могу понять что случилось с пк , пропадают аккаунты,перезагружается сам по себе
Добрый вечер , форумчане. Я к вам с таким вопросом: Купил пару месяцев пк с рук, все было нормально. Месяц спустя компьютер начал...

Куда подсоединить винчестер - не могу понять
Разобрал комп пару месяцев назад, сейчас понадобился - стал собирать, и не могу понять, куда втыкать провод от винчестера. Ситуация...

Не могу понять, куда делась память на SSD
Не могу понять, куда делась память на SSD. Сегдня произошло увеличение занятого объёма памяти. Я программировал, некорректно выполнил...

32
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30
18.11.2017, 11:34  [ТС]
Студворк — интернет-сервис помощи студентам
Вот задание
Миниатюры
Не могу понять, куда пропадают сотые  
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30
18.11.2017, 11:37  [ТС]
А здесь примеры тестов на сайте.
Миниатюры
Не могу понять, куда пропадают сотые  
Вложения
Тип файла: txt Тест 2.txt (869 байт, 2 просмотров)
0
174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719
18.11.2017, 11:39
xansi710, где класс LongLong вашем коде?
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30
18.11.2017, 11:40  [ТС]
Да это не суть важно, если честно. Прога не из-за этого ругается) он типа реализован по-другому, через x и y(целая и дробная части)
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
18.11.2017, 11:41
Цитата Сообщение от xansi710 Посмотреть сообщение
x = (int)prom; y = (int)((prom - x) * 100 + 0.5);
что будет если ввести 0.999?
чему будет равен y?а x?
Цитата Сообщение от xansi710 Посмотреть сообщение
unsigned long int x;
int y;
почему целая часть беззнаковая а дробная знаковая?
0
18.11.2017, 11:45

Не по теме:

Цитата Сообщение от xansi710 Посмотреть сообщение
а это не суть важно, если честно. Прога не из-за этого ругается) он типа реализован по-другому, через x и y(целая и дробная части)
Ага, вот у меня ору будет, если тест на сайте тупо считывает код на наличие класса LongLong. Мало ли что там профессора напридумывать могли):D
Просто создание класса потребует нескольких дней и там используются очень интересные алгоритмы, которые вас должны будут чему-то научить...

0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30
18.11.2017, 11:57  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от xansi710
unsigned long int x;
int y;
почему целая часть беззнаковая а дробная знаковая?
это я исправил у себя уже, тут чуть старая версия кода.
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от xansi710
x = (int)prom; y = (int)((prom - x) * 100 + 0.5);
что будет если ввести 0.999?
чему будет равен y?а x?
код не идеальный, не спорю, но мне просто надо сдать, если честно

Добавлено через 1 минуту
Цитата Сообщение от SlavaSokolov Посмотреть сообщение
Не по теме:
Сообщение от xansi710
а это не суть важно, если честно. Прога не из-за этого ругается) он типа реализован по-другому, через x и y(целая и дробная части)
Ага, вот у меня ору будет, если тест на сайте тупо считывает код на наличие класса LongLong. Мало ли что там профессора напридумывать могли)
я проверял через другой код (переделал у друга), с классом Long Long, но проблема с сотыми осталась, замена как сейчас с float не помогла там

Добавлено через 4 минуты
Цитата Сообщение от SlavaSokolov Посмотреть сообщение
Просто создание класса потребует нескольких дней и там используются очень интересные алгоритмы, которые вас должны будут чему-то научить...
Несколько дней, вот вот, это универ, преподу вобще дела нет ни до чего, а реализацию этого класса я видел, ужасная просто (для меня сложная из кучи строк кода)
По аналогии как у друга я сделал для себя
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
class LongLong {
public:
    int digit1, digit2, digit3, C1, C2, C3;
    double intpart1, intpart2, intpart3;
    long int intpart11, intpart21, intpart31;
    long int intpart12, intpart22, intpart13;
    void test();
    void category(long int ip, int dgt, long int &ip1, long int &ip2, int &c, int &dgtc);
};
void LongLong::category(long int ip, int dgt, long int &ip1, long int &ip2, int &c, int &dgtc) {
    ip1 = ip / dgt;
    if (ip1 > 0) {
        ip2 = abs(int(ip)) % dgt;
        c = 1;
    }
    else {
        ip2 = abs(int(ip)) % dgt;
        c = -1;
    }
    dgtc = dgt;
}
void LongLong::test() {
    if (abs(intpart1) / 1000 > 1) category(intpart1, 1000, intpart11, intpart12, C1, digit1);
    else if (abs(intpart1) / 100 > 1) category(intpart1, 100, intpart11, intpart12, C1, digit1);
    else if (abs(intpart1) / 10 > 1) category(intpart1, 10, intpart11, intpart12, C1, digit1);
    else {
        intpart11 = intpart1;
        intpart12 = 0;
        C1 = 0;
        digit1 = 1;
    }
    if (abs(intpart2) / 1000 > 1) category(intpart2, 1000, intpart21, intpart22, C2, digit2);
    else if (abs(intpart2) / 100 > 1) category(intpart2, 100, intpart21, intpart22, C2, digit2);
    else if (abs(intpart2) / 10 > 1) category(intpart2, 10, intpart21, intpart22, C2, digit2);
    else {
        intpart21 = intpart2;
        intpart22 = 0;
        C2 = 0;
        digit2 = 1;
    }
    //Тестим
    if (abs(intpart3) / 1000 > 1) category(intpart3, 1000, intpart31, intpart13, C3, digit3);
    else if (abs(intpart3) / 100 > 1) category(intpart3, 100, intpart31, intpart13, C3, digit3);
    else if (abs(intpart3) / 10 > 1) category(intpart3, 10, intpart31, intpart13, C3, digit3);
    else {
        intpart31 = intpart3;
        intpart13 = 0;
        C3 = 0;
        digit3 = 1;
    }
}
Добавлено через 3 минуты
Просто все упирается в сотые доли, которые не очень работают с float и double. С ними бы разобраться как-нибудь и достаточно бы было мне.

Добавлено через 1 минуту
SlavaSokolov, ValeryS, есть какой-нибудь способ разобраться просто с типом данных, чтобы работало на оба теста?
0
174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719
18.11.2017, 12:13
Зачем нужна 130 строка?
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30
18.11.2017, 12:20  [ТС]
SlavaSokolov, ни за чем, писал, да забыл убрать, операции делал(тестил версии разные), передумал потом, удалить забыл
0
174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719
18.11.2017, 12:33
xansi710, я тут проверяю mulreal и divreal, так они же работают правильно?
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30
18.11.2017, 12:34  [ТС]
SlavaSokolov, как бы по алгоритму да, но они выводят ответ чуть-чуть другой(сотые оличаются)
0
174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719
18.11.2017, 12:40
Дайте мне множитель и ценность моенты, которые дают неверное значение.
1
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 30
18.11.2017, 12:58  [ТС]
Я думаю, стоит закрыть тему. Я дописал "грязный код", все прокатило. Задача зачтена. И все были правы, код Админа "кривой", не знаю, почему только по нему все проверялось... и никто не захотел прислушаться... они правы и точка. Всем большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2017, 12:58

Не могу понять, куда уходить часть оперативной памяти
Вот скрины, нужна помощь.

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

Подскажите как пользоваться getch(), не могу понять куда вписывать
Пожалуйста подскажите как пользоваться функцией типа char getch(). Пытаюсь написать Hello world ! но программа сразу закрывается(я знаю...

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

Никак не могу понять, куда именно впихивать сам исполняемый кусок, короче, что у меня тут не так? Пожалуйста, подсобите!
from tkinter import * import tkinter.messagebox as box window = Tk() window.title('Расчет индекса массы тела') #куда впихать...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru