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

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

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

Восстановить пароль

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

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

Дело в том что логические команды мы никогда не использовали, по крайней мере пока, и задание дал учитель по компьютерным сетям, а не по делфи, так что если можете растолкуйте что к чему
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 09.03.2013, 03:29   #12
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

операцию XOR применить не знаю как, пришлось разрабатывать свой алгоритм, заполняем массив строк, потом последовательно выводим по две строки из массива, суммируем их и выводим в ричедит
Код:
var
s,l,m,k:string;
i,j:Integer;


procedure TForm1.Button1Click(Sender: TObject);
var
    a:array[1..255] of string;
    s1,k1,i1,ki:integer;
begin
  Edit1.Text:=Trim(Edit1.text);
  Edit2.Text:=Trim(Edit2.text);
  RichEdit1.clear;
 if RadioButton1.Checked then
 begin
 if edit1.text='' then exit;
 j:=0;
 ki:=0;
 RichEdit1.Lines.Add('Âûïèñûâàåì íîìåðà ïîçèöèé 1 ñ êîíöà â âàøåì ÷èñëå è ïåðåâîäèì â äâîè÷íûé êîä:');
 RichEdit1.lines.Add('----------------------------------------------------------');
 for i:=length(Edit1.text) downto 1 do
 begin
  if Edit1.Text[i]='1' then
  begin
  a[j]:=bin(length(Edit1.text)-i+1);
  RichEdit1.Lines.Add(IntToStr(length(Edit1.text)-i+1)+'='+bin(length(Edit1.text)-i+1));
  Inc(j);
  end;
  end;
  i:=j;
 RichEdit1.lines.Add('----------------------------------------------------------');
 for j:=0 to i do
 begin
 s:=a[j];
 k:=a[j+1];
 s1:=Length(s);
 k1:=Length(k);
 if (s1=k1) or (s1>k1) then
 begin
  for i1:=s1 downto 1 do
  begin
  if (s[Length(s)-ki]='0')  and (k[Length(k)-ki]='1') or (s[Length(s)-ki]='1')  and (k[Length(k)-ki]='0') then
  m:='1'
  else
  if (s[Length(s)-ki]='0')  and (k[Length(k)-ki]='0') then
  m:='0'
  else
  if (s[Length(s)-ki]='1')  and (k[Length(k)-ki]='1') then m:='1';
  l:=l+m;
  inc (ki);
  end;
 end
 else
 begin
  for i1:=k1 downto 1 do
  begin
  if (s[Length(s)-ki]='0')  and (k[Length(k)-ki]='1') or (s[Length(s)-ki]='1')  and (k[Length(k)-ki]='0') then
  m:='1'
  else
  if (s[Length(s)-k1]='0')  and (k[Length(k)-k1]='0') then
  m:='0'
  else
  if (s[Length(s)-k1]='1')  and (k[Length(k)-k1]='1') then m:='1';
  l:=l+m;
  inc (ki);
  end;
 end;
 end;
 RichEdit1.Lines.Add(l);
 Edit1.SetFocus;
 end
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 09.03.2013, 16:14   #13
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ну дак что, будут еще советы?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 09.03.2013, 16:21   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так попробуйте, отрицание сами сделайте
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k: Integer;
begin
  Edit1.Text:=Trim(Edit1.text);
  if edit1.text='' then exit;
  RichEdit1.clear;
  if RadioButton1.Checked then begin
    k:=0;
    for i:=length(Edit1.text) downto 1 do  if Edit1.Text[i]='1' then begin
      RichEdit1.Lines.Add(IntToStr(length(Edit1.text)-i+1)+'='+bin(length(Edit1.text)-i+1));
      k:=k xor (length(Edit1.text)-i+1);
    end;
    RichEdit1.Lines.Add('');
    RichEdit1.Lines.Add(IntToBin(k,16);
    Edit1.SetFocus;
  end;
  Button2.Visible:=True;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.03.2013, 17:10   #15
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А что если попробовать массивом записей?
там где пустые begin...end должна быть процедура сложения по модулю два, еще нужно учесть что первое слагаемое может быть 10101 допустим, а второе 101, а в итоге должно получится так 10000
Код:
procedure TForm1.Button1Click(Sender: TObject);
type
  zap=record
  nomber:string[100];
  dvoich:string[255];
  end;
var  i,j:integer;
     a:array[1..255] of zap;
     s,l:string;
begin
RichEdit1.Clear;
Edit1.Text:=Trim(Edit1.text);
 j:=0;
 for i:=Length(Edit1.Text) downto 1 do
   if Edit1.Text[i]='1' then
   begin
   a[j].nomber:=IntToStr(Length(Edit1.Text)-i+1);
   a[j].dvoich:=bin(Length(Edit1.Text)-i+1);
   RichEdit1.Lines.Add(a[j].nomber+'='+a[j].dvoich);
   if j<>i then Inc(j);
   end;
 for i:=0 to j do
 begin



 
 end;
end;
Аватар! спасибо вам за помощь, смотрю ваш код

З.Ы. Сделал без Tradiobutton, потому что пока эта процедура не готова-другие бессмысленные
from dark to light)

