الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة فى برنامج ايجاد عدد أولى بلغة السى ....... !

مغلق
بدأه CazLo^ في 23 نوفمبر 2006 · 7 رد · 10,035 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

وقمت بالبحث فى مواضيع الأخوة لكن أكوداهم كلها بالسى بلس بلس .. والكود الوحيد بالسى كان معقد بالنسبة لى ×_×

فهل أحد يشرح لى الطريقة ؟ ويشرح لى وظيقة اللوبى فى المسائل هذه ؟ :blink:

مع شرح الصيغة الرياضية للحصول على العدد الله يخليكم وكيف توظيفها فى اللوب هذا ..

ألتمس عندكم الاجابة يا اخوان .. :)

سلام

#2

...........................

#3

اعمل Array وضع فيها الاعداد الاولية

بعدين يدخل المستخدم عدد

بعدها يسوي Loop يقوم بمقارنة العدد اللي ادخله المستخدم مع مصفوفة الاعداد الاولية

متى ماتوافق مع اي عدد يطبع نعم

والا يطبع لا

#4

لا أخى لسه مادرسنا ال Array .. يعنى باللووب فقط ..

ياريت تشرحلى مع كتابة الكود بالسى ....

وكيف اكتب القوانين وأضعها فى اللووب ؟

#5

هذه المسألة تناقشنا فيه اليوم قبل الاختبار مع بعض الزملاء.. لكن ما طلعنا بنتيجة :D ,, . عموما انا اقترحت اقتراح ولم اطبقه حتى الان.

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

يعني

13%13=0

13%1=0

لكن

13%3=1

وأكيد انك اخذت تمارين عن معامل باقي القسمة

----

لنفرض أن هذا العدد هو 17 ... تقوم بعمل loop من 1 حتى 17 وتقسم 17 على قيمة اللي داخل اللوب .. كذا

int i;
int z=0;
for(i=1; i <num;i++)
{
if(num%i == 0 )
z++;

}

if (z==2)
العدد هو عدد أولي .

لاحظ أن num هو العدد الذي يدخله المستخدم

ونحن نقوم بتجربة قسمة جميع الاعداد من واحد حتى ذلك العدد وكل مرة نحصل فيها على قسمة بدون باقي نزود المتغير z فاذا كان z يساوي 2

يعني أنه الان يوجد عددين فقط قبلت القسمة بدون باقي .. ولو زادت الz عن 2 فان العدد غير أولي .

طبعا الحل على الماشي .. أنا ما جربته .. ولكن الحمدلله ما جانا في الاختبار :) .. بالتوفيق ..

تم تعديل هذه المشاركة بواسطة الشمري في 25 نوفمبر 2006 في 22:01

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

هلا شمرى .. جربت كودك لكن فيه خطأ .. إن المفروض لو z==2 يبقى العدد غير أولى (وماعرف ليش -_- ) .. لأنى جربت كودك ووجدت العملية بالعكس يعنى البريم يقولى انه غير بريم وهكذا :

int i;
int z=0;
int n;

printf("= ");
scanf("%d",&n);
for(i=1; i <n;i++)
{
if(n%i == 0 )
z++;

}
if (z==2)
{
printf("%d isnt a prime\n",n);
}
else
{
	printf("%d is prime\n",n);
}
}

وعموما قبل منك عضو عطانى الفكرة بالسى ++ وطبقتها :

#include <stdio.h>

int main()
{
int p,n,i;
p=1;

printf("\nEnter an integer >= 2: ");
scanf("%d",&n);

if(n<=1)
{
printf("\n%d isn't a Primary\n",n);
}
else
{
for(i=2;i<(n-1);++i)

if(n%i==0)
{
p=0;
}

if(p==1)
{
printf("\n%d is a Primary\n",n);
printf("\n{ Ca[z]Lo }\n");
}
else
{
printf("\n%d isn't a Primary\n",n);
printf("\n{ Ca[z]Lo }\n");
}
}
}

لكن عندى كام سؤال بشأن الكود .. يعنى مابدى أنقل وانا مو فاهم -_- ، الحين هو ليش كتب p=1 ? أنا استنتجت انه يبدأ العد من واحد بحيث انه مايعتبر الواحد والزيرو اعداد أولية .. لكن جربت البرنامج وقتها وأدخلت 1 وقال ان العدد أولى .. لذا فاستنباطى من وضعه للعدد p=1 كان خطأ .. وللحين مانى عارف ليه عمل كدة .

ثانى شىء ...

for(i=2;i<(n-1);++i)

شو معنى؟؟؟

i<(n-1)

بعدين شو معنى؟؟ :

if(n%i==0)
{
p=0;
}

if(p==1)

