{ ============================== }
{ Дано целое неотрицательное число <2^16.
Получить число перестановкой битов каждого
байта данного числа в обратном порядке.
Вариант 1
}
program p177891a;
var
i: integer;
num: integer;
len: integer;
hi, lo: integer;
procedure PrintBinary(x: word);
{ печать беззнакового двухбайтового целого в битовой форме }
var
i: integer;
len: integer;
begin
len := sizeof(word)*8; { бит в числе }
for i:=len-1 downto 0 do
if (x and (1 shl i)=0) then
write('0')
else
write('1');
writeln;
end; { PrintBinary }
begin
len := sizeof(word)*8;
write('num=');
readln(num);
writeln('Введенное число');
PrintBinary(num);
for i:=0 to (len+1) div 2-1 do
begin
if (num and (1 shl (len-i-1)))<>0 then
hi:= 1
else
hi := 0;
if (num and (1 shl i))<>0 then
lo := 1
else
lo := 0;
{ если установлен левый бит, установить правый бит,
иначе сбросить правый бит }
if hi=0 then
num := num and not(1 shl i)
else
num := num or (1 shl i);
{если установлен правый бит, установить левый бит,
иначе сбросить левый бит }
if lo=0 then
num := num and not (1 shl (len-i-1))
else
num := num or (1 shl (len-i-1));
end;
writeln('Число с переставленными битами');
PrintBinary(num);
readln;
end.
{ ===============================
{2)Дано целое неотрицательное число <2^16.
Получить число перестановкой битов каждого
байта данного числа в обратном порядке.
Вариант 2 }
program p177891;
var
num1, num2: integer;
ch: byte;
hi, lo: byte;
procedure PrintBinary(x: word);
{ печать беззнакового двухбайтового целого в битовой форме }
var
i: integer;
len: integer;
begin
len := sizeof(word)*8; { бит в числе }
for i:=len-1 downto 0 do
if (x and (1 shl i)=0) then
write('0')
else
write('1');
writeln;
end; { PrintBinary }
function Reverse(x: byte): byte;
var
i: integer;
res: byte;
{ Перестановка битов байта }
begin
res := x and 1;
for i:=1 to 7 do
res := (res shl 1) or ((x shr i) and 1);
Reverse := res;
end; { Reverse }
begin
write('num1=');
readln(num1);
writeln('Введенное число');
PrintBinary(num1);
hi := $FF and (num1 shr 8); { левый байт }
lo := $FF and num1; { правый байт }
writeln('Число с переставленными битами');
num2 := (Reverse(hi) shl 8) or Reverse(lo);
PrintBinary(num2);
Readln;
end.
{ 3)Строку, представляющую собой запись вещественного числа в форме с
фиксированной точкой, преобразовать в строку, представляющую собой
запись того же числа в форме с плавающей точкой в нормализованном виде.
Считаем, что мантисса всегда меньше единицы, а ее первый
разряд содержит отличную от нуля цифру }
program p177891c;
var
s1, s2: string;
i,power: integer;
len: integer;
len2: integer;
begin
write('s=');
readln(s1);
len := length(s1);
i:=1;
s2:= '';
while (i<=len) and not(s1[i] in ['-','.','0'..'9']) do
i:=i+1;
if (i>len) then
begin
writeln('Нет числа');
readln;
exit;
end;
if (s1[i]='-') then
begin
s2 := s2+'-';
i:=i+1;
end;
if not (s1[i] in ['.', '0'..'9']) then
begin
writeln('Нет числа');
readln;
exit;
end;
s2:=s2+'0.';
power:=0;
while (i<=len) and (s1[i]='0') do
i:= i+1;
while (i<=len) and (s1[i] in ['0'..'9']) do
begin
s2:= s2+s1[i];
i:= i+1;
power:= power+1;
end;
if (s1[i]='.') then
i:=i+1;
if (power=0) then
while (i<=len) and (s1[i]='0') do
begin
power:= power-1;
i:= i+1;
end;
while (i<=len) and (s1[i] in ['0'..'9']) do
begin
s2:=s2+s1[i];
i:= i+1;
end;
s2:=s2+'e';
if (power>=0) then
s2:=s2+'+'
else
s2:=s2+'-';
if (power<0) then
power:=-power;
s2:=s2+chr(ord('0')+power mod 10);
while (power >= 10) do
begin
power:= power div 10;
len2:= length(s2);
s2 := s2+s2[len2];
s2[len2]:= chr(ord('0')+power mod 10);
end;
writeln(s2);
readln;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.