Втаблице запросы и количество найденных по
ним страниц некоторого сегмента сети интернет.
запрос
найдено страниц (в тысячах)
малина—2900
клубника—1700
малина | клубника—3000
какое количество страд (3 тысячах) будет найдено по
запросу малина and клубика?
та е
125/16=7 остаток 13.
7 меньше 13, деление прекращаем. Теперь записываем частное, а за ним остатки в обратном порядке (это общее правило, а в нашем случае остаток единственный). Получаем 7 13. Заменяем полученные десятичные числа шестнадцатиричными и получаем 7D.
Теперь переводим дробную часть. Тут надо производить последовательное умножение на основание системы и отбрасывать целые части, записывая их в качестве получаемых цифр числа. Процесс ведут до получения нулевой дробной части или прекращают, если получено необходимое число цифр.
0.68х16=10.88, записываем 10, в 16й системе счисления это А
0.88х16=14.08, 14 ⇒ E
0.08x16=1.28, 1 ⇒ 1
0.28x16=4.48, 4 ⇒ 4
0.48x16=7.68, 7 ⇒ 7
0.68x16=10.88, 10 ⇒ E и все пошло по кругу.
Следовательно, дробная часть не может быть точно представлена в 16й системе счисления.
Ограничимся двумя цифрами после запятой.
Тогда результат перевода запишется так: 125.68(10)=7D.AE(16)
Переход к двоичной системе очень простой, поскольку 16 - это 2 в четвертой степени. Поэтому каждую шестнадцатиричную цифру мы просто заменяем четырьмя двоичными цифрами (так называемой тетрАдой).
7D.AE(16)=0111 1101.1010 1110(2) - очень простая операция.
Перевод из двоичной системы в восьмеричную тоже прост, поскольку 8 - это 2 в кубе. Разбиваем двоичное число на триАды (по три разряда) влево и вправо от десятичной точки и каждую триаду заменяем восьмеричной цифрой (они по написанию совпадают с десятичными). Если разрядов для триады не хватает, дополняем их нулями слева для целой части и справа для дробной.
001 111 101.101 011 100(2)=175.534(8)
2. Перевод из двоичного представления в восьмеричное мы только что делали. Повторим его.
111 011.001 101(2) = 73.15(8)
В шестнадцатиричную систему перевод делается так же, только двоичное число надо разбивать не на триады, а на тетрады. С дополнением нулями, как и для восьмеричной системы.
0011 1011.0011 0100(2) = 3В.34(16)
Осталось сделать перевод в десятичную систему счисления. Конечно, его можно выполнять для любого основания, но лучше брать такое, где меньше всего ненулевых цифр. В двоичном представлении 8 единиц, в восьмеричном и шестнадцатиричном - по 4. Следовательно можно брать или восьмеричное число, или шестнадцатиричное. Допустим, выбрано шестнадцатиричное число. Записываем его в расширенной форме по степеням основания (т.е. 16 в нашем случае):
gend = ['м', 'ж'];
type
tMan = record
gender: char;
fio: string;
height: integer
end;
var
man: tMan;
max1, max2: integer;
mfio: string;
f: file;
begin
{ Заполнение файла }
Assign(f, 'manfile.txt');
Rewrite(f);
Writeln('Введите через Enter пол (м/ж), фамилию и рост в см');
Writeln('Для отказа введите 0');
repeat
Readln(man.gender);
if man.gender in gend then
begin
Readln(man.fio);
Readln(man.height);
Write(f, man);
Writeln('Данные приняты, продолжайте')
end
until not (man.gender in gend);
Close(f);
{ Работа с файлом }
Assign(f, 'manfile.txt');
Reset(f);
max1 := 0; max2 := 0;
while not Eof(f) do
begin
Read(f, man);
with man do
if (gender = 'м') and (max1 < height) then
begin
max1 := height;
mfio := fio
end
else if (gender = 'ж') and (max2 < height) then max2 := height;
end;
Writeln('Самый высокий- ', mfio, ', рост самой высокой равен ', max2);
Close(f);
end.
Тестовое решение:
Введите через Enter пол (м/ж), фамилию и рост в см
Для отказа введите 0
м
Иванов И.И.
176
Данные приняты, продолжайте
ж
Егорова К.С.
169
Данные приняты, продолжайте
ж
Старова Г.К.
168
Данные приняты, продолжайте
м
Минкин Р.Т.
179
Данные приняты, продолжайте
0
Самый высокий- Минкин Р.Т., рост самой высокой равен 169