الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ممكن كود يقوم باختيار المعادلة الرياضية المطلوبة لإظهار النتيجة النهائية بالشكل الصحيح؟!

مغلق
بدأه المدمر007 في 5 فبراير 2007 · 15 رد · 1,317 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

يا أخوان عندي مشروع ... مطلوب مني إنجازه هذا الشهر ...

وأمنيتي أنه ينتهي اليوم قبل بكرة :wacko:

المشروع ببساطة عبارة عن حسبة رياضية كالآتي

فيه أربع Text Boxs

 Text3.Text = (Val(Text2.Text) - Val(Text1.Text))

والنتيجة إللي تطلع بالـText3 يتم ضربها في الآتي .. إذا كان

من صفر إلى 3000 يضرب الناتج في 0.010 ( يعني بين الصفر والثلاثة ألف )

من 3001 إلى 5000 يضرب الناتج في 0.015 ( يعني بين 3001 والـ 5000 )

من 5001 إلى 7000 يضرب الناتج في 0.020 ( بين 5001 والـ7000 )

من 7001 إلى 10000 يضرب الناتج في 0.025 ( بين 7001 والـ10000)

ويطلع النتيجة في الـText4

ووجع الرأس هو .. كيف أسوي هذا ؟!!!

فهل يمكن لكم مساعدتي :(

#2

تفضل , الملف مرفق .

______.zip

#3

انا كنت هأضعلك الكود لكن الأخ ماستر سبق ..

علي العموم كنت عايز أعرف تخصصك ايه ؟ .. وليه ما بنشوفكش دائما في المنتدي مع انك عضو قديم ..

Dim x As Double
Text3 = (Val(Text2.Text) - Val(Text1.Text))
x = Val(Text3)
Select Case x
	   Case 0 To 3000
			Text4 = x * 0.01
	   Case 3001 To 5000
			Text4 = x * 0.015
	   Case 5001 To 7000
			Text4 = x * 0.02
	   Case 7001 To 9000
			Text4 = x * 0.025
End Select
#4

يعطيك الله العافية أخي { MasterPiece }

اشكرك جزيل الشكر ... والله شلت عني هم كبير :D

نور الله دربك ، وأزال عنك همك ، وحقق كل أمانيك :)

فيه سؤال جديد بنفس الموضوع ...

أنت حاط رسالة تنبيه ، تطلع لو تجاوز الحد 10000 ( وهذا ذكاء بديهي منك ;) )

بس أنا أريد البرنامج يعيد الحسبة بطريقة إحترافية ، بمعنى

لو الناتج انحصر بين العشرة ألف والـ3000 يرجع للـحدث الأول

بحيث يجمع 0.010 الخاصة بـ3000

مع 0.025 الخاصة بالعشرة ألف فتطلع ناتج الجمع 0.035 فيضربها بالعدد المحصور بالثلاث عشرة ألف .

ولو الناتج انحصر بين العشرة ألف والـ5000

يجمع 0.015 تبع الـ5000 مع 0.025 القيمة الثابته للعشرة ألف ومن ثم الناتج 0.040 يضربها بالعدد المحصور بالخمسة عشرة ألف.

وهكذا

فربما يتجاز الأمر العشرين ألف ...

وأنا لا أريد أن أكثر من تسطير الحدث والمعادلات ... فيمكن بحسبة بسيطة أن يقوم البرنامج بهذه المهمة

عسى الفكرة وضحت ;)

#5

أخي الكريم { Pharaonic_Guy }

اشكرك على تفاعلك .. ومحاولتك تقديم العون لي ..

اسأل الله أن يعينك ويوفقك ويشرح صدرك

بالنسبة لسؤالك

اقتباس
علي العموم كنت عايز أعرف تخصصك ايه ؟

أنا تخصصي شبكات وأمن وحماية نظم المعلومات تحديداً ...

ولي هواية وشغف كبير بالفيجول بيسك .. لأنه يعتبر اللغة الوحيدة اللي تقبلتها بإرتياح ( إمكن للرسومات اللي فيها ) :D

اقتباس
وليه ما بنشوفكش دائما في المنتدي مع انك عضو قديم ..

بالنسبة لكوني عضو قديم ربما يرجع الأمر لمحدودية مشاركاتي، خاصة أني اتفاعل أكثر بمنتدى الدعم الفني ، الانترنت :)

وهو الذي استطيع أن ابدع فيه ، خاصة في حل مشاكل الإخوة ، مثلما تحلون أنتم هنا مشاكلي :D

خالص تحياتي للجميع

تم تعديل هذه المشاركة بواسطة المدمر007 في 5 فبراير 2007 في 10:48

