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

اريد كود يحدد حجم المصفوفة

مغلق
بدأه mamrya في 6 نوفمبر 2005 · 21 رد · 2,463 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الاعضاء اني اواجه مشكلة وهي في تحديد مصفوفة في برنامج متعدد الدوال حيث اريد المستخدم يحدد حجم المصفوفة ولم استطع تنفيد هذا الامر

ولم استطع ايظا ان استخدم المصفوفة في جميع الدوال لان السكوب لا يسمح بدلك

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

وشكرا لكم

:) :) :) :) :)

#2

بسيطة تحديد حجم المصفوفة بواسطـة المؤشرات ؛ أنظر إلى هذا المثال

int *pArray;
int N;
cin >> N;
pArray= new int [N];
#3

بالنسبة لأمر تمرير المصفوفة إلى الدوال .... فلماذا لا تريح نفسك وتجعلها متغير عام global

#4

و ما المشلكة في تمرير الarray الى الfunctions فهو أكثر تنظيماً

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#5

أكثر تنظيماً صحيح ولكن أكثر تعقيد (أتكلم هـنا عـن المشاريع الصغيرة جداً) ... وأنا لا أعتقد أن الأخ السائل سيقوم بكتابة Real Player وإن كنا نتمنى أن يكون أحد أعضاء المنتدى ضمن فريق يعملون مثل ذلك البرنامج

#6

يجب التعود على التنظيم حتى في المشاريع الصغيرة, و كما يقولون, من شب على شيء شاب عليه, و هذا ينطبق على البرمجة.

المشكلة تكمن في ان المصفوفات في السي لا تحتوي على معلومات تخبرك بحجمها, و عندما ترسلها الى الـ functions اخرى فإنك لا ترسل سوى مؤشر pointer لأول عنصر فيها.

بإمكانك استخدام std::vector (مع اني شخصيا لا احبه)

http://www.codeguru.com/Cpp/Cpp/cpp_mfc/st...ticle.php/c4027

#7

أخي hasan_aljudy:

حتى في لغات البرمجـة الهيكلية من الممكن أن يكون لديك متغيرات عامـة وإن كان أمرها خطيراً فعلاً ..... نرى أن السائل يتحدث عـن أن هذه المصفوفة هي أساس البرنامج (وأن البرنامج كله ما كُتب إلا لأجلها ) لماذا إذاً لا يكون بإمكانـه جعل تلك المصفوفة متغير عام (هي فقط وليس غيرها) أنا لا أقول أن يجعل جميع المتغيرات عامـة ولكن فقط هذه المصفوفة لأن جميع الدوال ستستخدمها وهذا لن ينافي التنظيم أخي hasan ..

نصيحتي للأخ mamrya إن لم تعـجبه المكتبة vector أن يقوم بكتابة كلاس (قريب من النمط) يحل جميع مشاكل المصفوفات في لغة السي والسي بلس بلس وإن كان هذا يناقض أهـم نصيحـة للبرمجـة الشيئية : لا تعيد كتابة شيفرة موجودة

#8

أرسل طول المصفوفة الى الـfunction .........مثلا

void printall(int array[], int length) {
     if(length < 0)
          return;
     for(int i = 0; i < length; i++)
          cout << array << endl;     
}

و أذا دمجناه مع مثال الأخ سلطان .....فأستدعائه يكون

printall(pArray, N);

comp2.gif

#9

المتغيرات العامة global مشكلتها ليست فقط في التنظيم, و أنما المشكلة الأكبر بنظري هي في أعادة أستعمال نفس الكود بدل كتابته من جديد أو عمل تغييرات فيه.

لو كان عندك function يسوي حاجة معينة, و أحتاجيته بعد فترة. أذا كنت معتمد على متغيرات عامة ....مشكلتك مشكلة...راح ترجع عليها كلها في الـfunction و تغيرها لتطابق البرنامج الجديد. يعني ما راح يكون عندك reusable code.

comp2.gif

#10

أريد أن أسألك يا أخ MIT .. هل كان من أهـداف البرمجـة الهيكلية إمكانية إعادة الاستخدام.... حتى تذكر هذا العيب .. ألم تأتي البرمجـة الشيئية لهذا الغرض حتى تزيد من الإنتاجيـة

#11

لكن هذا لا يعني ان الـ procedural programming يجب ان يكون سيئا و ملخبطا ..

#12

أخي Sultan Althibity

