Не понимаю ничего. 1 . Выбрав произвольно любую пару столбцов, выполнить действия сложения и вычитания над числами на 8-ми разрядной сетке. Результат представьте в машинном коде естественного знакового формата.
2. Выполнить действия С1=A+B, С2=A-B, С3=B-A на 8-ми разрядной сетке. Исходные данные даны в десятичной системе счисления. Результат представьте в машинном коде естественного знакового формата.
1. Переводим отдельно целую часть, отдельно - дробную. Целую часть переводим путем последовательного целочисленного деления с остатком на основание системы, в которую осуществляется перевод. Нам надо сделать перевод в системы счисления по основаниям 2, 8 и 16, поэтому выбираем 16 - это даст меньше всего операций деления. 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 в нашем случае):
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
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