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

كتابة برنامج ++C لفحص السلاسل التناظرية

اذهب الى الأسفل

كتابة برنامج ++C لفحص السلاسل التناظرية  Empty كتابة برنامج ++C لفحص السلاسل التناظرية

مُساهمة من طرف أحمد مناع الخميس فبراير 11, 2021 12:29 pm

اهلا بكم

راسلني احد الاخوة لحل السؤال التالى :

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

والسؤال يتطلب الاتى :

1_إنشاء وظيفية باسم Pal تاخذ سلسة نصية و فحصها و إرجاع القيمة 1 اذا كانت السلسة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] و القيمة 0 ان كانت غير ذلك
2_إنشاء وظيفة باسم CountPal تاخذ قائمة نصية و فحص كل عنصر من عناصر القائمة و ارجاع عدد السلاسل المتناظرة بها وذلك باستخدام الوظيفة السابقة Pal
3_فى الدالة او الوظيفة الرئسية main يتم طباعة عدد السلاسل النصية المتناظرة

الحل :

بداية ماهى مفهوم السلاسل المتناظر ...يُقال أن السلسلة تكون متناظرة إذا كان عكس السلسلة هو نفسه السلسلة. على سبيل المثال ، "abba" متناظرة ذلك لانك لو عكستها من اليمين للشمال سوف تعطيك نفس السلسة

أما الخوارزمية للحل البرمجى ستكون عن النحو التالى:

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

فيما يلي وظيفة بالـــــ ++c للتحقق مما إذا كانت سلسلة معينة متناظرة أم لا بالشروط الواردة بالمثال :

الكود:
int Pal( string s )  // وظيفة لارجاع قيمة 1 اذا كانت السلسة المدخلة متناظرة
{
  

    int n = s.length(); // متغير لتخزين طول السلسة النصية

    // حلقة تكرار حتى نصف الاول من السلسة
    //بداخل حلقة التكرار جملة شرطية
    // ويتحقق من العنصر الأول بالعنصر الأخير ،
    // العنصر الثاني مع العنصر الثاني الأخير وما إلى ذلك.
    // اذا تم العثور على حرفين مختلفين يتم ارجاع القيمة صفر
    // معنى ذلك ان السلسة غير تناظرية
    
    
    for ( int i = 0; i <= n/2; i++ )
    {
        if ( s[i] != s[n-1-i] )
            return 0;
    }
    
    
    return 1;
}


بعد ذلك سنقوم بانشاء الوظيفة الثانية

الكود:
int CountPal(string name[]){  // وظيفة لادخال قائمة نصية
    
    int count =0;             // متغير لتخزين عدد النصوص التناظرية التى سيتم فحصها
    
    for(int i=0;i<5;i++){    // حلقة دوران للمرور على كافة عناصر القائمة
      
       if (Pal(name[i])) count++;  // الاتصال بالوظيفة السابقة لفحص السلسة
                                   // وزيادة العداد فكل مرة يتم ايجاد نص تناظري
    
    }
    
    
   return count;
}


و المثال بالكامل سيكون على النحو التالى :

الكود:

#include <iostream>
#include<string>
using namespace std;

int Pal( string s )  // وظيفة لارجاع قيمة 1 اذا كانت السلسة المدخلة متناظرة
{
  

    int n = s.length(); // متغير لتخزين طول السلسة النصية

    // حلقة تكرار حتى نصف الاول من السلسة
    //بداخل حلقة التكرار جملة شرطية
    // ويتحقق من العنصر الأول بالعنصر الأخير ،
    // العنصر الثاني مع العنصر الثاني الأخير وما إلى ذلك.
    // اذا تم العثور على حرفين مختلفين يتم ارجاع القيمة صفر
    // معنى ذلك ان السلسة غير تناظرية
    
    
    for ( int i = 0; i <= n/2; i++ )
    {
        if ( s[i] != s[n-1-i] )
            return 0;
    }
    
    
    return 1;
}

int CountPal(string name[]){  // وظيفة لادخال قائمة نصية
    
    int count =0;             // متغير لتخزين عدد النصوص التناظرية التى سيتم فحصها
    
    for(int i=0;i<5;i++){    // حلقة دوران للمرور على كافة عناصر القائمة
      
       if (Pal(name[i])) count++;  // الاتصال بالوظيفة السابقة لفحص السلسة
                                   // وزيادة العداد فكل مرة يتم ايجاد نص تناظري
    
    }
    
    
   return count;
}


int main()
{
    string n[]={"ana","ahmed","non","lol","many"}; // مصفوفة نصية
    
    // طباعة عدد الاسماء التناظرية بالمصفوفة اعلاه
   cout <<"The number of palindrome names in the list are:"<<CountPal(n);
    return 0;
}

لتشغيل الكود
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

المخرجات :

The number of palindrome names in the list are:3  

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1077
النقاط : 201961
التقيم : 130
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى