Ввести с клавиатуры два числа и вывести целую часть от деления первого на второе

Обновлено: 08.07.2024

В прошлом уроке мы прошли целые числа: как они хранятся, считываются, выписываются и обрабатываются в языке программирования С/С++. Но в математике целые числа занимают лишь малую часть среди всех чисел. Потому что есть ещё и дробные числа, и они, конечно же, тоже есть и в языке программирования С/С++.

Хранение дробных чисел

Дробные числа хранятся в переменных типа double (от англ. double — двойной). Данный тип так называется, потому что для хранения дробного числа необходимо использовать две ячейки в памяти: для целой и для дробной части.

Целая часть числа
Целая часть [x] числа x - наибольшее целое число, не превосходящее x .

[3.273] = [3.989] = 3 \\ [-3.273] = [-3.989] = -4

Для того, чтобы вычислить целую часть положительного числа в языке программирования С/С++, необходимо применить конвертацию переменной из типа double в тип int . Чтобы сконвертировать переменную типа double в тип int , необходимо просто поставить перед ней int и взять её в круглые скобки:

Для того, чтобы вычислить целую часть отрицательного числа в языке программирования С/С++, необходимо отнять единицу от числа, сконвертированного в тип int .

Дробная часть числа
Дробная часть \ числа x - это разность x - [x] числа x и его целой части [x] .

\ = 3.273 - [3.273] = 3.273 - 3 = 0.273 \\ \ = -3.273 - [-3.273] = -3.273 - (-4) = -3.273 + 4 = 0.727

Проще говоря, целая часть - то, что слева от точки, а дробная часть - то, что справа.

Для того, чтобы вычислить дробную часть числа в языке программирования С/С++, необходимо вычесть из этого числа его целую часть.

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

Дробные числа в языке программирования могут также храниться в типе float , но его чаще всего не используют, так как он храните меньшее количество цифр после точки.
Создание переменной типа double

Чтобы создать переменную типа double :

Как и в случае с целыми переменными, рекомендуется сразу же очищать переменную от мусора, присваиванием ей нулевое значение:

В случае типа double необходимо присваивать значение именно 0.0 , так как первый нуль очищает целую часть, а второй - дробную. Это правило хорошего тона.
Считывание дробных чисел с клавиатуры

Считывание дробных чисел с клавиатуры в языке программирования С/С++ происходит аналогично считыванию целых чисел с помощью функции scanf() за исключением другого типа данных (6 строка):

Для типа double короткое имя при считывании это lf .

lf - образовано от словосочетания long float (длинное плавающее число - англ.) и подразумевает, что будет считано длинное дробное число. Для типа float используется короткое имя f - от словосочетания float (плавающее число - англ.)
Вывод дробных чисел на экран

Вывод дробных чисел на экран в языке программирования С/С++ происходит аналогично выводу целых чисел с помощью функции printf() (7-8 строки):

Формат вывода дробных чисел на экран

В языке программирования С/С++ можно регулировать, сколько цифр после точки будет выписано на экран. По умолчанию выписываются 6 цифр после точки.

Чтобы указать, сколько цифр после точки необходимо отобразить, можно написать следующий код (7-8 строки):

Пример вывода данного кода:

II Операция деления с остатком

В языке программирования С/С++ есть операция деления с остатком. Более того, данная операция является очень популярной и широко используемой.

Определение оператора %

Для того, чтобы узнать остаток при делении одного числа на другое, существует специальный оператор, обозначающийся символом процента % :

Остаток при делении отрицательных чисел

В математике принято, что остатки могут быть только положительными. Например, у числа -12 остаток 3 при делении на 5.

В языке программирования С/С++ остатки могут быть отрицательными. У числа -12 при делении на 5 остаток будет не 3, а -2. Необходимо иметь это в виду при решении зада

Процедура универсализации взятия остатка написана в данном уроке чуть ниже.

III Цикл if

Мы начинаем знакомство с таким объектом языка программирования С/С++, как цикл. В языке программирования С/С++ есть несколько основных базовых циклов.

Определение
Цикл - это функция, принимающая в качестве аргументов некоторые условия, а затем, в зависимости от истинности или ложности данных условий, запускающая или же не запускающая команды из своего тела.

Самым базовым циклом в языке программирования С/С++, как и во многих других высокоуровневых языках программирования, является цикл if (от англ. if - если).