Последний раз редактировалось Алексей_2012; 09.03.2013 в 17:13.
Алексей_2012 вне форума Ответить с цитированием
Старый 09.03.2013, 17:23   #16
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

аватар! спасибо вам огромное, все работает, но я пытаюсь убрать нули, перед суммой которые, не получается(( и еще, зачем отрицание? Итак все хорошо работает
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k: Integer;
begin
  Edit1.Text:=Trim(Edit1.text);
  if edit1.text='' then exit;
  RichEdit1.clear;
    k:=0;
    j:=Length(Edit1.text);
    for i:=length(Edit1.text) downto 1 do
    if Edit1.Text[i]='1' then
    begin
      RichEdit1.Lines.Add(IntToStr(length(Edit1.text)-i+1)+'='+bin(length(Edit1.text)-i+1));
      k:=k xor (length(Edit1.text)-i+1);
      j:=Length(Edit1.text)-i+1;
    end;
    RichEdit1.Lines.Add('-----------------------------');
    RichEdit1.Lines.Add(IntToBin(k,j));
    Edit1.SetFocus;
end;
Ввел 10101, результат


1=1
3=11
5=101
-----------------------------
00111

должно быть 111, а получается 00111
from dark to light)

Последний раз редактировалось Алексей_2012; 09.03.2013 в 17:27.
Алексей_2012 вне форума Ответить с цитированием
Старый 09.03.2013, 17:35   #17
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Вот как я решил эту проблему, но код больше получился+если в результате одни нули, то выводится их бесконечное число
Код:
procedure TForm1.Button1Click(Sender: TObject);
var  i,k,j:integer;
s:string;
begin
  Edit1.Text:=Trim(Edit1.text);
  if edit1.text='' then exit;
  RichEdit1.clear;
    k:=0;
    for i:=length(Edit1.text) downto 1 do
    if Edit1.Text[i]='1' then
    begin
      RichEdit1.Lines.Add(IntToStr(length(Edit1.text)-i+1)+'='+bin(length(Edit1.text)-i+1));
      k:=k xor (length(Edit1.text)-i+1);
      j:= length(Edit1.text)-i+1;
    end;
    RichEdit1.Lines.Add('-----------------------------');
    s:=IntToBin(k,j);
    for i:=1 to Length(s) do
    if s[i]='1' then s:=Copy(s,i,Length(s));
    RichEdit1.Lines.Add(s);
    Edit1.SetFocus;
end;
from dark to light)

Последний раз редактировалось Алексей_2012; 09.03.2013 в 17:48.
Алексей_2012 вне форума Ответить с цитированием
Старый 09.03.2013, 17:52   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
    for i:=1 to Length(s) do
    if s[i]='1' then s:=Copy(s,i,Length(s));
Не правильно (и вообще может на ошибку вывалиться), для '0101' получится '1' вместо '101'. Тогда уж так
Код:
i:=Pos('1',s);
if i>0 then s:=Copy(s,i,Length(s)) else s:='';
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.03.2013 в 17:54.
Аватар вне форума Ответить с цитированием
Старый 09.03.2013, 17:58   #19
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ну я сделал по другому, но программа неверно работает, для начала мой код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var  i,k,j:integer;
s:string;
begin
  Edit1.Text:=Trim(Edit1.text);
  if edit1.text='' then exit;
  RichEdit1.clear;
    k:=0;
    for i:=length(Edit1.text) downto 1 do
    if Edit1.Text[i]='1' then
    begin
      RichEdit1.Lines.Add(IntToStr(length(Edit1.text)-i+1)+'='+bin(length(Edit1.text)-i+1));
      k:=k xor length(Edit1.text)-i+1;
    end;
    RichEdit1.Lines.Add('-----------------------------');
    s:=IntToBin(k,length(bin(length(Edit1.text)-i+1)));
    RichEdit1.Lines.Add(s);
    Edit1.Se
А ошибка вот в чем, ввел 101010, в ричедит появились такие символы: 110,100,10, должно получится 000, а получилось 100, должно складываться так: 110+100+010=000 (Решается по такому правилу: 0+1=1, 1+1=0, 0+0=0)
from dark to light)

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

k:=k xor (length(Edit1.text)-i+1);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы - не тот результат. amuleg Общие вопросы C/C++ 6 24.01.2012 14:25
не выводится результат rinatey Помощь студентам 0 06.12.2011 16:04
код Хеминга world12_tk Помощь студентам 0 02.06.2011 19:31
Код написал код, но ответ постоянно один и тот же SkuLLL Помощь студентам 4 14.12.2010 19:25
Не тот результат! Dawystrik Общие вопросы Delphi 3 22.03.2009 09:50