المصفوفة أحادية البعد One Dimensional Array (3) - تمرير مصفوفة إلى دالّة

وقت القراءة: 6 دقائق 208 مشاهدة

في لغة C++، يمكنك تمرير مصفوفة إلى دالة، وهذا مفهوم أساسي عند العمل مع المصفوفات. عندما تقوم بتمرير مصفوفة إلى دالة، فإنك تسمح لهذه الدالة بالعمل على عناصر المصفوفة أو تعديل المصفوفة إذا لزم الأمر.

فيما يلي شرح لكيفية تمرير مصفوفة إلى دالة في لغة C++:

إعلان مصفوفة في دالة

Parameters المصفوفة: لتمرير مصفوفة إلى دالة، يجب عليك إعلان parameter الدالة كمصفوفة. يمكنك إعلان ذلك بطريقتين:

  • استخدام حجم ثابت: إذا كنت تعرف حجم المصفوفة مسبقًا، فيمكنك تحديد الحجم في parameter الدالة، كما يلي:
void functionName(int arr[5]) {
    // Code to work with the array
}
  • استخدام مؤشر Pointer: يمكنك أيضًا تعريف parameter الدالة كمؤشر لعناصر المصفوفة دون تحديد الحجم، كما يلي:
void functionName(int *arr, int size) {
    // Code to work with the array
}

في هذه الحالة، يمكنك تمرير حجم مصفوفة كـargument منفصلة.

تمرير المصفوفة إلى الدالة

استدعاء الدالة: عند استدعاء الدالة، يمكنك توفير المصفوفة كـargument. إذا قمت بتعريف parameter الدالة بحجم ثابت، فستقوم بتمرير المصفوفة مباشرة. إذا استخدمت مؤشرًا، فإنك تقوم بتمرير المصفوفة وحجمها كـarguments.

مثال مع parameter لمصفوفة ذات حجم ثابت:

int myArray[5] = {1, 2, 3, 4, 5};
functionName(myArray);

Example with a pointer parameter:

int myArray[5] = {1, 2, 3, 4, 5};
functionName(myArray, 5);

استخدام المصفوفة في الدالة

العمل مع المصفوفة: داخل الدالة، يمكنك الوصول إلى عناصر المصفوفة ومعالجتها حسب الحاجة. يمكنك استخدام مؤشرات المصفوفات (على سبيل المثال، arr[0]، arr[1]) للوصول إلى العناصر الفردية، ويمكنك استخدام الحلقات للتكرار عبر العناصر.

مثال للوصول إلى عناصر المصفوفة:

void functionName(int arr[5]) {
    for (int i = 0; i < 5; i++) {
        // Access and manipulate arr[i]
    }
}

فيما يلي توضيح لتمرير مصفوفة إلى دوال لتحديد القيم في المصفوفة ثم طباعة تلك القيم:

#include <iostream>
using namespace std;

void set(int arr[], int s)
{
    for (size_t i = 0; i < s; i++)
    {
        cout << "Enter array value: ";
        cin >> arr[i];
    }
}

void print(int arr[], int s)
{
    for (size_t i = 0; i < s; i++)
    {
        cout << arr[i] << " ";
    }
}

int main()
{
    int a[5];
    set(a, 5);
    print(a, 5);

    return 0;
}

تسمح دالة المجموعة للمستخدم بتعيين القيم في المصفوفة، وتقوم دالة الطباعة بطباعة القيم المخزنة في المصفوفة. إنه مثال عملي لكيفية العمل مع المصفوفات والدوال في لغة C++.

تعديل المصفوفة

مثال 1:

يُظهر هذا الرمز تنفيذ خوارزمية "Bubble Sort". إن Bubble Sort عبارة عن خوارزمية فرز بسيطة تتنقل بشكل متكرر عبر القائمة المراد فرزها، وتقارن العناصر المتجاورة، وتبدل مواقعهم إذا كانوا بالترتيب الخاطئ. يتم تكرار المرور عبر القائمة حتى لا تكون هناك حاجة للتبديل، مما يشير إلى أن القائمة قد تم فرزها. إليك تفاصيل الكود:

#include <iostream>
using namespace std;

