مشكل في برمجة برنامج بسيط للمبتدئين
#1
السلام عليكم

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

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

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

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

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

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

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

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

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

المشكلة التي ظهرت لك في دالة 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 
الرد
#5
كود :
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
الرد
#6
كود :
http://www.mobdi3ine.net/uploads/1426872552421.jpg
الرد
#7
[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]
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#8
كود :
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
فكل إجراء له متغيراتها الخاصة به وهي من نوع متغيرات محلية وليست عامة (بفتراض انك قرأت كتاب يشرح اساسيات باسكال)
الرد
#9
شكرا على التنويه

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

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


كيف يتم تعريف قيمة a في العملية الثانية من النتيجة الاولى شكرا
الرد
#10
يبدو انك تفتقر إلى أساسيات باسكال فعلا وهذا واضح من كتابتك للكود 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 ) ضيف كريم