Pascal. 16ричное число превести в 2ичное
Дано шестнадцатеричное число. пересести его в двоичное.
задача строкового типа.
для замены использовать оператор case (вот тут и возникли проблемы).
Очень желательно изобразить все это в коде.
задача строкового типа.
для замены использовать оператор case (вот тут и возникли проблемы).
Очень желательно изобразить все это в коде.
Берёшь 16-ричную цифру и представляешь её в виде нулей и единиц, например число 5EF: 5 - будет 0101, E - 1110, F - 1111, итог - 10111101111. Всё что нужно - это сопоставить строки цифрам. Незначащие нули слева можно отбросить.
Albor писал(а):Берёшь 16-ричную цифру и представляешь её в виде нулей и единиц, например число 5EF: 5 - будет 0101, E - 1110, F - 1111, итог - 10111101111. Всё что нужно - это сопоставить строки цифрам. Незначащие нули слева можно отбросить.
это само собой разумеещееся. Но case не работает со строками, как быть?
сначало сделал так, чтобы число выбиралось из массива, но дали задание переделать, чтобы делалось это через case.
зато case работает с символами))
ака хинт: коментируйте код, самим же легче будет разобраться 

demon416, к сожалению, меня это не навело на мысли.
как строку представить в виде символов, а потом заставить case с ними работать?
как строку представить в виде символов, а потом заставить case с ними работать?
fareng8 писал(а):как строку представить в виде символов, а потом заставить case с ними работать?
Я не знаю синтаксис Paskal, но должно быть примерно так:
case 'F'
s="1111"
вроде кое чего нашел, кое чего накалякал. но паскаль ABC выдает ошибку "Ошибка: перечисление диапазонов меток в операторе case"
вот код:
вот код:
Код: Выделить всё
program str;
var
hex, bin : String;
i : Integer;
begin
Write('Введите 16-ричное число : ');
ReadLn(hex);
bin := '';
for I := 1 to Length(hex) do begin
case UpCase(hex[I]) of
'0': BIN := BIN + '0000';
'1': BIN := BIN + '0001';
'2': BIN := BIN + '0010';
'3': BIN := BIN + '0011';
'4': BIN := BIN + '0100';
'5': BIN := BIN + '0101';
'6': BIN := BIN + '0110';
'7': BIN := BIN + '0111';
'8': BIN := BIN + '1000';
'9': BIN := BIN + '1001';
'A': BIN := BIN + '1010';
'A': BIN := BIN + '1011';
'C': BIN := BIN + '1100';
'D': BIN := BIN + '1101';
'E': BIN := BIN + '1110';
'F': BIN := BIN + '1111';
end;
WriteLn(bin);
end.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Ну правильная ошибка. "А" повторяется 2 раза, и еще один End куда-то подевался.
Код: Выделить всё
program str;
var
hex, bin : String;
i : Integer;
begin
Write('Введите 16-ричное число : ');
ReadLn(hex);
bin := '';
for I := 1 to Length(hex) do begin
case UpCase(hex[i]) of
'0': BIN := BIN + '0000';
'1': BIN := BIN + '0001';
'2': BIN := BIN + '0010';
'3': BIN := BIN + '0011';
'4': BIN := BIN + '0100';
'5': BIN := BIN + '0101';
'6': BIN := BIN + '0110';
'7': BIN := BIN + '0111';
'8': BIN := BIN + '1000';
'9': BIN := BIN + '1001';
'A': BIN := BIN + '1010';
'B': BIN := BIN + '1011';
'C': BIN := BIN + '1100';
'D': BIN := BIN + '1101';
'E': BIN := BIN + '1110';
'F': BIN := BIN + '1111';
end;
end;
WriteLn(bin);
end.
благодарствую. в смоем глазу и пещинки не заметишь)