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

فكر معي ;)

مغلق
بدأه Super_emad55 في 30 أكتوبر 2006 · 40 رد · 3,038 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم,

حبيت اني اشغل عقول الشباب بسؤال بسيط :lol: , طبعا سوف اضع الحل بعد يومين,

نريد كتبات دالة تقوم بالتعرف على اي رقم اذا كان من مجوعة ارقام معينه لنطلق عليها اسم foo,

لنعرف هذه المجموعه "Foo" : الصفر هو foo , فاذا فرضنا ان " i " هو foo ايضا, فـ i+7 هو foo و i+5 هو foo

بمعنى اخر ان 7 هو foo و 5 هو foo و 12 هو foo و 17 و 19 و الخ... ولكن مثلا 9 و 11 و 6 و 18 ليس من مجموعة foo

نريد ان تكتب داله باستخدام ال recursion لتقوم بهذه المهمه الجميله <_<

الي بحل هذا السؤاله له 3 دراهم :P

طبعا foo هو اسم اخترعته من راسي, لا يحسب احد انه هو موجود في الحقيقه

GOOD LUCK

اكرر سوف اضع الحل بعد يومين

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#2
#include <iostream>
using namespace std;

bool member(unsigned int n1, unsigned int n2, unsigned int num)
{
	if (num%n1==0 || num%n2==0)
		return true;
	else
		return ((num>n1)&&member(n1, n2, num-n1) || (num>n2)&&member(n1, n2, num-n2));
}

void main()
{
	unsigned int n;
	cin >> n;
	cout<< ((member(5, 7, n))? "true":"false");
}

هات ال 3 دراهم :P

#3

ماشاء الله عليك :D

طيب انا اعطيتك مجال واساع لتختار البراميترز , خيلنا نحصراها للشكل التالي

bool isFoo(int n)

انا مش عم ماطل :D , حلك صحيح 100%و ولكن اريد حل ابسط

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#4

ماشاء الله عليك :D

طيب انا اعطيتك مجال واساع لتختار البراميترز , خيلنا نحصراها للشكل التالي

bool isFoo(int n)

انا مش عم ماطل :D , حلك صحيح 100%و ولكن اريد حل ابسط

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#5

هذا هو الحل الابسط :)

bool isFoo(int n){
if (n==0)return true;
else if(n<0)return false;
if (isFoo(n-5));
else if (isFoo(n-7));
}

اذا اراد اي احد الشرح فليعلمني

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#6

:unsure: راجع تانى على اللى إنت كاتبه, شكلك نسيت تكتب ال return

#7

كيف مافي return

جرب البرنامج و ادعيلي ;)

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#8
Super_emad55 كتب:
كيف مافي return

جرب البرنامج و ادعيلي ;)

قصدى على أخر سطرين.

#9

بعرف انه اصدك على اخر سطرين,

انت جرب الكود بس ... :D

اذا مش واضح انا ممكن اشرحه.. بس انا عم اطلب منك للمرة الثالثه انك اتجربه

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#10

جربته و بيطلع على ال 12 و ال 14 false , و إبدأ فى الشرح يا أخى متستناش أحد :)

#11

هو بينادي ال function تاني من خلال السطرين الاخرين وبيتناقص الرقم لحين يصل إلي صفر ويكون النتيجه صح أو يصل إلي اقل من صفر وتكون النتيجة خطأ وبيجرب النتيجة علي الطريقتين بطرح خمسه او سبعه

اتمني اكون قدرت افهم صح واوصل اللي فهمته

شكراااااااااااااا

#12

السلام عليكم,

اخي بلو , انا مش عارف انت كيف جربيت الداله الي انا وضعتها... *-)

اقتباس
#include <iostream>

#include <string>

#include <cmath>

using namespace std;

bool isFoo(int n){

if (n==0)return true;

else if(n<0)return false;

if (isFoo(n-5));

else if (isFoo(n-7));

}

int main()

{

if(isFoo(12)==true)

cout<<"yes"<<endl;

else

cout<<"no"<<endl;

}

فقط ضع هذا الكود.

هذا الكود مجرب و مستخدم :^)

اخي محمد شرح تمام...

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#14

هذا حلي .. صحيح أنه لا يستخدم ال recursion و لكنه يستخدم isFoo(n) function

:P

#include <iostream.h>
#include <conio.h>
using namespace std;

bool isFoo(int n){
if(n == 0)
	 return true;
else if(n%5 == 0) 
	 return true;
else if(n%7 == 0)
	 return true;
else if(n > 5 || n > 7)
{
 if((n-5)%7 == 0)
	 return true;
 else if((n-7)%5 == 0)
	 return true;
}
else
return false;

}

int main()
{
if(isFoo(2)==true)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
getch();
}

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

#15

غريـــــــــــــــــــــــــب, أرجو انه احد يحكم :)

أرجو تشيك الصورة المرفقه.

هو في حالتين:

1) اما انه في شئ بالكمبايل تبعك مختلف.

2) اما انه في شئ بالكمبايل تبعك مختلف. :lol:

مافي حل تالت.

ارجو انه احد من الاعضاء يجرب الكود.

أرجو فتح الصورة المرفقه :huh: .

post-56205-1162506635_thumb.jpg

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#16

