0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 7

Неверно считается остаток дроби

21.04.2012, 20:33. Показов 3056. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код:

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
static void Main(string[] args)
        {
            double a, b, p, c, c1; string x = "";
 
            while (true)
            {
                Console.ForegroundColor = ConsoleColor.White;
                Console.Write("Всего боёв:  ");
                x = Console.ReadLine().ToLower();
                if (x == "end")
                    break;
                if (!double.TryParse(x, out b))
                {
                    Console.WriteLine("Error! Try again!");
                    continue;
                }
                Console.Write("Всего побед:  ");
                x = Console.ReadLine().ToLower();
                if (x == "end")
                    break;
                if (!double.TryParse(x, out a))
                {
                    Console.WriteLine("Error! Try again!");
                    continue;
                }
 
                c = a * 100 / b;
                [COLOR="Magenta"][B]c1 = (100 * a) % b;[/B][/COLOR]
                
 
                c = Convert.ToInt32(c);
                Console.WriteLine(String.Format("Текущий процент побед: " + c + "." [COLOR="magenta"]+ c1[/COLOR]));
                Console.WriteLine();
 
                Console.Write("Хотим % побед:  ");
                x = Console.ReadLine().ToLower();
                if (x == "end")
                    break;
                if (!double.TryParse(x, out p))
                {
                    Console.WriteLine("Error! Try again!");
                    continue;
                }
                                               
                p = 0.01*p - 0.0049;
 
                c = (a - p * b) / (p - 1);
 
                c = Convert.ToInt32(c);
 
                c++;
 
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine(String.Format("Осталось победить подряд: " + c + " раз"));
                Console.WriteLine();
            }
        }
Не могу понять, почему выражение c1 = a * 100 % b; даёт неверный результат при математическом вычислении????? Результат оказывается примерно на 15% больше того, что должно получаться....

Добавлено через 23 минуты
Например, если 55 разделить на 160, то вместо 0,34375 получается 0,6... о_0

Если вводить эти же числа через программу, например Число боёв 160, Число побед 55, то Процент побуд должен получиться 34,375. Но программа выдает 34,6
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2012, 20:33
Ответы с готовыми решениями:

Неверно считается интерполяция
Не могу понять почему не верно считает интерполяцию. В программе забиты три массива : mass, uz,yz. При вводе числа в textbox1, в tb2...

ListView, удаление элементов. Неверно считается количество элементов после удаления
ListView добавляю 5 элементов , добавление элементов происходит в таймере Добавляю mageList.Images.Add(image); ListViewItem lvi...

Неверно считается выражение
Проблема в том, что не верно считается значение выражения. Использую данные, которые даны в задании. Вроде всё написал верно. Скриншот...

12
32 / 32 / 1
Регистрация: 16.07.2009
Сообщений: 85
21.04.2012, 21:04
Math.Round
0
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 7
21.04.2012, 21:42  [ТС]
Цитата Сообщение от Enoa Посмотреть сообщение
При чём тут это? Мне наоборот округления не нужно, и в коде его нет.

Ну введите числа 15304 и 8018, например. Всё равно посчитает неправильно!!
0
62 / 62 / 15
Регистрация: 03.01.2012
Сообщений: 137
21.04.2012, 21:59
C#
1
2
3
4
5
6
 Console.Write("Всего боёв:  ");
                double n = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Колво побед");
                double m = Convert.ToDouble(Console.ReadLine());
                double procent = (m * 100) / n;
                Console.WriteLine(procent);
Так не проще считать? Тут при 160 и 55 показывает 34,375
0
32 / 32 / 1
Регистрация: 16.07.2009
Сообщений: 85
21.04.2012, 21:59
это строка лишняя

C#
1
c = Convert.ToInt32(c);
зачем переводить в int, если нужен дробный результат)
0
62 / 62 / 15
Регистрация: 03.01.2012
Сообщений: 137
21.04.2012, 22:16
Цитата Сообщение от sarTemd174 Посмотреть сообщение
C#
1
2
3
4
5
6
 Console.Write("Всего боёв:  ");
                double n = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("Колво побед");
                double m = Convert.ToDouble(Console.ReadLine());
                double procent = (m * 100) / n;
                Console.WriteLine(procent);
Так не проще считать? Тут при 160 и 55 показывает 34,375
или так
C#
1
2
double n = 160; double m = 55;
            Console.WriteLine("{0:#.###%}", m / n);
1
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 7
21.04.2012, 23:43  [ТС]
Цитата Сообщение от Enoa Посмотреть сообщение
это строка лишняя

