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

فكر معي ;)

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

أنا جربت البرنامج بتاعك تانى بس فى ال debug mode و طلع نتايج فعلا زى مانتا بتقول لكن فى ال release mode بيطلع كله false (!!) و مش عارف طبعا أعمله debug و أعرف إيه اللى بيحصل. إن شاء الله حقرا فى الفرق بين ال release و ال debug علشان أقدر أعرف و ليه بيعمل كدة, و يا ريت لو حد يعرف يفيدنا.

#27

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

ال debug and release mode لازم يعطوا نفس ال ouptut

اقتباس
و مش عارف طبعا أعمله debug و أعرف إيه اللى بيحصل

ليه ماعرفت تعمل debug!!

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

#28

السلام عليكم ..

الأخ عماد .. الى الآن لا أعرف كيف يعمل برنامجك .. هلا تفضلت بشرحه ؟؟

و خاصة متى سينفذ هذا الأمر:

else if(isFoo(n-7))

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

#29

أنا بستخدم VS 2005! و مش عارف أعمله debugging علشان لما بدوس f11 فى ال release mode مش بيدخل جوة isFoo بس بينفذها و مش بشوف إيه اللى بيحصل

#30

السلام عليكم

الحقيقة الموضوع أثار فضولي, أنا جربته على Borland Turbo C++ و البرنامج شغال 10/10

يعني isFoo(12) returns true

و isFoo(13) returns false

#31

يا يوسف انا وضع شرح بسيط للكود , وجربته على الرقم 14, و انت ممكن تفهمه اكتر اذا اعملتله ديبج.

على اي حال , عندما اجد وقت فراغ سوف اضع شرح مفصل إن شاء الله

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

#32

أولا اسمحوا لي أن أدخل في النقاش

ثانيا يا أخ عماد إن تابعك لا يعيد قيمة في كل الحالات كما ذكر الأخ Blueteeth وهذا ما يسبب الاختلاف في النتائج فهو يعيد قيمة قشوائية في الحالتين الأخيرتين, الشرح لقيمة 5 مثلا:

IsFoo(5)
هل 5 تساوي 0
لا
إذا هل 5 أصغر من 0
لا
هل IsFoo(0) يساوي true
	 هل 0 تساوي 0 نعم إذا أعد true
نعم إذا لاشيء
وهنا ينتهي التابع ويعيد قيمة عشوائية

والغريب أن ما لم تلاحظوه أن Compiler يعطي تحذير بأن هذا الكود لن يعيد قيمة دائما

عفوا فلقد ذكر الأخ Blueteeth لك ذلك ولكنك طالبت بالتجريب وكأن التجريب حجة أقوى من المنطق

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

وردا على ما سبق ذكرت أنك ستشرح كيف سيعيد التابع قيمة

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

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

اقتباس
لنأخد الكود الي و ضعته, نأخذ الرقم 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 لن يقوم بتجريب الي رقم اخر

#33

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

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

اقتباس
وكأن التجريب حجة أقوى من المنطق

انا قلت للاخ بلو جرب ليس لان التجريب حجة أقوى من المنطق ولكن لاني احاول تأخير و ضع الشرح لضيق الوقت كما ذكرت.

اخي فراس تابعي لا يرجع قيمة عشوائيه ولا بحاله من الاحوال, لناخذ الرقم 5

هل ال 5 تساوي صفر لا

هل ال 5 اصغر من الصفر لا

سوف يدخل الى

if (isFoo(n-5));

سوف يستدعي الداله مرة اخرى بـ n تساوي 0

هل ال 0 يساوي ال 0 -, نعم ,سوف ترجع الداله true

فسوف يصبح عندي

if (true)

بهذاه الحاله لن تقوم الدالة بالدخول الى

else if(isFoo(n-7))) ابدا حتى ينتهي الكومبايلر من عملية ال floding ارجو ان العمليه هذه تكون معروفه عند الجميع.

اذا هذه فائدة ال else if

