Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/121: Рейтинг темы: голосов - 121, средняя оценка - 4.85
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508

Деление двух чисел

05.04.2015, 10:17. Показов 25445. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
составить программу делится ли одно число на другое без остатка. Я составил, программа к рассмотрению:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "windows.h"
#include <math.h>
#include <iostream>
#include <conio.h>
using namespace std; // чтобы работали cout & cin
void main()
{   
    setlocale(LC_ALL, "Russian"); // русский язык на русском 
    int a, b;
    cout << "Введите два числа" << endl;
    cin >> a >> b;
    if (a%b != 0) {
        cout << "Делится с остатка" << endl;
        cout << "Остаток к рассмотрению:";
        cout << a%b << endl;
    }
    else
        cout << "Делится без остатком" << endl;
    system("pause");// чтоб консоль не закрылась сразу
    getch();
}
в строке 15. cout << a%b << endl; - я хочу вывести остаток для наглядности но он не выводит остаток. появляется число а.

Добавлено через 1 минуту
вот например ввожу 12 и 13
консоль:
делится с остатком
остаток к рассмотрению: 12
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2015, 10:17
Ответы с готовыми решениями:

Сложение/деление двух длинных чисел (длиной 1024 бита)
Всем привет! Есть две вот такие задачи: 1. используя вставку кода в программу на С++, составить программу для сложения 2-х длинных...

Длинная арифметика: деление с остатком двух чисел, находящихся в двусвязном списке
Доброго времени суток. Подскажите, как реализовать деление с остатком двух чисел, находящихся в двусвязном списке, узлы которого - цифры....

Рекурсия: сложение, вычитание, деление и вычисление остатка от деления двух целых чисел
Написать программу для реализации рекурсивных функций сложения, вычитания, деления и вычисления остатка от деления двух целых чисел. ...

33
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 10:24
MuslimPalit, На мой взгляд, программа работает верно, остаток от деления числа 12 на число 13 - равен числу 12. Какой ответ Вы планировали получить в таком случае?
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 10:27  [ТС]
шас

Добавлено через 57 секунд
ведь 12/13=0,92307692
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 10:29
Лучший ответ Сообщение было отмечено MuslimPalit как решение

Решение

Исправил в Вашем коде некоторые элементы, которые на мой взгляд можно было улучшить:
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
#include <cmath>
#include <iostream>
 
using std::cout;
using std::cin;
 
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
 
int GetIntFromUser() {
  int value = 0;
  cin >> value;
  return value;
}
 
int main() {
  SetRussianLocale();
  cout << "Введите два числа\n";
  int a = GetIntFromUser();
  int b = GetIntFromUser();
  int remainder_of_division = a % b;
  if (remainder_of_division != 0) {
    cout << "Делится с остатком\n";
    cout << "Остаток к рассмотрению:";
    cout << remainder_of_division << '\n';
  } else {
    cout << "Делится без остатка\n";
  }
}
Пруф работоспособности:
http://ideone.com/Xrxeg8
1
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 10:32  [ТС]
Melg, улучшить ты запутал меня

Добавлено через 20 секунд
я догнал насчет остатка я тупанул

Добавлено через 44 секунды
ты этой программой убил меня без ножа
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 10:36
MuslimPalit,
ведь 12/13=0,92307692
12 - делимое, 13 - делитель, 0,92... - полное частное. В указанной Вами операции нет остатка от деления. Советую Вам ознакомиться с https://ru.wikipedia.org/wiki/... 0%BE%D0%BC .

Добавлено через 53 секунды
MuslimPalit,
ты этой программой убил меня без ножа
Что именно Вам не понятно? Я могу подробнее объяснить произведенные изменения если хотите.
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 10:42  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{   
    setlocale(LC_ALL, "Russian");
    int a, b;
    cout << "Введите два числа" << endl;
    cin >> a >> b;
    int n = a%b;
    if (n != 0) {
        cout << "Делится с остатком" << endl;
        cout << "Деление к рассмотрению:";
        cout << n << endl;
    }
    else
        cout << "Делится без остатка" << endl;
    getch();
}
разве это не легче вариант чем твой

