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

التحقق من عدم التكرار داخل مصفوفة

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

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

صباح الفل والياسمين لجميع أعضاء المنتدى .. وسؤالي هو :

كيف استطيع التحقق من عدم تكرار بيانات داخل مصفوفة .. هذا بإختصار هو السؤال .. فهل أجد إستفاضةً في الحل ..

حاولت كثيراً .. ولدي طريقة حاولت ايجاد الحل بها .. وهي عمل لوب للتحقق من القيم المدخلة ولكني فشلت في إيجاد الحل ..

مع يقيني بصحة المسألة منطقياً ولكن دون جدوى ..

بإنتظار عونكم بعد الله طبعاً ،،

تحياتي للجميع ،،

وهذه هي المصفوفة التي احاول ايجاد حل عدم تكرار البيانات بداخلها :

اقتباس
For i = 1 To inmax

BusNosArray(1, i) = CInt(Me.txtBusTypeID)

Next

تم تعديل هذه المشاركة بواسطة snmdody في 27 فبراير 2012 في 01:53

#2

للتحقق من وجود تكرار من عدمه بين عناصر المصفوفة نستخدم لووب داخل لووب

اللوب الاول لسرد عناصر المصفوفة واللوب الثاني لمقارنة كل عنصر من عناصر المصفوفة (اللووب الاول) مع باقي عناصر المصفوفة (اللووب الثاني)

فمثلاً لنفترض ان لدينا مصفوفة اسمها MyArray ونريد التحقق من وجود تكرار بين عناصرها , نستخدم الكود التالي:

For I1 = LBound(MyArray) To UBound(MyArray)
	For I2 = LBound(MyArray) To UBound(MyArray)
    	If I1 <> I2 And MyArray(I1) = MyArray(I2) Then
        	MsgBox "Repeated Value between Items: (" & I1 & ") , (" & I2 & ")"
    	End If
	Next
Next

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#3

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

الشكر لأخي محمد غريب الذي قدم الحل، و بعد إذنه لدي تعديل بسيط:

بداية الحلقة الداخلية ينبغي أن تكون بهذا الشكل:

For I2 = I1 + 1 To UBound(MyArray)

أي تبدأ من العنصر التالي للعنصر المحدد في الحلقة الخارجية لأن العناصر السابقة تكون قد تمت مقارنتها سابقاً مع العنصر الحالي و لا داعي لتكرار المقارنة. هذا سيقلل من الزمن الذي ستأخذه الحلقة.

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

تم تعديل هذه المشاركة بواسطة najy_zl في 27 فبراير 2012 في 14:13

1

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

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

#4

شكراً لك اخي Najy_Zl ملحوظة جميلة smile.gif

بارك الله فيك ..

ولإستكمال الملحوظة يجب ان تنتهي الحلقة الخارجية عند

UBound(MyArray)-1

حتى لا يحدث خطأ عند آخر عنصر من عناصر المصفوفة عند جعل الحلقة الداخلية تبدأ بالعنصر الذي يليه ..

فيكون الكود كامل :

For I1 = LBound(MyArray) To UBound(MyArray)-1
    	For I2 = I1+1 To UBound(MyArray)
        	If I1 <> I2 And MyArray(I1) = MyArray(I2) Then
            	MsgBox "Repeated Value between Items: (" & I1 & ") , (" & I2 & ")"
        	End If
    	Next
Next

تم تعديل هذه المشاركة بواسطة محمد غريب في 27 فبراير 2012 في 15:06

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#5

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

خالص تحياتي ،،

#6

هلا تفضلتم علي وشرحتم معنى : UBound و LBound

وعفواً على الازعاج

#7

هلا تفضلتم علي وشرحتم معنى : UBound و LBound

وعفواً على الازعاج

#8

LBound تعني Lower Bound او رقم اول عنصر من عناصر المصفوفة

و UBound تعني upper Bound او رقم آخر عنصر من عناصر المصفوفة

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#9
محمد غريب كتب:

LBound تعني Lower Bound او رقم اول عنصر من عناصر المصفوفة

و UBound تعني upper Bound او رقم آخر عنصر من عناصر المصفوفة

بارك الله فيك

#10
snmdody كتب:

بارك الله فيك

على فكرة المصفوفة بهذا الشكل : BusNosArray(1, I1)

ارجو التعديل بارك الله فيكم

#11

بعد مراجعة الكود وتجربته اتضح لي ان به مشكلة بسيطة ارجو حلها وهي :

اريد فقط التدقيق في قيمة واحدة فقط من قيم المصفوفة بغض النظر عن عدد عناصر المصفوفة ، وما اعنيه بالضبط لنفترض ان لدي مصفوفة عدد عناصرها يساوي 5 فلا اريد ان يتم التدقيق بعدد مرات العدد 5 ولكن ما اريده ان يتم التدقيق في عنصر معين من عناصر المصفوفة

آمل ان قمت بتوضيح المشكلة بالشكل الامثل ..

وبإنتظار مجهوداتكم .. بارك الله فيكم جميعا ،،

#12

إذا كنت تريد التأكد من عدم تكرار قيمة العنصر رقم 3 مثلاً في باقي العناصر فأستخدم الكود:

For i = LBound(MyArray) to UBound(MyArray)
	If i <> 3 and MyArray(3) = MyArray(i) Then msgbox i
Next

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#13
محمد غريب كتب:

إذا كنت تريد التأكد من عدم تكرار قيمة العنصر رقم 3 مثلاً في باقي العناصر فأستخدم الكود:

For i = LBound(MyArray) to UBound(MyArray)
	If i <> 3 and MyArray(3) = MyArray(i) Then msgbox i
Next

لقد ارفقت ملف بالمشكلة ارجو الاطلاع ومساعدتي في تجاوز هذه المشكلة البسيطة على ما أظن ..

بارك الله فيكم جميعاً ..

Array.rar

#14

الشكر لله اولا ثم لجميع من شارك أو ساهم أو أبدى رأيا محاولا حل المشكلة التي اعترضتني وشايلكم لعوزة ..

لقد تم حل المشكلة ، والحل في إنشاء دالة واسمها : CheckBusNosArrayDbl

على العموم لقد اعدت ارفاق الملف بعد التعديل

بارك الله فيكم جميعا وكثر من امثالكم وجعله في موازين حسناتكم ،،

Array.rar

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