Цикл if выполняет ровно то, что он означает: "Если условие в аргументе истинно, то команды из цикла будут выполнены, а если ложно - не будут".

Разновидности условий

В качестве условий могут выступать совершенно любые математические выражения, которые могут быть абсолютно точно истинными или же абсолютно точки ложными. Например, условие "Среди чисел от 1 до 1000 есть число, которое делится на все положительные однозначные числа" указать в цикле if нельзя.

Условие должно быть односложным и легкопроверяемым компьютером с точки зрения вычисления. Условия могут быть как на созданные ранее переменные, так и на конкретные числа. Рассмотрим самые популярные разновидности условий:

Выражения со знаками:

В программировании существуют точно такие же знаки, что и в математике:

  • Больше >
  • Меньше <
  • Больше или равно >=
  • Меньше или равно <=
  • Равно ==
  • Не равно !=
Обратите внимание, что знак "равно" в условии цикла if состоит из двух символов равно == . А знак "не равно" состоит из восклицательного знака ! , который в языке С/С++ обозначает отрицание и символа равно: != .

Условие пишется в круглых скобочках через пробел после названия цикла:

Выражения, требующие вычисления:

Но порой требуется сравнить не просто переменные или числа, а результаты некоторых операций над ними. Например, будет ли число a больше числа b после прибавления к нему числа c .

Для этого, конечно можно создать дополнительную переменную, положить в неё сумму, а потом уже сравнить эту сумму и число c в цикле if :

Однако это не очень удобно с точки зрения лишнего кода, а также использования памяти, необходимо для создания новой переменной.

Данное сравнение можно осуществить гораздо удобней, сразу сравнив результат суммы и число:

Внутри цикла if можно вычислять выражения любой сложности:

Самое главное правильно расставить скобки и соблюсти синтаксис языка С/С++.
Проверка делимости одного числа на другое:

Операция взятия остатка может пригодиться для проверки делимости одного числа на другое. Если число a делится на число b , то остаток при делении числа a на число b равен нулю.

Поэтому проверить делимость числа a на число b в программе можно следующим образом:

Сложные условия в цикле if:

Иногда необходимо проверить сразу несколько условий. Например, что число чётное и положительное. В таком случае можно воспользоваться двумя циклами if :

Чтобы проверить, что число чётное, необходимо проверить на равенство нулю остаток при делении на 2.

Но иногда условия могут быть сложней: проверить, что число чётное, положительное и не делится на 7. И создавать для этого три вложенных друг в друга цикла if достаточно долго. Вместо этого можно воспользоваться одним циклом if со сложным условием, состоящем из нескольких простых:

Для связки простых условий можно использовать связки "И" или "ИЛИ". Связка "И" обозначается двумя символами амперсанта && , а связка "ИЛИ" - двумя вертикальными палочками || . В примере выше использована связка "И".

Чтобы в одном цикле if проверить, что число кратно 11 или 13, необходимо воспользоваться связкой "ИЛИ":

Иерархия простых условий в составе сложного:

Важно понимать, что связка "ИЛИ" относится к связке "И" точно также, как операция сложения к операции умножения.

Допустим, необходимо проверить условие, что число положительное, чётное и при этом кратно или 11 или 13.

Можно написать просто:

И это будет неправильно. Перейдём от условий к выражениям с операциями сложения и умножения:

(a>0) \times (a \% 2 == 0) \times (a \% 11 == 0) + (a \% 13 == 0)

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

В стандартной арифметике для этого используются скобки:

(a>0) \times (a \% 2 == 0) \times \Big( (a \% 11 == 0) + (a \% 13 == 0)\Big)

В языке программирования происходит тоже самое. Чтобы условие работало корректно, необходимо добавить скобки:

Конструкция else

Чаще всего необходимо сделать что-либо не только, когда выполнено условие, но и когда оно не выполнено. Использовать для этого второй точно такой же цикл if , только с противоположным условием не рационально.

Для этого и была придумана конструкция else , которая определяет область невыполнимости условия цикла if . Данная конструкция образована от слова else (иначе - англ.).

Допустим, необходимо разделить число на 2 и выписать его на экран, если оно чётное, и просто выписать его на экран, если нечётное. Для этого и нужно использовать else :

Всё просто: "Если число a чётно, делим его на 2 и выписываем, иначе просто выписываем его".

