Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 19:34   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию замена в бинарном коде 1 на 0 или 0 на 1

есть tedit, в нем бинарный код, по коду хеминга в этом коде ищется ошибка и изменяется на противоположное значение, ну если ошибка в 5 по счету бите, например там стоит 0, то его надо заменить на 1 или если там стоит 1, ТО ЗАМЕНИТЬ НА 0, проблема в самом цикла, как дойти именно до этого места с ошибкой я знаю, а как заменить-нет
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.03.2013, 19:47   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Может быть выложите часть кода? Не понятно в чём именно проблема.
Kix.IV вне форума Ответить с цитированием
Старый 17.03.2013, 19:48   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

читаете нужный байт из файла, меняете в нем нужный бит, записывайте обратно.
s-andriano вне форума Ответить с цитированием
Старый 17.03.2013, 20:28   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

я не выложу код, там его много, выложу прогу саму, (см. radiobutton2)
Вложения
Тип файла: rar хаффман.rar (195.2 Кб, 11 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.03.2013, 20:40   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
Length(txt1)-summator1+1
нужно заменить бит в позиции вычисляемой кодом

По сути прописать такое условие:

if <номер_позиции>='1' then <номер_позиции>:='0' else <номер_позиции>:='1';
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.03.2013, 20:51   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Код:
procedure inbertbit(bitpos: byte; var b: integer);
var a, p: integer;
begin
p := 1 shl bitpos;
a := b and p;
if a > 0 then
  b := b - p
else
  b := b + p;
end;
Что-то ничего поэлегантнее в голову не пришло...
Принцип: вычленяем бит, если он есть - то вычтем соотв. величину из числа, иначе - добавим.
Писалось тут, возможны косяки.

Последний раз редактировалось phomm; 17.03.2013 в 20:53.
phomm вне форума Ответить с цитированием
Старый 17.03.2013, 20:58   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
есть tedit, в нем бинарный код
Цитата:
ну если ошибка в 5 по счету бите, например там стоит 0, то его надо заменить на 1 или если там стоит 1, ТО ЗАМЕНИТЬ НА 0
Если правильно понял, а понять не очень просто. Не мешало бы более точно выражать
Код:
if edit.Text[5]='0' then edit.Text[5]:='1' else edit.Text[5]:='0';
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.03.2013, 21:08   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Проще в одну строку:
Код:
  b := b xor (1 shl bitpos);
s-andriano вне форума Ответить с цитированием
Старый 17.03.2013, 21:19   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
  if edit1.Text[Length(txt1)-summator1+1]='0' then edit1.Text[Length(txt1)-summator1+1]:='1' else edit1.Text[Length(txt1)-summator1+1]:='0';
не компилируется, пишет
[Error] xeming.pas(388): Left side cannot be assigned to
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 17.03.2013, 21:29   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я извиняюсь
Код:
s:=edit1.Text;
if s[Length(txt1)-summator1+1]='0' then s[Length(txt1)-summator1+1]:='1' else s[Length(txt1)-summator1+1]:='0';
edit1.Text:=s;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена строки в sql коде в ADOQUERY pusik БД в Delphi 7 16.05.2011 19:53
Поиск и замена в HTML-коде страницы загруженной в TWebBrowser iiunbreakableii Общие вопросы Delphi 4 01.01.2011 07:54
Ошибка в коде или что-то другое? Яр|/||< (^_^) PHP 17 17.06.2010 18:10
Замена в коде Crab2 Общие вопросы C/C++ 4 13.02.2010 00:26
Замена или вставка символа в char *. Lazio Общие вопросы C/C++ 11 30.09.2009 19:19