Таблица истинности: увеличить количество столбцов

Нашел в интернете этот код:
procedure TForm1.Button1Click(Sender: TObject);
 var y,a,b,c:boolean;
     i:integer;
     astr,bstr,cstr,ystr:string;
begin
 i:=0;
 for a:=false to true do
   for b:=false to true do
     for c:=false to true do
       begin
         if a=false then astr:='0' else astr:='1';
         if b=false then bstr:='0' else bstr:='1';
         if c=false then cstr:='0' else cstr:='1';
         y:= not b or a and b or not c;
         if y=false then ystr:='0' else ystr:='1';
         Form1.StringGrid1.cells[0,i+1]:=astr;
         Form1.StringGrid1.cells[1,i+1]:=bstr;
         Form1.StringGrid1.cells[2,i+1]:=cstr;
         Form1.StringGrid1.cells[3,i+1]:=ystr;
         i:=i+1;
       end;
end;
он выводит таблицу со столбцами a b c y как увеличить количество столбцов чтобы было a b c d y причем чтобы правильно строилась и заполнялась таблица
1 ответ

procedure TForm1.FormCreate(Sender: TObject);
var c:char;
begin
with StringGrid1 do
 begin
  fixedrows:=1;
  fixedcols:=0;
  rowcount:=17; //16 ввариантов(2^4)+заголовок
  colcount:=5;//5 столбцов
  defaultcolwidth:=25;
  defaultrowheight:=25;
  for c:='a' to 'd' do
  cells[ord(c)-ord('a'),0]:=c;
  cells[4,0]:='y';
 end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var y,a,b,c,d:boolean;
    i:integer;
begin
 i:=0;
 for a:=false to true do
   for b:=false to true do
     for c:=false to true do
      for d:=false to true do
       begin
         y:= not b or a and b or not c and d;//здесь ваша формула
         with StringGrid1 do
          begin
           cells[0,i+1]:=inttostr(ord(a));
           cells[1,i+1]:=inttostr(ord(b));
           cells[2,i+1]:=inttostr(ord(c));
           cells[3,i+1]:=inttostr(ord(d));
           cells[4,i+1]:=inttostr(ord(y));
          end;
         i:=i+1;
       end;
 
end;
Если нужно вывести true-false, то изменить это
var
  Form1: TForm1;
  s:Boolean=true; //ïåðåìåГ*Г*Г*Гї äëÿ ïðåîáðГ*çîâГ*Г*ГЁГї true,false Гў ñòðîêó
defaultcolwidth:=50;
with StringGrid1 do
          begin
           cells[0,i+1]:=BoolToStr(a,s);
           cells[1,i+1]:=BoolToStr(b,s);
           cells[2,i+1]:=BoolToStr(c,s);
           cells[3,i+1]:=BoolToStr(d,s);
           cells[4,i+1]:=BoolToStr(y,s);
          end;