Var f:text; ars:array of string; s,s1:string; min,n,i:integer; begin n:=1; min:=integer.MaxValue; assign(f,'text.txt'); reset(f); while not(Eof(f)) do begin readln(f,s); s1:=s; s:=s.Trim; i:=1; while i<>length(s) do if (s[i]=' ') and (s[i+1]=' ') then delete(s,i,1) else inc(i); if ((s.split).length<=min) and ((s.split).length<>0) then begin if (s.split).length=min then begin inc(n); setlength(ars,n); ars[n-1]:=s1; end else begin n:=1; setlength(ars,n); ars[n-1]:=s1; end; min:=(s.split).length; end; end; close(f); assign(f,'text1.txt'); rewrite(f); for i:=0 to n-1 do writeln(f,ars[i]); close(f); end.
R=A+B+C, где A=53₁₀, B=653₈, C=DA₁₆, R=R₂ Эту задачу можно решать разными выбор зависит от умения решающего выполнять сложение в той или иной системе счисления. Но в любом варианте, сначала нужно представить А, В, С в какой-то одной системе счисления.
Посмотрим, как это будет выглядеть, если пользоваться привычной нам десятичной системой. 653₈ = 6·8²+5·8¹+3·8⁰ = 6·64+5·8+3 = 427 DA₁₆ = 13·16¹+10·16⁰ = 218 R₁₀ = 53+427+218 = 698 Переводим полученное число в двоичную систему, получая R₂: 698/2=349, остаток 0 349/2=174, остаток 1 174/2=87, остаток 0 87/2=43, остаток 1 43/2 =21, остаток 1 21/2=10, остаток 1 10/2=5, остаток 0 5/2=2, остаток 1 2/2=1, остаток 0 1/2=0, остаток 1 Выписываем остатки в обратном порядке: 1010111010. Это и есть ответ.
А теперь допустим, что мы хорошо владеем восьмеричной системой счисления. 1) получим А₈ 53/8=6, остаток 5 6/8=0, остаток 6 Выписываем остатки в обратном порядке: А₈=65 2) получим С₈, для чего перейдем сначала в двоичную систему С₂=1101 1010 (просто заменяем каждую цифру четырьмя двоичными). А теперь разобьем справа налево полученное значение по три разряда и каждую полученную триаду заменим восьмеричной цифрой. 11 011 010₂ = 332₈ 3) Выполним сложение R₈=A₈+B₈+C₈ 65 740 +653 +332
740 1272 Складывать в восьмеричной системе просто, если знать одну маленькую хитрость. 8 отличается от 10 на 2, поэтому и результат сложения в восьмеричной системе на 2 больше, чем в десятичной, если число превышает 7. Смотрим: 5+3=8, но это в десятичной, а в восьмеричной это на 2 больше, т.е. 10. Поэтому мы пишем 0 и +1 идет в следующий разряд. 6+5=11 и еще +1 от переноса, итого 12. Но в восьмеричной на 2 больше, т.е. 14. 4 пишем. +1 перенос. 6 и +1 от переноса - 7. Вот и получили 740. 4) Мы нашли R₈, переходим к R₂. Заменяем каждую восьмеричную цифру тремя двоичными: 1272₈=1 010 111 010₂ Мы получили тот же ответ, что и в предыдущем расчета.
Так что - дело привычки. Второй вариант кажется "непосвященному" сложнее, но на самом деле в нем меньше арифметики и если нет под рукой калькулятора, то может оказаться и быстрее, и удобнее.
Var
f:text;
ars:array of string;
s,s1:string;
min,n,i:integer;
begin
n:=1;
min:=integer.MaxValue;
assign(f,'text.txt');
reset(f);
while not(Eof(f)) do
begin
readln(f,s);
s1:=s;
s:=s.Trim;
i:=1;
while i<>length(s) do
if (s[i]=' ') and (s[i+1]=' ') then delete(s,i,1) else inc(i);
if ((s.split).length<=min) and ((s.split).length<>0) then
begin
if (s.split).length=min then
begin
inc(n);
setlength(ars,n);
ars[n-1]:=s1;
end
else
begin
n:=1;
setlength(ars,n);
ars[n-1]:=s1;
end;
min:=(s.split).length;
end;
end;
close(f);
assign(f,'text1.txt');
rewrite(f);
for i:=0 to n-1 do
writeln(f,ars[i]);
close(f);
end.
Содержимое файла text.txt:
Хей патимейкер
уличный
денсер
шейкер шейкер
Содержимое файла text1.txt:
уличный
денсер
A=53₁₀,
B=653₈,
C=DA₁₆,
R=R₂
Эту задачу можно решать разными выбор зависит от умения решающего выполнять сложение в той или иной системе счисления. Но в любом варианте, сначала нужно представить А, В, С в какой-то одной системе счисления.
Посмотрим, как это будет выглядеть, если пользоваться привычной нам десятичной системой.
653₈ = 6·8²+5·8¹+3·8⁰ = 6·64+5·8+3 = 427
DA₁₆ = 13·16¹+10·16⁰ = 218
R₁₀ = 53+427+218 = 698
Переводим полученное число в двоичную систему, получая R₂:
698/2=349, остаток 0
349/2=174, остаток 1
174/2=87, остаток 0
87/2=43, остаток 1
43/2 =21, остаток 1
21/2=10, остаток 1
10/2=5, остаток 0
5/2=2, остаток 1
2/2=1, остаток 0
1/2=0, остаток 1
Выписываем остатки в обратном порядке: 1010111010.
Это и есть ответ.
А теперь допустим, что мы хорошо владеем восьмеричной системой счисления.
1) получим А₈
53/8=6, остаток 5
6/8=0, остаток 6
Выписываем остатки в обратном порядке: А₈=65
2) получим С₈, для чего перейдем сначала в двоичную систему
С₂=1101 1010 (просто заменяем каждую цифру четырьмя двоичными).
А теперь разобьем справа налево полученное значение по три разряда и каждую полученную триаду заменим восьмеричной цифрой.
11 011 010₂ = 332₈
3) Выполним сложение R₈=A₈+B₈+C₈
65 740
+653 +332
740 1272
Складывать в восьмеричной системе просто, если знать одну маленькую хитрость. 8 отличается от 10 на 2, поэтому и результат сложения в восьмеричной системе на 2 больше, чем в десятичной, если число превышает 7. Смотрим: 5+3=8, но это в десятичной, а в восьмеричной это на 2 больше, т.е. 10. Поэтому мы пишем 0 и +1 идет в следующий разряд. 6+5=11 и еще +1 от переноса, итого 12. Но в восьмеричной на 2 больше, т.е. 14. 4 пишем. +1 перенос. 6 и +1 от переноса - 7. Вот и получили 740.
4) Мы нашли R₈, переходим к R₂.
Заменяем каждую восьмеричную цифру тремя двоичными:
1272₈=1 010 111 010₂
Мы получили тот же ответ, что и в предыдущем расчета.
Так что - дело привычки. Второй вариант кажется "непосвященному" сложнее, но на самом деле в нем меньше арифметики и если нет под рукой калькулятора, то может оказаться и быстрее, и удобнее.
ответ: 1010111010