السلام عليكم ورحمة الله
يوجد لدي برنامج في لغة السي بلس بلس
أرجو منكم مساعدتي في حل الفقرات التي لم أعرفها
انا فاهمه البرنامج لكن تطبيق الكود يوجد بعض الخطوات لم أستطع تطبيقها بالكود
أرجو مساعدتكم فيها
البرنامج في الرابط فقره C
http://www.mediafire.com/download.php?ym7m8r9qswpdxna
(الفكرة العامة نفس فكرة المكعب اللي ترتيبه على حسب الألوان وهنا على حسب ترتيب الأرقام)
الفكرة من البرنامج انك تدخل مصفوفة و تختبرها هل تقدر هذي المصفوفة تترتب ولا لا؟
المصفوفة عبارة عن حلقات حلقة خارجية ثم داخلية حتى نصل الى اخر حلقه(قطعه وحده) التي في الوسط
نلف الحلقة الخارجية (الحلقه الخارجيه الكبيره تكون على شكل مربع) مع اتجاه عقارب الساعة او عكس عقارب الساعة و نلف ايضا الحلقة الداخلية (على شكل مربع ايضا بس داخل المربع الكبير)
ونلف كل الحلقات الى أن تترتب المصفوفة
اذا لفينا كل الحلقات و لم تترتب معنا المصفوفة معناها انها لن تكون مصفوفة قابلة للترتيب و سوف يكون الناتج (No)
اول خطوه نطلب من المستخدم أن يدخل رقم ولازم نختبر هذا الرقم الذي أدخله المستخدم بحيث يكون اكبر من الصفر و اصغر من او يساوي الف. اذا أدخل الرقم صفر ينهي البرنامج.
نعرف مصفوفة حجمها يساوي تربيع الرقم الذي أدخله المستخدم يصير هي التي نخزن فيها الارقام التي سيدخلها المستخدم.
و نعرف مصفوفة أخرى نعبيها ب for loop من صفر الى تربيع الرقم الذي أدخله المستخدم ناقص واحد عشان نقارن فيها
نعمل foor loop من صفر الى اقل من العدد الذي أدخله المستخدم مثلا لو أدخل 4 سوف يكون العدد من 0 الى 3
و داخل ال foor loop هذه foor loop أخرى أيضا من صفر الى العدد الذي أدخله المستخدم
داخل الfoor loop الداخلية نطلب المستخدم يدخل رقم نختبر هذا الرقم بحيث يكون عدد طبيعي يعني بدون فواصل او اعداد تخيلية ! و اذا وافق الشروط نخزنه في المصفوفة
خارج الfoor loop الداخلية نضع endl لكي تظهر الارقام كانها مكتوبة في صفوف
خارج الاتنين foor loop هذه
نعمل while loop
في كل مرة نعمل ازاحة(تحريك او لف )مع اتجاه عقارب الساعة للحلقة الخارجية و مع كل ازاحة نقارن اول صف و اخر صف بالمصفوفة التي خزننا فيها الأرقام.
اذا لم تنفع ولا ازاحة نجرب نعمل ازاحة لليسار و نقارن ايضا اذا لم تظهر نفس المصفوفة حقتنا المرتبة يصير خلاص ما نقارن الحلقات الداخلية لانه اول حلقة اصلا ما كانت مرتبة
اما اذا كانت مرتبة
نشوف الحلقة الداخلية و نعمل معها مثل ما عملنا مع الحلقة التي قبلها اللي اكبر منها
بعد أن ننهي اختبار المصفوفة و اذا طلعت تترتب خلاص نطبع كلمة yes
أتمنى يكون شرحي واضح..
هذا الكود الذي عملته..
#include <iostream>
using namespace std;
int main()
{
long int x;
long int a[x*x], b[x*x-1];
cin>>x;
while (x!=0)
{
if(x>0&&x<=1000)
for(int i=0;i<(x*x)-1;i++)
b;
for(int j=0;j<x-1;j++)
{
for(int c=0;c<x;c++)
{
cin>>a[c];
}
cout<<endl;
}
}
سؤالي هذه الخطوه كيف اعملها بالكود..
(كل مرة نسوي ازاحة(تحريك او لف )مع اتجاه عقارب الساعة للحلقة الخارجية و مع كل ازاحة نقارن اول صف و اخر صف بالمصفوفة اللي عبيناها
اذا ما نفعت و لا ازاحة نجرب نسوي ازاحة لليسار و نقارن ايضا اذا ما طلعت نفس المصفوفة حقتنا المرتبة يصير خلاص ما نقارن الحلقات الداخلية لانه اول حلقة اصلا ما كانت مرتبة
اما اذا كانت مرتبة
نشوف الحلقة الداخلية و نسوي معاها مثل ما سوينا مع الحلقة اللي قبلها اللي اكبر منها
بعد ما ننهي اختبار المصفوفة و اذا طلعت تترتب خلاص نطبع كلمة yes )
وهل كودي السابق صحيح مئه بالمئه ارجو المساعده..
تعبت كثير في كتابة البرنامج وفهمه خلاص طاقتي نفذت وانا ابغى أسلم الحل هذا الأسبوع ياليت تساعدوني بوقت مبكر
ولكم جزيل الشكر..




