![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
С++ TO DELPHI (PASCAL)
DroNIX © (2005-10-01 21:38:00)Что я сделал не так?
Вот исходник на СИ:
void easing ( unsigned long * P, unsigned long * S , int numb, int& numb_kon )
{
P[numb] = P[numb_kon - 1];
S[numb] = S[numb_kon - 1];
if ( numb_kon > 1 ) numb_kon--;
}
int skleiv ( unsigned long * P, unsigned long * S, int i, int j, int& numb_kon )
{
unsigned long c;
if ( P[i] == P[j] ) {
c = S[i] ^ S[j];
if ( c ) {
if ( ! ( c & (c - 1) ) ) {
P[i] &= ~c;
S[i] &= ~c;
easing ( P, S, j, numb_kon );
return 0;
}
else
return 1;
}
// Две одинаковые конъюнкции
else {
easing ( P, S, j, numb_kon );
return 1;
}
}
else
return 1;
}
int nep_skleiv ( unsigned long * P, unsigned long * S, int i, int j )
{
unsigned long c;
int d;
if ( !( P[i] & ~P[j] ) && !( P[i] == P[j] ) ) {
d = j;
}
else {
if ( !( ~P[i] & P[j] ) && !( P[i] == P[j] ) ) {
d = i;
}
else
return 1;
}
c = ( S[i] ^ S[j] ) & ( P[i] & P[j] );
if ( ! ( c & ( c - 1 ) ) ) {
P[d] &= ~c;
S[d] &= ~c;
return 0;
}
else
return 1;
}
int poglosh ( unsigned long * P, unsigned long * S, int i, int j, int& numb_kon )
{
unsigned long c;
if ( ! ( ~P[j] & P[i] ) ) {
c = P[i] & P[j];
if ( ! ( ( S[i] ^ S[j] ) & c ) ) {
easing ( P, S, j, numb_kon );
return 0;
}
else
return 1;
}
else
return 1;
}
Вот так я сделал в делфи: Уже 2 недели немогу понять что тут не правильно.
procedure easing(numb: integer; var numb_kon1: integer);
begin
P[numb]:= P[numb_kon1-1];
S[numb]:= S[numb_kon1-1];
Form1.P.Lines.Add(IntToStr(P[numb])+' cn='+IntToStr(cn));
Form1.S.Lines.Add(IntToStr(S[numb]));
inc(cn);
if numb_kon1>1
then
dec(numb_kon1);
end;
function skleiv(i: integer; j: integer; var numb_kon: integer): integer;
var
cx: integer;
begin
if P[i]=P[j] then
begin
cx:= S[i] xor S[j];
if cx0 then
begin
if (cx and (cx-1)) = 0 then
begin
P[i]:= P[i] and not cx;
S[i]:= S[i] and not cx;
easing(j,numb_kon);
begin
result:= 0;
exit;
end;
end
else
begin
result:= 1;
exit;
end;
end
else
begin
easing(j,numb_kon);
begin
result:= 1;
exit;
end;
end;
end
else
begin
result:= 1;
exit;
end;
end;
function nep_skleiv(i: integer; j: integer): integer;
var
cx, d: integer;
begin
if ((P[I] and not P[j]) = 0) and (P[i] P[j])
then
begin
d:= j;
end
else
begin
if ((not P[I] and P[j]) = 0) and (P[i] P[j])
then
begin
d:= i;
end
else
begin
result:= 1;
exit;
end;
end;
cx:= (S[i] xor S[j]) and (P[i] and P[j]);
if (cx and (cx-1))=0 then
begin
P[d]:= P[d] and ( not cx);
S[d]:= S[d] and ( not cx);
begin
result:= 0;
exit;
end;
end
else
begin
result:= 1;
exit;
end;
end;
function poglosh(i: integer; j: integer; var numb_kon: integer): integer;
var
cx: integer;
begin
if (not P[j] and P[i])=0 then
begin
cx:= P[i] and P[j];
if ( ( S[i] xor S[j] ) and cx) 0 then
begin
easing(j,numb_kon);
result:= 0;
exit;
end
else
begin
result:= 1;
exit;
end;
end
else
begin
result:= 1;
exit;
end;
end;
DroNIX (2005-10-02 19:37:00) [1]Скорей всего в функции nep_skleiv
Остальное врде правильно считает.
S@shka (2005-10-01 22:57:00) [2]Я честно посмотрел )))) - вскользь ))))
Кефир87 (2005-10-01 22:50:00) [3]Ну и кто это будет читать?! Ты хоть покажи где ошибка...