• 0
yacinebrca

تمرين (عدد قواسم الاعداد)

سؤال

اخواني الكرام  السلام عليكم 


ورحمة الله وبركاته


 


 


التمرين  : يقوم المستخدم بادخال عددين  x وp


شرط أن يكون


 


العدد x موجب تمام وأكبر من الواحد    ( x>1).


 


والعدد p محصور بين 500 و2000.


 


 


x يمثل عدد القواسم


فمثلا


 


x=5p=650


 


 


نبحث عن جميع الاعداد المحصورة بين العدد 2 الى غاية العدد 650


والتي عدد قواسمها يساوي 5 .. :wacko:


 


 


اتمنى أن أرى محاولاتكم... ;)


 


والسلام عليكم ورحة الله وبركاته :D


 


 


تم تعديل بواسطه مصطفى 36a2
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

18 إجابة على هذا السؤال .

  • 0

عذرا أخي ماذا تقصد ب"قواسمها"

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عذرا أخي ماذا تقصد ب"قواسمها"

 

قاسم العدد هو العدد الذي يقسمه بدون وجود باقي

فمثلاً 5 هو أحد قواسم العدد 10 لأن 10 تقسيم 5 هو 2 بدون باق

أما 10 تقسم 6 فالناتج 1 والباقي 4

فمثلاً العدد 12 له 6 قواسم

1 و 2 و 3 و 4 و 6 و 12

 

الكود على شكل أجزاء .

محتوى دالة تعيد عدد قواسم العدد

int y=0;for(int i=1;i<=x;i++)    if(x%i==0)        y++;return y;

وجزء يمر على جميع الأعداد المحصورة في المجال المحدد

for(int i=2;i<p;i++)    if(function(i)==x)        cout<<i<<endl;

 

وأترك الدور لغيري

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مع أن الأخ مصطفى قد حلها لكن هذه محاولتي :‏

#include <stdio.h>#include <conio.h>#include <stdlib.h>int gc(int a){   int count;  for(int i=1;i<=a;i++)         if(a%i==0)           count++;   return count;}void main(){   int x,p;   re: clrscr();   printf("Enter x value : ");   scanf("%d",&x);   if(x<1)   {    printf("wrong value, enter an even value !");    goto re;    }   printf("Enter p value (between 500 & 2000) : ");   scanf("%d",&p);   for(int j=2;j<=p;j++)      if(gc(j)==x)         printf("%d\t",j);  system("pause");}
تم تعديل بواسطه dracola168
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نسيت تضمين المكتبة

stdlib.h

لعمل الدالة

system

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أعجبتني كثيراً هذه الـ

goto re;

من زمان لم أرها :)

 

كود جميل وفقك الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

 

بارك الله في الاخوة ....

 

 

الأخ

dracola168

أرجوا أن تتأكد من الكود فهو لا يعمل ...

 

 

ارجوا من الاخوة أن بفهم التمرين جيدا

 

فأنا طلبت أولا أن يقوم باختبار قيمة xوp حسب الشرط المذكور ..

 

ثم يقوم بطباعة الأعداد التي لها عدد القواسم x الى غاية العدد p. ;)

 

يمكن كتابة هذا البرنامج البسيط   بواسطة حلقة تكرارية ...وأداة شرط. فقط. :mellow: .بعيدا عن الدوال المساعدة .. :excl: :excl:

 

 

 
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحـــــــــــــــــــــــــــــل



#include <stdio.h>
#include <stdlib.h>

