- 1
- 2
- 3
- 4
- 5
- 6
- 7
// со времен Delphi 7.
procedure TfrmMain.AppDeactivate(Sender: TObject);
begin
OpenClipboard(0);
if (IsClipboardFormatAvailable(CF_TEXT)) then SetClipboardData(CF_LOCALE, 0);
CloseClipboard();
end;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+95
// со времен Delphi 7.
procedure TfrmMain.AppDeactivate(Sender: TObject);
begin
OpenClipboard(0);
if (IsClipboardFormatAvailable(CF_TEXT)) then SetClipboardData(CF_LOCALE, 0);
CloseClipboard();
end;
Полагаю, большинство в курсе, что при копировании русского текста из приложения, написанного на дельфи, в другое приложение иногда копируются кракозябры.
Это происходит, когда при копировании НЕ выбрана русская раскладка клавиатуры.
Удалось вылечить так.
+96
WM_KEYDOWN: begin
if GetAsyncKeyState(VK_CONTROL) <> 0 then case W of
integer('X') : SendMessage(H, WM_CUT, 0, 0);
integer('C') : SendMessage(H, WM_COPY, 0, 0);
integer('V') : SendMessage(H, WM_PASTE, 0, 0);
integer('Z') : SendMessage(H, WM_UNDO , 0, 0);
integer('Y') : ReDo(H);
integer('A') : SelectAll(H);
VK_INSERT : SendMessage(H, WM_COPY, 0, 0);
VK_PRIOR : MoveCaretLine (H, -1000000);
VK_NEXT : MoveCaretLine (H, 1000000);
VK_DELETE : SendMessage(H, WM_CLEAR, 0, 0);
// end else if GetAsyncKeyState(VK_ALT) then case W of
// VK_BACK : SendMessage(H, WM_UNDO , 0, 0);
end else if GetAsyncKeyState(VK_SHIFT) <> 0 then case W of
VK_DELETE : SendMessage(H, WM_CUT , 0, 0);
VK_INSERT : SendMessage(H, WM_PASTE, 0, 0);
end else case W of
VK_SHIFT : SDown(H);
VK_LEFT : MoveCaretSymbol (H, -1);
VK_RIGHT : MoveCaretSymbol (H, 1);
VK_UP : MoveCaretLine (H, -1);
VK_DOWN : MoveCaretLine (H, 1);
VK_PRIOR : MoveCaretLine (H, -MaxLinesInScreenByH(H));
VK_NEXT : MoveCaretLine (H, MaxLinesInScreenByH(H));
VK_DELETE : DeleteSymbol(H, False);
end;
DrawText(H);
Exit;
end;
Пишу свой винапи-класс типа Edit.
Так сделаны горячие клавиши.
+87
procedure GenerateMines; // Процедура генерации мин
label
again;
var
t,m:Integer; // Переменные для цикла
i,j:Byte; // Координаты на поле
bufer:String; // Вспомогательная переменная цикла. Хранит текущие сгенерированные координаты мины для записи в массив
begin
Randomize;
for t:= 1 To mines Do
begin
again:
i:=Round(Random*9+1);
j:=Round(Random*9+1);
bufer:=IntToStr(i) + ',' + IntToStr(j); // Создание строковой записи коордитаты мины
for m:= 1 To 100 Do // Цикл для проверки, есть ли сгенерированная координата в массиве
begin
if bufer = mines_a[m] then goto again; // Если сгенерированная координата в массиве есть, то программа генерирует новые координаты
end;
mines_a[t]:=bufer; // Запись новой координаты в массив
field[i,j]:=9; // Добавление мины на поле в сгенерированные координаты
end;
end;
Процедура генерации мин в сапёре. Говно или не?
+89
unit DllUnit; interface
uses windows, sysutils;
Procedure GuPrcA(var p:PAnsiChar;const l:integer); StdCall;
Procedure GuPrcW(var p:PWideChar;const l:integer); StdCall;
Exports GuPrcA,GuPrcW;
implementation
procedure GuMes(s:string);
begin
MessageBox(0,pchar(s),'From dll',mb_iconinformation);
end;
Procedure GuPrcW(var p:PWideChar;const l:integer); // wide
var s:widestring;
begin
if (p=nil)or(l<1) then begin p:=nil;exit;end;
SetLength(s,trunc(l/sizeof(widechar)));Move(p^,Pointer(s)^,l);
gumes('l: '+inttostr(l)+', nl: '+inttostr(length(s))+#10+'-'+s+'-');
s:=widestring(Uppercase(s));Move(Pointer(s)^,p^,l);
end;
Procedure GuPrcA(var p:Pansichar;const l:integer); // ansi
var s:ansistring;
begin
if (p=nil)or(l<1) then begin p:=nil;exit;end;
SetLength(s,l);Move(p^,Pointer(s)^,l);
gumes('l: '+inttostr(l)+', nl: '+inttostr(length(s))+#10+'-'+s+'-');
s:=ansistring(AnsiUppercase(s));Move(Pointer(s)^,p^,l);
end;
Initialization
ReportMemoryLeaksOnShutdown:=true;
end.
(* выше - DLL, ниже импорт из неё *)
...
implementation
{$R *.dfm}
Procedure GuPrcA(var p:PansiChar;const l:cardinal); StdCall; external 'mydll.dll' name 'GuPrcA';
Procedure GuPrcW(var p:PwideChar;const l:cardinal); StdCall; external 'mydll.dll' name 'GuPrcW';
procedure TForm1.Button6Click(Sender: TObject);
var p:pwidechar;c:cardinal;s:widestring;
begin
s:=widestring(memo1.Text);
c:=length(s)*sizeof(widechar);
p:=allocmem(c);
Move(Pointer(s)^,p^,c);
GuPrcW(p,c);
s:='';setlength(s,trunc(c/sizeof(widechar)));
Move(p^,Pointer(s)^,c);
Freemem(p,c);
memo1.Text:='='+s+'= l:'+inttostr(c);
end;
procedure TForm1.Button7Click(Sender: TObject);
var p:pansichar;c:cardinal;s:ansistring;
begin
s:=ansistring(memo1.text);
c:=length(s);
p:=allocmem(c);
Move(Pointer(s)^,p^,c);
GuPrcA(p,c);
s:='';setlength(s,c);
Move(p^,Pointer(s)^,c);
Freemem(p,c);
memo1.Text:='='+s+'= l:'+inttostr(c);
end;
Initialization
ReportMemoryLeaksOnShutdown:=true;
end.
На стековерфловочке завелся некий GuSoft (sic!), который регулярно постит свои высеры через гоогле транслате. Сегодня вот таким шедевром разродился, хочет бесплатных консультаций чтобы в этой херне ему поискали ошибки и «оптимизировали».
+98
if RadioGroup1.ItemIndex=0 then cpr:=cpr+1;
if RadioGroup1.ItemIndex=1 then cth:=cth+1;
if RadioGroup2.ItemIndex=0 then cch:=cch+1;
if RadioGroup2.ItemIndex=1 then czs:=czs+1;
if RadioGroup3.ItemIndex=0 then chd:=chd+1;
if RadioGroup3.ItemIndex=1 then cpr:=cpr+1;
if RadioGroup4.ItemIndex=0 then cth:=cth+1;
if RadioGroup4.ItemIndex=1 then cch:=cch+1;
if RadioGroup5.ItemIndex=0 then czs:=czs+1;
if RadioGroup5.ItemIndex=1 then chd:=chd+1;
if RadioGroup6.ItemIndex=0 then cpr:=cpr+1;
if RadioGroup6.ItemIndex=1 then cch:=cch+1;
if RadioGroup7.ItemIndex=0 then chd:=chd+1;
if RadioGroup7.ItemIndex=1 then cth:=cth+1;
....// Это всё в 60 строк
if (cpr>cth) and (cpr>cch) and (cpr>czs) and (cpr>chd) then cpr1:=+1
else
if (cth>cpr) and (cth>cch) and (cth>czs) and (cth>chd) then cth1:=+1
else
if (cch>cpr) and (cch>cth) and (cch>czs) and (cch>chd) then cch1:=+1
else
if (czs>cpr) and (czs>cch) and (czs>cth) and (czs>chd) then czs1:=+1
else
if (chd>cpr) and (chd>cch) and (chd>czs) and (chd>cth) then chd1:=+1;
if cpr>chd or czs or cth or cch then
begin
ShowMessage('человек-природа – все профессии, связанные с растениеводством, животноводством и лесным хозяйством;') ;
Datamodule4.ADOTable1.Edit;
Datamodule4.ADOTable1.FieldValues['test2']:=('человек-природа – все профессии, связанные с растениеводством, животноводством и лесным хозяйством;');
Datamodule4.ADOTable1.Post;
end
else
if chd>cpr or cth or cch or czs then begin
ShowMessage('человек-техника – все технические профессии;') ;
Datamodule4.ADOTable1.Edit;
Datamodule4.ADOTable1.FieldValues['test2']:=('человек-техника – все технические профессии;');
Datamodule4.ADOTable1.Post;
...... И далее результаты в общем их 5
отдельная кнопка для вывода остальных 10 вопросов х)
procedure TForm1.Button1Click(Sender: TObject);
begin
Radiogroup11.Visible:=true;
Radiogroup12.Visible:=true;
Radiogroup13.Visible:=true;
Radiogroup14.Visible:=true;
Radiogroup15.Visible:=true;
Radiogroup16.Visible:=true;
Radiogroup17.Visible:=true;
Radiogroup18.Visible:=true;
Radiogroup19.Visible:=true;
Radiogroup20.Visible:=true;
Button2.Visible:=True;
end;
Программа тестирования на профориентацию
хД сколько он radiogroup создал)
+101
//деление задачи на потоки
uTemp := 0;
while uTemp < uHTemp do
begin
case uTemp of
0 :uTipArr[uHTemp - 1].p2 := StrToInt(Edit1.Text);
//делим интегер :)
1 :uTipArr[1].p1 := uTipArr[uHTemp - 1].p2 shr Trunc(log2(StrToFloat(Edit1.Text)));
else //если не первая и не вторая
uTipArr[uTemp].p1 := uTipArr[1].p1 * uTemp;
end;
Inc(uTemp);
end;
+93
procedure _FinalizeArray(p: Pointer; typeInfo: Pointer; elemCount: Cardinal);
asm
CMP ECX, 0 { no array -> nop }
JE @@zerolength
PUSH EAX
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX,EAX
MOV ESI,EDX
MOV EDI,ECX
XOR EDX,EDX
MOV AL,[ESI]
MOV DL,[ESI+1]
CMP AL,tkLString
JE @@LString
CMP AL,tkWString
JE @@WString
CMP AL,tkVariant
JE @@Variant
CMP AL,tkArray
JE @@Array
CMP AL,tkRecord
JE @@Record
CMP AL,tkInterface
JE @@Interface
CMP AL,tkDynArray
JE @@DynArray
JMP @@error
@@LString:
CMP ECX,1
MOV EAX,EBX
JG @@LStringArray
CALL _LStrClr
JMP @@exit
@@LStringArray:
MOV EDX,ECX
CALL _LStrArrayClr
JMP @@exit
@@WString:
CMP ECX,1
MOV EAX,EBX
JG @@WStringArray
CALL _WStrClr
JMP @@exit
@@WStringArray:
MOV EDX,ECX
CALL _WStrArrayClr
JMP @@exit
@@Variant:
MOV EAX,EBX
ADD EBX,16
CALL _VarClr
DEC EDI
JG @@Variant
JMP @@exit
@@Array:
PUSH EBP
MOV EBP,EDX
@@ArrayLoop:
MOV EDX,[ESI+EBP+2+8]
MOV EAX,EBX
ADD EBX,[ESI+EBP+2]
MOV ECX,[ESI+EBP+2+4]
MOV EDX,[EDX]
CALL _FinalizeArray
DEC EDI
JG @@ArrayLoop
POP EBP
JMP @@exit
@@Record:
PUSH EBP
MOV EBP,EDX
@@RecordLoop:
{ inv: EDI = number of array elements to finalize }
MOV EAX,EBX
ADD EBX,[ESI+EBP+2]
Это так в дельфах автофинализация строк, длиннострок, вариантов, массивов, записей, интерфейсов, динмассивов реализована.
Вместо того, чтобы напрямую вызвать деструктор, там в рантайме (ПИЗДЕЦ, В РАНТАЙМЕ БЛЯТЬ!!!) проверяется тип поля, требующего финализацию и через три таких жопы наконец-то вызывается деструктор. И это, блять, я ещё создал свой TInterfacedObject, потому что иначе бы деструктор вызывался не через три жопы, а через четыре, и одна из них - системный вызов.
Да, это при включённой оптимизации всё, если чё.
+112
{...}
type
a=(
january,
february,
march,
{--------------}
april,
may,
june,
{--------------}
jule,
august,
september,
{--------------}
october,
november,
december
);
b=(
seаson1,
seаson2,
seаson3,
seаson4
);
c=(
winter,
spring,
summer,
autumn
);
{...}
function d(e:a):b;
begin
case e of
january,
february,
march
:d:=seаson1;
april,
may,
june
:d:=seаson2;
jule,
august,
september
:d:=seаson3;
october,
november,
december
:d:=seаson4
end
end;
function f(g:a):c;
begin
case g of
december,
january,
february
:f:=winter;
march,
may,
april
:f:=spring;
june,
jule,
august
:f:=summer;
september,
october,
november
:f:=autumn
end
end;
begin
{...}
end.
Сделал на этой неделе в первом часу ночи.
+87
function det5(var a:atab):double;
{FUNKCIYA VYCHISLYAET OPREDELITEL MATRITSY 5-go PORYADKA a}
begin
det5:=
+a[1,1]*a[2,2]*a[3,3]*a[4,4]*a[5,5]-a[1,2]*a[2,1]*a[3,3]*a[4,4]*a[5,5]
+a[1,3]*a[2,1]*a[3,2]*a[4,4]*a[5,5]-a[1,1]*a[2,3]*a[3,2]*a[4,4]*a[5,5]
-a[1,3]*a[2,2]*a[3,1]*a[4,4]*a[5,5]+a[1,2]*a[2,3]*a[3,1]*a[4,4]*a[5,5]
-a[1,4]*a[2,1]*a[3,2]*a[4,3]*a[5,5]+a[1,1]*a[2,4]*a[3,2]*a[4,3]*a[5,5]
-a[1,1]*a[2,2]*a[3,4]*a[4,3]*a[5,5]+a[1,4]*a[2,2]*a[3,1]*a[4,3]*a[5,5]
-a[1,2]*a[2,4]*a[3,1]*a[4,3]*a[5,5]+a[1,2]*a[2,1]*a[3,4]*a[4,3]*a[5,5]
-a[1,4]*a[2,3]*a[3,1]*a[4,2]*a[5,5]+a[1,3]*a[2,4]*a[3,1]*a[4,2]*a[5,5]
-a[1,3]*a[2,1]*a[3,4]*a[4,2]*a[5,5]+a[1,4]*a[2,1]*a[3,3]*a[4,2]*a[5,5]
-a[1,1]*a[2,4]*a[3,3]*a[4,2]*a[5,5]+a[1,1]*a[2,3]*a[3,4]*a[4,2]*a[5,5]
+a[1,4]*a[2,3]*a[3,2]*a[4,1]*a[5,5]-a[1,3]*a[2,4]*a[3,2]*a[4,1]*a[5,5]
+a[1,3]*a[2,2]*a[3,4]*a[4,1]*a[5,5]-a[1,4]*a[2,2]*a[3,3]*a[4,1]*a[5,5]
+a[1,2]*a[2,4]*a[3,3]*a[4,1]*a[5,5]-a[1,2]*a[2,3]*a[3,4]*a[4,1]*a[5,5]
+a[1,5]*a[2,1]*a[3,2]*a[4,3]*a[5,4]-a[1,1]*a[2,5]*a[3,2]*a[4,3]*a[5,4]
+a[1,1]*a[2,2]*a[3,5]*a[4,3]*a[5,4]-a[1,1]*a[2,2]*a[3,3]*a[4,5]*a[5,4]
-a[1,5]*a[2,2]*a[3,1]*a[4,3]*a[5,4]+a[1,2]*a[2,5]*a[3,1]*a[4,3]*a[5,4]
-a[1,2]*a[2,1]*a[3,5]*a[4,3]*a[5,4]+a[1,2]*a[2,1]*a[3,3]*a[4,5]*a[5,4]
+a[1,5]*a[2,3]*a[3,1]*a[4,2]*a[5,4]-a[1,3]*a[2,5]*a[3,1]*a[4,2]*a[5,4]
+a[1,3]*a[2,1]*a[3,5]*a[4,2]*a[5,4]-a[1,3]*a[2,1]*a[3,2]*a[4,5]*a[5,4]
-a[1,5]*a[2,1]*a[3,3]*a[4,2]*a[5,4]+a[1,1]*a[2,5]*a[3,3]*a[4,2]*a[5,4]
-a[1,1]*a[2,3]*a[3,5]*a[4,2]*a[5,4]+a[1,1]*a[2,3]*a[3,2]*a[4,5]*a[5,4]
-a[1,5]*a[2,3]*a[3,2]*a[4,1]*a[5,4]+a[1,3]*a[2,5]*a[3,2]*a[4,1]*a[5,4]
-a[1,3]*a[2,2]*a[3,5]*a[4,1]*a[5,4]+a[1,3]*a[2,2]*a[3,1]*a[4,5]*a[5,4]
+a[1,5]*a[2,2]*a[3,3]*a[4,1]*a[5,4]-a[1,2]*a[2,5]*a[3,3]*a[4,1]*a[5,4]
+a[1,2]*a[2,3]*a[3,5]*a[4,1]*a[5,4]-a[1,2]*a[2,3]*a[3,1]*a[4,5]*a[5,4]
-a[1,5]*a[2,4]*a[3,1]*a[4,2]*a[5,3]+a[1,4]*a[2,5]*a[3,1]*a[4,2]*a[5,3]
-a[1,4]*a[2,1]*a[3,5]*a[4,2]*a[5,3]+a[1,4]*a[2,1]*a[3,2]*a[4,5]*a[5,3]
+a[1,5]*a[2,1]*a[3,4]*a[4,2]*a[5,3]-a[1,1]*a[2,5]*a[3,4]*a[4,2]*a[5,3]
+a[1,1]*a[2,4]*a[3,5]*a[4,2]*a[5,3]-a[1,1]*a[2,4]*a[3,2]*a[4,5]*a[5,3]
-a[1,5]*a[2,1]*a[3,2]*a[4,4]*a[5,3]+a[1,1]*a[2,5]*a[3,2]*a[4,4]*a[5,3]
-a[1,1]*a[2,2]*a[3,5]*a[4,4]*a[5,3]+a[1,1]*a[2,2]*a[3,4]*a[4,5]*a[5,3]
+a[1,5]*a[2,4]*a[3,2]*a[4,1]*a[5,3]-a[1,4]*a[2,5]*a[3,2]*a[4,1]*a[5,3]
+a[1,4]*a[2,2]*a[3,5]*a[4,1]*a[5,3]-a[1,4]*a[2,2]*a[3,1]*a[4,5]*a[5,3]
-a[1,5]*a[2,2]*a[3,4]*a[4,1]*a[5,3]+a[1,2]*a[2,5]*a[3,4]*a[4,1]*a[5,3]
-a[1,2]*a[2,4]*a[3,5]*a[4,1]*a[5,3]+a[1,2]*a[2,4]*a[3,1]*a[4,5]*a[5,3]
+a[1,5]*a[2,2]*a[3,1]*a[4,4]*a[5,3]-a[1,2]*a[2,5]*a[3,1]*a[4,4]*a[5,3]
+a[1,2]*a[2,1]*a[3,5]*a[4,4]*a[5,3]-a[1,2]*a[2,1]*a[3,4]*a[4,5]*a[5,3]
-a[1,5]*a[2,4]*a[3,3]*a[4,1]*a[5,2]+a[1,4]*a[2,5]*a[3,3]*a[4,1]*a[5,2]
-a[1,4]*a[2,3]*a[3,5]*a[4,1]*a[5,2]+a[1,4]*a[2,3]*a[3,1]*a[4,5]*a[5,2]
+a[1,5]*a[2,3]*a[3,4]*a[4,1]*a[5,2]-a[1,3]*a[2,5]*a[3,4]*a[4,1]*a[5,2]
+a[1,3]*a[2,4]*a[3,5]*a[4,1]*a[5,2]-a[1,3]*a[2,4]*a[3,1]*a[4,5]*a[5,2]
-a[1,5]*a[2,3]*a[3,1]*a[4,4]*a[5,2]+a[1,3]*a[2,5]*a[3,1]*a[4,4]*a[5,2]
-a[1,3]*a[2,1]*a[3,5]*a[4,4]*a[5,2]+a[1,3]*a[2,1]*a[3,4]*a[4,5]*a[5,2]
+a[1,5]*a[2,4]*a[3,1]*a[4,3]*a[5,2]-a[1,4]*a[2,5]*a[3,1]*a[4,3]*a[5,2]
+a[1,4]*a[2,1]*a[3,5]*a[4,3]*a[5,2]-a[1,4]*a[2,1]*a[3,3]*a[4,5]*a[5,2]
-a[1,5]*a[2,1]*a[3,4]*a[4,3]*a[5,2]+a[1,1]*a[2,5]*a[3,4]*a[4,3]*a[5,2]
-a[1,1]*a[2,4]*a[3,5]*a[4,3]*a[5,2]+a[1,1]*a[2,4]*a[3,3]*a[4,5]*a[5,2]
+a[1,5]*a[2,1]*a[3,3]*a[4,4]*a[5,2]-a[1,1]*a[2,5]*a[3,3]*a[4,4]*a[5,2]
+a[1,1]*a[2,3]*a[3,5]*a[4,4]*a[5,2]-a[1,1]*a[2,3]*a[3,4]*a[4,5]*a[5,2]
+a[1,5]*a[2,4]*a[3,3]*a[4,2]*a[5,1]-a[1,4]*a[2,5]*a[3,3]*a[4,2]*a[5,1]
+a[1,4]*a[2,3]*a[3,5]*a[4,2]*a[5,1]-a[1,4]*a[2,3]*a[3,2]*a[4,5]*a[5,1]
-a[1,5]*a[2,3]*a[3,4]*a[4,2]*a[5,1]+a[1,3]*a[2,5]*a[3,4]*a[4,2]*a[5,1]
-a[1,3]*a[2,4]*a[3,5]*a[4,2]*a[5,1]+a[1,3]*a[2,4]*a[3,2]*a[4,5]*a[5,1]
+a[1,5]*a[2,3]*a[3,2]*a[4,4]*a[5,1]-a[1,3]*a[2,5]*a[3,2]*a[4,4]*a[5,1]
+a[1,3]*a[2,2]*a[3,5]*a[4,4]*a[5,1]-a[1,3]*a[2,2]*a[3,4]*a[4,5]....
Жалко, что вся функця не поместилась.
Найдено здесь. http://bbi-math.narod.ru/rosenbrock/rosenbrock.html
Там автор показывает мастерство владения циклами и рекурсиями. А так же демонстрирует каменную выдержку и самообладание, при наборе такого кода.
+102
function naq(a:integer;n:integer;m:integer):string;
var astr:string;
begin
astr:=inttostr(a);
case m of
1: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*1)+'*p^'+inttostr(n+1);
2: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*2)+'*p^'+inttostr(n+1)+'+'+inttostr(a*1)+'*p^'+inttostr(n+2);
3: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*3)+'*p^'+inttostr(n+1)+'+'+inttostr(a*3)+'*p^'+inttostr(n+2)+'-'+inttostr(a*1)+'*p^'+inttostr(n+3);
4: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*4)+'*p^'+inttostr(n+1)+'+'+inttostr(a*6)+'*p^'+inttostr(n+2)+'-'+inttostr(a*4)+'*p^'+inttostr(n+3)+'+'+inttostr(a*1)+'*p^'+inttostr(n+4);
5: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*5)+'*p^'+inttostr(n+1)+'+'+inttostr(a*10)+'*p^'+inttostr(n+2)+'-'+inttostr(a*10)+'*p^'+inttostr(n+3)+'+'+inttostr(a*5)+'*p^'+inttostr(n+4)+'-'+inttostr(a*1)+'*p^'+inttostr(n+5);
6: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*6)+'*p^'+inttostr(n+1)+'+'+inttostr(a*15)+'*p^'+inttostr(n+2)+'-'+inttostr(a*20)+'*p^'+inttostr(n+3)+'+'+inttostr(a*15)+'*p^'+inttostr(n+4)+'-'+inttostr(a*6)+'*p^'+inttostr(n+5)+'+'+inttostr(a*1)+'*p^'+inttostr(n+6);
7: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*7)+'*p^'+inttostr(n+1)+'+'+inttostr(a*21)+'*p^'+inttostr(n+2)+'-'+inttostr(a*35)+'*p^'+inttostr(n+3)+'+'+inttostr(a*35)+'*p^'+inttostr(n+4)+'-'+inttostr(a*21)+'*p^'+inttostr(n+5)+'+'+inttostr(a*7)+'*p^'+inttostr(n+6)+'-'+inttostr(a*1)+'*p^'+inttostr(n+7);
8: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*8)+'*p^'+inttostr(n+1)+'+'+inttostr(a*28)+'*p^'+inttostr(n+2)+'-'+inttostr(a*56)+'*p^'+inttostr(n+3)+'+'+inttostr(a*70)+'*p^'+inttostr(n+4)+'-'+inttostr(a*56)+'*p^'+inttostr(n+5)+'+'+inttostr(a*28)+'*p^'+inttostr(n+6)+'-'+inttostr(a*8)+'*p^'+inttostr(n+7)+'+'+inttostr(a*1)+'*p^'+inttostr(n+8);
9: naq:=astr+'*p^'+inttostr(n)+'-'+inttostr(a*9)+'*p^'+inttostr(n+1)+'+'+inttostr(a*36)+'*p^'+inttostr(n+2)+'-'+inttostr(a*84)+'*p^'+inttostr(n+3)+'+'+inttostr(a*126)+'*p^'+inttostr(n+4)+'-'+inttostr(a*126)+'*p^'+inttostr(n+5)+'+'+inttostr(a*84)+'*p^'+inttostr(n+6)+'-'+inttostr(a*36)+'*p^'+inttostr(n+7)+'+'+inttostr(a*9)+'*p^'+inttostr(n+8)+'+'+inttostr(a*1)+'*p^'+inttostr(n+9);
end;
end;
Лень было искать алгоритм раскрытия (1-q)^n