انه بمجرد ارجاع القيمه true سوف يخرج البرنامج من الداله على طول,

لنأخذ مثا اخر عشان ما يقول الاخ فراس ان التجريب حجه اقوى من المنطق, ال 12 لاكمل عليه الشرح

لنأخد الكود الي و ضعته, نأخذ الرقم 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 لن يقوم بالدخول الى ال

else if(isFoo(n-7))

و بهذا سوف يرجع الداله بقيمة true

لاوضح اكتر عشان ما يزعل منا الاخ فراس :P (حهريك اليوم يا فراس :D )

يبدو لي ان هذه الجملة غير واضحه تماما

if (isFoo(n-5));

	else if (isFoo(n-7));

سبب وجود هتان الجملتان هو اني لا اريد من البرنامج تكوين الشجرو باكملها, انا اريده ان يخرج من الداله فور وجوده لقيمو true

فاذا ارجع

(isFoo(n-5)) او (isFoo(n-7)) القيمه true

سوف يدخل البرنامج على

if (isFoo(n-5)) ;

و isfoo تحمل القيمة true

لذلك لن يقوم بالدخول على else if (isFoo(n-7))

وبالتالي سوف يكمل الكمبايلر عملية ال floding و يخرج من الداله بقيمة true

إن شاء الله تكون وصلة الفكره هذه المرة بشكل واضح جدا,,

اقتباس
والغريب أن ما لم تلاحظوه أن Compiler يعطي تحذير بأن هذا الكود لن يعيد قيمة دائما

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

شكرا ,ارجو ان لا اكون اطلت على الشباب :)

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

#34
اقتباس
و عندما يرجع true لن يقوم بالدخول الى ال

else if(isFoo(n-7))

و بهذا سوف يرجع الداله بقيمة true

:) أخى إحنا عارفين ال if/else بتشتغل إزاى, نقطة الخلاف هى إزاى الدالة ترجع قيمة من غير ما تكتب return صراحة!! يعنى فى الجملة اللى أنا عاملها إقتباس دى, ليه ليه إفترضت إن الدالة بترجع true ؟!

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

يا راااااجل حرام عليك :))!! بقا ذكاء و خبرة فطاحل المبرمبجين تقول عليه "آلة غبية", لعلمك التحذيرات دى فى 95% من الأحيان بيبقا ليها تأثير على أداء برنامجك, ممكن تكون إنت شايفه بيشتغل صح, لكن تحت ظروف مختلفة و input مختلف ممكن يشتغل غلط! و لذلك نصيحة منى, لا تتجاهل التحذيرات و حاول معالجتها.

#35

بسم الله الرحمن الرحيم,

اقتباس
أخى إحنا عارفين ال if/else بتشتغل إزاى, نقطة الخلاف هى إزاى الدالة ترجع قيمة من غير ما تكتب return صراحة!! يعنى فى الجملة اللى أنا عاملها إقتباس دى, ليه ليه إفترضت إن الدالة بترجع true ؟!

انا والله متعجب لامركم, طلبتوا مني شرح, فقمت بالشرح, فقلتوا نحنا عارفين .

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

else if(isFoo(n-7)) بحالة ال N=7 سوف تنادي الداله و تشيك هل ال 0 =0 نعم سوف ترجع TRUE

يبدوا لي ان الشباب لا يتعاملوا كتير بال resursion

اقتباس
يا راااااجل حرام عليك )!! بقا ذكاء و خبرة فطاحل المبرمبجين تقول عليه "آلة غبية", لعلمك التحذيرات دى فى 95% من الأحيان بيبقا ليها تأثير على أداء برنامجك, ممكن تكون إنت شايفه بيشتغل صح, لكن تحت ظروف مختلفة و input مختلف ممكن يشتغل غلط! و لذلك نصيحة منى, لا تتجاهل التحذيرات و حاول معالجتها.

