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=6112)



خطا في الغوريثم ؟ - bassem_43 - 23-04-2014

السلام عليكم
يا إخواني الكرام عندي مشكل
أنا عندي Algorithm يشتغل عادي بلغة البرمجة باسكال
المشكلة هي أنه دائما يعطيني نفس النتيجة
يعني مهما غيرت قيمة المجهول x يعطيني نفس النتيجة
بالمناسبة ها هو الألغوريتوم و هو شغال بدون مشاكل على الباسكال
PHP كود :
program erreurf;
uses wincrt;

type
  tableau
=array[1..20]of  extended;

VAR
tab,b,a:tableau;
i,j,nbvar:integer;
x,f:extended;


 
erf(x:extended):extended;
var
   
f,c:extended;
   
j:integer;
   
begin
   c
:=0;
   if 
1.5<x then
   begin
        c
:=(2-c);
        
j:=3+Trunc(32/x);  {Trunc=Partie Entière}
        
f:=0;
        
repeat
              f
:=1/(f*j+x*sqrt(2));
              
j:=j-1;
        
until j=0;
        
f:=f*c*(3-c*c)*exp(-x*x)/sqrt(2*pi)+(c-1)*(3*c*c+c-8)/6;
   
end
   
else
   
begin
        j
:=3+Trunc(9*x);
        
f:=1;
        
repeat
               f
:=1+f*x*x*(0.5-j)/j/(0.5+j);
               
j:=j-1;
        
until j=0;
        
f:=c+f*x*(2-4*c)/sqrt(pi);
   
end;
   
erf:=f;
end;

{******************************** 
Programme principale *******************************}
begin
write
('donner la valeur de x =');
readln(x);
erf(x);
writeln('la fonction d erreur est :',f); readln;
end. 
اظنه يحتوي على خطا بسيط لم اجده
انتظر نصائحكم وشكرا


خطا في الغوريثم ؟ - محمد عبد العزيز - 24-04-2014

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

لديك متغيرين f واحد عام واخر معرف داخل erf
النتيجة تعرض المتغير الخطأ!
احذف المتغير f أو غير اسمه الى f1 او كما تشاء.



خطا في الغوريثم ؟ - bassem_43 - 24-04-2014

بارك الله فيك يا استادنا عبد العزيز
جاري التغير ان شاء الله تحل المشكلة
شكرا لك


خطا في الغوريثم ؟ - Najy Ibraheem - 24-04-2014

السلام عليكم...

تشابه أسماء المتغيرات - و إن كان من الأفضل تجنبه - لا يسبب مشكلة لأن الدالة في حالة التشابه ستستخدم المتغير المحلي.

المشكلة في السطرين الأخيرين في البرنامج الرئيسي:

كود :
erf(x); writeln('la fonction d erreur est :', f);

فأنت تطبع قيمة المتغير f العام دون أن تسند إليه القيمة التي تعيدها الدالة! يجب أن تسند إليه أولاً القيمة المعادة من الدالة:

كود :
f := erf(x); // هنا التعديل writeln('la fonction d erreur est :', f);

نرجو الاستفادة و السلام.