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

السؤال المحير في لغة ++c, من يجيب عنه أولاً ؟

مغلق
بدأه Khaled.Alshaya في 31 يناير 2008 · 23 رد · 3,809 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

منذ فترة لم نطرح شيئاً يحرك الجو في المنتدى, لذلك أتيتكم بالعجيب الغريب!

في هذا السؤال المطلوب قد يكون خارجاً عن المألوف قليلاً, و كل ما أطلبه هو تنفيذ شيء بسيط دون الحاجة لتفسير ما فعلت!

ربما كان أول شيء نتعلمه في لغات البرمجة هو طباعة جملة على الشاشة كالتالي :

#include <iostream>

int main(){
	std::cout << "Hello ArabTeam :)";
	return 0;
}

بعد أن تطورت قدراتك في البرمجة, أصبحت ترى تلك السطور من الماضي حين كنت تقوم بنسخ الأكواد في أول درس لك لتعلم لغات البرمجة :lol:

تصور أننا قمنا بإزالة سطر الطباعة من الكود, كالتالي :

#include <iostream>

int main(){
	return 0;
}

أصبحت الدالة الرئيسية أو ما يسمى بـ main function فارغة تماماً من الأوامر, السؤال هو التالي :

كيف يمكن طباعة الجملة السابقة, دون كتابة أي كود داخل الدالة main :resentful:

بمعنى أبسط, يمكنك إضافة أي كود تريد إضافته و لكن بشرط أن يكون خارج الدالة main -_-

أنا في الانتظار B)

#2

السلام عليكم

الاجابه على الخاص.

tvquran_6.gif

#3

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

الحقيقة أنا طرحت السؤال و توقعت أن لا أجد إجابات عليه :lol: و لكن فاجئني الأخ عربي بإجابته على السؤال بطريقة مختلفة تماماً عن التي أعرفها و الأدهى من ذلك أنها تعمل كما نريد :D

أقول قبلت بهذا الحل, و لكنه ليس إجابة صحيحة 100%, لأنه خالف الشرط الأساسي و لكن بطريقة ماكرة :blush:

هذه هي إجابة الأخ عربي :

#include <iostream>
using namespace std;
#define return cout << "Hello ArabTeam :)";
int main()
{
return 0;
}

أخ عربي, صحيح أنك لم تكتب أي كود بنفسك داخل الدالة main, و لكنك استعملت الـ Preprocessor الخاص بلغة ++C/C, قبل عملية الترجمة تم استبدال return بـ return الجديدة :D, فعلياً تم ترجمة الكود و أمر الطباعة داخل الدالة main .

على كل حال, الإجابة كانت على الطريقة الـ hackers, الذين يستخدمون ما بين أيديهم من أدوات لتنفيذ ما يريدونه و ليس ما تريده الأداة :lol:

أنا في انتظار الإجابات القادمة,

تحياتي ,,

#4

صباح الخير ياخالد.

اقول انا بحاول بطريقه اخرى ان شاء الله . لكن لا تحط الاجابه الا بعد العصر.

بكرة سنان وباسم والشباب يزعلون فاتهم سؤال زي هذا

والصراحه اول مره يمر علي سؤال بهذه الفكره العجيبه.

اجل ليش حطو الـ main.

tvquran_6.gif

#5

يمكن عمل هذا بثلاث طرق

pragmas

Global Constructor

Tls Callback

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

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#6

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

أهلاً بمشرفنا العزيز GamingMasteR,

استعمال الـ Preprocessor يخل بالسؤال, لأن الكود سيصبح فعلياً داخل الدالة الرئيسية main,

الطريقة هي بالفعل استعمال الـ Global Constructor B)

كل ما عليك فعله هو الالتفات على شيء يمكن أن يتم تنفيذه قبل الدالة الرئيسية و بالطبع هو عملية حجز البيانات العامة, أو الـ Global Variables ,,

و لكن المشكلة أنه لا يمكن كتابة الكود في المنطقة العامة, فكيف سنتصرف ؟ :calc:

بالنسبة للـ Tls Callback,

