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

[ تمت الإجابة ]مساعدة في كود جبر النص ( في الاعداد )

بدأه matrixyb في 6 يوليو 2009 · 13 رد · 2,227 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف الحال جميعا ؟؟

امس كنت قاعد اسوي برنامج و في كود ما عرفت اكتبه فقلت اسئلكم

عندي قاعدة بيانات فيها مجموع درجات لمادة معينة ،، و بعض الدرجات فيها نص مثل:

الدرجة الاولى = 10

الدرجة الثاني = 6.5

الدرجة الثالثه = 8.5

اريد كود يجمعهم و يجبر النص ( مثال : 10 بعد جبر النص تصبح 10 لانها لا يوجد بها نص !! ،، 6.5 بعد جبر النص تصبح 7 ،، 8.5 بعد جبر النص تصبح 9 ،، و يطلع المجموع 10+7+9 =26 )

** ملاحظة : حاولت استخدم التعريف Integer ولكن ما طلع بالطريقة التي اريدها

Static TOT as Integer
	Adodc1.Recordset.MoveFirst
	Do While Not Adodc1.Recordset.EOF
   TOT = Val(TOT) + Val(Adodc1.Recordset![الدرجة
	Adodc1.Recordset.MoveNext
	Loop

و بعدين هذا الكود

Text1.Text = TOT

يطلع الناتج 10+6.5+8.5 = 24 !! <<< مدري كيف حسبها

انا ابغاها تنحسب كدا 10+7+9 = 26 زي ما شرحت فوق

اتمنى تكون الفكره وصلت و اتمنى اني اجد عندكم الرد

و شكراً

ممكن على شان ما عندكم القاعدة تستخدمو هذا الكود

Dim TOT As Integer
TOT = 10
TOT = TOT + 6.5
TOT = TOT + 8.5

	Text1.Text = TOT

10+6.5+8.5 = 24 !!!! باستخدام التعريف Integer !!

Matrixyb3D.jpg

في يوم من الايام قال Matrixyb

" فكر في طريقة حماية لبرامجك و فكر اذا انت واجهتها كيف ممكن تكسرها اذا لقيت طريقة لكسرها دور طريقة حماية اخرى "

#2

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

الدالة Integer تاخذ الجزء الصحيح فقط فمثلا لدينا الرقم 46.76 فستاخذ فقط 46 من غير تقريب وتهمل الارقام العشرية

الدالة Round وهي دالة التقريب فاذا كان الرقم بعد الفاصلة العشرية اكبر من النصف تقرب الرقم الصحيح واحد مثلا

46.76

فالنتيجة تكون

47

والصيغة للدالة

x1 = Round(Me.Text3)

وكذلك تستطيع تقريب الارقام العشرية نفسها مثلا

الرقم 5.52696

x1= Round(5.52696,2)

فهاذا يعني اخذ رقمين بعد الفاصلة العشرية مع التقريب

والصيغة للدالة

x1 = Round(Me.Text3, 2)

فيكون الناتج

5.53

#3

الله يسعدك و يوفقك يا رب دنيا و اخره

شكرا لك على المساعدة اخي !

لكن لاحظت ان الكود ما حقق لي مطلبي لان عندي وضعي لهذه القيمة

Round(10.5)

طلع الناتج يساوي 10 !!

اما عندي وضعي لهذه القيمة

Round(10.51)

طلع الناتج يساوي 11

انا اريد ال 10.5 تصبح 11 !! و الكود لم يحقق هذا الشي

لان درجات الطلاب لا تكون فاصلة 51 !!

اتمنى انك فهمتني

Matrixyb3D.jpg

في يوم من الايام قال Matrixyb

" فكر في طريقة حماية لبرامجك و فكر اذا انت واجهتها كيف ممكن تكسرها اذا لقيت طريقة لكسرها دور طريقة حماية اخرى "

#4

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

اخي الكريم

لابد من معالجة ذلك برمجيا ...

هل علامات الطلاب لديك فقط تأخذ الشكل التالي :

x.5

أو يمكن انت تكون

x.55 or x.32

ارجو االاجابة لاعطائك الحل

بمعنى ماهي حدود القيم العشرية الممكنة (اي بعد الفاصلة)

#5

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

السبب هو طريقة عمل VB عند تحويلها من أعداد كسرية إلى أعداد صحيحة. الدوال CInt و CLng و Round تقوم بالتقريب بشكل طبيعي فيما عدا إذا كان الكسر = النصف تماماً (0.5) فإنها في هذه الحالة تقوم بالتقريب إلى أقرب عدد صحيح زوجي !!!

مثلاً:

6.5 تصبح 6 (تنقص) لأن الـ 6 هي أقرب عدد صحيح زوجي.

6.6 تصبح 7 لأن الكسر أكبر من 0.5

6.4 تصبح 6 لأن الكسر أصغر من 0.5

7.5 تصبح 8 (تزيد) لأن الـ 8 هي أقرب عدد صحيح زوجي.

الحل: استعمل الدالة Fix مع زيادة 0.5 من عندك:

  1.  
  2. Dim TOT As Integer
  3.  
  4. TOT = 10
  5. TOT = TOT + Fix(6.5 + 0.5)
  6. TOT = TOT + Fix(8.5 + 0.5)
  7.  
  8. Text1.Text = TOT
  9.  
  10.  

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

تم تعديل هذه المشاركة بواسطة najy_zl في 6 يوليو 2009 في 17:21

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#6
Devd كتب:
السلام عليكــم ورحمـة الله وبركاتــه ،،

اخي الكريم

لابد من معالجة ذلك برمجيا ...

هل علامات الطلاب لديك فقط تأخذ الشكل التالي :

x.5

أو يمكن انت تكون

x.55 or x.32

ارجو االاجابة لاعطائك الحل

بمعنى ماهي حدود القيم العشرية الممكنة (اي بعد الفاصلة)

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

العلامة ممكن تكون عدد صحيح من 1 الى 10

او تكون عدد صحيح + نص

x.50

و مستحيل ان يكون بعد الفاصل عدد غير ال50 !!

najy_zl كتب:
السلام عليكم...

السبب هو طريقة عمل VB عند تحويلها من أعداد كسرية إلى أعداد صحيحة. الدوال CInt و CLng و Round تقوم بالتقريب بشكل طبيعي فيما عدا إذا كان الكسر = النصف تماماً (0.5) فإنها في هذه الحالة تقوم بالتقريب إلى أقرب عدد صحيح زوجي !!!

مثلاً:

6.5 تصبح 6 (تنقص) لأن الـ 6 هي أقرب عدد صحيح زوجي.

6.6 تصبح 7 لأن الكسر أكبر من 0.5

6.4 تصبح 6 لأن الكسر أصغر من 0.5

7.5 تصبح 8 (تزيد) لأن الـ 8 هي أقرب عدد صحيح زوجي.

الحل: استعمل الدالة Fix مع زيادة 0.5 من عندك:

  1.  
  2. Dim TOT As Integer
  3.  
  4. TOT = 10
  5. TOT = TOT + Fix(6.5 + 0.5)
  6. TOT = TOT + Fix(8.5 + 0.5)
  7.  
  8. Text1.Text = TOT
  9.  
  10.  
  11.  

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

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

الكود اشغل معي تمام

ولكن ممكن تشرح لنا ما هي الدالة Fix

و لماذا نضيف النص ؟؟

و شكرا لك!

Matrixyb3D.jpg

في يوم من الايام قال Matrixyb

" فكر في طريقة حماية لبرامجك و فكر اذا انت واجهتها كيف ممكن تكسرها اذا لقيت طريقة لكسرها دور طريقة حماية اخرى "

#7

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

اقتباس
السبب هو طريقة عمل VB عند تحويلها من أعداد كسرية إلى أعداد صحيحة. الدوال CInt و CLng و Round تقوم بالتقريب بشكل طبيعي فيما عدا إذا كان الكسر = النصف تماماً (0.5) فإنها في هذه الحالة تقوم بالتقريب إلى أقرب عدد صحيح زوجي !!!

مثلاً:

6.5 تصبح 6 (تنقص) لأن الـ 6 هي أقرب عدد صحيح زوجي.

6.6 تصبح 7 لأن الكسر أكبر من 0.5

6.4 تصبح 6 لأن الكسر أصغر من 0.5

7.5 تصبح 8 (تزيد) لأن الـ 8 هي أقرب عدد صحيح زوجي.

كلام جميل ومعروف ولكـــــــــــــــــــن:

لا ارى داعي لاستخدام التابع Fix عند اضافة 0.5 (اضافته صحيحة عند اضافة 1 )

اي تستطيع الكتابة :

 TOT = TOT + 6.5 + 0.5

2- يجب ألا ينسى ان يحدد متى نضيف 0.5 ومتى لانضيف يجب ان يعرف متى يكون الرقم عشري او يكون عدد صحيح

#8

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

الدالة Fix هي إحدى دوال VB و تقوم فقط بحذف الجزء الكسري من العدد.

لماذا نضيف 0.5 ؟

إذا كان العدد صحيحاً فقط (مثلاً 6) و مع زيادة 0.5 يصبح 6.5 ثم تقوم الدالة Fix بحذف الكسر فيبقى 6

إذا كان العدد يحتوي على كسر أقل من 0.5 (مثلاً 6.4) و مع زيادة 0.5 يصبح 6.9 ثم تقوم الدالة Fix بحذف الكسر فيبقى 6

إذا كان العدد يحتوي على النصف (6.5) و مع زيادة 0.5 يصبح 7.0 ثم تقوم الدالة Fix بحذف الكسر فيبقى 7

إذا كان العدد يحتوي على كسر أكبر من0.5 (مثلاً 6.9) و مع زيادة 0.5 يصبح 7.4 ثم تقوم الدالة Fix بحذف الكسر فيبقى 7

في كل الأحوال ستكون النتيجة حسب المطلوب.

----------------------------------------------

بالنسبة إلى رد الأخ Devd:

لابد من استخدام الدالة Fix لأنه بدونها:

  1.  
  2. 6.5 + 0.5 = 7 ' right
  3. 6 + 0.5 = 6.5 ' يتم تقريبها إلى 6 right
  4. 7 + 0.5 = 7.5 ' يتم تقريبها إلى 8 WRONG
  5.  

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

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#9
Devd كتب:
السلام عليكــم ورحمـة الله وبركاتــه ،،

كلام جميل ومعروف ولكـــــــــــــــــــن:

لا ارى داعي لاستخدام التابع Fix عند اضافة 0.5 (اضافته صحيحة عند اضافة 1 )

اي تستطيع الكتابة :

 TOT = TOT + 6.5 + 0.5

2- يجب ألا ينسى ان يحدد متى نضيف 0.5 ومتى لانضيف يجب ان يعرف متى يكون الرقم عشري او يكون عدد صحيح

اخي كلام الاخ najy_zl صحيح

و هوا استخدا Fix و اضافة النص

و هوا صحيح في كلا الحالتين سواءا كان الرقم عشري او صحيح !!

جرب الكود بنفسك و شاهد النتيجة و اخبرنا !!

Matrixyb3D.jpg

في يوم من الايام قال Matrixyb

" فكر في طريقة حماية لبرامجك و فكر اذا انت واجهتها كيف ممكن تكسرها اذا لقيت طريقة لكسرها دور طريقة حماية اخرى "

#10

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

اقتباس
بالنسبة إلى رد الأخ Devd:

لابد من استخدام الدالة Fix لأنه بدونها:

انسخ الكود

6.5 + 0.5 = 7 ' right

6 + 0.5 = 6.5 ' يتم تقريبها إلى 6 right

7 + 0.5 = 7.5 ' يتم تقريبها إلى 8 WRONG

صحيح كلامك (في الحالتين العشرية والصحيحة )

ولكن الذي فهمته من كلامك ان اضافة 0.5 فقط الى الاعداد العشرية

انظر المثال :

اقتباس
Dim TOT As Integer

TOT = 10

TOT = TOT + Fix(6.5 + 0.5)

TOT = TOT + Fix(8.5 + 0.5)

Text1.Text = TOT

حتى يكون الكلام صحيح لابد من كتابة :

	Dim TOT As Integer

	TOT = Fix(10+0.5)
	TOT = TOT + Fix(6.5 + 0.5)
	TOT = TOT + Fix(8.5 + 0.5)

	Text1.Text = TOT

هنا كان سوء التفاهم ...يعطيك العافية مشرفنا

#11
najy_zl كتب:
السلام عليكم...

الدالة Fix هي إحدى دوال VB و تقوم فقط بحذف الجزء الكسري من العدد.

لماذا نضيف 0.5 ؟

إذا كان العدد صحيحاً فقط (مثلاً 6) و مع زيادة 0.5 يصبح 6.5 ثم تقوم الدالة Fix بحذف الكسر فيبقى 6

إذا كان العدد يحتوي على كسر أقل من 0.5 (مثلاً 6.4) و مع زيادة 0.5 يصبح 6.9 ثم تقوم الدالة Fix بحذف الكسر فيبقى 6

إذا كان العدد يحتوي على النصف (6.5) و مع زيادة 0.5 يصبح 7.0 ثم تقوم الدالة Fix بحذف الكسر فيبقى 7

إذا كان العدد يحتوي على كسر أكبر من0.5 (مثلاً 6.9) و مع زيادة 0.5 يصبح 7.4 ثم تقوم الدالة Fix بحذف الكسر فيبقى 7

في كل الأحوال ستكون النتيجة حسب المطلوب.

----------------------------------------------

بالنسبة إلى رد الأخ Devd:

لابد من استخدام الدالة Fix لأنه بدونها:

  1.  
  2. 6.5 + 0.5 = 7 ' right
  3. 6 + 0.5 = 6.5 ' يتم تقريبها إلى 6 right
  4. 7 + 0.5 = 7.5 ' يتم تقريبها إلى 8 WRONG
  5.  
  6.  

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

مشكووووووووووووور اخي على الشرح

و ما شاء الله عليك تفكيرك عمميق

ما شاء الله عليك والله يزيدك من علمه

و نفع الله بك المسلمين دنيا و اخره

شكرا لك مره اخرى!

Matrixyb3D.jpg

في يوم من الايام قال Matrixyb

" فكر في طريقة حماية لبرامجك و فكر اذا انت واجهتها كيف ممكن تكسرها اذا لقيت طريقة لكسرها دور طريقة حماية اخرى "

#12

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

أشكر الأخ matrixyb و كذلك الأخ Devd على روحه الرياضية...

و فقط عندي إضافة صغيرة!

يمكنك أن تصنع دالة صغيرة لهذا النوع من التقريب و تضعها في Module ثم تستعملها عند الحاجة:

  1.  
  2. Public Function Approximate(ANumber As Single) As Long
  3. Approximate = Fix(ANumber + 0.5)
  4. End Function
  5.  

ثم تستعملها هكذا مثلاً:

  1.  
  2. Dim TOT As Integer
  3.  
  4. TOT = Approximate(10)
  5. TOT = TOT + Approximate(6.5)
  6. TOT = TOT + Approximate(8.5)
  7.  
  8. Text1.Text = TOT
  9.  

أو هكذا

  1.  
  2. TOT = 0
  3. Adodc1.Recordset.MoveFirst
  4. Do While Not Adodc1.Recordset.EOF
  5. TOT = TOT + Approximate(Adodc1.Recordset("الدرجة"))
  6. Adodc1.Recordset.MoveNext
  7. Loop
  8.  

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

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#13

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

العفو منكم على تطفلي , ولكن بما انني واجهت نفس المشكلة وهي جبر الكسر في درجات الطلاب في المجموع النهائي من 100 مثلا

65.5 = 66

65.1 = 66

وهذا هو المطلوب جبر الكسر مهما كانت قيمتة

الحل كان باستخدام دالة بسطة ..

Public Function roundUp(dblValue As Double) As Double
On Error GoTo PROC_ERR
Dim myDec As Long

myDec = InStr(1, CStr(dblValue), ".", vbTextCompare)
If myDec > 0 Then
	roundUp = CDbl(Left(CStr(dblValue), myDec)) + 1
Else
	roundUp = dblValue
End If

PROC_EXIT:
	Exit Function
PROC_ERR:
	MsgBox Err.Description, vbInformation, "Round Up"
End Function

انسخ الكود وضعه في موديول مثلا ,, يمكن الوصول لهذه الدالة من أي مكان كالتالي

مثال

Dim TOT As Integer

TOT = roundUp(text1.text + text2.text + text3.text)

وهكذا

بالتوفيق

#14

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

اقتباس
العفو منكم على تطفلي

أهلاً بك أخ maaq6، فالمنتدى مفتوح لكل من يريد أن يُفيد أو يستفيد....

في مشاركتك نقطتان: واحدة غريبة و الأخرى غير مضمونة !!

النقطة الغريبة هي طريقة التقريب التي ذكرتها. فغالباً ما يتم التقريب بحذف الكسر و إبقاء الجزء الصحيح كما هو (إذا كان الكسر أقل من النصف)، أو حذف الكسر مع إضافة 1 إلى الجزء الصحيح (إذا كان الكسر نصفاً أو أكثر). و لكن ربما توجد بعض الجهات تستعمل الطريقة التي ذكرتها.

أما النقطة غير المضمونة فهي اعتمادك على وجود النقطة (.) كعلامة عشرية، و لكن لا ننسى أن بعض البلدان (العربية و غير العربية) تستعمل الفاصلة (الواو الصغيرة ,) كعلامة عشرية. لذلك فمن الأفضل أن نعتمد على إعدادات النظام عند المستخدم بحيث يعمل الكود حتى لو تغيرت الإعدادات.

و بالتالي فإن الدالة RoundUp ينبغي أن تكون كالتالي:

  1.  
  2. Public Function RoundUp(dblValue As Double) As Double
  3. Dim AFrac As Double
  4.  
  5. ' نتحصل على قيمة الكسر الذي هو الفرق بين القيمة الأصلية و القيمة دون كسر
  6. AFrac = dblValue - Fix(dblValue)
  7. If AFrac = 0 Then
  8. RoundUp = dblValue
  9. Else
  10. RoundUp = Fix(dblValue) + 1
  11. End If
  12. End Function
  13. ' ...
  14. ' ...
  15. ' ...
  16. ' ...
  17. ' ولاستعمال الدالة - مثلاً
  18. Text2.Text = CStr(RoundUp(CDbl(Text1.Text)))
  19.  

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

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

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

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

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

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

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