الصراحة أنني آخر شخص يسأل في موضوع أهداف البرمجة. :) أصلا دراستي في هندسة الحاسبات كانت hardware أكثر من برامجيات و غيرها.

و لما كنت أقرأ كتب هندسة البرامجيات و غيرها......و أشوف الأمور اللي لازم أراعيها بكتابة الكود مثل maintainability و reliability و أمكانية أعادة الأستخدام و غيرها........ما كنت ألتزم فيها للسهولة.

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

عن خبرة و ليس عن دراسة نظرية.......أتصور أنه حتى procedural programming المفروض يكون منظم بحيث يحاول قدر الأمكان أن يتوافق مع الأهداف المذكورة بالأعلى. و الأفضل أنه الواحد يتعلمها من البداية. حتى أذا حبيت تسوي من الكود مالتك classes راح يكون أسهل بالتحويل. ......... يمكن توجد أمور تسهل العمل, و لكن راح تصعبه عالمدى البعيد و تاخذ وقت الى أن تتعدل.

بالنهاية......هذا الرأي مبني على خبرة و ليس نظريات....و مثل ما ذكرت...آني آخر واحد يسأل بالنظريات. :)

comp2.gif

#13

من قال أن عليه أن يكون سيئاً وملخبطاً ....

الذي أقصده هـنا أن للبرمجـة الهيكلية قواعـد وأساسيات يجب الالتزام بها ( لم أدرس أساسيات البرمجـة الهيكلية ولكني أتكلم من واقع تجربتي لفوائد البرمجـة الشيئية) ... الذي أراه هـنا يا أخ حسن الجـودي أنك تحاول تطبيق مفاهيم البرمجـة الشيئية على البرمجـة الهيكلية... قد تقول أن استخدام المتغيرات العامـة عيب ومصيبـة ؛البرمجـة الهيكلية لا تحاول الوصول إلى إمكانية إعادة الاستخدام ، بالتالي فمالذي يمنعـك من عـدم استخدام المتغيرات العامـة ,,,,, كل ما أود أن أشير إليه هـنا ... أننا إذا كنـا تحت لغـة برمجـة هيكلية فلماذا علينا أن نترك أداة تعتبر نسبياً مهـمـة وهي المتغيرات العامـة .. بإمكاننا استخدامها إذا التزمنا بألا تكون مصيبة على البرنامج وإذا استخدمناها في المكان المناسب ؛ عذراً على الفلسفة الزائدة وأتـمنى تصحيح أخطائي (بالحسنى وليس بالاستهزاء) وخاصة أني لم أدرس مبادئ البرمجـة الهيكلية التي تنساها جامعتنا

#14

أود أن أضيف شيئاً طريفاً :

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

#15

أخي سلطان

أستخدام المتغيرات العامة ليس عيب و لا مصيبة و لا مشكلة. ........ لكن يبقى تقليل أستخدامها شيء مطلوب.

يعني الأختلاف ليس على أستعمالها أو لا.....و أنما على أستعمالها في كل حالة أو فقط في حالة لم نجد أي حل آخر.

بنظري الواجب قصر أستعمالها على الحالات اللي راح تنغلق بوجوهنا كل الحلول الأخرى.

أخوك

محمد

comp2.gif

#16
اقتباس
أستخدام المتغيرات العامة ليس عيب و لا مصيبة و لا مشكلة. ........ لكن يبقى تقليل أستخدامها شيء مطلوب.

يعني الأختلاف ليس على أستعمالها أو لا.....و أنما على أستعمالها في كل حالة أو فقط في حالة لم نجد أي حل آخر.

بنظري الواجب قصر أستعمالها على الحالات اللي راح تنغلق بوجوهنا كل الحلول الأخرى.

أتفق معـك في كل ما قلت (h)

ولكني لا أتفق حول رميها في سلة المهـملات :D .... فهي تقنية مثلها مثل أي تقنيـة لها عيوب ومميزات وإن كان من النادر أن أجد مكان أطبقه فيها جيداً

#17

هناك نقطة مهمة, احب التنويه اليها.

البرمجة الشيئية لن تشعر بقائدتها الكبيرة الا بالمشاريع الكبيرة جدا, و ليس الصغيرة.

