Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

الخوارزمياتالتعامل مع المصفوفة ذات البعد الواحد - التمرين الرابع

المطلوب

هذا التمرين مقسّم إلى أربع أفكار رئيسية, عليك اتباع التقسيم التالي خطوة خطوة حتى تنجز البرنامج.

  1. أكتب برنامج يطلب من المستخدم إدخال 5 قيم و يخزنهم في مصفوفة إسمها vector تتألف من 5 عناصر.
  2. ثم يعرض للمستخدم قيم المصفوفة التي قام هو بإدخالها.
  3. بعدها يقوم بترتيب هذه القيم من الأصغر إلى الأكبر.
  4. في الأخير يعرض للمستخدم قيم المصفوفة من جديد.

النتيجة المطلوبة

لنفترض أن المستخدم أدخل 5 قيم كما في الصورة التالية.

تحليل النتيجة

لنفترض أن المستخدم أدخل 5 عناصر كما في الصورة السابقة.

الخوارزمية

كود الجافا

import java.util.Scanner;
 
public class Vector {
 
    public static void main (String[] args) {
 
        Scanner input = new Scanner(System.in);
 
        int[] vector = new int[5];
        int temp;
 
        for (int i=0; i<vector.length; i++)
        {
            System.out.print("Enter vector[" +i+ "]: ");
            vector[i] = input.nextInt();
        }
 
        System.out.print("\nBefore arrangement: \n");
 
        for (int i=0; i<vector.length; i++)
        {
            System.out.print("vector[" +i+ "]: " + vector[i] +"\n");
        }
 
        for (int i=0; i<vector.length-1; i++)
        {
            for (int j=i+1; j<vector.length; j++)
            {
                if ( vector[i] > vector[j] )
                {
                         temp = vector[i];
                    vector[i] = vector[j];
                    vector[j] = temp;
                }
            }
        }
 
        System.out.print("\nAfter arrangement: \n");
 
        for (int i=0; i<vector.length; i++)
        {
            System.out.print("vector[" +i+ "]: " + vector[i] +"\n");
        }
 
        System.out.print("\n");
 
    }
 
}

شرح الكود


        int[] vector = new int[5];
        int temp;
  • هنا قمنا بتجهيز المصفوفة vector التي سنضع فيها القيم التي يدخلها المستخدم و حددنا عند إنشائها أن عدد عناصرها يساوي 5.
  • و المتغير temp الذي سنستخدمه بشكل مؤقت أثناء عملية ترتيب العناصر من الأصغر إلى الأكبر.


        for (int i=0; i<vector.length; i++)
        {
            System.out.print("Enter vector[" +i+ "]: ");
            vector[i] = input.nextInt();
        }
  • هنا أنشأنا حلقة تبدأ من index العنصر الأول في المصفوفة إلى آخر عنصر موجود فيها.
  • في كل دورة من دورات الحلقة i سيحدث التالي:
    • سيطلب من المستخدم إدخال قيمة لعنصر محدد من عناصر المصفوفة.
    • بعدها سيتم تخزين العدد الذي سيدخله في هذا العنصر.


        System.out.print("\nBefore arrangement: \n");
        
        for (int i=0; i<vector.length; i++)
        {
            System.out.print("vector[" +i+ "]: " + vector[i] +"\n");
        }
  • هنا أنشأنا حلقة تبدأ من index العنصر الأول في المصفوفة إلى آخر عنصر موجود فيها لعرض جميع قيم المصفوفة قبل أن نرّتب قيمها من الأصغر إلى الأكبر.


        for (int i=0; i<vector.length-1; i++)
        {
            for (int j=i+1; j<vector.length; j++)
            {
                if ( vector[i] > vector[j] )
                {
                        temp = vector[i];
                    vector[i] = vector[j];
                    vector[j] = temp;
                }
            }
        }
  • هنا عندنا حلقتين متداخلتين, الحلقة i و الحلقة j.
  • الحلقة i تبدأ من أول عنصر إلى العنصر ما قبل الأخير, أي من 0 إلى 3.
  • الحلقة j تبدأ من أول عنصر بعد العداد i إلى آخر عنصر, أي من i+1 إلى 4.
  • إذاً هنا في كل دورة من دورات الحلقة i سيتم مقارنة قيمة عنصر جديد في المصفوفة, مع قيمة جميع العناصر التي تليه في المصفوفة عن طريق الحلقة j.
  • إذا كانت قيمة العنصر vector[i] أكبر من قيمة أي عنصر بعده من العناصر vector[j] سيتم تبديل قيمهم.
  • هذا الكود معقد قليلاً و ستجد بعض الصعوبة للإقتناع به, لذلك ننصحك بمشاهدة الفيديو لتفهم طريقة عمله.


        System.out.print("\nAfter arrangement: \n");
        
        for (int i=0; i<vector.length; i++)
        {
            System.out.print("vector[" +i+ "]: " + vector[i] +"\n");
        }
  • في الأخير سيتم إنشاء حلقة تبدأ من index العنصر الأول في المصفوفة إلى آخر عنصر موجود فيها لعرض قيم المصفوفة من جديد حتى نتأكد إذا تم ترتيب قيم عناصرها من الأصغر إلى الأكبر أم لا.


