Страница 1 из 1

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

Добавлено: 04 фев 2009, 18:27
fareng8
Дано шестнадцатеричное число. пересести его в двоичное.
задача строкового типа.
для замены использовать оператор case (вот тут и возникли проблемы).

Очень желательно изобразить все это в коде.

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

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

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

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

это само собой разумеещееся. Но case не работает со строками, как быть?
сначало сделал так, чтобы число выбиралось из массива, но дали задание переделать, чтобы делалось это через case.

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

Добавлено: 04 фев 2009, 18:58
demon416
зато case работает с символами))

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

Добавлено: 04 фев 2009, 19:00
fareng8
demon416, к сожалению, меня это не навело на мысли.
как строку представить в виде символов, а потом заставить case с ними работать?

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

Добавлено: 04 фев 2009, 19:10
Albor
fareng8 писал(а):как строку представить в виде символов, а потом заставить case с ними работать?

Я не знаю синтаксис Paskal, но должно быть примерно так:
case 'F'
s="1111"

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

Добавлено: 04 фев 2009, 19:29
fareng8
вроде кое чего нашел, кое чего накалякал. но паскаль 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.

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

Добавлено: 04 фев 2009, 22:08
Naeel Maqsudov
Ну правильная ошибка. "А" повторяется 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.

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

Добавлено: 04 фев 2009, 22:26
fareng8
благодарствую. в смоем глазу и пещинки не заметишь)