Добавлено через 2 минуты
непонятно зачем
C++
1
2
using std::cout;
using std::cin;
если можно
C++
1
using namespace std;
Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
 
int GetIntFromUser() {
  int value = 0;
  cin >> value;
  return value;
}
я думаю это вообще зря, зачем было так усложнять все объясни
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 10:49
MuslimPalit, Смотря что подразумевать по лёгкостью. (кстати тут есть замечательные теги для выделения кода, достаточно нажать на кнопку с символом C++ ). Я убрал из Вашей версии не кроссплатформенный код, выделил в отдельные функции получение числа от пользователя и установку русской локали. Поскольку эти операции на самом деле являются деталью реализации протокола взаимодействия с пользователем. В принципе, можно было и вывод сообщений на экран вынести в отдельную функцию. Кроме того - результат операции a%b выделил в отдельную переменную с характерным названием, и повторно её использовал. Добавил явное указание второй области видимости у else. Наконец заменил вызов манипулятора endl на явное указание символа переноса строки. Если необходимо, я могу объяснить какие преимущества несет такой вариант.

Добавлено через 4 минуты
MuslimPalit, Нужно приучать себя к мысли о том, что using namespace std; - плохая практика. Я указал более конкретизировано те имена, которые мне потребовались из пространства имен std. SetRussianLocale - скрывает детали того, как именно реализована локализация в Вашей программе. GetIntFromUser Скрывает протокол взаимодействия с пользователем, кроме того явно регламентирует начальное значение для переменной, наконец дает описательное имя для действия и избавляет программу от повторяющегося кода.
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 10:51  [ТС]
ну давай, заинтриговал

Добавлено через 1 минуту
Melg, GetIntFromUser
вот это точно повторяться не будет
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 10:51
MuslimPalit, Выделение различных ответственностей в программе не является её усложнением. Да для программы в 10-20 строк кода это может показаться избыточным, но с точки зрения обучения хорошим практикам, на мой взгляд, является обязательным. В противном случае программы с бОльшим числом строк кода будут содержать такие-же приемы "плоского" программирования, без выделения иерархий и делегирования, что в конечном счете приведет к необходимости либо глубокого рефакторинга, либо переписывания функциональности с нуля.
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 11:01  [ТС]
ну вот это
C++
1
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
то же самое что и это
C++
1
 setlocale(LC_ALL, "Russian");
Добавлено через 2 минуты
мда вот эти слова заставляют жалеть что изучаю программирование -
"либо глубокого рефакторинга, либо переписывания функциональности с нуля."

Добавлено через 3 минуты
т.е. как я понял твой перевод на вывод русского языка выполняется в определенных областях где ты указываешь (это же блоки от {...})

Добавлено через 2 минуты
мое непонимание этой программы как легкой связано этим кодом
C++
1
2
3
4
5
int GetIntFromUser() {
  int value = 0;
  cin >> value;
  return value;
}
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 11:03
MuslimPalit, Не соглашусь,
C++
1
 void SetRussianLocale()
- то, что мы делаем - глагол, характеризующий действие. Мы выставляем русскую локализацию.
C++
1
setlocale(LC_ALL, "Russian");
- то как мы это делаем, деталь реализации. Мы делаем это, вызывая функцию из стандартной библиотеки Си, с аргументами LC_ALL и "Russian".

Добавлено через 1 минуту
MuslimPalit,
мое непонимание этой программы как легкой связано этим кодом
Какой у Вас критерий лёгкости программы?
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 11:04  [ТС]
Melg, твоя локализация это больше "уровень грамоты"
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 11:07
MuslimPalit, Смотря что вы имеете ввиду под "уровнем грамоты". Просто реши Вы реализовать графический интерфейс с использованием Qt. Вполне вероятно, вы бы использовали средства этой библиотеки. Как, например, отмечалось Как в Qt задать локаль типа "rus-rus" ? - тут. А данная информация в общем случае должна быть скрыта от глаз программиста, который читает Ваш код, и которого в данный момент не заботит, как именно была реализована эта функциональность.
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 11:09  [ТС]
Melg, я только взялся за программирование в этот семестр, поэтому для меня критерий легкости это простота, быстрый набор, и как бы минимализация

