В
Все
Х
Химия
В
Видео-ответы
А
Алгебра
Г
Геометрия
О
ОБЖ
Д
Другие предметы
У
Українська література
Р
Русский язык
Б
Беларуская мова
У
Українська мова
Э
Экономика
Ф
Физика
М
Математика
Ф
Французский язык
Г
География
И
Информатика
М
МХК
О
Окружающий мир
П
Психология
Н
Немецкий язык
О
Обществознание
П
Право
И
История
М
Музыка
Л
Литература
Қ
Қазақ тiлi
Б
Биология
А
Английский язык
chifire
chifire
27.05.2020 22:58 •  Другие предметы

В файле numbers.dat записаны два числа: одно в восьмеричной системе, а другое — в шестнадцатеричной. Причем

Ответ:
000конфета000
000конфета000
16.04.2019 23:00
Решение задачи основано на быстром (поразрядном) переводе входных данных в двоичную систему счисления. Каждая цифра восьмеричного числа, за исключением первой, заменяется на 3 двоичные цифры, а каждая цифра шестнадцатеричного — на 4. Программа читает цифры из файла, запоминая в массиве результат перевода в двоичную систему. Далее сравниваются длины полученных массивов. Только если они равны, то производится их поэлементное сравнение, начиная со старшего разряда
Программа составлена верно, т.е. правильно сравнивает достаточно большие числа, не переводя их в десятичную систему. При переводе символа цифры в его числовое значение не анализируется каждый символ в отдельности. Допускается наличие в тексте программы одной пунктуационной ошибки. Пример правильной и эффективной программы:
var a,b:array[1..4000] of 0..1;
 n,m,i,j,k,l1,l2,p:integer;
 c:char;
begin
 assign(input,'numbers.dat'); reset(input);
 readln(n); read(c);
 k:=ord(c)-ord('0'); p:=4; l1:=0;
 while k div p =0 do p:=p div 2;
 while p>0 do
 begin
 l1:=l1+1; a[l1]:=k div p;
 k:=k mod p; p:=p div 2
 end;
 for i:=2 to n do
 begin
 read(c); k:=ord(c)-ord('0');
 p:=4;
 for j:=1 to 3 do
 begin
 l1:=l1+1; a[l1]:=k div p;
 k:= k mod p; p:=p div 2
 end
 end;
 readln(m); read(c); p:=8; l2:=0;
 if c in ['1'..'9'] then k:=ord(c)-ord('0')
   else k:=ord(c)-ord('A')+10;
 while k div p = 0 do p:=p div 2;
 while p>0 do
 begin
 l2:=l2+1; b[l2]:=k div p;
 k:= k mod p; p:=p div 2
 end;
 for i:=2 to m do
 begin
 read(c); p:=8;
 if c in ['0'..'9'] then k:=ord(c)-ord('0')
    else k:=ord(c)-ord('A')+10;
 for j:=1 to 4 do
 begin
 l2:=l2+1; b[l2]:=k div p;
 k:= k mod p; p:=p div 2
 end
 end;
 if l1<l2 then writeln('<') else
 if l1>l2 then writeln('>') else
 begin
 i:=1;
 while (i<l1)and(a[i]=b[i]) do i:=i+1;
 if a[i]<b[i] then writeln('<') else
 if a[i]>b[i] then writeln('>') else writeln('=')
 end
end.
0,0(0 оценок)
Популярные вопросы: Другие предметы
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?