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

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

بدأه yacinebrca في 6 فبراير 2014 · 18 رد · 7,219 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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


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


 


 


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


شرط أن يكون


 


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


 


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


 


 


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


فمثلا


 


x=5;وp=650


 


 


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


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


 


 


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


 


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


 


 


تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 7 مارس 2014 في 15:29

1

elearning_image.jpg

#2

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

‎لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر‎

 

Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone)  Project = findNewProjectelse learn_code
#3
dracola168 كتب:

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

 

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

فمثلاً 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;

 

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

بالتوفيق

#4

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

#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 في 7 فبراير 2014 في 00:07

1

‎لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر‎

 

Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone)  Project = findNewProjectelse learn_code
#5

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

stdlib.h

لعمل الدالة

system

‎لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر‎

 

Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone)  Project = findNewProjectelse learn_code
#6

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

goto re;

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

 

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

#7

السلام عليكم

 

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

 

 

الأخ

dracola168

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

 

 

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

 

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

 

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

 

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

elearning_image.jpg

#8

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


#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;

}

elearning_image.jpg

#9

شكراً لك

اقتباس

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

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

#10

if(function(i)==x)

الحلقة

goto

elearning_image.jpg

#11

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

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

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

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

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

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

 

بالتوفيق

#12

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

 

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

 

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

elearning_image.jpg

#13

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

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

اقتباس

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

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

 

بالتوفيق

#14

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


elearning_image.jpg

#15

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

‎لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر‎

 

Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone)  Project = findNewProjectelse learn_code
#16

هذه محاولتي

#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;
}
#17

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

 

 

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

 system("pause");

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

 

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

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

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

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

تم تعديل هذه المشاركة بواسطة yacinebrca في 8 فبراير 2014 في 15:34

elearning_image.jpg

#18

في هذا السطر

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

 

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

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

أي أن

if(w^x)

مماثلة لـ

if(w!=x)

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

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

 

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

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

 

بالتوفيق

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 8 فبراير 2014 في 14:24

#19

بارك الله فيك


elearning_image.jpg

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