C#
1
c = Convert.ToInt32(c);
зачем переводить в int, если нужен дробный результат)
В принципе да - это была лишняя строка, однако, если бы вы посмотрели еще более внимательно, то увидели бы, что эта переменная вычисляла только целую часть, без дробной; а с1 - сам дробный остаток.

Тем не менее, ответ на вопрос, почему же С# неверно вычисляет простое выражение "z = 100*x % y" так и не найден...

Добавлено через 27 минут
P.S. Для вывода ответа "Сколько надо боев" - неодходимо целое число, а не дробное. Так что, Enoa, всё здесь оправдано.


sarTemd174 - тебе спасибо за подсказку альтернативы
0
Эксперт .NET
 Аватар для kolorotur
17810 / 12961 / 3381
Регистрация: 17.09.2011
Сообщений: 21,250
22.04.2012, 11:12
Причем здесь C#? У вас же расчеты корявые.
На примере 160 и 55:
C#
1
2
3
4
5
6
7
8
9
a = 55;
b = 160;
c = a * 100 / b; // 55 * 100 / 160 = 34.375
c1 = (100 * a) % b; // (100 * 55) % 160 = 60
p = 100; // Хотим 100% побед.
p = 0.01*p - 0.0049; // 0.01 * 100 - 0.0049 = 0.9951
c = (a - p * b) / (p - 1); // (55 - 0.9951 * 160) / (0.9951 - 1) = -104.216 / -0.0049 = 21268.5714
c = Convert.ToInt32(c); // 21269
c++; // 21270
В общем, разбирайтесь с формулами.
0
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 7
22.04.2012, 14:23  [ТС]
kolorotur
Не понял... При чём тут корявые расчёты вообще? С формулами математически всё в порядке.

Объясните мне, почему выражение

с1 = 100*55%160

даёт результатом 60, а не 375 ?????
0
Эксперт .NET
 Аватар для kolorotur
17810 / 12961 / 3381
Регистрация: 17.09.2011
Сообщений: 21,250
22.04.2012, 17:02
Цитата Сообщение от ukrainesov Посмотреть сообщение
При чём тут корявые расчёты вообще?
При том, что математические вычисления, производимые программой - верны.
Это показано в комментариях к каждой строчке.
Если при верных вычислениях получается не тот результат, который хотелось бы, значит что-то не так в выбранных формулах.

Цитата Сообщение от ukrainesov Посмотреть сообщение
С формулами математически всё в порядке.
С вычислениями тоже.
Значит, порядок во всем и тема эта здесь не нужна

Цитата Сообщение от ukrainesov Посмотреть сообщение
бъясните мне, почему выражение
с1 = 100*55%160
даёт результатом 60, а не 375 ?????
Давайте посчитаем:
100 * 55 = 5500
5500 / 160 = 34 и 60 в остатке (160 * 34 + 60 = 5440 + 60 = 5500)

На всякий случай: оператор % в шарпе - это нахождение остатка от деления.
1
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 7
23.04.2012, 20:06  [ТС]
kolorotur, спасибо, теперь всё понятно. Это просто я не верно понял смысл оператора %, считая, что он показывает то, что стоит после запятой, а не то, что остается в остатке дроби...
0
Эксперт .NET
 Аватар для kolorotur
17810 / 12961 / 3381
Регистрация: 17.09.2011
Сообщений: 21,250
23.04.2012, 20:13
ukrainesov, если вам нужно достать десятичную часть, то находите остаток от деления на единицу:
C#
1
2
double pi = 3.14;
double dec = pi % 1; // 0.14
2
0 / 0 / 0
Регистрация: 21.04.2012
Сообщений: 7
24.04.2012, 17:05  [ТС]
kolorotur, интересная комбинация. Спасибо, буду знать теперь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2012, 17:05
Помогаю со студенческими работами здесь

Неверно считается логарифм
c = x*x - 4 * x - 5; if (x < 2) { if (pow(c , 1.0 / 3.0) > 0) { y = log(c); cout << "y=" << y << " при x=" << x...

Почему неверно считается интеграл?
Собственно есть дифференциальное уравнение 4-го порядка вида: y'''' = -24 Далее я его решаю через интегралы, т.е. для y''' = \int...

Неверно считается среднее арифметическое
#include <stdio.h> #include <string.h> int main() { float b;b=0; float c;c=0; int i=0; struct {

Неверно считается результат выражения
В общем, такое задание (Скрин приложил). Написал программу. Использовал Dev-C++. Под ANSI C #include <stdio.h> #include...

Неверно считается значение выражения
Проверьте пожалуйста правильность моей программы,просто меня немного смущает,что при любых значения выводится 0 #include <conio.h> ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru