delphi4arab منتديات دلفي للعرب
دالة التباديل ! - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : دالة التباديل ! (/showthread.php?tid=1047)



دالة التباديل ! - Dr.MOT - 12-07-2009

السلام عليكم ورحمة الله وبركاته ,,

قبل شهر او شهرين تقريبا كنت قد كتبت دالة التباديل ,,

لكن واجهة إشكال فيها لاحظوا الدالة :

PHP كود :
Function nPr ( n,r:integer) : Integer ;
var 
i :integer;
begin
 Result 
:= 1 ;
  for 
i :=  r  DownTo 1 do begin
   Result 
:= Result*n*(n-1);
   
n := n-2 ;
  
end;
 
Application.MainForm.Caption := ( ' Ans := '+ IntToStr(Result) );
end; 

هذا ما اعتقده صحيح ولكن لم تجدي نفعا ,,

لا اعرف كيف لكن قسمت r على 2 ,, وأصبحت الدالة هكذا :

PHP كود :
Function nPr ( n,r:integer) : Integer ;
var 
i :integer;
begin
 Result 
:= 1 ;
  for 
i :=  ( r div 2 )  DownTo 1 do begin
   Result 
:= Result*n*(n-1);
   
n := n-2 ;
  
end;
 
Application.MainForm.Caption := ( ' Ans := '+ IntToStr(Result) );
end; 

فأصبحت الدالة تعمل بشكل صحيح إذا كان r ( الدليل ) عددا زوجياً

لا أعرف ما المشكلة !؟؟؟


==================

ولمن لا يعرف التباديل ,, سأشرحها باختصار

لو قلنا 5 تباديل 2 = 5 × 4

5 تباديل 3 = 5 × 4 × 3

6 تباديل 2 = 6 ×5

وهكذا . . .


والسلام عليكم


دالة التباديل ! - kachwahed - 12-07-2009

وعليكم السلام ورحمة الله وبركاته
طريقة حساب التباديل (أو الترتيبات nPr) وأيضا التوافيق (أو التوفيقات nCr) كما يلي:
PHP كود :
function Fact(n : Integer) : Integer;
var
  
F1 : Integer;
begin
  F1 
:= 1;
  for 
n := 1 to n do F1 := F1 * n;
  
Fact := F1
end
;

function 
nPr(n, r : Integer) : Integer;
begin
  nPr 
:= Fact(n) div Fact(n - r)
end;

function 
nCr(n, r : Integer) : Integer;
begin
  nCr 
:= nPr(n, r) div Fact(r)
end; 
مثال:
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage
(IntToStr(nPr(StrToInt(Edit1.Text), StrToInt(Edit2.Text))));
end; 
بالتوفيق.



دالة التباديل ! - Dr.MOT - 14-07-2009

أخي كاش واحد بارك الله فيك ,,

ألا يمكن أن تتم بالمحاولة التي وضعتها ؟

أظن أن كلا الطريقين صحيحين !

أليس كذلك ؟

وشكرا


دالة التباديل ! - S.FATEH - 24-03-2015

السلام عليكم الـ factorial باستخدام الـ Recursive
PHP كود :
function Factorial(aNumber: Integer): Integer;
begin
  Result
:= 1; 
  if 
aNumber > 0 then
    Result
:= Factorial(aNumber-1) * aNumber; 
end;