جهاز الكمبيوتر من اخترعه اكتر ذكاءا ممن اخترع ال c++ , ومع هذا يعتبر اله غبيه, و من اخترعه يعترف بذلك. لانه مبرمج على نطاق محدد لا يمكنه الالمام بجميع المشاكل التي قد تواجهه. والا لم يكن هناك شئ اسمه viruse .

ما علينا, انا لا اتجاهل التحذيرات ابدا, و طبعا يجب او من المفضل على المبرمج حل جميع التحذيرات, ولكن انا ذكرت انه هناك اساليب تتطلب منك اختراق بعض قوانين ال c++ لتوفير الكثير من العناء

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

#36

السلام عليكم

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

بداية أنا أقترح هذا الكود للبرنامج

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

قرأت جميع أكواد الإخوة المشاركين وعندي بعض التعقيبات

أولا::: كود الأخ يوسف أشبه ما يكون بال hardcoding ولا يمت إلى الصحة بصلة. وحابب أقلك ياعزيزي انو متى ما شفت if statements كتير في الكود بتاعك فاعلم انو عليه العوض ومنو العوض

ثانيا::: كود الأخ عماد لم يقنعني في بادئ الأمر طبعا لأنني لم أفهمه في البداية ولكن بعد تفكير عميق اكتشفت أنو يطبق مفهوم الrecursion تماما، ولا غبار عليه فعمليتا ال folding وال unfolding يعملا PERFECTLY في هذا الكود.... طبعا شرح الأخ عماد وافي وكافي ... ويدل على عمق فهم ولا داعي لتكرار ما قال ... لذلك أحب أن أقول أني عرضت الكود على full professor in softwere engineering واحد من عباقرة الهندسة البرمجية عالميا فقال لي أن الكود صحيح 100%

عرضت عليه برنامجي فقال ... This is correct but you might've gotten it by chance

هو ((كسر راسي)) بس لا بأس... لو واحد غيرو كان كسرت راسو بس شو بدنا نعمل

نجي على الأخ fh_feras

fh_feras كتب:
أولا اسمحوا لي أن أدخل في النقاش

ثانيا يا أخ عماد إن تابعك لا يعيد قيمة في كل الحالات كما ذكر الأخ Blueteeth وهذا ما يسبب الاختلاف في النتائج فهو يعيد قيمة قشوائية في الحالتين الأخيرتين, الشرح لقيمة 5 مثلا:

IsFoo(5)
هل 5 تساوي 0
لا
إذا هل 5 أصغر من 0
لا
هل IsFoo(0) يساوي true
	 هل 0 تساوي 0 نعم إذا أعد true
نعم إذا لاشيء
وهنا ينتهي التابع ويعيد قيمة عشوائية

والغريب أن ما لم تلاحظوه أن Compiler يعطي تحذير بأن هذا الكود لن يعيد قيمة دائما

عفوا فلقد ذكر الأخ Blueteeth لك ذلك ولكنك طالبت بالتجريب وكأن التجريب حجة أقوى من المنطق

وردا على ما سبق ذكرت أنك ستشرح كيف سيعيد التابع قيمة

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

اولا: من خلال كتابتك للكود وردك عليك يبدو أنه ليس لديك أدنى فكرة عن الrecursion، بس أكيد الدلفي فيها recursion لأنو سمعت انو بس الفوورتران اللي من أيام جدي ما فيها هالميزة، لذلك رجائي الحار إذا لم تكن ملما بالموضوع تماما فلا ترد عليه بسطرين

ثانيا: التجريب حجة أقوى من المنطق،،،،لا طبعا... ومن الذي قال ذلك ؟؟؟؟ انا بصراحة لم أفهم ذلك من خلال ردود الأخ عماد وخاصة بعد أن كتب صفحات يوضح ماقال

ثالثا: A MAN HAS TO DO WHAT A MAN HAS TO DOمش A MAN HAVE TO DO WHAT A MAN HAVE TO DO