Конструкция else if

Данная конструкция может быть использована и в ещё более сложном условии. Например, необходимо сделать что-то конкретное, в зависимости от остатка при делении на 3. Так как при делении на 3 может быть три остатка (0, 1 и 2), обыкновенно конструкцией "если. иначе. " ограничиться нельзя. В таком случае можно воспользоваться:

Взятие остатка от отрицательного числа

Как уже было замечено, в языке программирования С/С++ операция взятия остатка от отрицательных чисел работает не так, как принято у математиков. Если есть вероятность, что программному коду нужно будет работать с отрицательными числами, необходимо не просто брать остаток при делении одного числа на другое, а осуществлять проверку, с положительным или отрицательным числом идёт работа:

В представленном выше коде осуществляется проверка знака переменной a и в случае, если число a отрицательно, чтобы остаток был таким, как принято у математиков, к остатку прибавляется то, число, на которое делится переменная a .

Однако можно поступить проще. Так как ясно, что в языке программирования С/С++ при делении с остатком отрицательных чисел получается остаток, равный разности принятого у математиков остатка и делителя.

Например, число -12 при делении на 5 в стандартной операции даст остаток -2, а в общепринятой - 3, а число 3 как раз получается прибавлением -2 и 5.

Таким образом, например, при нахождении чисел, имеющих остаток 4 при делении на 11, можно написать следующее условие в цикле if :

Выделение в цикле цифр в числе от младших разрядов к старшим

Сегодня мы узнаем с вами, как отделить каждую цифру от числа начиная от младшего разряда, заканчивая старшим. Это нам частенько пригодится в дальнейшем.

Разделение числа на цифры

Идея алгоритма:
Для каждого числа необходимо найти его разряд.

  1. 1 => единица;
  2. 42 => 4 десятка и 2 единицы;
  3. 829 => 8 сотен, 2 десятка, 9 единиц.

Поиск разрядов числа

Нам дано число: 123456789

Последнюю цифру мы легко найдем, нам достаточно наше число разделить 10 с остатком. А что делать с предпоследней цифрой? Тут как минимум есть два варианта:

  1. /10 – откинули последнюю цифру, а затем снова %10;
  2. %10 и его степень. Способ довольно неудобный. Поэтому мы не будем им пользоваться.

Первый вариант кажется достаточно удобным. Мы будем получать нужную нам цифру в ходе каждой итерации цикла.

  1. 123456789 % 10 = 9;
  2. 123456789 / 10 = 12345678;
  3. Переходим к следующей итерации
  4. 12345678 % 10 = 8;
  5. 12345678 / 10 = 1234567;

И так далее пока не переберем все число.

Алгоритм разделения числа на цифры

Алгоритм разделения числа на цифры

  1. Ввести число a;
  2. Запустить цикл;
  3. Найти цифру при помощи a % 10;
  4. Вывести цифру (или использовать ее в задаче);
  5. Уменьшить а в 10 раз.

Этот цикл будет работать до тех пор, пока n не превратится в 0.

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

Использование алгоритма

Мы можем применять данный алгоритм в этих случаях

  1. Анализ зависимостей в цифрах числа;
  2. Определение присутствия цифры;
  3. Подсчёт цифр;
  4. Подсчёт количества цифр;
  5. Замена цифр в числе;
  6. Анализ чисел в других системах счисления;
  7. Анализ бинарных данных.

Решение задач

Разбор задачи Счастливый билет

Задача счастливый билет

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

Нам вводится номер билета и необходимо проверить, является ли он счастливым.
Давайте посчитаем. Посмотрите на номер нашего билета: 306 450.

  • Если мы просуммируем 3+0+6 == 4+5+0;
  • То получим в первой и второй сумме чисел одинаковое значение 9 == 9;
  • Это означает, что наш билет счастливый.

Все элементарно, но теперь встает вопрос, как же нам разбить наше число на отдельные цифры? А мы уже знаем, как это сделать.

Алгоритм решения

  1. Ввести число;
  2. Разделять его на цифры;
  3. Первые три числа добавлять в sum1;
  4. Последние три числа добавлять в sum2;
  5. Сравнить sum1 и sum2.

Решение задачи Счастливый билет

Разложи на цифры

