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

السؤال

نشر

مساء الخير ..
1- يطلب  كتابة برامج بلغة C++  لخوارزمية الترتيب بالإختيار(Selection Sort) وخوارزمية مطابقة سلسلة محارف (String Matching) وحساب العاملي (Factorial) وحساب الرفع إلى قوة (Power) وذلك بالإعتماد على تقنية القوة الطاغية (Brute Force)...
ارجو المساعدة 

Recommended Posts

  • 0
نشر
  • خوارزمية الترتيب بالاختيار (Selection Sort)

تقوم خوارزمية الترتيب بالاختيار بترتيب مصفوفة ، من خلال البحث المتكرر عن العنصر الأصغر (مع مراعاة الترتيب التصاعدي) من الجزء غير المرتب ووضعه في البداية. تحافظ الخوارزمية على مصفوفتين فرعيتين في مصفوفة معينة:

  1. المصفوفة التي تم ترتيبها بالفعل 
  2. مصفوفة فرعية متبقية غير مرتبة

في كل تكرار لخوارزمية الترتيب بالاختيار ، يتم اختيار العنصر الأصغر (مع مراعاة الترتيب التصاعدي) من المصفوفة الفرعية التي لم يتم ترتيبها ونقلها إلى المصفوفة التي تم ترتيبها.

المثال التالي يوضح ما سبق :

arr[] = 64 25 12 22 11

// [0...4] إيجاد العنصر الأصغر من المصفوفة 
//واستبداله بأول عنصر

11 25 12 22 64

// [1...4] إيجاد العنصر الأصغر من المصفوفة 
//واستبداله بأول عنصر

11 12 25 22 64

// [2...4] إيجاد العنصر الأصغر من المصفوفة 
//واستبداله بأول عنصر

11 12 22 25 64

// [3...4] إيجاد العنصر الأصغر من المصفوفة 
//واستبداله بأول عنصر
11 12 22 25 64 

أما كود السي بلس بلس للخوارزمية فهو كالتالي :

#include <bits/stdc++.h> 
using namespace std; 
  
void swap(int *xp, int *yp)  
{  
    int temp = *xp;  
    *xp = *yp;  
    *yp = temp;  
}  
  
void selectionSort(int arr[], int n)  
{  
    int i, j, min_idx;  
  
    // قم بتحريك حدود المصفوفة الجزئية غير المرتبة بمقدار عنصر في كل مرة 
    for (i = 0; i < n-1; i++)  
    {  
        // إيجاد العنصر الأصغر في المصفوفة غير المرتبة  
        min_idx = i;  
        for (j = i+1; j < n; j++)  
        if (arr[j] < arr[min_idx])  
            min_idx = j;  
  
        // استبدال العنصر الأصغر الذي تم إيجاده مع أول عنصر من عناصر المصفوفة  
        swap(&arr[min_idx], &arr[i]);  
    }  
}  
  
/* تابع لطباعة مصفوفة */
void printArray(int arr[], int size)  
{  
    int i;  
    for (i=0; i < size; i++)  
        cout << arr[i] << " ";  
    cout << endl;  
}  
  
// استدعاء التوابع التي تم تعريفها في الكود أعلاه
int main()  
{  
    int arr[] = {64, 25, 12, 22, 11};  
    int n = sizeof(arr)/sizeof(arr[0]);  
    selectionSort(arr, n);  
    cout << "Sorted array: \n";  
    printArray(arr, n);  
    return 0;  
}  

وبالتالي نحصل على الخرج:

Sorted array: 
11 12 22 25 64
  • خوارزمية مطابقة سلسلة محارف (String Matching)

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

Input:  txt[] = "THIS IS A TEST TEXT"
        pat[] = "TEST"
Output: Pattern found at index 10

Input:  txt[] =  "AABAACAADAABAABA"
        pat[] =  "AABA"
Output: Pattern found at index 0
        Pattern found at index 9
        Pattern found at index 12

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

#include <bits/stdc++.h> 
using namespace std; 
  
void search(char* pat, char* txt) 
{ 
    int M = strlen(pat); 
    int N = strlen(txt); 
  
    /* A loop to slide pat[] one by one */
    for (int i = 0; i <= N - M; i++) { 
        int j; 
  
        /* من أجل الفهرس الحالي ، تحقق من المطابقة */
        for (j = 0; j < M; j++) 
            if (txt[i + j] != pat[j]) 
                break; 
  
        if (j == M) // if pat[0...M-1] = txt[i, i+1, ...i+M-1] 
            cout << "Pattern found at index "
                 << i << endl; 
    } 
} 
  
//استدعاء التابع 
int main() 
{ 
    char txt[] = "AABAACAADAABAAABAA"; 
    char pat[] = "AABA"; 
    search(pat, txt); 
    return 0; 
} 
  
  • حساب العاملي (Factorial)
#include <iostream>  
using namespace std;  
int main()  
{  
   int i,fact=1,number;    
  cout<<"Enter any Number: ";    
  cin>>number;    
  for(i=1;i<=number;i++){    
      fact=fact*i;    
  }    
  cout<<"Factorial of " <<number<<" is: "<<fact<<endl;  
  return 0;  
} 
  • حساب أس عدد (pow)
#include <iostream>
#include <cmath>

using namespace std;

int main() 
{
    float base, exponent, result;

    cout << "Enter base and exponent respectively:  ";
    cin >> base >> exponent;

    result = pow(base, exponent);//تابع معرف مسبقاً في اللغة موجود في المكتبة cmath

    cout << base << "^" << exponent << " = " << result;
    
    return 0;
}

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...