Blueteeth كتب:
:) أخى إحنا عارفين ال if/else بتشتغل إزاى, نقطة الخلاف هى إزاى الدالة ترجع قيمة من غير ما تكتب return صراحة!! يعنى فى الجملة اللى أنا عاملها إقتباس دى, ليه ليه إفترضت إن الدالة بترجع true ؟!

يا راااااجل حرام عليك :))!! بقا ذكاء و خبرة فطاحل المبرمبجين تقول عليه "آلة غبية", لعلمك التحذيرات دى فى 95% من الأحيان بيبقا ليها تأثير على أداء برنامجك, ممكن تكون إنت شايفه بيشتغل صح, لكن تحت ظروف مختلفة و input مختلف ممكن يشتغل غلط! و لذلك نصيحة منى, لا تتجاهل التحذيرات و حاول معالجتها.

بعدين يا أخي Blueteeth ::

1- كيف ازاي بترجع الدالة .. بدون return ؟؟ ياعزيزي الif و الelse فيهم دوال فيها return ، يعني أنا مستغرب تماما من حضرتك مادام انت خبير بالسي بلس بلس لازم تكون خبير بالديبج،، طيب ازا مش بيشتغل معك الديبج أقترح عليك تعمل tree diagram ولما توصل على الbase case بتاع ال recursion اعمل folding ،،، في حالة انك ما فهمت على أقترح عليك قراءة خارجية في الموضوع مش خطأ لو الواحد كان خبير وتعلم

http://www.cprogramming.com/tutorial/lesson16.html

2- بعدين الكمبيوتر آلة غبية! فما بالك بالكمبايلر ... يعني الإنسان هو من اخترع الكمبيوتر وقال عنه ذلك.. ولا داعي أن أطيل في هذا

3- كودك صحيح 100%، بس هذا لا يعني أن أي كود غيره خاطئ فالبرمجة بحر واسع لاحدود له

شكرا لكم وآسف على الإطالة

تم تعديل هذه المشاركة بواسطة TOOFI في 7 نوفمبر 2006 في 23:53

#37
TOOFI كتب:
أولا::: كود الأخ يوسف أشبه ما يكون بال hardcoding ولا يمت إلى الصحة بصلة. وحابب أقلك ياعزيزي انو متى ما شفت if statements كتير في الكود بتاعك فاعلم انو عليه العوض ومنو العوض

أولا شكرا لك على المداخله :P

و ثانيا لم تأت بشيء جديد من هذه العباره لأني اعترفت أن برنامجي خطأ B)

#38

الأخ Super_emad55:

اقتباس
أنا كنت مقرر اني اضع الشرح اخر الاسبوع لضيق الوقت عندي, ولكن الاخ فراس باسلوبه الجميل في التعليق على كودي أجبرني ان اضع الشرح الان
لقد قمت بجلب مثالين مقابل شرح بسيط!
اقتباس
انه بمجرد ارجاع القيمه true سوف يخرج البرنامج من الداله على طول
ولكن إذا خرج التابع الأب فورا ماذا يعيد «لا شيء» أليس كذلك فالسطر يقول:
if(isFoo(n-5));

والفاصلة المنقوطة تعني لاشيء, في هذه النقطة انتهت عملية floding ونحن في هذا التابع الذي يقول:

if(true);

ماذا يعيد هذا السطر «لاشيء»

اقتباس
و بهذا سوف يرجع الداله بقيمة true
لماذا لم تكمل نعم الدالة الإبن أعادت true ماذا يحصل في الدالة الأب التي طلبت الدالة الابن؟
اقتباس
يبدو لي ان هذه الجملة غير واضحه تماما
اقتباس
if (isFoo(n-5));

else if (isFoo(n-7));

نعم وهذه ما نحتاج إلى توضيحها تماما

وأتى شرحك:

اقتباس
سوف يدخل البرنامج على

if (isFoo(n-5)) ;

و isfoo تحمل القيمة true

