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

لغز

بدأه Eng.S.IDk في 25 سبتمبر 2010 · 21 رد · 1,232 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بأستخدام برنامج سي++.

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

مثلا , 5 = 25

#2

يعنى ايه لإيجاد مربع رقم بدون استخدام semi-colon، أعتقد انك عارف ان الـ semi-colon هى اللى بتحدد إنتهاء السطر البرمجى و إذا لم تكتب فى نهاية expression او statement هيحصل syntax error.

يرجى توضيح هذا اللغز

مدونتي: C++ Tips and Tricks

#3

من الممكن ان يكون القصد هكذا

cout << "the square root is : " << 25 = 5 << " done\n";

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#4

اولا اهلأ بكم , فعلا أخي انا هذا ما حيرني في السؤال , فأنا ايضا مثلكم عرض علي مثل هذا السؤال ,.

واقسم لي صاحب السؤال ان له حلا ,, فقلت استشيركم . :huh:

#5

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

لم أفهم السؤال جيدا و لكن أحببت أن اعطيك فكرة يمكن أن تفيدك في الوصول إلى هدفك المنشود و هو حل اللغز :)

لنفرض أنك تريد إظهار الجملة arabteam2000 بدون استخدام الفاصلة المنقوطة !,الكود سيكون هكذا :

#include<iostream>
using namespace std ;
int main() 
{
 if(cout<<"arabteam2000"<<endl)
 system("pause");
 return 0;
}

لا تقلق .. سأشرح لك الفكرة :wink:

لننظر كيف تتم ترجمة السطر الآتي:

if(x==5)

في البدايه عندما يجد المترجم الكلمة if سيبحث عن الشرط وهو x==5 ,الآن سيذهب المترجم إلى موقع الذاكرة المُخزن به قيمة المتغير x و يحضر القيمة ,بعد ذلك سيقوم بالنظر إلى معامل الشرط وهو == لينظر إلى الطرف الثاني وهو 5 و يقارن بين الاثنين و يكون الجواب في النهاية TRUE or FALSE ,لاحظ أنه قد تم تنفيذ الأمر x==5 مع أنك لم تضع الفاصلة المنقوطة !!!, نفس الشيء بالنسبة لهذا المثال .. سيقوم المترجم بتنفيذ ما بداخل الشرط ليعرف ما إذا كانت النتيجة هي TRUE or FALSE ,لاحظ أنه قد تم إظهار الجملة من خلال تنفيذ ما بداخل الشرط .

خلاصة : نعلم أن نتيجة الشرط هي TRUE or FALSE و لكي يعرف المترجم أي القيمتين بالضبط يقوم بتنفيذ ما بداخل الشرط فإذا كان النتيجة TRUE سيقوم المترجم بتنفيذ الأوامر التابعة للشرط و إلا فسيتم تجاهلها.

أتمنى أن تكون الفكرة واضحة و أكون قد أفدتك :)

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

#6

الحل شيئان اما المثال الفائت او المثال القادم

لنقل اننا نريد عمل متغير اسمه a و تعيين الرقم 25 له

#define a 25

هذه تكتب بعد الهيدر فايل و لا تدخل اى دوال

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#7

السلام عليكم

اقتباس
الحل شيئان اما المثال الفائت او المثال القادم

لنقل اننا نريد عمل متغير اسمه a و تعيين الرقم 25 له

#define a 25

هذه تكتب بعد الهيدر فايل و لا تدخل اى دوال

لا يا أخي الفاضل !

حسب شروط التمرين فإن العدد سيتغير من إدخال لآخر مما يعني أن الحل الذي قدمتَه لا يؤدي المطلوب لأن استخدام الماكرو يعني تعريف ثابت قيمته محدده (هذا إذا لم نستخدم #if و #else و ...!)

احترامي.

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 25 سبتمبر 2010 في 20:30

#8

التعديل سيكون في بارامترات التابع main

في البارامتر char *argc

ضع فيه ما تشاء

#9

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

واشكر الاخ xmaster للتوجد ايضا ,

اما بالنسبة لسؤالي , فما يحيرني فيه ,هو ان using name space ايصا لا يوجد فيها semi-colon ولا في اي مكان في البرنامج الا retern بسبب استخدمك int main فلو استخدمت void لاصبح برنامج كامل بدون استخدام السيمي كولون , ان لم تزبط معي جيمع المحاولات فانا سأحصل على الحل قريبا , ولكن بعد فشل :sleep: .\

وبإذنه تعالى سأضعة لترون كيفية حلة .

وايضا لا تبخلو علينا بأي معلومات ,.

#10
اقتباس

التعديل سيكون في بارامترات التابع main

في البارامتر char *argc

ضع فيه ما تشاء

عفوا اخي لم استطيع ان افهم , هل تستطيع التوضيح بمثال ,

جزاك الله خير .

#11

السلام عليكم

اقتباس
التعديل سيكون في بارامترات التابع main

في البارامتر char *argc

ضع فيه ما تشاء

أهلا بك اخي الكريم :)

