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

كتابة برنامج ++C لطباعة الاعداد الاولية prime numbers

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

كتابة برنامج ++C لطباعة الاعداد الاولية prime numbers Empty كتابة برنامج ++C لطباعة الاعداد الاولية prime numbers

مُساهمة من طرف أحمد مناع الخميس فبراير 11, 2021 8:38 am

اهلا بكم 

في هذا البرنامج ، سوف نقرأ قيمة N (مدى الأرقام) ونطبع جميع الأعداد الأولية من 2 إلى N....وقبل البدء تعال نفهم ماهية الاعداد الاولية وكيفية حسابها رياضيا 

1_مفهوم الاعداد الاولية prime numbers 

يمكن تعريف الأعداد الأوليّة (بالإنجليزيّة: Prime Numbers) بأنها الأعداد الصحيحة الموجبة الأكبر من العدد واحد، والتي تقبل القسمة على عددين فقط هما العدد نفسه والواحد دون باقٍ أو فواصل عشرية .

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

أمّا الأعداد الصحيحة الموجبة الأكبر من واحد، والتي تقبل القسمة على عدد آخر غيره وغير نفسها فتُسمّى بالأعداد غير الأوليّة أو الأعداد المُركَّبة (بالإنجليزية: Composite Number) , فمثلا العدد 6 هو عدد مؤلف لأنه قابل للقسمة على 1، وعلى 2 وعلى 3 وعلى 6

ويجدر بالذكر هنا أن العددان (0,1) يُستبعدان دائماً من قائمتي الأعداد الأوليّة والمُركَّبة ,بينما يُعتبر العدد (2) أصغر الأعداد الأولية، وهو العدد الزوجي الأولي الوحيد


2_كيفية الحساب رياضيا

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

3_التطبيق البرمجي

يمكن إستخدام خورزمية القسمة المتكررة لايجاد الاعداد الاولية على النحو التالى :
الكود:

for count in range(2;count<=num/2;count++))):
           if (num%count==0):
               return True
               break
       return False

تبدء حلقة الدوران من العدد 2 حيث انه اول رقم صحيح أكبر من الرقم 1 و تستمر فى الدوران حتى يكون عداد حلقة الدوران اقل من او مساويا لناتج قسمة الرقم المطلوب معرفة انه اولى ام لا على الرقم 2.

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

4_أمثلة متعددة


  • أكتب برنامج بلغة السي بلس بلس للتأكد من أن العدد 29 عدد أوليا أم لا ؟


الحل مع الشرح:


فى هذا المثال سنقوم بانشاء وظيفة باسم isPrime() لتأخذ عددًا صحيحًا وتعيد العدد 1 إذا كان الرقم أوليًا و 0 إذا لم يكن الرقم أوليًا على النحو التالى :

الكود:


#include <iostream>
using namespace std;

int isPrime(int num)          // وظيفة للتاكد من الرقم المدخل
{
 
 int prime=1;               // متغير لتخزين قيمة واحد للمقارنة
 
 for(int i=2;i<=(num/2);i++) // حلقة دوران تبدء من العدد 2
 {
 if(num%i==0)            // جملة شرطية للتاكد من ناتج قسمة الرقم بدون ارقام عشرية
 {
   prime=0;            // تغير قيمة المتغير الى الصفر اذا تحقق الشرط
 break;              // إنهاء حلقة التكرار
 }
 }
 return prime;              // ارجاع قيمة متغير المقارنة
}

int main()
{
    
 int n; //لتخزين الرقم المدخل
 
 cout<<"Enter the Number: ";
 cin>>n;
 
 if (isPrime(n)==1)      // إستخدام الوظيفة لمقارنة قيمة ارجاعها
        cout << n << " is a prime number";
    else
        cout << n << " is not a prime number";
 
 return 0;

  
}



  • أكتب برنامج بلغة السي بلس بلس لطباعة كافة الارقام الاولية حتى العدد n ؟


