Pascal. 16ричное число превести в 2ичное

Ответить
fareng8
Сообщения: 12
Зарегистрирован: 14 янв 2009, 21:33

Дано шестнадцатеричное число. пересести его в двоичное.
задача строкового типа.
для замены использовать оператор case (вот тут и возникли проблемы).

Очень желательно изобразить все это в коде.
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Берёшь 16-ричную цифру и представляешь её в виде нулей и единиц, например число 5EF: 5 - будет 0101, E - 1110, F - 1111, итог - 10111101111. Всё что нужно - это сопоставить строки цифрам. Незначащие нули слева можно отбросить.
fareng8
Сообщения: 12
Зарегистрирован: 14 янв 2009, 21:33

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

это само собой разумеещееся. Но case не работает со строками, как быть?
сначало сделал так, чтобы число выбиралось из массива, но дали задание переделать, чтобы делалось это через case.
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

зато case работает с символами))
ака хинт: коментируйте код, самим же легче будет разобраться ;)
fareng8
Сообщения: 12
Зарегистрирован: 14 янв 2009, 21:33

demon416, к сожалению, меня это не навело на мысли.
как строку представить в виде символов, а потом заставить case с ними работать?
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

fareng8 писал(а):как строку представить в виде символов, а потом заставить case с ними работать?

Я не знаю синтаксис Paskal, но должно быть примерно так:
case 'F'
s="1111"
fareng8
Сообщения: 12
Зарегистрирован: 14 янв 2009, 21:33

вроде кое чего нашел, кое чего накалякал. но паскаль 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.
fareng8
Сообщения: 12
Зарегистрирован: 14 янв 2009, 21:33

благодарствую. в смоем глазу и пещинки не заметишь)
Ответить