Добавлено через 2 минуты
Melg, хорошо насчет локалки под рассмотрение беру надо будет почитать далее к функции
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 11:19
MuslimPalit, Не любая минимализация одинаково полезна. В общем случае - следует минимализировать сложность программы, скрывая детали реализации за функциями/объектами классов/интерфейсами с характерными именами. При этом получаемый код может физически состоять из большего числа строк, но чтобы разобраться высокоуровнево в том, что делает программа, не потребуется читать их все. Это осуществляется путем разбиения задачи на подзадачи и введения иерархии.

Что мы хотим добиться от программы?
Программа должна продемонстрировать пользователю делится ли число нацело на другое число
Как мы этого можем достигнуть:
1) Получить делитель и делимое от пользователя
2) Оценить делится ли число нацело
3) Продемонстрировать пользователю результат

Как мы можем получить делитель и делимое от пользователя?
1.1) Мы можем попросить пользователя ввести число
1.2) Мы можем получить введенное пользователем число
1.3) Мы можем сохранить полученное число

Как можно попросить пользователя ввести число?
1.1.1) Можно вывести строку с сообщением просьбы через стандартный поток вывода, который отобразит сообщение в консоли.

(А можно продемонстрировать строку с сообщением в виде всплывающего окна с полем)
(А можно послать с сервера запрос на клиент через протокол TCP/IP на введение в меню значения) - чувствуете?
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 11:30  [ТС]
я чувствую мне нужно усложнять написание программы чтобы понимать дальше зачем все усложнял

Добавлено через 2 минуты
я уже плыву. напиши о функции которой ввел как ее использовать этот момент не понятен дискуссию продолжим позже спасибо

Добавлено через 24 секунды
int GetIntFromUser() {
int value = 0;
cin >> value;
return value;
}
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
05.04.2015, 11:34
MuslimPalit, К вопросу о повторяющемся коде,
C++
1
cin >> a >> b;
это повторяющийся код, представьте себе, что Вам преподаватель (и кстати говоря так часто делают) (или Вы сами, или заказчик - не важно) - усложнил задачу, если пользователь введет в консоль вместо числа - любые символы (строку например)- Вам необходимо уведомить пользователя о том, что он дурак, и попросить его ввести число заново, до тех пор, пока он не введет число. И так и для числителя и для знаменателя. Попробуйте подумать, как изменился бы ваш main - в таком случае? (Для решения этой задачи нужен цикл, и знание о том, как определять ошибку чтения из потока ввода, например, как предлагается тут http://www.cplusplus.com/forum/beginner/76374/ или тут http://stackoverflow.com/quest... an-integer) И после того, как Вы реализуете подобное решение, подумайте, а как изменится main - в случае, если получение данных от пользователя скрыто за функцией, как я предлагал.

Добавлено через 1 минуту
MuslimPalit,
я уже плыву. напиши о функции которой ввел как ее использовать этот момент не понятен дискуссию продолжим позже спасибо
Пример её использования:
C++
1
  int a = GetIntFromUser();
0
 Аватар для MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
05.04.2015, 19:20  [ТС]
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
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main()
{
   int a,b,c,d;
   cout << "Vvedite 3-eh znachnoe chislo: ";
   cin >> a;
   while(a<100||a>=1000)
   // проверка,введено ли 3ех значное число,если введено 3ёх значное число,
   // цикл пропускается
   {
   cout << "Neverni vvod,vvedite zanovo 3-eh znachnoe chislo:";
   cin >> a;
   }
   b=a/100;
   c=(a/10)%10;
   d=a%10;
   if(b*c*d<100&&b*c*d>=10)
     cout << "Proizvedenie cifr chisla " << a << " - yavlyaetsya 2-yh znachnim chislom";
   else
     cout << "Proizvedenie cifr chisla " << a << " - ne yavlyaetsya 2-yh znachnim chislom";
   cout << endl;
   system("pause");
   return 0;
}
Добавлено через 45 секунд
вот например его постараюсь поменять хоть и не особо понял основную идею функции

Добавлено через 59 секунд
Melg, ты оценишь после того как сделаю

Добавлено через 1 минуту
Melg, еще один вопрос даже не заметил ))
а зачем
C++
1
#include <cmath>
Добавлено через 10 минут
еще кое что минус твоей программы. Она закрывает консоль после введения чисел )) ошибочку допустили сеньере
какую библиотеку использовать

