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

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

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

Версия системы:
7.47 (16.04.2018)

Общие новости:
13.04.2018, 10:33

Форум:
16.07.2018, 10:05

Последний вопрос:
16.07.2018, 07:17

Последний ответ:
13.07.2018, 17:32

Последняя рассылка:
15.07.2018, 19:45

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

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

Наша кнопка:

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

Отзывы о нас:
11.12.2011, 09:07 »
Senibol
Спасибо за ответ. Но по-моему процессор из "старичков", хотя и производительнее моего Х3 430. [вопрос № 184727, ответ № 269096]
10.10.2009, 01:04 »
PsySex
Спасибо!! Все рекомендации принял к сведению. [вопрос № 173073, ответ № 255237]
10.02.2011, 10:02 »
Вадим Исаев ака sir Henry
Большое спасибо! Благодаря Вам начал понимать, что такое "Кольцо". smile [вопрос № 182145, ответ № 265798]

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

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

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

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

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 311
mklokov
Статус: 6-й класс
Рейтинг: 23
Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 3

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

Консультация онлайн # 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.16106 сек.

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