Напишите функцию int median(int a, int b, int c)
,
которая получает на вход три числа и возвращает
их медиану (среднее из трёх значений).
Сдайте на проверку только тело функции.
Вызов функции | Возвращаемое значение |
---|---|
median(1, 9, 7) |
7 |
Даны два действительных числа \(x\) и \(y\). Проверьте, принадлежит ли точка с координатами \((x,y)\) заштрихованному квадрату (включая его границу). На рисунке сетка проведена с шагом 1.
Решение оформите в виде функции bool is_point_in_square(double x, double y)
,
возвращающую true
, если точка принадлежит квадрату и false
, если не принадлежит.
Функция is_point_in_square
не должна содержать инструкцию if
.
Сдайте на проверку только тело функции.
Вызов функции | Возвращаемое значение |
---|---|
is_point_in_square(0, 0) |
true |
is_point_in_square(3, -7) |
false |
Решите аналогичную задачу для такого квадрата:
Решение должно соответствовать требованиям для решения задачи C.
Функция должна называться is_point_in_rhombus
.
Вызов функции | Возвращаемое значение |
---|---|
is_point_in_rhombus(0, 0) |
true |
is_point_in_rhombus(1, 1) |
false |
Даны пять действительных чисел: \(x\), \(y\), \(x_c\), \(y_c\), \(r\). Проверьте, принадлежит ли точка \((x,y)\) кругу с центром \((x_c,y_c)\) и радиусом \(r\).
Решение оформите в виде функции bool is_point_in_circle(double x, double y, double xc, double yc, double r)
.
Решение должно соответствовать требованиям для решения задачи C.
Вызов функции | Возвращаемое значение |
---|---|
is_point_in_circle(0.5, 0.5, 0, 0, 1) |
true |
is_point_in_circle(0.5, 0.5, 1, 1, 0.1) |
false |
Проверьте, принадлежит ли точка данной закрашенной области. Область неограничена снизу.
Решение оформите в виде функции bool is_point_in_area(double x, double y)
.
Решение должно соответствовать требованиям для решения задачи С.
Вызов функции | Возвращаемое значение |
---|---|
bool is_point_in_area(-1, 2) |
true |
bool is_point_in_area(0, 0) |
false |
Дано число, получите число, составленное из тех же цифр, записанных в обратном порядке.
Решение оформите в виде функции int reverse(int n)
, которая получает
на вход значение типа int
и возвращает значение типа int
.
Вызов функции | Возвращаемое значение |
---|---|
reverse(179) |
971 |
Дано натуральное число \(n>1\). Найдите его наименьший делитель, отличный от 1.
Решение оформите в виде функции long long min_divisor(long long n)
. Алгоритм должен
иметь сложность \(O(\sqrt{n})\). Обратите внимание на используемый тип данных.
Указание. Если у числа \(n\) нет делителя не превосходящего \(\sqrt{n}\), то число \(n\) — простое и ответом будет само число \(n\).
Сдайте на проверку только тело функции.
Вызов функции | Возвращаемое значение |
---|---|
min_divisor(4) |
2 |
min_divisor(5) |
5 |
Дано натуральное число \(n>1\). Проверьте, является ли оно простым. Программа должна вывести слово
YES
, если число простое и NO
, если число составное.
Решение оформите в виде функции bool is_prime(long long n)
, которая возвращает
true
для простых чисел и false
для составных чисел. Решение
должно иметь сложность \(O(\sqrt{n})\).
Сдайте на проверку только тело функции.
Вызов функции | Возвращаемое значение |
---|---|
is_prime(2) |
true |
is_prime(4) |
false |
Даны два натуральных числа \(n\) и \(m\). Сократите дробь \(\frac{n}{m}\), то есть выведите два других числа \(p\) и \(q\) таких, что \(\frac{n}{m}=\frac{p}{q}\) и дробь \(\frac{p}{q}\) — несократимая.
Решение оформите в виде функции
void reduce_fraction(int & n, int & m)
,
получающая значения n
и m
по ссылке и изменяющая их.
Сдайте на проверку только тело функции.
Значения n, m до вызова | Значения n, m после вызова reduce_fraction(n, m) |
---|---|
\(n=12\), \(m=16\) | \(n=3\), \(m=4\) |
Мнение конструкторов ЭВМ и математиков о том, что такое деление с остатком для отрицательных чисел расходится. Напомним, что при делении числа \(a\) на число \(b\) с остатком находятся такие числа \(q\) (частное) и \(r\) (остаток), что \(a=qb+r\). При этом \(|r|<|b|\). Если числа \(a\) и \(b\) — положительные, то выполняется более сильное неравенство: \(0 \le r < b\) и тогда деление с остатком определяется однозначно. Но если числа — отрицательные то деление с остатком на компьютере выполняется не так, как это кажется правильным математикам.
Вот как выполняется деление с остатком на компьютере для отрицательных чисел:
a |
b |
a / b |
a % b |
---|---|---|---|
26 |
10 |
2 |
6 |
-26 |
10 |
-2 |
-6 |
26 |
-10 |
-2 |
6 |
-26 |
-10 |
2 |
-6 |
Таким образом, в компьютере целочисленное частное является результатом округления действительного частного
в сторону нуля, как это делает функция trunc
. Между тем, математик считает, что целочисленное
частное — это целая часть от частного \((q=\lfloor a/b\rfloor)\), то есть результат использования функции floor
.
Это даст такие результаты с точки зрения математики:
\(a\) | \(b\) | \(\lfloor a / b\rfloor\) | \(a \bmod b\) |
---|---|---|---|
26 |
10 |
2 |
6 |
-26 |
10 |
-3 |
4 |
26 |
-10 |
-3 |
-4 |
-26 |
-10 |
2 |
-6 |
Напишите программу, которая по данным числам \(a\) и \(b\) вычисляет их целочисленное частное и остаток от деления так, как это принято в математике. Программа не должна использовать действительные числа и циклы.
Решение оформите в виде функции void div_mod(int a, int b, int & q, int & r)
, где
a
— делимое, b
— делитель,
q
— переменная для записи частного, r
— переменная
для записи остатка.
Сдайте на проверку только тело функции.
Значения \(a\), \(b\) до вызова | Значения \(q\), \(r\) после вызова |
---|---|
\(a=-26\), \(b=10\) | \(q=-3\), \(r=4\) |
\(a=26\), \(b=-10\) | \(q=-3\), \(r=-4\) |
Дано четыре целых числа \(a\), \(b\), \(c\), \(d\).
Упорядочите эти числа в порядке неубывания, то есть
необходимо переставить их значения так, чтобы
\(a\le b\le c\le d\). Решение оформите в виде функции
void sort(int & a, int & b, int & c, int & d)
.
Функция должна содержать только операции вида
if (a > b) swap(a, b);
Вложенные инструкции if
не допускаются.
Внутри одной инструкции if
может быть только один swap
.
Ветки else
тоже использовать не нужно.
Сдайте на проверку только тело функции.
Значения \(a\), \(b\), \(c\), \(d\) до вызова | Значения после вызова sort(a, b, c, d) |
---|---|
\(a=3\), \(b=2\), \(c=4\), \(d=1\) | \(a=1\), \(b=2\), \(c=3\), \(d=4\) |
Какое наименьшее количество обменов может содержать решение предыдущей задачи?