Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 46

Деление не работает как надо

26.04.2018, 19:22. Показов 6826. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я конечно не мастер но не пойму. У меня почему то не происходит деление. чтобы я не делал d присваивается 0 хз почему.
Код

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
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include "Math.h"
 
using namespace std;
int NOD(int a, int b)
{
    while (a > 0 && b > 0)
        if (a > b)
            a %= b;
        else
            b %= a;
    return a + b;
}
int main()
{
    double x0 = 1 / sqrt(2);
    int k = 1;
    int p,q;
    p = 1;
    q = 1;
    cout << "(" << p << "," << q << ")";
 
    
    double Eps = 0.000001;
    double  d = p / q;
    cout << d;
    while (d >= 0.000001)
    {
        
        while ((d >= 0.000001)&&(p<q))
        {
            int NOD1 = NOD(p, q);
            if ((NOD1 == 1 )&& (x0 - Eps >d) && (d> x0 + Eps))
                cout << "(" << p << "," << q << ")";
            p++;
        }
        
        p = 1;
        
        q = q+1;
        d = p / q; // Вот в этом моменте происходит какая то дичь ( в отладчике пишет что d = 0.00000...
        
    }
    
    system("pause");
    return 0;
}


p.s. Пробовал без d та же хрень
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.04.2018, 19:22
Ответы с готовыми решениями:

Не работает как надо
В таблице ADOTList есть два поля: &quot;Сушилка&quot; и &quot;Код&quot;. Так вот. Нужно чтобы в DBEdit2 формы FRezultat отображалось поле &quot;Сушилка&quot;...

Маршрутизатор не работает как надо
Проблема такая. У меня стоит маршрутизатор Tp-link на стационарном компе, интернет МТС, до какого-то времени связь была нормальной,...

Работает не так как надо
я ввожу ааа - выводит qqq а должен выводить qaz что нужно поменять? хотя бы на примере первого цикла void tras::EncButtonClick()...

10
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
26.04.2018, 19:26
У вас переменные p и q целочисленные, соответственно выполняется целочисленное деление. Если q > p, то p / q == 0.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
26.04.2018, 19:28
Лучший ответ Сообщение было отмечено WudiDoo как решение

Решение

Цитата Сообщение от WudiDoo Посмотреть сообщение
double d = p / q;
Цитата Сообщение от WudiDoo Посмотреть сообщение
int p,q;
Цитата Сообщение от WudiDoo Посмотреть сообщение
тобы я не делал d присваивается 0
потому, что целочисленное деление
нужно p q приводить к double
C++
1
double d = (double)p / (double)q;
1
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
26.04.2018, 19:33
Теперь чтобы было понятно..

C++
1
2
3
4
5
double ans;
int a, b;
a=5; b=3;
ans = a / b; // 1
ans = (double) a / (double) b; // 1.6666667
Теперь подробно. Сначала происходит деление. Так как оба числа int - следовательно и результат деления будет int. Далее идет присваивание к типу double. Int (1) преобразуется в double (1.000000). Для того, чтобы исправить это вы первым действием должны выполнить преобразование int в double, а уже затем делить. Пример выше. Тогда double делится на double и присваивается double'у

UPD:

ValeryS - всегда на шаг впереди
1
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 46
26.04.2018, 19:52  [ТС]
Слушай а есть какой то детект чисел после запятой? типо надо чтобы больше 10 чисел после запятой не было не считая нулей
0
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
26.04.2018, 20:03
WudiDoo, вам нужно при вводе в консоль это делать или уже непосредственно у переменной. В любом случае можете написать функцию, которая умножает на 10^(сколько знаков после запятой у double (сами найдете)) данное для проверки число (не забудьте позаботится о том, чтобы значение переменной не вышло за рамки типа, убрав целую часть). Далее вы преобразуете в int и смотрите процент от деления на 10, 100 и т.д. до значения, при котором 10^10 может быть в double
0
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 46
26.04.2018, 20:05  [ТС]
ValeryS, Слушай а есть какой то детект чисел после запятой? типо надо чтобы больше 10 чисел после запятой не было не считая нулей

Добавлено через 2 минуты
mvngr, ппц ниче не понял после умножает на 10)
0
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
26.04.2018, 20:12
WudiDoo,
C++
1
2
3
   double a;
   cin >> a; //1.123456789
   cout << a; //1.123456
У меня Qt всегда выдает 6 знаков после запятой, хотя в документациях вроде как написано, что double в плюсах должен выдавать 15 знаков. Так что я тут тебе не помошник
0
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 46
26.04.2018, 20:24  [ТС]
mvngr,
Кликните здесь для просмотра всего текста
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
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include "Math.h"
 
using namespace std;
int NOD(int a, int b)
{
    while (a > 0 && b > 0)
        if (a > b)
            a %= b;
        else
            b %= a;
    return a + b;
}
int ostatok(double a)
{
    a = a* 1000000000000;
    a = (int)a % 10;
    return a;
}
 
int main()
{
    double x0 = 0.50;
    int k = 1;
    int p,q;
    p = 1;
    q = 1;
    cout << "(" << p << "," << q << ")";
    double Eps = 0.10;
    double  d = (double)p / (double)q;
    while (ostatok(d)>0)
    {
        while ((ostatok(d)>0) && (p<q))
        {
            int NOD1 = NOD(p, q);
            if ((NOD1 == 1 )&& (x0 - Eps <d) && (d< x0 + Eps))
                cout << "(" << p << "," << q << ")";
            p++;
            d = (double)p / (double)q;
 
        }
        p = 1;
        q = q+1;
        d = (double)p / (double)q;
        
    }
    
    system("pause");
    return 0;
}

я чуток изменил что не так ?))))
кстати мне вывод не нужен
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
26.04.2018, 20:25
используй setprecision
подробности здесь
http://www.interface.ru/home.asp?artId=29442
1
0 / 0 / 0
Регистрация: 20.05.2015
Сообщений: 46
26.04.2018, 20:32  [ТС]
ValeryS, что то для сout бесполезное вроде как

Добавлено через 2 минуты
все сделал расходимся))). знаки поменять забыл)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2018, 20:32
Помогаю со студенческими работами здесь

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

Работает ли сборка как надо
Здравствуйте! Имеется бюджетная сборка, однако, складывается впечатление, что она не выдает даже то, что может. При включении...

Шаблонизатор на работает как надо
Добрый день всем форумчанам, сразу хочу сказать, что php я изучаю совсем не надо. По поводу велосипеда, хочется для практики по...

не работает dvd как надо
компу пол года ставляю пустой dvd комп зависает вытаскиваеш его сразу комп продолжает работать. если вставить болванку с даными то всё...

Json не работает как надо
Очень нужна ваша помощь, уже час сижу не могу исправить( if (!$pay): $text = 'Оплата еще не дошла до нас, попробуйте еще раз.'; ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru