delphi4arab منتديات دلفي للعرب

نسخة كاملة : مشكل في برمجة برنامج بسيط للمبتدئين
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

أخوكم مبتدأ في عالم البرمجة
برنامج بسيط للمبتدئين يقوم بحساب مساحة الدائرة وحجم الأسطوانة

القانون/
مساحة الدائرة = ط* تق ²
حجم الاسطوانة = مساحة الدائرة* الارتفاع

عند تنفيذ البرنامج يقوم بحساب مساحة الدائرة صحيح
حجم الاسطوانة خطا

مع انه يستمد قيمة مساحة الدائرة من القيمة المعروضة في Label 3بعد التنفيذ
واجهة البرنامج
كود :
http://www.mobdi3ine.net/uploads/1426864354011.jpg
ما هي طريقة عمل البرنامج دون مشاكل كما في صورة واجهة البرنامج

كود :
begin r:=strtofloat(edit1.text); a:=sqr(r)*p; Label3.Caption:=floatToStr(a); h:=strtofloat(edit2.text); c:=a*h; Label7.Caption:=floatToStr(c); end;

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

أهلا بك في عالم البرمجة الشيق والممتع Big Grin
لو ارفقت السورس كود اكن افضل لكي نسيتطيع مساعدتك بشكل جيد .

على أي حال جرب هذه :
PHP كود :
function CalcCircleArea(Ta, Nq : Single):Single;
begin
  Result 
:= (sqr(Nq) * Ta);
end;

function 
CalcCylinderSize(CircleArea, AHigh : Single):Single;
begin
  Result 
:= (CircleArea * AHigh);
end;

procedure TForm1.Button2Click(Sender : TObject);
begin
  Caption 
:= FloatToStr(CalcCylinderSize(CalcCircleArea(5, 10), 10));
end; 

اعتقد ان مشكلتك صغيرة , قم بتنقيحه لتعرف أي سطر يخرج الخطا تحديداً
شكرا أخي

المشكل عندي كما في الصورة

كود :
http://www.mobdi3ine.net/uploads/1426871496851.jpg
ارفق المثال الذي عملته , -_-

المشكلة التي ظهرت لك في دالة FloatToStr
ربما تختلف المعاملات في لازارس عن دلفي , حيث اني كتبت المثال في لازارس

---- تعديل :
جرب بستعمال Extended :
PHP كود :
function CalcCircleArea(Ta, Nq : Extended):Extended;
begin
  Result 
:= (sqr(Nq) * Ta);
end;

function 
CalcCylinderSize(CircleArea, AHigh : Extended):Extended;
begin
  Result 
:= (CircleArea * AHigh);
end;

procedure TForm1.Button2Click(Sender : TObject);
begin
  Caption 
:= FloatToStr(CalcCylinderSize(CalcCircleArea(5, 10), 10));
end; 
المصدر :
PHP كود :
http://docwiki.embarcadero.com/Libraries/XE7/en/System.SysUtils.FloatToStr 
كود :
procedure TForm1.Button1Click(Sender: TObject); var a,r,c,h :real; const p=3.14; begin r:=strtofloat(edit1.text); a:=sqr(r)*p; Label3.Caption:=floatToStr(a); end; procedure TForm1.Button3Click(Sender: TObject); var h,c,a :real; begin h:=strtofloat(edit2.text); c:=a*h; Label7.Caption:=floatToStr(c); end;

البرنامج يعمل صحيح الز 1 يحسب مساحة الدائرة ======a

لكن نتيجة حجم الاسطوانةنتج خطأ ===== c
كود :
http://www.mobdi3ine.net/uploads/1426872552421.jpg
[INDENT]
السلام عليكم
لاحظ معي أخي الحبيب :

كود :
procedure TForm1.Button3Click(Sender: TObject); var h,c,a :real; begin h:=strtofloat([color=Red]edit2.text[/color]); c:=a*h; Label7.Caption:=floatToStr(c); end;

هذا الكود خاص بك ،
ما هي قيمة Edit2 ، البرنامج يجد Edit2 فارغة فلا يعرف قيمتها ، إما أن تعيد قراءتها ، أو أنك تقصد Edit1
[/INDENT]
كود :
procedure TForm1.Button1Click(Sender: TObject); var a,r,c,h :real; const p=3.14; begin r:=strtofloat(edit1.text); a:=sqr(r)*p; Label3.Caption:=floatToStr(a); end; procedure TForm1.Button3Click(Sender: TObject); var h,c,a :real; begin h:=strtofloat(edit2.text); c:=[color=Red]a[/color]*h; Label7.Caption:=floatToStr(c); end;

في الإجراء الثاني لم يتم وضع قيمة المتغير a Big Grin
فكل إجراء له متغيراتها الخاصة به وهي من نوع متغيرات محلية وليست عامة (بفتراض انك قرأت كتاب يشرح اساسيات باسكال)
شكرا على التنويه

قيمة المتغير a هي نفسها نتيجة العملية الحسابية الأولى اي مساحة الدائرة والتي تظهر النتيجة في

كود :
Label3.Caption:=floatToStr(a);


كيف يتم تعريف قيمة a في العملية الثانية من النتيجة الاولى شكرا
يبدو انك تفتقر إلى أساسيات باسكال فعلا وهذا واضح من كتابتك للكود Big Grin
على أي حال تفضل قمت بتعديل الكود الخاص بك ليعمل بالطريقة التي كتبتها في البداية :
PHP كود :
function CalcCircleArea(Nq, Ta : Extended):Extended;
begin
  Result 
:= (sqr(Nq) * Ta);
end;

function 
CalcCylinderSize(CircleArea, AHigh : Extended):Extended;
begin
  Result 
:= (CircleArea * AHigh);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  
p = 3.14;
begin
  Label3
.Caption := CalcCircleArea(StrToFloat(Edit1.text), p);
end;

procedure TForm1.Button3Click(Sender: TObject);
const
  
p = 3.14;
begin
  Label7
.Caption := CalcCylinderSize(CalcCircleArea(StrToFloat(Edit1.text), p),
                                     
StrToFloat(Edit2.text));
end; 

في حال اردت شرحا لما يحصل فتوجه إلى قسم الكتب ونتقي كتاب لباسكال وبدا التعلم وسترى كيف تتضح الأمور من تلقائها Smile
ونصيحة لك رتب كودك قدر المستطاع قبل ان تعتاد على هذه الطريقة في كتابة الكود وتندما لاحقا Big Grin
الصفحات : 1 2