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

بعض الأسئله التقنيه في أساسيات c++

مغلق
بدأه زائر في 27 مايو 2005 · 7 رد · 650 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السـلام عليكم

أحببت اني أسأل بعض الأسئله واتمنى ان اكون خفيف عليك

البعض من الناس لايحب الطريقه

for(int i=0;i<10;i++)

ويفضلون كتابة تعريف int i خارج اللوب ثم يقومون باستعماله بشكل عادي في اللوب . .

ثم بالنسبه لreturn في داله معينه

لايحبون ان تكتب أكثر من return في نفس الداله

مثلاً :

bool Return()
{
	int i;
cin>>i;
if(i==1)
return true;
else
return false;
}

فلابد أن تكتب return واحده ، بتعريف متغير boolean وتوجيهه إلى الحل الصحيح من ثم ارجاعه

وأنا أجد أعضاء هيئة تدريس يلزمون طلابهـُم بهذا الشئ

وينقصون درجات عليه .

مع أنه الحل صحيح بكل الأحوال

ثم بالنسبـه ل break

البعض لايحببها ولا يستخدمها إلا مع switch

ولايحب استعمالها في حالات أخرى , ,

لا أدري مالأسباب فكلا ال3 صحيحه

ولكن أعتقد أن الأمر يكمن في اتعاب الكومباير وجعله يعمل أشياء لافائدة لها

مثل overhead

أتمنى الاستفاضه بهذه الأمور ، وغيرها ان وجد . .

#2

بالنسبة لهذا الكود

for(int i=0;i<10;i++)

فهو خاص بال ++C و ليس بال C لانه في ال C لم يكن مسموحا بتعرف المتغير i خلال الloop و كان يجب تعريف قبل الloop

bool Return()
{
int i;
cin>>i;
if(i==1)
return true;
else
return false;
}

بالنسبة لهذا الكود فايضا يمكنك ان تحذف الelse منه ليصبح

bool Return()
{
int i;
cin>>i;
if(i==1)
return true;
return false;
}

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

استخدام الbreak في الloops مهم جدا بالذات عندما تكون الloop هدفها البحث عن شئ معين فيمجرد ان تجد ماتبحث عنه فانك تنهي الloop فلا داعي الى ان تنتظر الى نهاية الloop و تضيع مزيدا من الوقت

تم تعديل هذه المشاركة بواسطة bashmohandes في 27 مايو 2005 في 19:19

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#3

شكراً لك أخي على هذا التواصل ،

بالنسبه للأمر الأول ،

اعلم ذلك ، ولكن انا أتحدث عن اكواد السي++ المختلفه ، ففي بعض الكتب

مثل Dietel how to program يتبع طريقة تعريف المتغير داخل اللوب ,

وفي كتب ثانيه لاتستحب هذا الشئ مع انها كتب سي++ , ,

القضيه باعتقادي تقنيه أكثر من أنها فرق بين لغتيـن

بالنسبه للأمر الثاني فأنا كتبت الكود على عجاله

والقضيه ليست في ال else التي لم أنتبه لها

اعتقد أن سبب عدم الاستحباب هو في عميلة tracing للكود فقط !

أما الأمر الثالث فبالعكس يمكننا أن نفعل هذا بدون break

مثلاً البحث عن قيمه 5 في مصفوفه a :

void main()
{

	int a[10]={3,16,32,41,15,26,51,18,9,10};

	bool r=true;
	int i=0;
	while(i<10&&r)
	{
  if(a==5)
 	 r=false;
  i++;
	}
  if(r)
 	 cout<<"Not Found"<<endl;
  else
 	 cout<<"Found"<<endl;
}

قمنا بالبحث بدون break وهكذا في العمليات الأخرى فقط نوجه المتغير إلى الحل الصحيح

شكراً لك اخي على تواصلك

مشاء الله عليك شعله في النشاط

#4

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

حلوه هالخواطر السريعة ..

اقتباس
أتمنى الاستفاضه بهذه الأمور ، وغيرها ان وجد . .

