اذهب إلى المحتوى
  • 1

كتابة دالة بلغة c++ تستقبل مصفوفة من أي نوع كان و ترجع جميع مواضع عنصر ما في هذه المصفوفة

Aya alsalam

السؤال

السلام عليكم

ارجو حل هذا السؤال

Write a C++ function (call it search) that searches for a number in the array, that is passed to the function, and returns the index/indices of the number in that array. For example, if you pass [5,6,8,9,5,2] to the function and you want to search for 5 the function returns [0,4]. Write a C++ program and test your function. Take the following notes into consideration when writing your program:
1- Let the user decide the size of the array and then enter the array elements.
2- Your function should work with any data type.
3- Use pass by address when passing the array to the function.
4.The function should prevent changing the elements of the passed array.

 

تم التعديل في بواسطة عبود سمير
تنسيق العنوان
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ 13 دقائق مضت قال Aya alsalam:

السلام عليكم

ارجو حل هذا السؤال.

أهلاً  بك،
أرفق لك حل السؤال، و يمكنك  إضافة تعديلات بسيطة عليه ليتناسب مع  الملاحظات من  1 - 4 
 

#include <iostream>
using namespace std;

int main()
{
  //  تعريف المصفوفة
	int arr[] = { 6, 3, 5, 2, 8 };
	int n = sizeof(arr)/sizeof(arr[0]);
	// العنصر المراد  البحث عنه داخل المصفوفة 
	int elem = 2;

	int i = 0;
	while (i < n)
	{
		if (arr[i] == elem) {
			break;
		}
		i++;
	}

	if (i < n) {
		cout << "Element " << elem << " is present at index " << i
			 << " in the given array";
	}
	else {
		cout << "Element is not present in the given array";
	}

	return 0;
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

مرحباً...

يُمكن عمل البرنامج بهذه الطريقة ستجد الشرح بالتعليقات:

#include <iostream>
#include <vector>

using namespace std;


template <typename T> // من أجل إستقبال أي نوع مصفوفة سواء نصية أو عددية أو أي نوع
// دالة مُساعدة لقراءة عناصر مصفوفة
void readArray(T *arr, int n) {
    for (int i = 0; i < n; ++i) {
        cout << "Enter El[" << i << "]: " << endl;
        cin >> arr[i];
    }
}

template <typename T> // من أجل إستقبال أي نوع مصفوفة سواء نصية أو عددية أو أي نوع
// دالة مُساعدة لطباعة عناصر مصفوفة
void printArray(T *arr, int n) {
    cout << "[";
    for (int i = 0; i < n - 1; ++i) {
        cout << arr[i] << ", ";
    }
    cout << arr[n-1] << "]";
}

template <typename T> // من أجل إستقبال أي نوع مصفوفة سواء نصية أو عددية أو أي نوع
// دالة البحث في مصفوفة من أي نوع
// تستقبل مصفوفة من النوع T و تبحث عن معلومة من نوع T
// ترجع الدالة vector يضم جميع أماكن المعلومة في المصفوفة
std::vector<int> search(T *arr, int n, T search) {
    std::vector<int> result;
    for (int i = 0; i < n; ++i) { // اللف حول عناصر المصفوفة
        if (arr[i] == search) { // في حالة تطابق العنصر الحالي من المصفوفة مع المعلومة التي نبحث عنها
            result.push_back(i); // نقوم بتخزين الموضع في ال vector
        }
    }

    return result; // نرجع ال vector
}



int main() {

    /* المثال الأول حيث عناصر المصفوفة عبارة عن أعداد */
    int n_int; // تعريف متغير عدد لتخزين طول المصفوفة العددية
    cout << "Enter size of array: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال طول المصفوفة العددية
    cin >> n_int; // قراءة مُدخلات المُستخدم

    int array[n_int]; // تعريف مصفوفة عددية
    readArray(array, n_int); // قراءة عناصر المصفوفة العددية
    printArray(array, n_int); // طباعة عناصر المصفوفة التي أدخلها المًستخدم

    int s_int; // تعريف مُتغير لتخزين العدد الذي نريد البحث عنه
    cout << "\nEnter search: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال العدد الذي يريد البحث عنه في المصفوفة
    cin >> s_int; // قراءة العدد الذي سنبحث عنه
    std::vector<int> result = search(array, n_int, s_int); // إستدعاء دالة البحث و تمرير المُعاملات المطلوبة لها و تخزين الراجع
    cout << "\nresult: "; // طباعة عبارة لنتائج البحث
    printArray(&result[0], result.size()); // طباعة عناصر مصفوفة البحث


    /*
     *  ===============================================================================
     * */

    /* المثال الثاني حيث عناصر المصفوفة عبارة عن سلاسل نصية */
    int n_string; // تعريف متغير عدد لتخزين طول المصفوفة النصية
    cout << "\nEnter size of array: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال طول المصفوفة النصية
    cin >> n_string; // قراءة مُدخلات المُستخدم

    string array_string[n_string]; // تعريف مصفوفة نصية
    readArray(array_string, n_string); // قراءة عناصر المصفوفة النصية
    printArray(array_string, n_string); // طباعة عناصر المصفوفة التي أدخلها المًستخدم

    string s_string; // تعريف مُتغير لتخزين السلسلة النصية الذي نريد البحث عنها
    cout << "\nEnter search: " << endl; // طباعة عبارة للمًستخدم تُعلمه بإدخال السلسلة النصية الذي يريد البحث عنها في المصفوفة
    cin >> s_string; // قراءة السلسلة النصية الذي سنبحث عنها
    std::vector<int> result_string = search(array_string, n_string, s_string); // إستدعاء دالة البحث و تمرير المُعاملات المطلوبة لها و تخزين الراجع
    cout << "\nresult: "; // طباعة عبارة لنتائج البحث
    printArray(&result_string[0], result_string.size()); // طباعة عناصر مصفوفة البحث

}

تم التجربة على مثالين في حالة مصفوفة عددية:

search_cpp_matrix1.thumb.PNG.1a331e2acd96ac8237ec2f308b4e5107.PNG

و في حالة مصفوفة سلاسل نصية:

search_cpp_matrix2.thumb.PNG.cce1f9452fa7b7236c54160755ce0b15.PNG

تم إستخدام مفهوم ال Generics لجعل الدالة search تقبل أي نوع من أنواع البيانات.
يُمكنك تجربة البرنامج من خلال: الرابط التالي

بالتوفيق

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...