لا أعتقد أن السؤال يتطلب مثل هذه الحلول, لماذا تريد التعامل مع بيانات الـ threads المحلية !

إضافة إلى أن هذه الطريقة ليست مدعومة غير في windows nt و ما شابهه ( بعد قليل من البحث طبعاً :D ), إضافة إلى أنه حتى vc لا يدعم مثل هذا النوع من الأمور بشكل كامل!

تحياتي ,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 31 يناير 2008 في 05:36 — السبب: أخطاء إملائية

#7

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

الأخ عربي أتى بالحل النموذجي للسؤال B)

لن أضع الحل حتى يحل الأخوة السؤال, و يمكننا وضع الحل غداً بإذن الله.

تحياتي ,,

#8

اهلا خالد ..

سؤال ذكي بالفعل وقد تمت الاجابة عليه وارسلتها على الخاص ..

اقتباس
بكرة سنان وباسم والشباب يزعلون فاتهم سؤال زي هذا

الحمد لله انك اتذكرت بينا ..

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#9

ماهو Global Constructor أنا أحاول حاليا بالسي

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#10

و تكون دالة الـmain() على الشكل هذا بالظبط؟

int main(){
	return 0;
}
rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#11
اقتباس
و تكون دالة الـmain() على الشكل هذا بالظبط؟

بعد اذن خالد ساجيب لكي يعرفون المطلوب الان ..

نعم ..

يجب ان تكون mian اما بهذا الشكل ..

int main()
	{
	   return 0;
	 }

او من الممكن ان تكون كالتالي فلافرق بين الاثنين ..

void main()
	{

	}

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#12

قصدت ألا يتم إدخال أي شئ داخل دالة الـmain()

هل يمكنني عمل include ؟

تم تعديل هذه المشاركة بواسطة croconile في 31 يناير 2008 في 14:47

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#13

تم إرسال الرد على الخاص

#14
اقتباس
قصدت ألا يتم إدخال أي شئ داخل دالة الـmain()

هل يمكنني عمل include ؟

نعم ..

الmain تكون فقط بالشكلين السابقين ..

الشرط هو ان لا تجري اي عملية داخل الmain ..

بالتاكيد يمكنك عمل include ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#15

ممكن نعمل كلاس وفي داله البناء نطبع الجمله ، وبعدها قبل بدايه الـ Main نعرف object من الكلاس وبعدها يطبع الجمله .

أو نستخدم القوالب Class Template وفيه نطبع الجمله ، وبعدها نعمل instance من الكلاس . طبعا هذا الكلام قبل الـ Main .

المعذره لا يتوفر لدي مترجم الأن لأجرب ، لذلك الكلام السابق ربما يكون مجرد نظريات فقط :) .

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#16

نفس اجابة romansy الاولى

Khaled.Alshaya كتب:
كيف يمكن طباعة الجملة السابقة, دون كتابة أي كود داخل الدالة main :resentful:

بمعنى أبسط, يمكنك إضافة أي كود تريد إضافته و لكن بشرط أن يكون خارج الدالة main -_-

B)

فهم السؤال نصف الجواب

الكلمة الزرقاء فوق هي المفتاح

d4baa0.gif
#17

أنا احترت في السؤال ده :)

ينفع function ولا ده كود؟

تم تعديل هذه المشاركة بواسطة croconile في 1 فبراير 2008 في 06:51

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#18

السلام عليكم

======

مشرفنا خالد غير موجود من أمس...لأنني قدمت إجابتي من أمس, وكنت فاكرة الاقي الجواب النهائي اليوم...على فكرة الشيفرة اللي انا ارسلتها تعمل بالضبط مثل ما اراد خالد و متأكدة منها. وايضاً شرعية برمجيا وليست مثل شيفرة الأخ عربي والتي تعتبر مرفوضة هندسياً وليس لها دخل بما يُعرف بـ Hacking مع احترامي طبعاً.

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#19

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

عذراً على التأخير, كنت أشتري كمبيوتر جديد أخيراً :lol:

الحقيقة أن معظم الأخوة أجابوا بطريقة صحيحة,

ما كنت أريده هو إنشاء صنف :D "لن تسمى فئة بعد الآن :P ", و في الـ constructor الخاص بذلك الصنف نقوم بعملية الطباعة, و لكي ينفذ ذلك الـ constructor قبل الدخول إلى البرنامج,

يجب أن يكون هناك كائن معرف من ذلك الصنف في المنطقة العامة للمتغيرات,

الحقيقة أني لم أتوقع أن تهطل الإجابات على بريدي الخاص بذلك الشكل,

ماشاء الله يا أخوان, و بالتوفيق في اللمحات القادمة,

الأخوة الذين قاموا بحل السؤال هم كالتالي :

إسماعيل ابراهيم

#include "stdafx.h"
#include <iostream>
using namespace std;

class AnyClass
{
public: AnyClass()
	   {
cout<<"Helow world";
cin.get();	  
		}
};


AnyClass mydd;
int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

رغـــــــــد

#include <iostream>
using std::cout;
using std::endl;

class SayHello
{
public:
	SayHello(){cout << "Hello Arab Team!" << endl;}
}sayHello;


int main ()
{
	return 0;
}

سنان محمد صالح

#include<iostream,h>

	 class pr  {
	public :
pr()   {
		cout << " how are you ... ";
	 }
  };

pr object1;

int main()
	{

return 0;

	 }

و بالطبع أخونا arabi2013 الذي أرسل لي ثلاثة حلول مختلفة للسؤال B)

#include <iostream>
using namespace std;
#define return cout << "Hello ArabTeam ";
int main()
{
return 0;
}

#include <iostream>
using std::cout;
class a
{
public:
a(){cout<< "Hello ArabTeam : ) "; }
};
a f;
int main()
{
return 0;
}

#include <iostream>
using std::cout;
struct a
{
a(){cout<< "Hello ArabTeam : ) "; }
} f;
int main()
{
return 0;
}

بالنسبة للـ hacking أخت رغد, فأعتقد أن طريقة الأخ عربي ينطبق عليها هذا المسمى, لأن الهاكرز يقومون بالمطلوب بطرق غير شرعية هندسياً :P

تحياتي ,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 1 فبراير 2008 في 10:16

#20

مبروووك الكمبيوتر الجديد يا خالد. الحمد لله اجابتي صحيحة...ومني حابة ادخل بكلمة Hacking و تفاصيلها و السجال بخصوصها, لكن بإجاز هي البناء و ليست الهدم هي حل مشكلة حاسوبية وليست انتاج وإحداث مشكلة جديدة؟

وين كلمة return راحت؟ قتلها الأخ عربي بكل بساطة في هذا البرنامج؟ و ياترى وين الهندسة ساعة ما هدم أكبر ميزة هندسية و هي reusability. مو يمكن نحتاج كلمة return مرة ثانية بالبرنامج؟؟

يلله صرف البرنامج التالي لأن لغة C++ تقول انا مني معترفة بالبرنامج التالي..

-----------------

#include <iostream>
using namespace std;
#define return cout << "Hello ArabTeam ";//Ok
int sum(int, int);//Now I need to take the advantage of returing value

int main()
{
	cout << sum(10,10) << endl;
	return 0;
}

int sum(int x, int y)
{
	return x + y;//???Unknown to C++ programming language at all...
}

LEFT TO RIGHT
for more information about Reusability

for more information about Reusability from Wiki

:P

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#21

السلام عليكم:

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

سؤال خالد جاء في ساعة متاخرة وهناك منافسه واعتبر ايضا هناك تحدي طبعا المقصود ان بينا هنا في قسم السي منافسة شريفة

كل واحد يفكر في الاجابه بطريقته انا اعتبر العقل زي البصمة لا تتشابه بين الناس , المهم كان عندي ان الرساله تظهر بدون ما اكتب اي شئ داخل المين.

الاجابه حسب المعطيات وشروط السؤال صحيحة لكن ليست صحيحة لسؤال آخر, المهم بعد ما قدمت الجواب الاول وتاكد اني سبقت في الاجابه كان عندي وقت

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