#6
اقتباس
لو الناتج انحصر بين العشرة ألف والـ3000 يرجع للـحدث الأول

اي ناتج تقصد , ناتج الطرح ام عملية ضرب النتيجة بالرقم العشري (اظن انه ناتج الطرح ) . على العموم .

انت تريد ان تضرب القيمة ب .010 اذا كان الناتج بين 1 - 3000 (مثل المثال المرفق ) .

انا فهمت لحد هون فقط , اشرح ماذا تريد بعد هذه العملية مع الاخذ بالاعتبار بأن النتيجة ستكون اصغر بعشر مرات من الرقم الاصلي (2500 * .010) = 25

انتظر الشرح

#7

اقصد أنه لو تجاوز ناتج الطرح الرقم فوق العشرة ألف .. يعني صار

11000

أو 12000

حتى 13000

ساعتها أريده يقوم بجمع 0.010 ( 0إلى 3000) + 0.025 (10000) = 0.035

وهكذا

حيث أنه يمكنني ببساطة أن أقول

Case 10001To 13000
Text4.Text = Val(Text3.Text) * 0.035

بس تخيل معي حتى لمتى سأكتب هذا :o ( والأرقام لا نهاية لها :wacko: )

لذا أريد البرنامج يرجع للأصل، فمثلما الأرقام كلها تتكون من 0 إلى 9

كذلك في برنامجي هذا تبداء من 0 إلى 10000

وفي وسطها 3000 والـ 5000 والـ 7000

لهذا ناتج الطرح لو وصل لمثل هذا المستوى

13000 = ( 0.010 + 0.025 = 0.035 )

15000 = (0.015 + 0.025 = 0.040 )

17000= (0.020 + 0.025 = 0.045 )

20000= (0.025+0.025= 0.050 )

اتمنى أن أكون استطعت أن أوصل الفكرة

لأنني حاس أنني أنا نفسي بدأت أفقد المعنى من سؤالي :wacko:

تم تعديل هذه المشاركة بواسطة المدمر007 في 5 فبراير 2007 في 11:51

#8

الأخ الفاضل ...

SCalc.zip

جرب هذا الكود:

Private Sub cmdCalculate_Click()
	Dim R3 As Double
	Dim T As Double
	Dim F As Double

	R3 = (Val(Text2.Text) - Val(Text1.Text))
	Text3.Text = R3

	T = Abs(Abs(R3) - 1001)
	F = (FLOOR(T / 2000) * 0.005) + 0.01
	Text5.Text = Format(F, "0.000")
	Text4.Text = R3 * F
End Sub

Private Function FLOOR(d As Double) As Long
	Dim l As Long
	l = Int(d)
	If l > d Then l = l - 1
	FLOOR = l
End Function

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#9
T = Abs(Abs(R3) - 1001)
	F = (FLOOR(T / 2000) * 0.005) + 0.01

مرحباً أخي { Eng. Usama El-Mokadem }

بداية أحب أن اشكرك على تفاعلك مع مطلبي.. ومن الكود السابق حسيت أنك قربت من ما أريد الوصول إليه

بس لو لاحظت أخي الكريم ، بأن معادلتك صحيحة وتقوم بزيادة 0.05 بشكل ثابت ...

بس هذه المعادلة فعاليتها محدودة ... حيث أنها تتوقف عند 10000 وبعده تبداء في اعطاء نتيجة خاطئة ، لأنها تظل تعطي زيادة 5%

بينما في المرحلة ما بعد العشرة ألف يتحول الأمر إلى ضعف الزيادة السابقة .

والكود اللي أنا أريده .. سأحاول تبسيطه كالآتي

المرحلة الأولى ( وقد تم حله عن طريق الأخ {MasterPiece } ) :-

من 0 إلى 3000 = 0.010

من 3001 إلى 5000 = 0.015

من 5001 إلى 7000 = 0.020

من 7001 إلى 10000= 0.025

فتلاحظون أن الزيادة هي 0.05

أوكيه ماذا بعد ذلك ؟!!

تأتي المرحلة الثانية وهي

لو كانت النتيجة مثلاً 10001 إلى 13000 سيتم

Case 0 To 3000 + Case 7001 To 10000

= 0.010 + 0.025

= 0.035

ولو النتيجة مثلاً تعدت لـ15000

Case 3001 To 5000+Case 7001 To 10000

= 0.015 + 0.025

= 0.040

ولو النتيجة وصلت لـ 17000

Case 5001 To 7000+Case 7001 To 10000

= 0.020+0.025

= 0.045

ولو النتيجة تعدت لـ20000

