Program primer; Var f,h:text; I: integer; S: string; Begin Assign(f,'F.txt'); Assign(h,'H.txt'); rewrite(f);
Writeln('текст в файл F: ');
readln(s); writeln(f,s); //Записать текст в файл F close(f); Rewrite(h); Reset(f); Readln(f,s); write(h,' '); For i:=1 to length(s) do begin write(h,s[i]); //Переписать компоненты файла F в файл H if (s[i]=' ') then begin write(h,' '); //вставляя в начало каждого слова по двум пробела end; end;
N=8 в задании, насколько я понимаю, означает решение для восьмибитного представления данных, т.е. для случай, когда левый бит отводится под знак (0 - плюс, 1 - минус), а семь правых битов используются для представления числа. Отрицательное число представляется в дополнительном коде, т.е. нули заменяются единицами (и единицы - нулями), а потом в младшем разряде к полученному числу прибавляется единица. Вначале перевод. -13(10)=-0001101(2) Инвертируем биты: 1110010 Прибавляем единицу: 1110011 И дописываем слева 1 в качестве знака. 1 1110011 Аналогичным образом поступаем и с числом -7: -7(10)=-0000111(2) Инвертируем биты: 1111000 Прибавляем единицу: 1111001 И дописываем слева 1 в качестве знака. 1 1111001 Теперь сложение. Выполняем его в столбик для всех восьми бит. 11110011 + 11111001
11101100 У нас при сложении появилась единица переноса из левого разряда, но дальше уже разрядов нет и она просто отбрасывается. Результат получился с единичным знаковым разрядом. Поэтому для получения величины результата поступаем в обратном порядке: отделяем семь правых бит, вычитаем единицу и снова инвертируем полученное значение. Вместо единичного знакового разряда приписываем числу знак минус. 1101100 - 1 = 1101011. Инверсия: 0010100, результат -10100(2)=-20(10)
Var
f,h:text;
I: integer;
S: string;
Begin
Assign(f,'F.txt');
Assign(h,'H.txt');
rewrite(f);
Writeln('текст в файл F: ');
readln(s);
writeln(f,s); //Записать текст в файл F
close(f);
Rewrite(h);
Reset(f);
Readln(f,s);
write(h,' ');
For i:=1 to length(s) do
begin
write(h,s[i]); //Переписать компоненты файла F в файл H
if (s[i]=' ') then
begin
write(h,' '); //вставляя в начало каждого слова по двум пробела
end;
end;
close(f);
close(h);
end.
// Паскаль ABC
Отрицательное число представляется в дополнительном коде, т.е. нули заменяются единицами (и единицы - нулями), а потом в младшем разряде к полученному числу прибавляется единица.
Вначале перевод.
-13(10)=-0001101(2)
Инвертируем биты: 1110010
Прибавляем единицу: 1110011
И дописываем слева 1 в качестве знака. 1 1110011
Аналогичным образом поступаем и с числом -7:
-7(10)=-0000111(2)
Инвертируем биты: 1111000
Прибавляем единицу: 1111001
И дописываем слева 1 в качестве знака. 1 1111001
Теперь сложение. Выполняем его в столбик для всех восьми бит.
11110011
+ 11111001
11101100
У нас при сложении появилась единица переноса из левого разряда, но дальше уже разрядов нет и она просто отбрасывается.
Результат получился с единичным знаковым разрядом. Поэтому для получения величины результата поступаем в обратном порядке: отделяем семь правых бит, вычитаем единицу и снова инвертируем полученное значение. Вместо единичного знакового разряда приписываем числу знак минус.
1101100 - 1 = 1101011. Инверсия: 0010100, результат -10100(2)=-20(10)