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

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

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

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


Новичок
*

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

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


Помогите решить задачу:
Информация: Натуральное число, записанное в шестнадцатиричной системе счисления в формате string.
Задание: Вывести значение этого числа в восьмиричной системе счисления.
Примечание: значение числа может не вмещаться в формат longint, но вмещается в string.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
volvo
сообщение 22.09.2005 15:50
Сообщение #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

 



- Текстовая версия 19.07.2025 15:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"