Зная количество бит в двоичной записи числа, можно посчитать количество бит в восьмеричной записи, так как из двоичной в восьмеричную систему счисления число можно привести группировкой по трем соседним разрядам, начиная с младших. Например, есть число 1100111. Сгруппируем его разряды: (1)(100)(111)=147 - в восьмеричной СС. Пусть количество разрядов 2-ичного числа равно n. Тогда количество разрядов восьмеричного числа будет n/3, деленное нацело и округленное вверх. n=7 => n/3=7/3. Округляем, будет 3. a) 10111010. n=8 => 8/3 - 3 8-ричных разряда б) 1001111000111, n=13 => 13/3 - 5 8-ричных разрядов в) A18C. Сначала найдем n. Посмотрим, сколько значащих разрядов у старшей цифры. A=1010 - 4 разряда. У остальных цифр по 4 разряда всегда. Поэтому n=3*4+4=16 => 16/3 - 6 8-ричных разрядов. г) 1375BE. 1=1 : 1 разряд => n=5*4+1=21 => 21/3 - 7 8-ричных разрядов
// PascalABC.NET 3.2, сборка 1387 от 17.02.2017 // Внимание! Если программа не работает, обновите версию!
1) begin var a,b:real; Read(a,b); if (a>0) and (b>0) then Writeln('Произведение равно ',a*b) else Writeln('Сумма квадратов равна ',a*a+b*b) end.
2) begin var a:=ArrRandom(ReadInteger('n='),-99,99); a.Println; for var i:=0 to a.Length-1 do if i.IsOdd then a[i]:=0 else if (i+1) mod 5 =0 then a[i]*=2; a.Println; end.
Замечание "Каждый второй" и "каждый пятый" дают пересечение на каждом десятом. И получается. что каждый десятый элемент должен быть обнулён. как каждый второй и удвоен, как каждый пятый, так что все равно получим ноль.
a) 10111010. n=8 => 8/3 - 3 8-ричных разряда
б) 1001111000111, n=13 => 13/3 - 5 8-ричных разрядов
в) A18C. Сначала найдем n. Посмотрим, сколько значащих разрядов у старшей цифры. A=1010 - 4 разряда. У остальных цифр по 4 разряда всегда. Поэтому n=3*4+4=16 => 16/3 - 6 8-ричных разрядов.
г) 1375BE.
1=1 : 1 разряд => n=5*4+1=21 => 21/3 - 7 8-ричных разрядов
// Внимание! Если программа не работает, обновите версию!
1)
begin
var a,b:real;
Read(a,b);
if (a>0) and (b>0) then Writeln('Произведение равно ',a*b)
else Writeln('Сумма квадратов равна ',a*a+b*b)
end.
2)
begin
var a:=ArrRandom(ReadInteger('n='),-99,99); a.Println;
for var i:=0 to a.Length-1 do
if i.IsOdd then a[i]:=0
else
if (i+1) mod 5 =0 then a[i]*=2;
a.Println;
end.
Пример
n= 17
7 -49 -21 84 87 12 27 86 -29 -55 -32 -83 -24 96 -3 -3 -78
7 0 -21 0 174 0 27 0 -29 0 -32 0 -24 0 -6 0 -78
Замечание
"Каждый второй" и "каждый пятый" дают пересечение на каждом десятом. И получается. что каждый десятый элемент должен быть обнулён. как каждый второй и удвоен, как каждый пятый, так что все равно получим ноль.