int main()
{
    int vector[] = {6,5,4,1,2};
    int t = 0;
    
    // Bubble Sort algorithm
    for (size_t i = 0; i < 5 - 1; i++)
    {
        for (size_t j = 0; j < 5 - i - 1; j++)
        {
            if (vector[j] > vector[j + 1])
            {
                t = vector[j];
                vector[j] = vector[j + 1];
                vector[j + 1] = t;   
            }
        }
    }
    
    for (size_t i = 0; i < 5; i++)
    {
        cout << vector[i] << endl;
    }

    return 0;
}
  1. int vector[] = {6, 5, 4, 1, 2};:
    تتم تهيئة vector إلى مصفوفة أعداد صحيحة بقيم غير مصنفة.
  2. int t = 0;:
    تم الإعلان عن استخدام المتغير الصحيح t لتبديل العناصر أثناء عملية الفرز.
  3. خوارزمية Bubble Sort :
    يتم استخدام حلقات for المتداخلة لتنفيذ خوارزمية Bubble Sort. تتحكم الحلقة الخارجية (i) في عدد التمريرات، بينما تقارن الحلقة الداخلية (j) العناصر المتجاورة وتبدلها إذا كانت تحتاج الترتيب.
  4. إذا كان العنصر الموجود في (index ) j أكبر من العنصر الموجود في (index ) j + 1، فسيتم إجراء مبادلة لوضعهما في ترتيب تصاعدي.
  5. طباعة المصفوفة التي تم فرزها:
    بعد اكتمال الفرز، يستخدم الكود حلقة for لطباعة العناصر التي تم فرزها بترتيب تصاعدي.

سيكون ناتج هذا الكود هو المصفوفة التي تم فرزها بترتيب تصاعدي، وهو نتيجة تطبيق خوارزمية Bubble Sort على المصفوفة الأولية غير المصنفة. لا يعد Bubble Sort خوارزمية الفرز الأكثر كفاءة لمجموعات البيانات الكبيرة، ولكن من السهل فهمها وتنفيذها.

مثال 2:

يقوم هذا الكود بفرز مصفوفة أعداد صحيحة باستخدام خوارزمية Bubble Sort. يقوم بفرز المصفوفة بترتيب تصاعدي ثم طباعة القيم التي تم فرزها. دعونا نحلل الكود خطوة بخطوة:

#include <iostream>
using namespace std;

const int s = 5;
void sort(int arr[])
{
    int t = 0;
    for (size_t i = 0; i < 5 - 1; i++)
    {
        for (size_t j = 0; j < 5 - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;   
            }
        }
    }
}

void print(int vector[])
{
    for (size_t i = 0; i < 5; i++)
    {
        cout << vector[i] << endl;
    }
}

int main()
{
    int vector[] = {0,-1,55,-5,-100};
    sort(vector);
    print(vector);
    return 0;
}

سيكون ناتج هذا الكود هو المصفوفة التي تم فرزها بترتيب تصاعدي، وهو نتيجة تطبيق خوارزمية Bubble Sort على المصفوفة الأولية غير المصنفة.

مثال 3:

يوضح هذا الكود كيفية عكس عناصر مصفوفة أعداد صحيحة باستخدام دالة reversArray. يقوم بعكس المصفوفة في مكانها ثم يطبع المصفوفة المعكوسة:

#include <iostream>
using namespace std;

void reversArray(int arr[], int s)
{
    for (size_t i = 0; i < s / 2; i++)
    {
        swap(arr[i], arr[s - i - 1]);
    }
}

int main()
{
    int vector[] = {3,2,4,5,6};
    reversArray(vector, 5);
    for (size_t i = 0; i < 5; i++)
    {
        cout << vector[i] << " ";
    }

    return 0;
}

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

 

ملحوظة !

إذا كنت لا ترغب في تعديل المصفوفة الخاصة بك، فيمكنك تهيئة قيمتها كقيمة ثابتة في الدالة. مثال:

void print(const int arr[], int s)
{
    //body of the function
}

بهذه الطريقة فإن أي محاولة لتعديل المصفوفة ستؤدي إلى حدوث خطأ.

مشاركة هذا

المصفوفة أحادية البعد One Dimensional Array (3) - تمرير مصفوفة إلى دالّة

Or copy link

المحتوى
Arabic