الحل مع الشرح:

فى هذا المثال ايضا سنقوم بانشاء وظيفة باسم isPrime() لتأخذ عددًا صحيحًا وتعيد العدد 1 إذا كان الرقم أوليًا و 0 إذا لم يكن الرقم أوليًا على النحو التالى :

الكود:
int isPrime(int num)          // وظيفة للتاكد من الرقم المدخل
{
 
 int prime=1;               // متغير لتخزين قيمة واحد للمقارنة
 
 for(int i=2;i<=(num/2);i++) // حلقة دوران تبدء من العدد 2
 {
 if(num%i==0)            // جملة شرطية للتاكد من ناتج قسمة الرقم بدون ارقام عشرية
 {
   prime=0;            // تغير قيمة المتغير الى الصفر اذا تحقق الشرط
 break;              // إنهاء حلقة التكرار
 }
 }
 return prime;              // ارجاع قيمة متغير المقارنة
}

لكن فى الوظيفة الرئسية سنقوم بتغير الكود وذلك باستخدام بانشاء حلقة تكرار للمرور على كافة الارقام التى ستبدء من العدد 2 و تنتهي بالرقم n المجهول الذي سيدخلة المستخدم ومن ثم تمرير كل رقم فى نطاق تلك الارقام الى الوظيفة isPrime للتاكد انها اولية ثم طباعتها وذلك على النحو التالى :

الكود:
#include <iostream>
using namespace std;

int isPrime(int num)          // وظيفة للتاكد من الرقم المدخل
{
 
 int prime=1;               // متغير لتخزين قيمة واحد للمقارنة
 
 for(int i=2;i<=(num/2);i++) // حلقة دوران تبدء من العدد 2
 {
 if(num%i==0)            // جملة شرطية للتاكد من ناتج قسمة الرقم بدون ارقام عشرية
 {
   prime=0;            // تغير قيمة المتغير الى الصفر اذا تحقق الشرط
 break;              // إنهاء حلقة التكرار
 }
 }
 return prime;              // ارجاع قيمة متغير المقارنة
}

int main()
{
    
 int n; //لتخزين الرقم المدخل
 
 cout<<"Enter the Number: ";
 cin>>n;
 
 
 for(int i=2;i<n;i++) // المرور على كافة الارقام من العدد 2 حتى العدد المدخل من المستخدم
 {
 if(isPrime(i)) // استخدام الوظيفة للتاكد من الاعداد المدخلة اليها
 cout<<i<<" ";  // طباعة الاعداد الاولية
 }
 cout<<endl;
 
 return 0;
 
  
}



  • أكتب برنامج بلغة السي بلس بلس لطباعة كافة الارقام الاولية من 50 العدد 150 ؟


الحل مع الشرح:


الكود:
#include <iostream>
using namespace std;

int isPrime(int num)          // وظيفة للتاكد من الرقم المدخل
{
   
   int prime=1;              // متغير لتخزين قيمة واحد للمقارنة
   
   for(int i=2;i<=(num/2);i++) // حلقة دوران تبدء من العدد 2
   {
      if(num%i==0)            // جملة شرطية للتاكد من ناتج قسمة الرقم بدون ارقام عشرية
      {
           prime=0;            // تغير قيمة المتغير الى الصفر اذا تحقق الشرط
         break;              // إنهاء حلقة التكرار
      }
   }
   return prime;              // ارجاع قيمة متغير المقارنة
}

int main()
{
   

   for(int i=50;i<=150;i++) // حلقة دوران تبدء من النطاق المحدد 50 الى 150
   {
      if(isPrime(i)) // استخدام الوظيفة للتاكد من الاعداد المدخلة اليها
      cout<<i<<" ";  // طباعة الاعداد الاولية
   }
   cout<<endl;
   
   return 0;
   
   return 0;

 
}


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

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

https://egy-tech.forumegypt.net

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

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

ََ

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


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