في 04 سبتمبر 2010 05:42 م، عقد algeria حاجبيه بتفكير وقال:
إخواني أتمنى شرحا مختصرا ودقيقا للدوال التاليوفي 04 سبتمبر 2010 05:42 م، قال algeria متحمساً:
Enumenum Day { Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday};
بما اننا لم نعطي لهذه الاسماء قيم، فانها ستاخذ القيم التالي :Saturday = 0
Sunday = 1
Monday = 2
Tuesday = 3
Wednesday= 4
Thursday = 5
Friday = 6
لكن يمكن للمبرمج تحديد اي قيم يريدها اثناء التعريف :enum Day { Saturday = 10 ,Sunday= 925,Monday = 20,Tuesday = 13 ,Wednesday = 25,Thursday = 0,Friday = 12};
حسنا كمثال تطبيقي، افترض اننا نبرمج مشغل موسيقى ، فان المشغل سيكون لديه احدى الحالات التالية :int PlayerState;
....
if ( PlayerState == 0 ) player.play(music);
if ( PlayerState == 1 ) player.pause(music);
if ( PlayerState == 2 ) player.stop(music);
الكود سيعمل لكنك بعد سنة تريد مثلا تطوير البرنامج فمن الممكن ان تكون قد نسيت ماهو دور كل قيمة لكن اذا استعملت الـ Enumeration سيسهل عليك الامر انظر :enum PlayerState { Stop = 0, Play = 1, Pause = 2};
int main(){
PlayerState ThePlayerState;
....
if ( PlayerState == Play ) player.play(music);
if ( PlayerState == Pause ) player.pause(music);
if ( PlayerState == Stop ) player.stop(music);
}
int joy_key;
if( joy_key = 0 ) //do something 0
if( joy_key = 1 ) //do something 1
if( joy_key = 2 ) //do something 2
if( joy_key = 3 ) //do something 3
if( joy_key = 4 ) //do something 4
في هذا المثال من الصعب جدا معرفة اي زر يرمز لاي قيمة.enum PadKey { left=0,right=1,up=2,down=3,a=4,b=5,c=6,d=7,start=8, select=9};
int main(){
PadKey joy_key;
......
if( joy_key = left ) //do something 0
if( joy_key = right ) //do something 1
if( joy_key = up ) //do something 2
if( joy_key = down ) //do something 3
if( joy_key = start ) //do something 4
int main ( void){
int WindowHigh;
int WindowWidth;
int WindowMaxColor;
int WindowColor;
string WindowTitle
....
}
حسنا لنضف اللاعب، ماهي خصائصه ؟int main ( void){
int WindowHigh;
int WindowWidth;
int WindowMaxColor;
int WindowColor;
string WindowTitle;
int PlayerLife;
int PlayerPower;
int PlayerVeloety;
String PalyerName;
IMAGE PlayerSprite;
SOUND PlayerSound;
....
}
sturct Window {
int high;
int width;
int MaxColor;
int Color;
string Title
};
بهذه الطريقة كلما انشئنا متغيرا من نوع : Window فاننا نملك المعلومات الكافية لانشاء نافذة دون اللجوء الى انشاء كامل متغيراتها.sturct Player {
int Life;
int Power;
int Veloety;
String Name;
IMAGE Sprite;
SOUND Sound;
};
int main(void){
Player player1;
player player2;
...
// when player2 attack player1
player1.life = -10;
player1.Sound = hit_sound;
player2.power = -5;
player2.Sprite = winer_sprite;
}
#include
#include
using namespace std;
struct alg{int a=1,b=2,c=3,d=4,String dz='alger'};
enum dz{a='algeria',b='palestin',c='dz',d='alger'};
int main(){
alg alg1;//استدعاء الستريكت
cout<<alg1.a<<endl;//إظهار قيمة a
dz dz1;//استدعاء إنيم
cout<<dz1.d<<endl;//إظهار قيمة d
}
enum PadKey { left=0,right=1,up=2,down=3,a=4,b=5,c=6,d=7,start=8, select=9};
1- enum مثل المصفوفات array ؟؟ أليس كذلكString enum PadKey{left="l",right="r",up='u',down='d'};
enum PadKey{left=213,right="r",up=00,down='d'};
وفي 04 سبتمبر 2010 11:56 م، ظهر شبح ابتسامة على وجه انس وهو يقول:
كمثال : ملف شخصية يزن 30 ميغابايت. لولا اننا نقوم بتقديم هذا الملف الى الدوال عن طريق المؤشرات اي بواسطة العنوان حتى تعمل عليه الدالة مباشرة، فان ذلك سيؤدي الى انشاء نسخة بنفس الحجم كل مرة.أما في 05 سبتمبر 2010 04:52 ص، فقد تنهد algeria بارتياح وهو يرد:
جربت المثال التالي , لكن تظهر لي أخطاءstruct Player{
int Life;
int Power;
int Veloety;
String Name;
IMAGE Sprite;
SOUND Sound;
};
لاحظ الـ ; في نهاية كل متغير لكن انظر ماذا فعلت انت :struct alg{int a=1,b=2,c=3,d=4,String dz='alger'};
بالاظافة الى ذلك فممنوع ان تعطي قيما للمتغيرات التي تعرفها هنا.لان القيم سيملئها المستخدم لاحقا.struct alg{
int a,b,c,d;
String dz;
};
int main(){
alg test;
test.a = 0;
test.b = 1;
test.c = 2;
test.d = 3;
test.dz= "Alger";
}
في 05 سبتمبر 2010 04:52 ص، غمغم algeria باستغراب قائلاً:
1- enum مثل المصفوفات array ؟؟ أليس كذلكenum {yes,no};
و لم اقل ان القيم عشوائية، بل قلت انك اذا لم تحدد القيم لكل لسم، سيقوم المترجم باعطاء القيمة 0 لاول اسم الى غاية القيمة N للاسم الاخير.enum {yes,no};
......
if ( playerIsDead == no ) dosomthing();
و نحصل على نفس النتيجة بـ if ( playerIsDead == 1 ) dosomthing();
كلاهما يعمل لكن الاول اسهل للفهم و القراءة.بتاريخ 05 سبتمبر 2010 04:52 ص، قطب algeria حاجبيه بشدة وهو يقول:
struct مثل classلكن فيما تختلف (تنقص) عنهاوفي 05 سبتمبر 2010 04:52 ص، أعرب algeria عن رأيه بالموقف كالآتي:
- أنت قلت أنه يتم ترقيمها عشوائيا , فلماذا رقمتهاenum bool {false,true};
-----------------------
enum bool {true = 1, false = 0};
if ( continue == true ) continueTheGame();
------------------------------------------
if ( continue == 1 ) ContinueTheGame();
نفس النتيجة.في 05 سبتمبر 2010 04:52 ص، قال algeria بهدوء وتؤدة:
- إن أردت أن تعرف نوع تلك المتغيرات بـ (int/float/String..) فهل تكتبها هكذافي 05 سبتمبر 2010 04:52 ص، عقد algeria حاجبيه بتفكير وقال:
String enum PadKey{left="l",right="r",up='u',down='d'};#define left "l"
#define right"r"
#define up "u"
#define down"d"
وفي 05 سبتمبر 2010 04:52 ص، قال algeria متحمساً:
إن كان صحيحا فماذا لو كنت تريد تعريفها بنوعين مثلا (int و Stringوفي 05 سبتمبر 2010 04:52 ص، ظهر شبح ابتسامة على وجه algeria وهو يقول:
في المؤشرات لم أفهم هذا جيدا#include
#include
using namespace std;
struct alger{
int a,b,c,d;
String dz;
};
int main(){
alger alg;
alger alg2;
alg.a=0;alg2.a=00;
alg.b=1;alg2.b=11;
alg.c=2;alg2.c=22;
alg.d=3;alg2.d=33;
alg.dz="Alger";alg2.dz="algeria";
cout<<alg.dz<<"\n"<<alg2.c<<endl;
}
enum {yes,no};
if ( playerIsDead == no ) dosomthing();
+if(a==no)x++;
if(b==yes)x--;
if(Play==yes)Do();
if(PlayerIsDead==yes)restart();
وأيضا من أين تأتي قيمة noenum{yes,no};
if(playerIsDead==no)dosomthing();
متى ستكون playerIsDead تساوي noفي 05 سبتمبر 2010 03:43 م، غمغم انس باستغراب قائلاً:
خطا، Enum لا تسمح لك الا باعطاء اسماء لقيم معينة.اسماء اخي و ليس سلسلة حروف.بتاريخ 05 سبتمبر 2010 05:02 م، قطب algeria حاجبيه بشدة وهو يقول:
لماذا أنا مخطئ هناوفي 05 سبتمبر 2010 05:02 م، أعرب algeria عن رأيه بالموقف كالآتي:
في Enumما علاقة playerIsDead بـ noif ( GameContinue == Yes) continueGame();
if ( GameContinue == No ) quitGame();
في 05 سبتمبر 2010 05:02 م، قال algeria بهدوء وتؤدة:
لا يوجد شيء هنا يحدد إحدى قيم enumفي 05 سبتمبر 2010 02:43 م، عقد انس حاجبيه بتفكير وقال:
و لم اقل ان القيم عشوائية، بل قلت انك اذا لم تحدد القيم لكل لسم، سيقوم المترجم باعطاء القيمة 0 لاول اسم الى غاية القيمة N للاسم الاخير.وفي 05 سبتمبر 2010 02:43 م، قال انس متحمساً:
لا، يتم ترقيمها من 0 الى N عدد اذا لم يحدد المبرمج القيم.اما اذا حددها فيحددها كيفما يشاء.رقمتها حتى تخدم مصلحة برنامجي او لتخدم ما السبب الذي انشئتها لها.اليك مثال :في لغة السي، لا يوجد متغيرات من نوع Boolean ذات القيم صحيح او خطأ.اذا اردنا الحصول على نتيجة مماثلة نستعمل الـ Enum بالشكل التالي :enum bool {false,true};-----------------------enum bool {true = 1, false = 0};لاحظ الان، تعريفين مختلفين لكن نتيجة و اداء واحد.وفي 05 سبتمبر 2010 05:02 م، ظهر شبح ابتسامة على وجه algeria وهو يقول:
ما هي الأسماء وماهي سلسلة الحروفint variable01
char charactere;
string my_string_name;
سلسة الحروف و هي معطيات عبارة عن حروف يمكن التعامل معها :string my_string="this is a string"
أما في 05 سبتمبر 2010 02:43 م، فقد تنهد انس بارتياح وهو يرد:
و لم اقل ان القيم عشوائية، بل قلت انك اذا لم تحدد القيم لكل لسم، سيقوم المترجم باعطاء القيمة 0 لاول اسم الى غاية القيمة N للاسم الاخير.في المثال السابق : yes = 0noint joy_key;
if( joy_key = 0 ) //do something 0
if( joy_key = 1 ) //do something 1
if( joy_key = 2 ) //do something 2
if( joy_key = 3 ) //do something 3
if( joy_key = 4 ) //do something 4
Write Code Here
هل تفهم هذا الكود ؟
وفي 06 سبتمبر 2010 02:31 م، ظهر شبح ابتسامة على وجه algeria وهو يقول:
من أين له أن يساوي إحدى قيم enumif( joy_key = 15471 ) //do something 0
هذا يعني اننا ضغطنا على الزر aenum {left,right,up,down,a=15471,b=201135,c=87965}
وبهذه الطريقة فان هذا الكود :if( joy_key == a ) //do something 0
if( joy_key == b ) //do something 1
if( joy_key == c ) //do something 2
if( joy_key == up ) //do something 3
if( joy_key == down ) //do something 4
if( joy_key == 15471 ) //do something 0
if( joy_key == 201135 ) //do something 1
if( joy_key == 87965 ) //do something 2
if( joy_key == 2 ) //do something 3
if( joy_key == 3 ) //do something 4
اليس كذلك ؟