الدالة الرئيسية لها وسيطان, الأول معرف على شكل متغير من الأعداد الصحيحة حيث تُخزن فيه عدد وسائط البرنامج التي تم إدخالها و تكون قيمة هذا المتغير 1 و هي لاسم البرنامج, الوسيط الثاني يمكننا من رؤية تلك الوسائط أي القيم التي بها فهو عبارة عن مصفوفات, كل مصفوفة تأخذ وسيط.

لا أرى أن وسائط الدالة الرئيسية يمكن أن تنفعنا في الوصول إلى حل اللغز. و الله أعلم.

اقتباس
اما بالنسبة لسؤالي , فما يحيرني فيه ,هو ان using name space ايصا لا يوجد فيها semi-colon

توجد نقطة فاصلة في آخر السطر, انظر جيدا :

using namespace std ;

اقتباس
ولا في اي مكان في البرنامج الا retern بسبب استخدمك int main فلو استخدمت void لاصبح برنامج كامل بدون استخدام السيمي كولون

لا يا أخي الغالي !, الكتابة القياسية للدالة الرئيسية (و التي تدعمها جميع المترجمات) هي كالتالي:

int main(int argc,char *argv[])
{
.....
return 0;
}

أما بقية الكتابات فلا أنصحك بها لأنها غير مدعومة من قبل standard و خصوصا الكتابة التي تحتوي على void

اقتباس
وبإذنه تعالى سأضعة لترون كيفية

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

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 25 سبتمبر 2010 في 22:00

#12

تستطيع إزالة:

return 0;

فهذا لا يضر إن كنت تريد إرجاع صفر و هو الحالة الافتراضية حسب الـ standards. المشكلة الحقيقية هي أننا قمنا بتضمين ملف كـ iostream يحتوي على semicolons.

#13
اقتباس

توجد نقطة فاصلة في آخر السطر, انظر جيدا :

عفوا اخي العزيز يبدو انك لم تعرف مقصدي ,

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

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

وايضا اشكرك ع المعلومات الاضافية .

#14

هلا

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

رغبتك في الوصول إلى حل اللغز لا تعني أن تسلك طرقا ملتويه و تتبع كتابات لا تدعها standard !!!

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 25 سبتمبر 2010 في 22:49

#15

:huh: أخيرا بمساعدة زميلي الفاضل , توصلت الى الحل ,,

اعيد السؤال مرة اخرى ''' هو عمل برنامج باستخدام السي بلس بلس بايجاد مربع الرقم والشرط عدم استخدام السيمي كولون في البرنامج ..

والحل كالتالي ::::

#include<iostream> 
int main( int x )  
{ 
if(std::cout<<"Enter a Number:\t") {}
if(std::cin>>x) {}
if(std::cout<<"The result = "<<x*x) {}
}

نعود معكم ومع الغاز جديدة .

تم تعديل هذه المشاركة بواسطة Eng.S.IDk في 25 سبتمبر 2010 في 23:21

#16

عزيزي, قم بتغيير void إلى int قبل main لكي يصبح الكود صحيحاً.

#17

أعتقد ان في كلا الحالتين صحيح ,

لاني انا استخدمها كثير ولم امر في اي مشاكل ,

مع العلم اني استخدم الفيجوال استوديو , ربما لا يفرق كثير ال .net .

#18

كلام الأخ خالد الشايع صحيح, أنا استخدم الديف و قال انه فيه أخطاء حتى غيرت الـ void إلى int فعمل بدون مشاكل !

و لكن لماذا لا يعمل هذا الكود :

#include<iostream> 
int main( int x )  
{ 
 if(std::cout<<"Enter a Number:\t") 
 if(std::cin>>x) 
 if(std::cout<<"The result = "<<x*x)
}

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 25 سبتمبر 2010 في 23:08

#19
اقتباس

كلام الأخ خالد الشايع صحيح, أنا استخدم الديف و قال انه فيه أخطاء حتى غيرت الـ void إلى int فعمل بدون مشاكل !

كلامك صحيح , مائة بالمئة , ففي الديف يجب ان تكون ال main من نوع int

فأنا استخدم كلا البرنامجين ,

وعندما استخدم الفيجوال استوديو فلا يؤثر ,,

:blush:

وقمت بالتعديل لإذالة اي شك

,

ولك التحية

تم تعديل هذه المشاركة بواسطة Eng.S.IDk في 25 سبتمبر 2010 في 23:23

#20
أحمد المتألق كتب:

كلام الأخ خالد الشايع صحيح, أنا استخدم الديف و قال انه فيه أخطاء حتى غيرت الـ void إلى int فعمل بدون مشاكل !

و لكن لماذا لا يعمل هذا الكود :

#include<iostream> 
int main( int x )  
{ 
 if(std::cout<<"Enter a Number:\t") 
 if(std::cin>>x) 
 if(std::cout<<"The result = "<<x*x)
}

ضع semicolon بعد آخر if

1

سبحان الله وبحمده ... سبحان الله العظيم

#21
اقتباس
ضع semicolon بعد آخر if

أعتقد أن المقصود من اللغز هو عدم استخدام الـ semicolons :P

ضع {} بدلاً من الفاصلة المنقوطة.

#22
اقتباس

أعتقد أن المقصود من اللغز هو عدم استخدام الـ semicolons :P

ضع {} بدلاً من الفاصلة المنقوطة.

هذا صحيح , فهكذا وضعت الحل .

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