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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2014, 18:47   #1
danek130995
Пользователь
 
Регистрация: 26.10.2014
Сообщений: 27
По умолчанию Формула для составления таблицы истинности

Не могу составить формулу, по которой бы заполнялся StringGrid нулями и единицами. Знаю, что число строк это 2^n, где n-число переменных. Нужное количество строк и столбцов уже появляется. А вот по какой формуле сделать автоматическое заполнение StringGrid нулями и единицами в нужной последовательности?
danek130995 вне форума Ответить с цитированием
Старый 26.10.2014, 19:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Знаю, что число строк это 2^n, где n-число переменных.
Откуда познания?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.10.2014, 21:12   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

ващето, кроме количества логических переменных необходимо знать логические операции с этими переменными, что в итоге есть лог. выражение, по которому и строится таблица истинности.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.10.2014, 21:41   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Я бы посоветовал делать так.
Будем нумеровать столбцы слева направо, начиная с 1.
1-й столбец на половину заполняем нулями, потом единицами.
2-й столбец на одну четверть заполняем нулями, на одну четверть 1, потом снова четверть нули и потом четверть единицы.
3-й столбец на тоже самое, но для 1/8
И так далее.
Наконец получится, что последний столбец (самый правый) будет будет по строкам чередовать нули и единицы (нечётные содержат нули, а чётные - единицы)
Вадим Мошев вне форума Ответить с цитированием
Старый 27.10.2014, 08:59   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а я бы делал цикл от 0 до (2^n-1),
в цикле переводил число в двоичный вид (и сразу раскладывал по разрядам - каждый разряд в отдельный столбец)
и всё.
можно цикл завершать просто по условию - когда во всех N разрядах получены единицы.

Например, для N= 3
будут такие строки в StringGrid
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1


danek130995, пример набросать?

Последний раз редактировалось Serge_Bliznykov; 27.10.2014 в 09:01.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.10.2014, 15:17   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

http://programmersforum.ru/showthread.php?t=78287
phomm вне форума Ответить с цитированием
Старый 28.10.2014, 20:07   #7
danek130995
Пользователь
 
Регистрация: 26.10.2014
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Я бы посоветовал делать так.
Будем нумеровать столбцы слева направо, начиная с 1.
1-й столбец на половину заполняем нулями, потом единицами.
2-й столбец на одну четверть заполняем нулями, на одну четверть 1, потом снова четверть нули и потом четверть единицы.
3-й столбец на тоже самое, но для 1/8
И так далее.
Наконец получится, что последний столбец (самый правый) будет будет по строкам чередовать нули и единицы (нечётные содержат нули, а чётные - единицы)
Да, вы правы, я так и хочу сделать, только вот как дать понять ему, чтобы он следующий столбец делил еще, и чередовал? Цикл в цикле уже пробую..
danek130995 вне форума Ответить с цитированием
Старый 28.10.2014, 20:14   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

блин, ты меня устал. давай я тебе утром пример напишу, шоб ты үспокоился?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 28.10.2014 в 20:18.
min@y™ вне форума Ответить с цитированием
Старый 28.10.2014, 20:31   #9
danek130995
Пользователь
 
Регистрация: 26.10.2014
Сообщений: 27
По умолчанию

вот код
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
  StdCtrls,Math;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Click(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }



procedure TForm1.Button1Click(Sender: TObject);
  var i,j,k,z1:integer; z:real;
begin

 StringGrid1.RowCount:=1;StringGrid1.ColCount:=1;
ListBox1.Items.Clear;


  for i:=1 to length(edit1.text) do begin
  k:=0;
  if edit1.text[i] in ['A'..'Z','a'..'z'] then
  for j:=0 to ListBox1.Items.Count-1 do
  if edit1.text[i]=ListBox1.Items[j] then
  k:=k+1;
  if k=0 then
  ListBox1.Items.Add(edit1.text[i]);
  end;


 for i:=1 to ListBox1.Items.Count do
StringGrid1.RowCount:=StringGrid1.RowCount*2;
 StringGrid1.RowCount:=StringGrid1.RowCount+1;
 StringGrid1.ColCount:=ListBox1.Items.Count+1;
 for j:=0 to ListBox1.Items.Count-1 do
 stringgrid1.cells[j,0]:=Listbox1.Items[j];


 z:= (StringGrid1.RowCount-1)/2;
  z1:=round(z);
 for j:=1 to z1 do
 stringgrid1.cells[0,j]:=inttostr(0);
 for j:=(z1+1) to StringGrid1.RowCount-1 do
 stringgrid1.cells[0,j]:=inttostr(1);

 for i:=1 to stringgrid1.ColCount-2 do begin
 for j:=1 to stringgrid1.RowCount-1 do
 stringgrid1.cells[i,j]:=stringgrid1.cells[i-1,j];{вот здесь надо задумать что то, чтобы что то делалось с предыдущей строкой для составления текущей
 end;

 {for i:=0 to StringGrid1.RowCount-1 do
for j:=ListBox1.Items.Count-1 downto 0 do
if ((i and (1 shl j))>0) then stringgrid1.Cells[ListBox1.Items.Count-1-j-1,i]:='1'
else stringgrid1.Cells[ListBox1.Items.Count-1-j-1,i]:='0'; }



end;

procedure TForm1.Edit1Click(Sender: TObject);
begin
  Edit1.clear;
end;

end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.10.2014 в 08:22.
danek130995 вне форума Ответить с цитированием
Старый 28.10.2014, 20:41   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
function IntToBin(Value: Integer; Digits: Integer): string;
var i: integer;
begin
  Result:='';
  for i:=0 to Digits-1 do Result:=IntToStr(Integer(Value and (1 shl i) <> 0))+Result;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i,j,n: Integer;
    s: String;
begin
  n:=8;
  StringGrid1.FixedCols:=0;
  StringGrid1.FixedRows:=0;
  StringGrid1.ColCount:=n;
  StringGrid1.RowCount:=1 shl n;
  for i:=0 to 1 shl n - 1 do begin
    s:=IntToBin(i,n);
    for j:=1 to n do StringGrid1.Cells[j-1,i]:=s[j];
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.10.2014 в 20:44.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу для построения таблицы истинности Alexzak Паскаль, Turbo Pascal, PascalABC.NET 17 14.01.2015 11:00
формула в эксель для сравнивания строчек таблицы Nick31 Помощь студентам 0 08.06.2012 15:41
Таблицы истинности diablo2012 Помощь студентам 0 10.01.2012 01:26
формула для таблицы daria m Microsoft Office Excel 20 02.01.2011 03:39
Таблицы истинности PAVEL315 Помощь студентам 1 28.02.2010 19:24