وطبعا الصراحه كلامك صحيح يارغد في ان الطريقه ليست صحيحة دائما (لكن في السؤال المطروح صحيحة 100%).

وفي مثالك الذي وضعتيه خطاء(100%).

والاجابه لم تكن موضوعه للمثال الذي وضعتيه بل للسؤال الذي وضعه خالد.

أخيرا اشكر خالد على افكارة الجميله و أسئلته والحقيقه انه ادخل النشاط والحيويه على قسم السي.

أقتراح : مسابقه في السي والجائزة كمبيوتر خالد والاسئله يضعها خالد(طبعا لن يستطيع حلها احد راح تكون معقده عشان الكمبيوتر ما يروح)

tvquran_6.gif

#22

كلامك صحيح اخي عربي ..

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

ولكن ماهي النتيجة .. ؟؟ النتيجة انه حل .. انه ينفذ ماهو مطلوب منه بالضبط ..

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

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

كيف يمكنك طباعة جملة على الشاشة من دون استعمال ال cout داخل ال main .. شرط عدم استخدام اي امر من اوامر الpreprocesser

مثل #define ..

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

انا عندما وضعت لكم لغز الاعداد الدائرية .. كان هناك كود في راسي لحل اللغز وقد وضعته على انه الحل النموذجي .. ولكن باسم الموجي حل اللغز بطريقة اخرى .. وادت المطلوب .. ويمكن بمرونة اكثر مما عليه الكود الذي طرحته انا ..

لذلك فكما يقال ..(( كل الطرق تؤدي الى روما )) وايضا ( كل طرق الاخ عربي تؤدي للناتج )) .

اقتباس
أقتراح : مسابقه في السي والجائزة كمبيوتر خالد والاسئله يضعها خالد(طبعا لن يستطيع حلها احد راح تكون معقده عشان الكمبيوتر ما يروح)

اقتراح جميل .. وياريت الاسئله تكون اصعب ليس من اجل احتفاظه بالكومبيوتر ولكن من اجل تطوير تفكيرنا اكثر ..

شكرا يا خالد على ما تقدمه للجميع ...

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#23
arabi2013 كتب:

السلام عليكم:

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

سؤال خالد جاء في ساعة متاخرة وهناك منافسه واعتبر ايضا هناك تحدي طبعا المقصود ان بينا هنا في قسم السي منافسة شريفة

كل واحد يفكر في الاجابه بطريقته انا اعتبر العقل زي البصمة لا تتشابه بين الناس , المهم كان عندي ان الرساله تظهر بدون ما اكتب اي شئ داخل المين.

الاجابه حسب المعطيات وشروط السؤال صحيحة لكن ليست صحيحة لسؤال آخر, المهم بعد ما قدمت الجواب الاول وتاكد اني سبقت في الاجابه كان عندي وقت

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

وطبعا الصراحه كلامك صحيح يارغد في ان الطريقه ليست صحيحة دائما (لكن في السؤال المطروح صحيحة 100%).

وفي مثالك الذي وضعتيه خطاء(100%).

والاجابه لم تكن موضوعه للمثال الذي وضعتيه بل للسؤال الذي وضعه خالد.

أخيرا اشكر خالد على افكارة الجميله و أسئلته والحقيقه انه ادخل النشاط والحيويه على قسم السي.

أقتراح : مسابقه في السي والجائزة كمبيوتر خالد والاسئله يضعها خالد(طبعا لن يستطيع حلها احد راح تكون معقده عشان الكمبيوتر ما يروح)

مرحبا,

أنا لسه مشتري الكمبيوتر :cry: بس ولا يهمكم عندي كمبيوتر pentium4 جربوا تشغلوه لو فزتوا بالجائزة :P

#24
اقتباس
بس ولا يهمكم عندي كمبيوتر pentium4 جربوا تشغلوه لو فزتوا بالجائزة

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

لانه لو كان جيدا لما تبرعت به كجائزه .. صح ؟؟

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

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

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