عندي نقطة اخرى ..

البعض مايفهم او يخاف من استخدام ! ورأيت ان من اهم استخداماته عند اكتشاف الاخطاء

if(!func())
{
cout<<"wrong ";
return 0;
}

وهنا للمعلومية .. امران :

تنادي الدالة ..

اذا كانت قيمة الدالة خطأ يعني 0 عندها اطبع خطأ ,واخرج من البرنامج ..

ونقطة اخرى وهي

if(func())
{
cout<<"correct";
}

يعني اذا كانت الدالة صحيحة اطبع صحيح

الامر سهل الا انه يوجد من لم يفهمه ...

هذا اللي عندي

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

بالنسبة لتعريف الcounter او العداد داخل الloop و ليس خارجها فهناك مشكلة بسيطة

اولا في الstandard C++ Compilers مثل ++g الخاص بGNU فانك عندما تقوم بعمل

 for(int i=0; i<10; i++)

فان المتغير i صالح داخل الloop فقط اما خارجها فهو غير معرف و اقصد خارجها اي بعدها مثل

 for(int i=0; i<10; i++)
{
}
cout<<i<<endl;

فان في المثال السبق سيحدث compiler error ان ال i غير معرفة في الcout

و لكن المشكلة ان اشهر compiler في العالم و هو الVisual C++ of Microsoft لا يطبق هذا المبدأ في جميع اصداراته حتى نسخة 6 و اذكر انني في احدى مسابقات البرمجة خسرت 3 نقاط بسبب هذا لاني كنت اعمل على Visual C و كان البرنامج يعمل بكفاءة و عندما قمت بعمل submit للمسألة على الserver ظهر compiler error و هذا لان الcompiler على الserver كان ++g

اما في الVisual C++.net فانه اصبح يدعم هذه الخاصية و اصبح يتوافق مع الstandards

و لكن اذا قمت بتعريف الi قبل الloop فانك ستجدها معرفة بعدها دائما و ايضا اذا كنت تقوم بعملية searching في array مثلا و كنت تريد ان تعرف الindex الذي وجدت فيه ماتبحث عنه فانك اذا عرفت الi قبل الloop و استخدمت break فستجد ان الi يحمل الindex الذي تبحث عنه بكل بساطة . بالطبع يمكنك ان تعرف الindex بطرق اخرى و لكني اجد هذه الطريقة اسهل و اسرع

تم تعديل هذه المشاركة بواسطة bashmohandes في 27 مايو 2005 في 22:38

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#6

هـلا اخوي الشمري

صحيح ماقلته

واشكرك على مشاركتك ،

أخوي باش مهندس يعني

المسأله مسألة طرق وليس هناك أختلاف :blink:

يعني مالها شغل بالميموري بالكمبايلر :)

ألف شكر لتعاونكم اخواني ، ،

#7
 bool r=true;
int i=0;
while(i<10&&r)
{
 if(a==5)
  r=false;
 i++;
}

في هذا الكود استخدمت متغير زيادة و ايضا condition زيادة

انا اعرف ان هذا قليل جدا لا يكاد يذكر و لكن من مميزات المبرمج المضحكة

ان المبرمج القوي هو المبرمج البخيل الذي ماوجد فرصة لتوفير بايت واحد الا استغلها

Sometimes programmer sees the memory as it is made of GOLD

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

بصراحة يا أخ عيسى ... اساتذتك معقدين زيادة عن اللزوم ..

المسألة مسألة style يعني كل واحد يكتب كود براحته .. في ناس تكتب بطريقة معينة و ناس ما تحب تكتب بتلك الطريقة.

بالنسبة لي, طريقة ارجاع الـboolean اللتي يريدها منكم اعضاء هيئة التدريس سخيفة و مالهة لازمة .. و سخافة منهم ان ينقصون درجات للشخص اللي ما يتبع اسلوبهم في الكود, يعني كقاية الحكومات تكبت حرياتنا .. كمان الاساتذة؟ :P

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

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