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

الصفحات: 1 2


مشكل في برمجة برنامج بسيط للمبتدئين - فارس المطر - 20-03-2015

السلام عليكم

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

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

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

مع انه يستمد قيمة مساحة الدائرة من القيمة المعروضة في 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;

شكرا


مشكل في برمجة برنامج بسيط للمبتدئين - مهند الرسيني - 20-03-2015

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

أهلا بك في عالم البرمجة الشيق والممتع 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; 

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


مشكل في برمجة برنامج بسيط للمبتدئين - فارس المطر - 20-03-2015

شكرا أخي

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

كود :
http://www.mobdi3ine.net/uploads/1426871496851.jpg



مشكل في برمجة برنامج بسيط للمبتدئين - مهند الرسيني - 20-03-2015

ارفق المثال الذي عملته , -_-

المشكلة التي ظهرت لك في دالة 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 



مشكل في برمجة برنامج بسيط للمبتدئين - فارس المطر - 20-03-2015

كود :
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


مشكل في برمجة برنامج بسيط للمبتدئين - فارس المطر - 20-03-2015

كود :
http://www.mobdi3ine.net/uploads/1426872552421.jpg



مشكل في برمجة برنامج بسيط للمبتدئين - أبو معاذ - 20-03-2015

[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]


مشكل في برمجة برنامج بسيط للمبتدئين - مهند الرسيني - 20-03-2015

كود :
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
فكل إجراء له متغيراتها الخاصة به وهي من نوع متغيرات محلية وليست عامة (بفتراض انك قرأت كتاب يشرح اساسيات باسكال)


مشكل في برمجة برنامج بسيط للمبتدئين - فارس المطر - 20-03-2015

شكرا على التنويه

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

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


كيف يتم تعريف قيمة a في العملية الثانية من النتيجة الاولى شكرا


مشكل في برمجة برنامج بسيط للمبتدئين - مهند الرسيني - 20-03-2015

يبدو انك تفتقر إلى أساسيات باسكال فعلا وهذا واضح من كتابتك للكود 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