أنا فهمت أنه لو خارج قسمة العدد المدخل على اللوب = 0 يبقى المفروض انه العدد غير أولى .. لكن الخطوة هذه أجلتها لخطوة ال else بعد افتراض ان p==1 ..

ثانى شىء ممكن خارج القسمة بيصير 3 وليس 1 او 0 ..

يعنى مثلا

19%2 = 1

لان 2 *9 = 18 ويتبقى واحد

لكن 19%4=3

يعنى ماهو 1 ولا 0 .. فكيف بيتطبق فى البرنامج ؟ :blink:

فعلى أى اساس فرضنا ان لو خارج القسمة = 0 يبقى p=0 شو هو p=0 ?

أيضا لو p==1 يبقى العدد أولى .. ولو غير ! وانا مابعرف شو هو الغير اللى البرنامج يفرض على اساسه ان العدد المدخل غير أولى .. فالمفروض خطوة الغير هذه تكون مع p=0 ..

-----

معلش انا كتير متعب :(

تم تعديل هذه المشاركة بواسطة CazLo^ في 27 نوفمبر 2006 في 22:08

#7

فقط يقبل القسمه على واحد وعلى نفسه

اذن اي باقي قسكه غير هذين العددين يكون العدد غير اولي .

اذا اخذنا العدد 30 فنجد انه يقبل القسمه على 1 و 2 و 3 و 5 و و و و اذن غيررررررررررررر اولي

بينما لو اخذنا 31 نجد انه فقط يقبل القسمه على 1 و 31 اذن اووووووووووووووووووووووووولي

اذن نضع لووب يستثني العدد 1 والعدد نفسه لاننا نريد ان نعرف هل العدد المدخل غير اولي لذلك وضعنا في اللوب الشرط هو العدد المدخل ناقص 1 والبدايه جعلناها من 2 لان الرقم 2 هو بداية الاعداد الاوليه .

هذه الصيغه صحيحه :

for(i=2;i<(n-1);++i)

داخل هذا اللوب ضع شرط باقي القسمه على النحو التالي

اذا كان باقي القسمه يساوي 0 اذن هذا العدد غير اولي فقم باظهار رساله بان العدد غير اولي

for(i=2;i<(n-1);++i)
{
if(n%i==0) هذا الشرط معناه ان العدد المدخل تقسيم العدد الذي اتى من اللوب والذي يبدا من 2 الى العدد المدخل ناقص 1 = 0 ...... اخرج رساله تقول انه غير اولي

الان كل ماتحتاجه هو كتابة البرنامج من جديد اعتقد ان كل شي اصبج واضح

بالتوفيق

−1
#8

شكرا جافا كتيــر عالتوضيح :) .

لكن فيه مشكلة

الحين أنا بدلت الكود مثل ما اقترحت انت :

for(i=2;i<(n-1);++i)
{
if(n%i==0)
{
printf("\n%d isn't a Primary\n",n);
}

if(n%i==1)
{
printf("\n%d is a Primary\n",n);
}
}

بعدين لما أدخل رقم 12 .. بيقولى :

12 isn't a prime number

12 isn't a prime number

12 isn't a prime number

12 isn't a prime number

وأنا بدى يقول مرة واحدة فقط

12 isn't a prime number

لكن من الواضح انه بيطلع نتائج القسمة على اللوب كلها ×_× .

-----

فى الكود السابق .

#include <stdio.h>

int main()
{
int p,n,i;
p=1;

printf("\nEnter an integer >= 2: ");
scanf("%d",&n);

if(n<=1)
{
printf("\n%d isn't a Primary\n",n);
}
else
{
for(i=2;i<(n-1);++i)

if(n%i==0)
{
p=0;
}

if(p==1)
{
printf("\n%d is a Primary\n",n);

}
else
{
printf("\n%d isn't a Primary\n",n);

}
}
}

لما فرضت p .. يظهر النتائج عادى وبشكل ممتاز ..

لكن اللى يحيرنى هو ال p !! يعنى ليش فرضنا متغير جديد تماما p ؟؟ شو فايدته ؟

وشو معنى if(p==1) يبقى العدد غير أولى .. ولو غير يبقى العدد غير أولى ..

طيب ايش فايدة الخطوة

if(n%i==0)

{

p=0;

}

؟؟ المفروض فى الخطوة هذه انه لو باقى القسمة يساوى 0 يبقى العدد غير أولى واسوى أمر print أن العدد غير أولى .. ليش أجلناه ل else ? .. لأنى لما بحط أمر برينت تحت p=0 بتحصل خرابيط فى البرنامج .

تم تعديل هذه المشاركة بواسطة CazLo^ في 28 نوفمبر 2006 في 21:07

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…