Case 7001 To 10000+Case 7001 To 10000

= 0.025+0.025

=0.050

وهكذا ... ماذا تلاحظون ؟!! وكم صارت الزيادة ؟!!

نجد أن هناك مطب ، وهو في الحدث الأول من كل مرحلة ..

فهو الحدث الوحيد الذي يزيد القيمة للضعف ، بينما بقية المعادلات التي تسبقه تكون ثابتة بـزيادة 0.05 % فقط

ماذا نستنتج من ذلك :huh: ؟!!

وهل ممكن أن نضع كوداً لهذه المرحلة .. والمراحل القادمة إلى مالا نهاية مثلاً :blink:

تم تعديل هذه المشاركة بواسطة المدمر007 في 6 فبراير 2007 في 11:46

#10

الأخ الفاضل ... المدمر007

SCalc2.zip

معذرة ...

جرب هذا الكود (أرجوا أن يساعدك فى ما تريد إنجازه):

Private Sub cmdCalculate_Click()
	Dim R3 As Double
	Dim AbsR As Double
	Dim T As Double
	Dim F As Double
	Dim F2 As Double
	Dim F3 As Double

	R3 = (Val(Text2.Text) - Val(Text1.Text))
	AbsR = Abs(R3)
	Text3.Text = R3

	F2 = FLOOR((AbsR - 1) / 10000)
	F3 = FLOOR((AbsR + 999) / 10000) - F2
	T = Abs(Abs(AbsR - (F2 * 10000)) - (F3 * 1000) - 1001)
	F = (FLOOR(T / 2000) * 0.005) + (F2 * 0.025) + 0.01

	Text5.Text = Format(F, "0.000")
	Text4.Text = R3 * F
End Sub

Private Function FLOOR(d As Double) As Long
	Dim l As Long
	l = Int(d)
	If l > d Then l = l - 1
	FLOOR = l
End Function

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#11

يعطيك العافية أخوي { Eng. Usama El-Mokadem }

ضبط معي تقريباً :D

شرح الله صدرك مثلما شرحت صدري :lol: ، وفرج كربك وأزال كل ما يهمك :) ...

بارك الله فيك وجزاءك الله كل خير واسعدك دنيا وآخرة :)

ممكن أخي الحبيب ... تشرح لي الأكواد خطوة بخطوة ...

حتى أعرف أشلون تنفذت العملية :huh:

#12
المدمر007 كتب:
ضبط معي تقريباً :D

أرجوا التوضيح (ما المقصود ب "تقريباً")

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#13

هذا الكود علي ما أعتقد أبسط وأسهل ..وسيؤتي بنتائج صحيحة 100% بإذن الله ..

اقتباس
# معادلة الكود الرئيسية # = إتيان نسبة عدد المرات المضاعفة لـ 10000 + إتيان نسبة الباقي من العدد

بمكن التعويض بقيم متغيرة للمتغيرين A,B للتحقق من مدي صحة النتائج ..

 


Private Sub Command1_Click()
Dim A As Double, B As Double, C As Double,  i As Integer, fin As Double
A = 1: B = 10001: C = B - A
RE:
   i = i + 1
   If 10000 >= (C / i) And (C / i) >= 0 Then
	  fin = (0.025 * ((i - 1) * 10 ^ 4)) + (GeT_Ratio(C - ((i - 1) * 10 ^ 4)))
   Else: GoTo RE: End If
MsgBox fin
End Sub

Function GeT_Ratio(ByVal x As Double) As Double
 Select Case x
		Case 0 To 3000:	 GeT_Ratio = x * 0.01
		Case 3001 To 5000:  GeT_Ratio = x * 0.015
		Case 5001 To 7000:  GeT_Ratio = x * 0.02
		Case 7001 To 10000: GeT_Ratio = x * 0.025
 End Select
End Function

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 12 فبراير 2007 في 02:33

#14

أخي { Eng. Usama El-Mokadem }

تقريباً ... قصدت بها

أن العملية الحسابية صارت تعطي تائج صحيحة ...

بس للآن ما فهمت تقريباً الخطوات البرمجية اللي بناء عليها جت كذا أوكيه

لذا سألتك ... ممكن تشرح لي كود كود ... حتى أفهم ، عشان مستقبلاً أعتمد على شطارتي ( :wacko: )

رغم أني ما استغني عنكم :D

عطاك الله ألف عافية ... واسعدك وشرح صدرك أخي الغالي :)

ومبروك إفتتاح المنتدى بالسيرفر الجديد :lol:

#15

بارك الله فيك أخي { Pharaonic_Guy }

جاري تجربة الكود ...

#16

الف شكر اخواني

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…