Добавлено через 28 минут
вот моя заготовка только сразу говорю ошибочка, ты заметишь ))
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
#include <cmath>
#include <iostream>
#include <cstdlib>
 
using std::cout;
using std::cin;
 
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
 
int GetIntFromUser() {
  int value = 0;
  cin >> value;
  return value;
}
 
int main() {
  SetRussianLocale();
  cout << "Введите терхзначное число\n";
  int a = GetIntFromUser();
  int first_figure = a/100;
  int second_figure = (a/10)%10;
  int third_figure = a%10;
  if (first_figure*second_figure*third_figure<100 && first_figure*second_figure*third_figure>=10) {
      cout << " Произведение цифр числа ";
      cout << a; 
      cout << " является двухзначное число\n";
 }    else {
      cout << " Произведение цифр числа ";
      cout << a;
      cout << " не является двухзначным числом\n";
  }
  system ("pause");
}
Добавлено через 47 минут
я не смог цикл проверки числа в функцию запихнуть ели это требовал
0
 Аватар для Goffrua
4 / 4 / 0
Регистрация: 30.03.2015
Сообщений: 80
05.04.2015, 19:46
MuslimPalit, так проще всего.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std; 
int main() {   
     int a, b;
    cout << "Введите два числа" << endl;
    cin >> a >> b;
    if (a%b != 0) {
        cout << "Делится с остатком." << endl;
        cout << "Остаток к рассмотрению:";
        cout << a%b << endl;
    }
    else
        cout << "Делится без остатком" << endl;
    system("pause");
   }
Тут даже библиотека math.h не нужна.


А вообще, в идеале нужно брать не int, а double. Тут дробный тип нужен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std; 
int main() {   
     double a, b;
    cout << "Введите два числа" << endl;
    cin >> a >> b;
    if (a%b != 0) {
        cout << "Делится с остатком." << endl;
        cout << "Остаток к рассмотрению:";
        cout << a%b << endl;
    }
    else
        cout << "Делится без остатком" << endl;
    system("pause");
   }
Добавлено через 5 минут
Так как если вы будете брать целый тип. то остаток у вас будет не 0,(какие-то числа), а просто 0, и программа выведет неверный ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2015, 19:46
Помогаю со студенческими работами здесь

Организовать ввод двух вещественных чисел и операции над ними: сложение, вычитание, умножение и деление
Парни всем привет! Начинаю новую тему по решению задач Задача звучит так: Написать программу, которая запрашивает ввод двух...

Задать функцию которая возвращает частное деление двух чисел (обработка ошибок - через исключения)
Ребят,срочно нужнатваша помощ.Задать функцию,которая возвращает частное деление двух чисел.Обработку ошибок реализовать через...

Деление двух скобок
Написал программу для выражения m=(ax+b)/(cx+d) , но допустим при вводе всех единичек он выдает результат 10, хотя должен 1... В чем может...

Деление двух многочленов
Привет всем! Было дано задание реализовать деление многочленов с комплексными коэффициентами через метод класса. Точнее сказать только с...

Деление многочленов от двух переменных
Есть многочлен от двух переменных, заданный следующей структурой: struct Monom { int CoefX,CoefY,DegX,DegY; }; struct...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru