За с клавиатуры 16-ричное число (переменная х16 строкового типа string), в переменной х8 сформировать его 8-ричное представление. Результат вывести на экран.
function Bin4ToOct(Self: string): char; extensionmethod;
begin
var od: array of string := ('000', '001', '010', '011',
'100', '101', '110', '111');
var i := od.FindIndex(p -> p = Self);
Result := if i < 0 then '*' else i.ToString.First
end;
function HexToOct(Self: string): string; extensionmethod;
begin
var t := '';
foreach var c in Self do
t += c.HexDigitToBin;
var L := t.Length;
t := '0' * ((3 - L mod 3) mod 3) + t;
L := t.Length;
var n := L div 3;
Result := '';
for var i := 0 to n - 1 do
Result += t[3 * i + 1: 3 * i + 4].Bin4ToOct;
end;
begin
var x16 := ReadString('Введите 16-ричное число:');
var x8 := x16.HexToOct;
x8.Print
end.
Vladimirovna Viktorovna
11.01.2020
Для удобства вычислений переведём размер сканируемого изображения в дюймы: 20,32 × 20,32 (см) = 8 × 8 (inch).
Сначала найдём количество пикселей по горизонтали, по вертикали, затем общее количество пикселей, исходя из разрешающей сканера. Зная, что каждый пиксель кодируется 4 битами, найдём объём памяти, необходимый для хранения графической информации, что и будет являться информационным объёмом файла.
1) 600 × 8 = 4800 (px) – количество пикселей по горизонтали.
2) 1200 × 8 = 9600 (px) – количество пикселей по вертикали.
ответ: полученный графический файл будет иметь объём 22 500 килобайт.
Ирина
11.01.2020
Если число 49 записывается как 121, значит первый остаток от деления равен 1, то есть основанием системы счисления является число, кратное 48.
121 имеет 3 разряда, значит основание однозначно меньше 10 и больше 2. Подходят 3, 4, 6, 8.
Учитывая, что в числе 121 три разряда, значит число 48 делилось всего три раза. Число 8 не подойдет, т.к. 48/8=6, значит будет всего два деления. Число 3 не подойдет, т.к. 48/3 = 16, 16/3=5 - то есть тут будет больше трёх знаков. Число 4 не подойдет, т.к. 48/4=12, а 12 делится на 4 без остатка, но, судя по числу, во втором делении остаток должен быть равен 2. Остаётся число 6. Проверим
// PascalABC.NET
// количество знаков - произвольное!
function HexDigitToBin(Self: char): string; extensionmethod;
begin
var bd: array of string := ('0000', '0001', '0010', '0011',
'0100', '0101', '0110', '0111', '1000', '1001', '1010',
'1011', '1100', '1101', '1110', '1111');
var hd := '0123456789ABCDEF';
var i := Pos(Self.ToUpper, hd);
Result := if i > 0 then bd[i - 1] else '****'
end;
function Bin4ToOct(Self: string): char; extensionmethod;
begin
var od: array of string := ('000', '001', '010', '011',
'100', '101', '110', '111');
var i := od.FindIndex(p -> p = Self);
Result := if i < 0 then '*' else i.ToString.First
end;
function HexToOct(Self: string): string; extensionmethod;
begin
var t := '';
foreach var c in Self do
t += c.HexDigitToBin;
var L := t.Length;
t := '0' * ((3 - L mod 3) mod 3) + t;
L := t.Length;
var n := L div 3;
Result := '';
for var i := 0 to n - 1 do
Result += t[3 * i + 1: 3 * i + 4].Bin4ToOct;
end;
begin
var x16 := ReadString('Введите 16-ричное число:');
var x8 := x16.HexToOct;
x8.Print
end.