يوسف الرقم 13 ليس foo

جرب بنامجك, سوف يعطيك انه فوو, يعني الكود مش عم يشتغل بالطريقه المطلوبه

يمكنك كتابت كود لل foo بدون recursion , باستخدام ال iteration

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#17

جربت برنامجي على 13 و عطاني أنه ليس فووو ..

و جربت برنامجك و كان ناتجي نفس ناتج الأخ Blue

أي أن الخطأ من عندك و ليس عندنا :)

post-66417-1162566863_thumb.jpg

#18

كيف ممكن لاكثر من كمبايلر يعطي جواب مختلف عن الاخر ...

يوسف ,كودك غير صحيح, لن اثبتلك ذلك عن طريق اي صوره, و لكن منتقيا,

لنأخذ ال 13

13-5=8 لا تقبل القسمه على 7

13-7=6 لا تقبل القسمه على 5

ثم سوف يرجع false

لنأخذ الرقم 59 وهو foo

كودك سيقوم بالاتي,

59-5 =54 لا يقبل القسمه على 7

بعدين

59-7=52 لا يقبل القسمه على 5

ثم سوف يرجع false

بينما

59=5+5+5+5+5+5+5+5+5+7+7

فاذا كان الكمبايلر تبعك يعطي نواتج غير هذه , فهذا يعني انه عندكم الخطأ

انا قمت بتجريب الكود الي وضعته انا في لابات الجامعه و اشتغل, انا مستغرب من اجوبتكم

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#19

و أنا سأثبت لك خطأك أيضا

لنأخذ على سبيل المثال الرقم n=12

أو أمر هل 12 == 0 .. طبعا لا

سينتقل الى 12 أصغر من الصفر ..الجواب لا

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن 7 .. (12-5)

7 == صفر ... الجواب لا

7 أصغر من الصفر .. الجواب لا

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن 2 .. (7-5)

2 == صفر ... الجواب لا

2 أصغر من الصفر .. الجواب لا

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن 3- .. (2-5)

3- == صفر ... الجواب لا

3- أصغر من الصفر .. الجواب نعم ... النتيجه return false

يعني 12 ليس فوو و هذا غير صحيح!

#20

انا احب الجدال في العلم, لكن المسأله ليست مسألة من الاشطر, او اني اريد فقط ان اغلطك,

لا على العكس ارجو الفائده للجميع في هذا النقاش.

لنأخد الكود الي و ضعته, نأخذ الرقم 12,

أو أمر هل 12 == 0 .. طبعا لا

سينتقل الى 12 أصغر من الصفر ..الجواب لا

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن 7 .. (12-5)

7 == صفر ... الجواب لا

7 أصغر من الصفر .. الجواب لا

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن 2 .. (7-5)

2 == صفر ... الجواب لا

2 أصغر من الصفر .. الجواب لا

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن 3- .. (2-5)

3- == صفر ... الجواب لا

3- أصغر من الصفر .. الجواب نعم ... النتيجه return false

و الان تبأ عملة تسمى floding اذا لم تخني الذاكرة باسم العمليه,

سترجع قيمة الn الى 2

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن -5 .. (7-2)

-5 == صفر ... الجواب لا

-5 أصغر من الصفر .. الجواب نعم ... النتيجه return false

سترجع قيمة الn الى 7

سينادي الداله isFoo مرة أخرى و لكن القيمه الآن 0 .. (7-7)

وهنا سوف يرجع true

و عندما يرجع true لن يقوم بتجريب الي رقم اخر

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#21

أخي سوبر عماد .. عندما يرجع البرنامج أول return false or true فأنه سيخرج من البرنامج و لن يقوم بعملية ال floding

أتمنى أن أكون مخطئا

ْ

تم تعديل هذه المشاركة بواسطة Yousof في 3 نوفمبر 2006 في 21:10

#22

بالنسبه لبرنامجي فأنت محق البرنامج خطأ :)

تم تعديل هذه المشاركة بواسطة Yousof في 3 نوفمبر 2006 في 21:35

#23

لا اخي يوسف, بعد ما يتم ارجاع true or false لاول مرة, تتم عمليه يطلق عليها على ما اظن floding

بهذه العمليه يتم الغاء جميع الدوال التي تم تكوينها في ال stack

وهذه العمليه تتم مرحله مرحله,

فاذا تما استدعاء اي داله بالقيم الاتيه مثلا

9

6

5

4

قبل الخروج من الداله يتم الغاء اخر رقم دخل و من ثم الي قبله ( كما هو حال اي stack متل ما يقال last in first out

فتلغى كالتالي

4

5

6

9

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#25

شكرا على اللينك بلو,

بس بدي اطلب منك طلب,

بدي ياك تعمل ديبج للكود تبعي, و اتشوف كيف يعمل على الرقم 14 مثلا , فمنطق الكود صحيح 100%, و ال output عندي صحيح 100 %

انا قمت بوضع الخطوات الي بيقوم فيها الكمبايلر تبعي للاخ يوسف. فاريدك كتابت ماذا يحدث عندك في الكمبايلر.

قد اكون اثقلت عليك, و لكن إن شاء الله حيكون فيها فائده لي و لك

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

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

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