Написать программу вычисления и вывода на экран значения функции F по значениям одного или нескольких аргументов, величины которых вводиться с клавиатуры операторами ввода. Результат вывести на экран. Проверить программу, задавая значения аргументов, указанных в задании, и сверяя результаты с приведенными ответами.
// PascalABC.NET 3.3, сборка 1542 от 05.10.2017 // Внимание! Если программа не работает, обновите версию!
uses NumLibABC;
begin var (num,denom):=ReadInteger2('Числитель и знаменатель 1-й дроби:'); var f1:=Frc(num,denom); (num,denom):=ReadInteger2('Числитель и знаменатель 2-й дроби:'); var f2:=Frc(num,denom); f1.Print; Write('* '); f2.Print; Write('= '); (f1*f2).Print end.
Примеры Числитель и знаменатель 1-й дроби: 4 9 Числитель и знаменатель 2-й дроби: 3 8 4/9 * 3/8 = 1/6
Числитель и знаменатель 1-й дроби: 32432424 10213133 Числитель и знаменатель 2-й дроби: 23123 12313123 32432424/10213133 * 23123/12313123 = 749934940152/125755562844359
Числитель и знаменатель 1-й дроби: 15 2 Числитель и знаменатель 2-й дроби: 8 15 15/2 * 8/15 = 4
Удобнее всего решать с использованием промежуточной двоичной системы, поскольку 16=2⁴, в 8=2³. В силу этого каждая шестнадцатиричная цифра изображается четырьмя битами (тетрадой), а каждая восьмеричная - тремя (триадой). Заменим неизвестные биты символом Х. 1010₁₆ = ХХХ ХХ1 010₈ Запишем изображения битов друг под другом с учетом известной нам информации. Х Х Х Х 1 0 1 0 Х Х Х Х Х 1 0 1 0 Теперь известные биты в конце чисел можно отбросить Х Х Х Х Х Х Х Х Х Очевидно, во втором (восьмеричном числе первый бит нулевой, поскольку оба числа в двоичной записи одинаковы и остается только ₂. Эти четыре бита (обозначим их IJKL) могут дать 16 комбинаций. Но требование, чтобы восьмеричное число имело три цифры, старшая из которых не может быть нулем, запрещает комбинацию IJ=00, поэтому 4 комбинации из 16 надо вычеркнуть. Останется 12.
// Внимание! Если программа не работает, обновите версию!
uses NumLibABC;
begin
var (num,denom):=ReadInteger2('Числитель и знаменатель 1-й дроби:');
var f1:=Frc(num,denom);
(num,denom):=ReadInteger2('Числитель и знаменатель 2-й дроби:');
var f2:=Frc(num,denom);
f1.Print; Write('* '); f2.Print; Write('= '); (f1*f2).Print
end.
Примеры
Числитель и знаменатель 1-й дроби: 4 9
Числитель и знаменатель 2-й дроби: 3 8
4/9 * 3/8 = 1/6
Числитель и знаменатель 1-й дроби: 32432424 10213133
Числитель и знаменатель 2-й дроби: 23123 12313123
32432424/10213133 * 23123/12313123 = 749934940152/125755562844359
Числитель и знаменатель 1-й дроби: 15 2
Числитель и знаменатель 2-й дроби: 8 15
15/2 * 8/15 = 4
Заменим неизвестные биты символом Х.
1010₁₆ = ХХХ ХХ1 010₈
Запишем изображения битов друг под другом с учетом известной нам информации.
Х Х Х Х 1 0 1 0
Х Х Х Х Х 1 0 1 0
Теперь известные биты в конце чисел можно отбросить
Х Х Х Х
Х Х Х Х Х
Очевидно, во втором (восьмеричном числе первый бит нулевой, поскольку оба числа в двоичной записи одинаковы и остается только ₂.
Эти четыре бита (обозначим их IJKL) могут дать 16 комбинаций. Но требование, чтобы восьмеричное число имело три цифры, старшая из которых не может быть нулем, запрещает комбинацию IJ=00, поэтому 4 комбинации из 16 надо вычеркнуть. Останется 12.
ответ: 12 чисел.