من ناحية التنظيم و غيره, الانسان لازم دائما يحاول يخلي الكود منظم قابل للقرائة و التصحيح و التغيير, بغض النظر عن اي شيء آخر, اللهم الا اذا كان يكتب برنامجا للاشتراك في مسابقة اكثر الأكواد غير المفهومة, مثل هذه http://www.ioccc.org

مبادئ البرمجة الكائنية ليست حكرا عليها .. و أصلا لا يصح ان نسميها مبادئ البرمجة الهيكلية.

إحدى أهم الأفكار وراء البرمجة الكائنية/الشيئية هي فكرة المحافظة على مستوى عالي من الـ cohesion و مستوى منخفض من الـ coulping داخل البرنامج.

هذه الكلمات يقصد بها فصل مكونات البرنامج عن بعضها بأكبر قدر ممكن, و تقليل التداخل فيما بين تلك المكونات.

هذه الفكرة تم تطويرها أصلا من أجل الـ procedural programming, حتى قبل ان تولد الـ oop

نفس الشي, فكرة الـ reusability ايضا ليست حكرا على الـ object oriented programming, الـ oop كان إحدى أهدافها هو تدعيم هذا المبدأ, و لكن ليست البرمجة الكائنية هي من اخترع هذا المبدأ.

#18
اقتباس
هذه الفكرة تم تطويرها أصلا من أجل الـ procedural programming, حتى قبل ان تولد الـ oop

نفس الشي, فكرة الـ reusability ايضا ليست حكرا على الـ object oriented programming, الـ oop كان إحدى أهدافها هو تدعيم هذا المبدأ, و لكن ليست البرمجة الكائنية هي من اخترع هذا المبدأ.

شكراً على هذه المعلومات (h)

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

اقتباس
البرمجة الشيئية لن تشعر بقائدتها الكبيرة الا بالمشاريع الكبيرة جدا, و ليس الصغيرة.

شعرت بفائدة البرمجـة الشيئية حينما تجاوزت عـدد أسطر أكـوادي التي أكتبها الـ 1200 سطر .. مع العلم أنه لم يسبق لي كتابة أكثر من 5 آلاف سطر .... وبالرغـم من صغر هذه البرامج إلا أنه لولا البرمجة الشيئة وسحر الوراثة وتعـدد الأوجـه لبقيت أسابيع في كتابة تلك الأكـواد

#19

البرمجة الشيئية تسهل الكثير, خصوصا على المبتدئين مثلنا, انا كثيرا من الاحيان اكتب بخليط من البرمجة الشيئية و العادية, و عادة استخدم البرمجة الشيئية لبرمجة الأجزاء الصعبة او المعقدة, و ذلك لأنني لا استطيع تحليل المشكلة كلها مرة واحدة ..

و لكن اعتقد ان هناك خبراء يستطيعون برمجة اشياء معقدة بالأساليب العادية, يعني بدون كتابة اي class, و بالنسبة لهؤلاء الناس, قد يرون ان البرمجة الشيئية مضيعة للوقت .. و لكن حتى بالنسبة لهؤلاء الناس, عندما يكتبون برامج كبيرة جدا, ستتعقد المسائل عليهم!

و هذا ما أقصده عندما قلت ان فائدتها الحقيقة تظهر في البرامج الكبيرة .. لأنه ممكن يأتي واحد و يقول لك انه خبير و انه لا يحتاج الى الـ oop!

#20

صراحة فائدة في الاجابة وفائدة في النقاش الرائع

اخواني اكذب اذا قلت انكم اترتم اعجابي

وطلب اخير

for (int i=0;i<arraysize;i++){
cout<<parray<<endl;
}

هل هذا الكود صالح لعرض قيم مصفوفة

كما افادني الاخ Sultan_Althibity

وشكرا لكم

#21
اقتباس
اخواني اكذب اذا قلت انكم اترتم اعجابي

الله يسامحك يعـني نحن ما أثرنا اعجابك :D

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

بالتأكيد صالح ، إذا اعتبرت أن parray هـو المؤشر و arraysize عـدد عـناصر المصفوفة

#22

االعفو اخي غلطة مطبعية ومشكور والله انا مقصر معاكم

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

اذا معاكم اي معومات تفيدنا الرجاء تراسلونا على

mamrya@hotmail.com

بس احب تذكروا لي انكم من اعضاء الفريق العربي عشان انا شكاك كثير

اخوكم محمد الرديني

تم تعديل هذه المشاركة بواسطة mamrya في 10 نوفمبر 2005 في 23:40

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

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