لذلك لن يقوم بالدخول على else if (isFoo(n-7))

وبالتالي سوف يكمل الكمبايلر عملية ال floding و يخرج من الداله بقيمة true

نعم isFoo(n-5) تحمل القيمة true ونعم لن يدخل إلى isFoo(n-7) والله عم نفهم ولكن كيف سوف يكمل الكمبايلر عملية floding ويخرج من الداله الأب بقيمة true هذا ما نرجوا توضيحه ولكن بدون أمثلة

الأخ TOOFI:

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

أما أن تأتي وتقول أنك سألت أهل الخبرة وقالوا أن الكود صحيح فأنا لن أكذبك أبدا ولكن سأصدقك أسرع إن وضحت لماذا, لكنك ولا أعلم لماذا قررت أن تبدأ بذمي بدلا من التوضيح ولن أفعل المثل.

اقتباس
ثانيا: التجريب حجة أقوى من المنطق،،،،لا طبعا... ومن الذي قال ذلك ؟؟؟؟ انا بصراحة لم أفهم ذلك من خلال ردود الأخ عماد وخاصة بعد أن كتب صفحات يوضح ماقال
كانت الصفحات عبارة عن أمثلة وما زالت, لماذا إن كانت لديكم المعرفة وكافة ردودنا واضحة بأننا لم نقتنع بأن التابع سيعيد قيمة بدون أن يذكر ذلك صراحة لماذا لا تقولوا لنا كيف أن التابع الأب سوف يعيد true إذا كان آخر تابع إبن أعاد true ولم تذكر عبارة return بصراحة في التابع الأب, وبهذا نفهم الفكرة وتتضح وجهات النظر ونقفل النقاش؟

أما اقتراحك لهذا التابع فلا غبار عليه وإن شاء الله تنورونا

تم تعديل هذه المشاركة بواسطة fh_feras في 8 نوفمبر 2006 في 05:58

#39

السلام عليكم .. أعتقد اني فهمت المسأله

تخيل:

(n-5-5-5) /

(7-n-5-5) \ (n-5-5)

_______________/

(5-7-n-5) ______ / (n-5)

(7-n-5-7)\ (n-5-7) \____/

n ____________ /(n-7-5-5

5 -7-5-7)\ (n-7-5) / ___ \

_______________(n-7)

(5-n-7-7)/ (n-7-7) \

(n-7-7-7) \

نعوض بالرقم .. متى ما وجد البرنامج قيمة الصفر فأنه يرجع True و ان لم يجد الصفر فانه يرجع False

:lol:

#40

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

الاخ tofe , شكرا على المداخلة, و تابعك ممتاز الا انه قد يسبب ميموري ليك اذا كان الرقم المدخل كبير, لان الشجره سوف تبنى باكملها.

الاخ يوسف, تعجبني في ردودك فهيه صريحه مفيده مختصره. ارجو فعلا ان تكون فهمت الكود, وفقك الله,

الاخ فراس, لا اشعر انك تريد الفائده, انت مجادل محترف , لا اريد ان اخصر السمعه الجيده (اذا كانت جيده) التي اكتسبتها في هذا المنتدى, ولكن اسلوبك مستفذ.

هناك اساليب كثيره لشرح اي كود, و منها التجريب ( وهي الطريقه الاطول و الاسهل ) الي انا اتبعتها.

اقتباس
ولكن إذا خرج التابع الأب فورا ماذا يعيد «لا شيء» أليس كذلك فالسطر يقول:كودif(isFoo(n-5));والفاصلة المنقوطة تعني لاشيء, في هذه النقطة انتهت عملية floding ونحن في هذا التابع الذي يقول:كودif(true);ماذا يعيد هذا السطر «لاشيء»

عن ماذا تتكلم!!!!

اشرح لي ماهيه عملية ال folding

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

#41

بالغلط

تم تعديل هذه المشاركة بواسطة Super_emad55 في 8 نوفمبر 2006 في 21:31

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

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

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