ملاحظات مهمة حول عدد عناصر المصوفة

في هذا التمرين قمنا بإنشاء مصفوفة vector مع تحديد أنها تتألف من 5 عناصر لحظة إنشاءها.
هذا يعني أن الكود vector.length سيعطينا الرقم 5 لأن عدد عناصر المصفوفة يساوي 5.


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

أمثلة

الطريقة الأولى

for (int i=0; i<vector.length; i++)

هذه الحلقة تبدأ من 0 إلى ما قبل عدد عناصر المصفوفة, أي من 0 إلى 4.
هذه الطريقة تعتبر أفضل طريقة بينهم, لأنك بواسطتها قادر على المرور على جميع عناصر المصفوفة مهما كان حجمها بأصغر كود ممكن.


الطريقة الثانية

for (int i=0; i<=vector.length-1; i++)

هذه الحلقة تبدأ من 0 إلى ما قبل عدد عناصر المصفوفة, أي من 0 إلى 5-1, أي من 0 إلى 4.
هذه الطريقة تشبه الطريقة الأولى لكن لا ننصح بها لأنه بإمكانك تقليل حجم الكود كما في الطريقة الأولى.


الطريقة الثالثة

for (int i=0; i<5; i++)

هذه الحلقة تبدأ من 0 إلى ما قبل الرقم 5, أي من 0 إلى 4.
المشكلة الوحيد في هذه الطريقة أنه لا يمكنك إعتمادها إلا إذا كنت تعرف حجم المصفوفة.


الطريقة الرابعة

for (int i=0; i<=5-1; i++)

هذه الحلقة تبدأ من 0 إلى ما قبل الرقم 5-1, أي من 0 إلى 4.
لا تستخدم هذه الطريقة لأنه لا يمكنك إعتمادها إلا إذا كنت تعرف حجم المصفوفة و لأنه بإمكانك تقليل حجم الكود كما في الطريقة الثالثة.


خلاصة

من الآن فصاعداً حاول دائماً استخدام الخاصية length بدل كتابة عدد ثابت عند كتابة شرط إيقاف الحلقة حتى يكون برنامجك مرن.
فمثلاً لو عدت للبرنامج و أردت تغيير عدد عناصر المصفوفة من 5 إلى 10 و كنت قد إستخدمت الطريقة الثالثة في الوصول إلى عناصر المصفوفة, لكان عليك الدخول لجميع الحلقات و كتابة الرقم 10 بدل كل رقم 5 حتى يعمل البرنامج بشكل صحيح.
بينما لو استخدمت الخاصية length كما فعلنا لما كنت ستضطر إلى تعديل كود أي حلقة.

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


دورة تعلم البرمجة للمبتدئين >