int main()
{
int x,p,i,k=0,j;

system("color f9");


do{
printf("\n\n Donner la valeur de X = ");
scanf("%d",&x);
}while(x<=1);


do{
printf("\n Donner la valeur de p = ");
scanf("%d",&p);

}while( p<500 || p>2000 );


system("PAUSE"); system("color 9f");

printf("\n\n Des chiffres qui ont %d denominateurs \n",x);


for(j=2;j<=p;j++){
for(i=1;i<=j;i++)
if(j%i==0)k++;


if(x==k) printf(" \n n = %4d \n",j);

k=0;
}


system("PAUSE> nul");
return 0;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكراً لك


يمكن كتابة هذا البرنامج البسيط   بواسطة حلقة تكرارية ...وأداة شرط. فقط. :mellow: .بعيدا عن الدوال المساعدة .. :excl: :excl:

هل يمكنك أن تخبرني ماهي الدوال المساعدة التي تريد أن يكون الحل بعيداً عنها ؟
 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

if(function(i)==x)

الحلقة

goto

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الدالة function التي كتبتها في المثال ليست من اللغة بل من كتابتي وجسمها ذكرته في سابقاً

كما أن عبارة goto ليست دالة , وليست حلقة أيضاً .

لا أظن انك تستخدم عبارة "بدون دوال مساعدة" بشكل صحيح  , فالمقصود عادةً بالدوال المساعدة : الدوال التي توفرها مكتبة اللغة

ثم انظر مثلاً إلى الكود الخاص بك .

هل أعتبر الدالة system دالة مساعدة ؟

وماذا عن printf و scanf .. وحتى main أليست دالة !

 

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الدوال التي استخدمتها في الحل السابق مثل وscanf و print دوال مبيتة في لغة C وهي دوال عامة يستطيع أي مبرمج استخدامها.

 

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

 

انت اصل في الحل الذي قمت بتقديمه لم تقم باختبار القيمة المدخلة x وp ....

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الدوال تساعد على توضيح البرنامج , ولغة C تُسمّى لغة إجرائية , أي أنها تقسم البرنامج إلى إجرائيات ,

لا أدري لماذا تعتبر هذا ضعفاً !


انت اصل في الحل الذي قمت بتقديمه لم تقم باختبار القيمة المدخلة x وp ....

معك حق , حلي غير كامل وذلك لإتاحة المجال لحلول أخرى

 

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي الفاضل انا اريد انا ارى حل كاملا ... واتاحة الفرصة لاخرين تكون في تقديم حلول متنوعة ..وفقك الله


0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

على كل حال منتظرين باقي الأسئلة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذه محاولتي

#include<stdio.h>#include<stdlib.h>int main(){    int x,p,i,j;    char s[1000],w;input1:    puts("please enter the number of divisors");    x=atoi( gets(s) );    if(x<2)        goto input1;input2:    puts("please enter the max number for search between 500 and 2000");    p=atoi( gets(s) );#define X printf    if(!(p>=500 && p<=2000))        goto input2;    for(i=2;i<p;i++){            w=2;        for(j=2;j<i;j++)            w+=i%j==0;            if(w^x){}else{X("%d\n",i);}    }    return 0;} 
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي شكرا على المحاولة الموفقة..

 

 

..انتبه فقد نسيت كتابة

 system("pause");

بارك الله فيكم

 

أخي ممكن تشرح لي هذا الكو د...

if(w^x){}else{X("%d\n",i);

أنا اعلم انه يحسب عدد القواسم ...ثم يقوم بطباعة العدد الذي يوافق عدد قواسمه x...

لكن اريد ان تشرح لي ..اذا تفضلت ...

تم تعديل بواسطه yacinebrca
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

في هذا السطر

if(w^x){}else{X("%d\n",i);}

 

العملية ^ هي عملية xor ( اقرأ عنها)

وهي تعطي 0 في حال تساوي الرقمين  وبالتالي يمكنك أن تقول أنني استخدمتها كاختبار عدم تساوي !=

أي أن

if(w^x)

مماثلة لـ

if(w!=x)

أما X فهو ماكرو قمت بتعريفه سلفاً كـprintf

أي انني يمكنني استخدام X تماماً كأنني أكتب printf

 

الهدف من هذه الحركات ليس استعراض عضلات كما قال أحد الأعضاء سابقاً ,

بل هو لتغيير الروتين المعتاد وإطلاع الأعضاء على أمور أخرى غير معتادة , مما يثير الفضول للتعلم ..فهذا ما كان يواجهني دوماً

 

بالتوفيق

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .