Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.01.2010
Сообщений: 50

Может ли быть причиной неверных вычислений ошибка приведения типов

10.04.2012, 17:55. Показов 1519. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! ребят помогите разобраться и решить ошибку. Имеется следующий код:

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
 static int Fact(int n)
        {
            int counter = 1; // результат
            for (int i = 1; i <= n; i++)
            {
                counter = counter * i; // подсчет факториала
            }
            return counter;
        }
        
        static void Main(string[] args)
        {
            int n, k;
            double p;
 
            Console.WriteLine("На званый обед приглашены 10 гостей. Хозяин решил как именно нужно рассадить гостей за стол и приготовил карточки с именами. С какой вероятностью хотя бы четверо из приглашенных сядут на выбранные хозяином места, если он забыл расставить карточки.");
 
            Console.Write("Сколько всего мест: ");
            n = int.Parse(Console.ReadLine());
 
            Console.Write("Количество гостей: ");
            k = int.Parse(Console.ReadLine());
 
 
            Console.WriteLine("Результат:");
            int a = Fact(n - k);
            int b = Fact(k);
            int c = Fact(n);
 
            p = Convert.ToDouble((a * b) / c);
 
            Console.WriteLine(p.ToString());      
            Console.ReadKey();
        }
В результат (переменная p) почему-то записывается 0. Думаю, что проблема в типах. Скажите, как моно решить данную проблемку?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2012, 17:55
Ответы с готовыми решениями:

Что может быть причиной тормозов в игре
Всем привет , хотелось бы найти помощи на хорошем сайте и вот заглянул сюда , в ПК я не разбираюсь ну может на уровне дилетанта) И вот...

Лагает компьютер.Что может быть причиной?
Всем привет. Прошу вашей помощи , т.к. я не понимаю в чём причина лагов Компьютера. Компьютер Зависает на несколько секунт (10-30с)...

Может ли быть причиной перегрева ноутбука сама Ubuntu?
Ребята подскажите, я с недавнего времени перескочил на ubuntu. Но появился один минус на ubuntu 12.10 мой ноутбук (Acer 5750g) стал...

5
 Аватар для DimanRu
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
10.04.2012, 18:12
Во - первых, зачем вот эта строка:
C#
1
p = Convert.ToDouble((a * b) / c);
А точнее, зачем тут Convert.ToDouble(); ?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.04.2012, 18:12
Цитата Сообщение от spayn Посмотреть сообщение
C#
1
p = Convert.ToDouble((a * b) / c);
Результат арифметических операций с целыми числами всегда будет целым числом.
Отсюда следует, что 2/3=0.
Вы сначала производите деление, а уже потом конвертируете в вещественное число.
Было 0, стало 0.0 - разницы не много.
Вместо этого вам нужно привести числа к вещественным до произведения арифметических операций. Для этого достаточно привести всего лишь один из операндов - остальные сами расширятся до нужных типов:
C#
1
p = (a * b) / (double)c;
1
0 / 0 / 0
Регистрация: 12.01.2010
Сообщений: 50
10.04.2012, 18:16  [ТС]
Спасибо больше за быстрый ответ!
0
 Аватар для Vermilion
200 / 168 / 38
Регистрация: 21.10.2011
Сообщений: 178
10.04.2012, 18:23
Добавлю, что если вы хотите считать факториал для больших значений N, то надо бы поправить функцию Fact для действия с числами, например, типа double (а то у int предел 2,147,483,647)
C#
1
2
3
4
5
6
7
8
 static double Fact(int n)
        {
            double counter = 1; // результат
            for (int i = 1; i <= n; i++)
                counter *= i; // подсчет факториала
 
            return counter;
        }
Ну и поправить где вызовы и расчет
C#
1
2
3
4
5
double a = Fact(n - k);
double b = Fact(k);
double c = Fact(n);
 
p = (a * b) / c;
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.04.2012, 18:38
Цитата Сообщение от Vermilion Посмотреть сообщение
типа double
Тогда уж long - те же 64 бита, только все в целую часть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.04.2012, 18:38
Помогаю со студенческими работами здесь

Что может быть причиной медленной работы компьютера
Есть комп, которому уже год 4 минимум (точнее не скажу). Комп начала очень сильно тупить при даже самых мелких действиях. Убрал с...

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

Накрылся 3й жесткий диск за год. Что может быть причиной?
На ноутбуке Toshiba Qosmio (3,5 года) в сумме меньше, чем за год, сначала накрылся внутренний жесткий диск Toshiba 500G. Накрылся не...

Может ли полное отсутствие охлаждения видеокарты быть причиной BSOD
В общем есть видяха, какая-то джифорс, валялась в коробке, решил запустить - стартонула, но при загрузке винды сразу же синий экран(что на...

Hp 1520 недопечатываетет край листа, что может быть причиной?
самый край листа, несколько миллиметров, неважно картинка или презентация


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru