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

سؤال عن المصفوفة الثنائية

بدأه راان في 12 يناير 2009 · 17 رد · 7,014 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

الفريق العربي للبرمجة

لدي مصفوفة ثنائية وهي كالتالي :

Dim myArray(3, 5) As STRING

سؤالي هو كم صف في هذه المصفوفة وكم عمود ؟؟

يعني الـ 3 هو عدد الصفوف ولا الاعمدة ؟؟

ومين اللي بيجي اول في المصفوفة الصف ولا العمود ؟؟

انا بصراحة الخبط بين الصف والعمود مين اللي يجي اول دائما هل هو الصف او العمود

#2

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

الاخ الفاضل

رياضيا وبرمجيا , دائما اثناء الحديث عن المصفوفات يأتى الصف اولا والعمود ثانيا , وبالتالى عندما اقول

myarray(3,5)

فان هذا يعنى ان عدد الصفوف 3 وعدد الاعمدة 5. وببساطة يمكنك عمل ربط بين كلمة صف وكلمة مصفوفة , اذا المصفوفة عبارة عن مجموعة صفوف , وبالتالى الصف هو صاحب اليد العليا فى المصفوفات فيأتى ذكره اولا.

هذا والله اعلى واعلم ,,,

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#3

جزاك الله الف خير اخي عماد حمدي احمد

#4

حط ملاحظه اخرى في بالك ..

عدد عناصر المصفوفة الثنائية = حاصل ضرب الصفوف والاعمدة ..

									 =  3 × 5 =15

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#5

1- انتبهي الى التصريح أعلاه :

اقتباس
Dim myArray(3, 5) As STRING

أنت قمت بحجز 24 عنصرا وليس 15 !

لأن أساس المصفوفة الافتراضي صفر ....

اذا أردت حجز 15 بنفس الطريقة أجعلي أساس المصفوفة 1 بكتابة التصريح

Option Base 1
#6

المصفوفة هى وضع تخيلى لتسهيل الوصول لمحتوى الذاكرة / لكن فى الحقيقة البيانات تخزن فى الذاكرة على شكر بيتات متراصله واحد تلو الاخر ، ويتم الوصول اليها بعناوين متتاليه

نفترض ان لدينا مصفوفه 6 × 4 ، 4 صفوف و 6 أعمدة ، سنرمز للصف بالحرف R وللعمود بالحرف C

الصفوف: تبدء من الصف 0 الى الصف 3

الاعمدة: تبدء من العمود 0 إلى العمود 5

Dim myArray(3, 5) As String

6 اعمدة × 4 صفوف

post-177132-1231844333_thumb.jpg

هنا سيتم حجز 6 × 4 = 24 موضع متتالية (بايت/كلمة/مؤشر/...) فى الذاكرة لهذه المصفوفة بالشكل:

post-177132-1231844363_thumb.jpg

وعند محاولة الوصول الى اى موضع فى المصفوفة يتم حساب الموضع المقابل له فى الذاكرة

بالمعادلة:

حيث columns = عدد الاعمدة فى المصفوفة

mem = R * columns + C

فمثلاً عندما نقول ان (myArray(2,3 فإننا نقصد الموضع 2 * 6 + 3 = 15

وعندما نقول ان (myArray(3,1 فإننا نقصد الموضع 3 * 6 + 1 = 19

وعندما نقول ان (myArray(3,4 فإننا نقصد الموضع 3 * 6 + 4 = 22

وهكذا ................

فمن هنا جاء الافتراض ان الرقم الاول هو الصفوف والثانى هو الاعمدة / ولكن الموضوع تخيلى بالدرجه الاولى

لو عرفت مصفوفة ثلاثية الابعاد xyz ستنطبق عليها نفس القواعد

Dim myArray(4, 3, 5) As String

6 اعمدة × 4 صفوف × 5 أبعاد

هنا سيتم حجز 6 × 4 × 5 = 120 موضع متتالية (بايت/كلمة/مؤشر/...) فى الذاكرة لهذه المصفوفة

وعند محاولة الوصول الى اى موضع فى المصفوفة يتم حساب الموضع المقابل له فى الذاكرة

بالمعادلة:

حيث columns = عدد الاعمدة فى المصفوفة / rows = عدد الصفوف فى المصفوفة / Z عمق المصفوفة

mem = Z * (rows*columns) + R * columns + C

فمثلاً عندما نقول ان (1,myArray(2,3 فإننا نقصد الموضع 2 * 24 + 3 * 6 + 3 = 69

وعندما نقول ان (myArray(3,2,1 فإننا نقصد الموضع 3 * 24 + 2 * 6 + 1 = 85

ونفس القول للمصفوفة الرباعية والخماسية والسداسية واى عدد من الابعاد للمصفوفة

تم تعديل هذه المشاركة بواسطة a3ghadeer في 13 يناير 2009 في 23:10

#7
اقتباس
أنت قمت بحجز 24 عنصرا وليس 15 !

لأن أساس المصفوفة الافتراضي صفر ....

لا يا أخي ..

عندك قانون ثابت في البرمجة والمصفوفات عامة ..

عدد عناصر المصفوفة = الصفوف × الاعمدة ..

مهما كان اساس تلك المصفوفة ..

بلغة السي و السي++ .. تبدأ المصفوفات بـ (صفر) .. لذلك فان التصريح عن المصفوفة التالية

int a[10];

يعني ان المصفوفة تحتوي عشرة عناصر تبدأ من الصفر وحتى 9 ..

بينما المصفوفة التالية ..

int a[10][10];

تعني التصريح عن مصفوفة مربعة (matrix) .. تحتوي 100 عنصر = 10 × 10 ..

واذا عرفتها بالفيجول بيسك

dim x(10,10)

بداية المصفوفة تكون بـ ( واحد ) .. وبذلك تكون النهاية ب10 وليس 9 ..

فالرياضيات ثابتة ولا تتغير بتغير لغة البرمجة ..

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

اقتباس
نفترض ان لدينا مصفوفه 4 × 6 ، 4 صفوف و 6 أعمدة ، سنرمز للف بالحرف R وللعمود بالحرف C

الصفوف: تبدء من الصف 0 الى الصف 3

الاعمدة: تبدء من العمود 0 إلى العمود 5

Dim myArray(3, 5) As String

4 صفوف × 6 اعمدة

كلامك صحيح ولكن اتمنى ان تحرر الرد وتصلح الكود ليصبح 6 × 4 ..

لكي لا يتلخبط العضو السائل ..

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

تحياتي العطرة للجميع ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#8

مشكور اخوى سنان محمد صالح

تم تحرر الرد وتصلح الكود

#9
اقتباس
لا يا أخي ..

عندك قانون ثابت في البرمجة والمصفوفات عامة ..

عدد عناصر المصفوفة = الصفوف × الاعمدة ..

مهما كان اساس تلك المصفوفة ..

بلغة السي و السي++ .. تبدأ المصفوفات بـ (صفر) .. لذلك فان التصريح عن المصفوفة التالية

كود

int a[10];

احسنت .. لدينا الرؤية نفسها لالية الحجز وفق مترجم ++C ولكن ..

اقتباس
واذا عرفتها بالفيجول بيسك

كود

dim x(10,10)

بداية المصفوفة تكون بـ ( واحد ) .. وبذلك تكون النهاية ب10 وليس 9 ..

لم تكن مصيبا" بهذه المعلومة أبدا... اقرأ جيدا

تم تعديل هذه المشاركة بواسطة Devd في 14 يناير 2009 في 23:27

#10
اقتباس
بداية المصفوفة تكون بـ ( واحد ) .. وبذلك تكون النهاية ب10 وليس 9 ..

لم تكن مصيبا" بهذه المعلومة أبدا... اقرأ جيدا

هذا صحيح، فحتى في الفيجوال بيسك تبدأ المصفوفة بصفر.

إلا إذا كتبت :

Option Base 1

والله أعلم

هذه الجملة خاطئة  :wacko: 


#11

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

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

او تخزينها في ملف تكست او اضافة مستوى و و و و

وشكرا

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

#12

ارجو الرد

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

#13

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

او تخزينها في ملف تكست او اضافة مستوى و و و و

وشكرا

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

#14

93996436.jpg

ارجو التعليق على الصوره لاني لم افهم الحرف C يدل على ماذا

49940.jpg
#15

موضحة في نفس المشاركه :

R اختصار ل Row اي الصف

C اختصار ل Column اي العمود

وبالتالي لحساب الموقع الحقيقي في الذاكره نحتاج لمعرفة عدد الالاعمدة ومكانه الحالي في المصفوفة (الصف R والعمود C ).

اعتقد ان الموضوع يختلف من مترجم الى اخر. لمزيد من المعلومات يمكن مراجعة اي كتاب كويس في تصميم لغات البرمجه.

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#16
اقتباس
R اختصار ل Row اي الصف

C اختصار ل Column اي العمود

مكتوب بالصوره

mem = R * columns + C

اخ ibr_exn

انت تقول ان الـ R يرمز للصف (او عدد الصفوف) و C يرمز للعمود (او عدد الأعمده) و بالتالى ماهو columns ؟؟

و إذا كان columns هو عدد الاعمده فما هو C ؟؟ هل يوجد اى احتمال ان يشير C إلى Constant ؟؟

مدونتي: C++ Tips and Tricks

#17
اقتباس
انت تقول ان الـ R يرمز للصف (او عدد الصفوف) و C يرمز للعمود (او عدد الأعمده)

لا ، لم اقل ذلك.

اقتباس
مكانه الحالي في المصفوفة (الصف R والعمود C )

العملية اخي ان لديك مصفوفة وتود معرفة اماكن عناصرها في الذاكره.

يعني مثلا لديك مصفوفة بها 10 صفوف و 15 عمود

وتريد معرفة موقع عنصر في المصفوفه في الصف الثالث والعمود الخامس ، اي نريد معرفة عنوانه الحقيقي في الذاكره

معناه

R=3

C=5

Columns=15

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#18

وضحت الرؤيه، شكرا على الإيضاح

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

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