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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2016, 01:51   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Делфи. Ранжирование таблицы истиности

Ребят, всем привет, мне нужно программно заполнить массив 0 и 1.

массив - абстракция таблицы истиности. Проблема с чередованием элементов.



должно быть

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

Выходит так:

0 0 0
0 0 1
0 1 1
0 1 1
1 1 1
1 1 1
1 1 1
1 1 1


вот сбоящий участок кода
Код:
for i:=0 to stolb-1 do
begin
  k:=0;
   ocherednost:=polovina;
  for j:=0 to strok-1 do
  begin
      if ocherednost=0 then
      begin
         ocherednost:=polovina;
       k:=1;
      end;
      arr_rang[i][j]:=k;
      Dec (ocherednost);
  end;
 polovina:=polovina div 2;
end;
Как я только не извращался с кодом - все равно тоже самое выходит...
Код:
function stepen_dwa(step: byte): integer;
var i: byte;
begin
  Result := 1;
  for i := 1 to step do
    Result := result * 2;
end;


procedure TForm1.Button1Click(Sender: TObject);
 var stolb,strok,i,j,polovina,ocherednost,k:integer;
 arr_rang:array of array of Byte;
 s:string;
begin
stolb:=3;
strok:=stepen_dwa(stolb);
 SetLength(arr_rang,stolb,strok);
   polovina:=strok div 2;


for i:=0 to stolb-1 do
begin
  k:=0;
   ocherednost:=polovina;
  for j:=0 to strok-1 do
  begin
      if ocherednost=0 then
      begin
         ocherednost:=polovina;
       k:=1;
      end;
      arr_rang[i][j]:=k;
      Dec (ocherednost);
  end;
 polovina:=polovina div 2;
end;


      for j:=0 to strok-1 do
      begin
           s:='';
        for i:=0 to stolb-1 do
         s:=s+inttostr(arr_rang[i][j])+' ';
        memo1.Lines.add(s);
      end;
    arr_rang:=nil;
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.11.2016, 07:07   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

0.jpg
ura_111 вне форума Ответить с цитированием
Старый 24.11.2016, 07:51   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
должно быть
Товарищ, а Вам не кажется, что эта таблица полностью совпадает с двоичным представлением последовательных чисел от 0 до 7?
может просто for i:=0 to 7 и переводить i -> двоичный массив (три строчки кода) ?

Добавлено в 10:51
Впрочем, код от ura_111 именно это и делает.
Просто, быстро, надёжно, эффективно. и не нужны тонны кода со всякими polovina / ocherednost / stepen_dwa и прочими заморочками...

Последний раз редактировалось Serge_Bliznykov; 24.11.2016 в 10:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.11.2016, 10:31   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
    if ocherednost=0 then begin
      ocherednost:=polovina;
      k:=1; //теперь запишем 1 
    end; //а КАК мы вернемся к записям 0 НА ЭТОЙ строке???
вот и получается 0011111

в цикле { for j:=0 to strok-1 do } НЕТ установки k в ноль чтобы мочь записать 0 после 1
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.11.2016 в 10:33.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ранжирование альтернатив Julila Помощь студентам 3 05.10.2013 20:27
Написать программу для построения таблицы истиности логической функции. Elimay25 Паскаль, Turbo Pascal, PascalABC.NET 1 02.03.2012 08:34
Ранжирование данных nastya007 Microsoft Office Excel 12 06.11.2011 23:29
Ранжирование infix_khv Microsoft Office Excel 1 26.10.2010 08:07
Ранжирование и умножение масива 11111 Паскаль, Turbo Pascal, PascalABC.NET 3 02.11.2007 22:01