ما هي استراتيجيتك والطرق المتبعة في تحليل وحل الحلقات المتداخلة لرسم أشكال معقدة أو بسيطة ..
هل لديك استراتيجية معينة في تحليل الحلقات المتداخلة ..
لا اعلم لالحقيقة اين الصعوبة فيها ؟ بالعكس انا اجدها بسيطة و واضحة جداً و يمكنك رسمها حتى في اسواء انواع برامج الرسم يلي هو برنامج الرسام (خاص بالويندوز)
أنا لم أقصد رسم خرائط التدفق اطلاقا وهناك بعض البرامج المتخصصه في هذا الجانب , كالموجود في أكاديمية حسونة .. بدون اللجوء الي استخدام برنامج الرسم في الويندوز .
ولكن ما أقصد هو رسم الأشكال الهندسية بالحلقات المتداخلة بإسلوب خرائط التدفق كهذا الشكل علي سبيل المثال ..
بالنسبة للأشكال عليك ملاحظتها بشكل دقيق لاستنتاج خطوط تسير عليها للتفكير في كيفية سير البرنامج
أولاً: ملاحظة الشكل وعنه ينتج الآتي:
بداية الحلقة الداخلية ونهايتها يتم طباعة الرمز * عدا ذلك يتم طباعة -
نهاية الحلقة الخارجية يتم طباعة * فهي بذلك تكسر الشرط السابق
الشكل يتزايد تصاعدياً أي أن الحلقة الداخلية والخارجية تزداد بمعدل الوحدة ++
عدد الأعمدة يساوي عدد الصفوف وهو 8 (مصفوفة ذات بعدين متساويين)
الرموز المطبوعة في كل صف من المصفوفة يساوي قيمة الصف مضاف لها 1 (لأننا نعلم أن العد في المصفوفات يبدأ من 0 إلى أقل من عدد الصفوف/الأعمدة بمقدار 1)
ثانياً: من الملاحظات السابقة نستنتج الآتي:
سنقوم بتعريف متغير وهو بعد المصفوفة N وستكون قيمته 8
سنبدأ الحلقة الأولى بمتغير وليكن i من القيمة 0 إلى أقل من قيمة بعد المصفوفة N
ونبدأ الحلقة الداخلية بمتغير وليكن j يبدأ من القيمة 0 إلى أصغر من أو يساوي عداد الحلقة الكبرى i
سنضع شرط في حال كان عداد الحلقة الداخلية j يساوي 0 (أي بداية الصف) أو عداد الحلقة الداخلية j يساوي عداد الحلقة الخارجية i (نهاية الصف) أو عداد الحلقة الخارجية i يساوي بعد المصفوفة مطروح منه 1 ( أي الصف الأخير في المصوفة) يطبع الرمز * فيما عدا ذلك يطبع الرمز -
بعد نهاية الحلقة الداخلية نطبع سطر جديد فارغ
وبهذه الاستنتاجات يمكن كتابة الكود كالتالي دون الاعتماد على التجربة:
int N = 8;
for(int i=0; i<N; i++){
for(int j=0;j<=i;j++){
if(j==0 || j==i || i == N-1){
System.out.print("*");
}else{
System.out.print("-");
}
}
System.out.print("\n");
}
مع ملاحظة أنني لم أقم بتجربة الكود السابق، فربما أخطأت في شيء ما ولكن هذه كمحاولة لتوضيح الطريقة المتبعة دون الاعتماد على التجربة والتعديل على الكود للحصول على النتيجة.
تعديل:
نسيت اضافة ++j ثم قمت بتنفيذ الكود فكان هناك خطأ، بتبديل i بـ j كما ظهر في سجل التعديلات.
مع ملاحظة أنني لم أقم بتجربة الكود السابق، فربما أخطأت في شيء ما ولكن هذه كمحاولة لتوضيح الطريقة المتبعة دون الاعتماد على التجربة والتعديل على الكود للحصول على النتيجة.
هناك خطأ طفيف في السطر الثالث من الكود في الحلقة الداخلية "جل من لا يسهو"
for(int j=0;j<=i) line 1 of code
for(int j=0;j<=i; j++) line 2 of code
لكن الكود في المجمل حقق المطلوب بشكل ممتاز .
و عندي أكثر من استفسار بسيط محتاجين توضيح ..
- > بالنسبة للأشكال عليك ملاحظتها بشكل دقيق لاستنتاج خطوط تسير عليها للتفكير في كيفية سير البرنامج
المشكلة تكمن لدي أساسا في عدم القدرة علي الملاحظة لبناء الأستنتاجات البرمجية او الرياضية لكتابة الكود ومن هنا يأتي التسأول بإمكانية وجود قواعد واستراتيجيات معينة من خلالها يكون لنا القدرة علي الملاحظة وبناء الإستنتاجات لكتابة الكود ..
المشكلة تكمن لدي أساسا في عدم القدرة علي الملاحظة لبناء الأستنتاجات البرمجية او الرياضية لكتابة الكود
- الممارسة لها دور كبير في حضور المعلومات بحيث يكون لديك كم معرفي يَُمكنك من معالجة المشكلة عبر ما تمتلكه من خبرة تكتسبها بالممارسة والإطلاع وحل مُشكلات موجودة مسبقاً مما يجعلك تنتهج أساليب مماثلة في حل مشكلات مماثلة وأخرى جديدة إعتماداً على اكتسبته من خبرة تمكنك من هذا.
اذا لا توجد استراتيجية منهجية لحل تلك المسائل, حلها يعتمد فقط علي ما لديك من خبرة وكثرة تجارب ومخزون معرفي جيد بالنسبة للمجال بشكل عام .
اراحتني بردك هذا , انا كنت شبه متوقف تماما عن التقدم في متابعة الدروس الأن تلك الصعوبات التي واجاهتني سيتم تدوينها ومتابعة المزيد من التعلم والممارسة والتقدم في دروسي ومن ثم سنرجع للتعامل مع تلك الصعوبات بمخزون معرفي جيد يساعدنا علي تخطيها..
شكرا جزيلا ..
التعليقات