IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Системы счисления, Перевести из одной в другую!
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской
Реальное имя: Макс

Репутация: -  0  +


Помогите решить задачу:
Информация: Натуральное число, записанное в шестнадцатиричной системе счисления в формате string.
Задание: Вывести значение этого числа в восьмиричной системе счисления.
Примечание: значение числа может не вмещаться в формат longint, но вмещается в string.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Когда-то делал вот такое. Посмотри, может тебе подойдет?
function HexToBin(s: string): string;
function get_index(ch: char): byte;
begin
case upcase(ch) of
'0'..'9': get_index := ord(ch) - ord('0');
'A'..'F': get_index := $A + ord(upcase(ch)) - ord('A');
end;
end;

const
h_b: array[0 .. $F] of string[4] =
('0000', '0001', '0010', '0011',
'0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011',
'1100', '1101', '1110', '1111');
var
i: integer;
res: string;
begin
res := '';
for i := 1 to length(s) do
res := res + h_b[ get_index(s[i]) ];
HexToBin := res;
end;

function BinToOct(s: string): string;
const
b_oct: array[0 .. 7] of string[3] =
('000', '001', '010', '011',
'100', '101', '110', '111');

function get_index(st: string): byte;
var i: integer;
begin
for i := 0 to 7 do
if st = b_oct[i] then begin
get_index := i; exit
end;
end;

var
res, group: string;

begin
while s[1] = '0' do
delete(s, 1, 1);

while (length(s) mod 3) <> 0 do
s := '0' + s;

while length(s) >= 3 do begin
group := copy(s, length(s)-2, 3);
delete(s, length(s)-2, 3);
res := chr(ord('0')+get_index(group)) + res;
end;
BinToOct := res;
end;

Вызывать как-то вот так:
writeln( BinToOct(HexToBin('1234')) );
 К началу страницы 
+ Ответить 

Сообщений в этой теме


Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 9:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name