Дано восьмизначное число, необходимо написать в строку каждую цифру данного числа через пробел, начиная с разряда единиц.
Формат входных данных
Дано целое число N (10 000 000 Tags

Pascal

Язык Си

Python

проверка на делимость python

КуМир

Basic-256


var a,b: integer;
begin
readln(a);
readln(b);
if a mod b = 0 then
writeln(a,' делится на ', b)
else begin
writeln(a,' НЕ делится на ', b);
writeln('Остаток: ', a mod b);
end;
writeln('Частное: ', a div b);
end.

678
4
678 НЕ делится на 4
Остаток: 2
Частное: 169

680
5
680 делится на 5
Частное: 136

main() int a,b;
scanf("%d%d",&a,&b);
if (a%b == 0) printf("%d делится на %d", a, b);
else <
printf("%d НЕ делится на %d\n", a, b);
printf("Остаток: %d", a%b);
>
printf("\nЧастное: %d\n", a/b);
>

1011
11
1011 НЕ делится на 11
Остаток: 10
Частное: 91

455
5
455 делится на 5
Частное: 91

проверка на делимость python

a = int(input())
b = int(input())
if a%b == 0:
print("%d делится на %d" % (a,b))
else:
print("%d не делится на %d" % (a,b))
print("Остаток: %d" % (a%b))
print("Частное: %d" % (a//b))

678
23
678 не делится на 23
Остаток: 11
Частное: 29

678
3
678 делится на 3
Частное: 226

алг делимость
нач
цел a,b
ввод a,b
если mod(a,b) = 0 то
вывод a, " делится на ", b, нс
иначе
вывод a, " НЕ делится на ", b, нс
вывод "Остаток: ", mod(a,b), нс
все
вывод "Частное: ", div(a,b)
кон

144 14
144 НЕ делится на 14
Остаток: 4
Частное: 10

234 3
234 делится на 3
Частное: 78

input a
input b
if a%b = 0 then
print a + " делится на " + b
else
print a + " не делится на " + b
print "Остаток: " + (a%b)
endif
print "Частное " + a\b

567
10
567 не делится на 10
Остаток: 7
Частное 56

Задача A. Четные числа
Выведите (через пробел) все четные числа от a до b (включительно).

Задача B. Остаток
Вводятся 4 числа: a, b, c и d.
Выведите все числа на отрезке от a до b, дающие остаток c при делении на d.

Задача C. Квадраты
Выведите все числа на отрезке от a до b, являющиеся полными квадратами.

Задача H. Делители числа
Выведите все натуральные делители числа x в порядке возрастания (включая 1 и само число).

Задача I. Количество делителей
Подсчитайте количество натуральных делителей числа x (включая 1 и само число; x <= 30000).

Задача J. Сумма ста
Вычислите сумму данных 100 натуральных чисел. Вводятся 100 чисел, сумму которых необходимо посчитать.

Задача K. Сумма чисел
Вычислите сумму данных N натуральных чисел. Вводится число N, а затем N чисел, сумму которых необходимо вычислить.

Задача M. Нули
Вводится число N, а затем N чисел. Подсчитайте, сколько среди данных N чисел нулей.

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

Задача O. Ноль или не ноль
Проверьте, есть ли среди данных N чисел нули. Вводится число N, а затем N чисел. Выведите YES, если среди введенных чисел есть хотя бы один нуль, или NO в противном случае.

Вариант 2.
Ту же самую идею можно описать короче.

Задача P. Уравнение по возрастанию
Вводятся 4 числа: a, b, c и d.
Найдите все целые решения уравнения ax 3 + bx 2 + cx + d = 0 на отрезке [0,1000] и выведите их в порядке возрастания.

Задача Q. Уравнение по убыванию
Вводятся 4 числа: a, b, c и d.
Найдите все целые решения уравнения ax 3 + bx 2 + cx + d = 0 на отрезке [0,1000] и выведите их в порядке убывания.

Задача R. Количество решений
Вводятся 5 чисел: a, b, c, d и e.
Найдите все целые решения уравнения ( ax 3 + bx 2 + cx + d ) / ( x - e ) = 0 на отрезке [0,1000] и выведите их количество.

Вариант 1.
При таком варианте реализации мы печатаем столько раз текущее значение cur сколько оно само обозначает count , после чего обнуляем подсчет одинаковых выводов count и переходим на следующее текущее значение cur и т.д.

Читайте также: