23.10.2018, 07:30 [+3 UTC]
в нашей команде: 3 032 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.51 (29.09.2018)

Общие новости:
24.09.2018, 16:49

Форум:
19.10.2018, 12:24

Последний вопрос:
21.10.2018, 21:37

Последний ответ:
22.10.2018, 13:51

Последняя рассылка:
23.10.2018, 03:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
04.12.2009, 04:30 »
Brutuss
Спасибо большое! Обязательно учту ваши советы во время покупки! [вопрос № 174730, ответ № 257254]
29.12.2009, 04:05 »
Грамотник Игорь
Спасибо за конструктивные замечания. [вопрос № 175616, ответ № 258144]
15.08.2017, 16:52 »
solest
Благодарю Вас за ответ и ссылки! [вопрос № 191278, ответ № 275196]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 624
Асмик Гаряка
Статус: Советник
Рейтинг: 19
Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 0

Перейти к консультации №:
 

Консультация онлайн # 66350
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Sarymian
Отправлена: 10.12.2006, 14:34
Поступило ответов: 1

Здравствуйте Эксперты.
Дана строка (перевод в Integer не вызывает проблем). Строка находится в Edit.text
Она представляет собой число в двоичной СС. Нужно перевести число в ВОСЬМЕРИЧНУЮ (8) СС, при этом нельзя использовать промежуточный перевод в десятичную(10) СС.
помогите плиз.

Состояние: Консультация закрыта

Ответ # 130878 от Вадим Исаев ака sir Henry (Старший модератор)

Здравствуйте, Sarymian!
Перевод в десятичную систему только усложнит задачу. :)
1. Разбиваете строку на триады, причем начинаете разбивку с конца.
2. Если в последней разбивке до триады не хватает одной или двух позиций, то дополняете нулями до триады.
3. Можно составить массив соответствия двоичного числа восьмеричному:
ar: array[0..7];
ar[1]:='000';
ar[1]:='001';
ar[2]:='010';
ar[3]:='011';
ar[4]:='100';
ar[5]:='101';
ar[6]:='110';
ar[7]:='111';
4. Посылаете каждую триаду в функцию, в которой в цикле проходит поиск в массиве:
Function BinToOct(s: string): string;
Var
i: integer;
Begin
For i:=0 To 7 do
If s=ar[i] Then
Begin
Result:=IntToStr(i);
Break;
End;
End;
5. В главной процедуре теперь только остается конкатенировать возвращаемое из функции и, если нужно, перевести в числовой формат.


Консультировал: Вадим Исаев ака sir Henry (Старший модератор)
Дата отправки: 10.12.2006, 17:58

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 66350

Посетитель

ID: 17049

# 1

= общий = | 12.12.2006, 09:07 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

А я бы сделал так:

const
 ar: array['0'..'1', '0'..'1', '0'..'1'] of char = ((('0', '1'), ('2', '3')), (('4', '5'), ('6', '7')));
var
 q,s: string;
 i,j: integer;

begin
 s := Edit1.Text;
 if (length(s) mod 3) <> 0 then s := '0' + s;
 if (length(s) mod 3) <> 0 then s := '0' + s;
 for i := length(s) downto 1 do begin
 j := i*3;
 q := q + ar[s[j-2], s[j-1], s[j]];
 end;
end;
Триады не передаются функции а прямо преобразовываются в нужные символы через массив.

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.13231 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.51 от 29.09.2018