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

أريد سؤال أو مثال على enumeration

مغلق
بدأه المشتاقة للرحمن في 11 مايو 2007 · 6 رد · 1,160 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أثابكم الله من لديه تمرين أو مثال على enum ياليت يكتبه..

هل علامة الضرب و القسمة و باقي القسمة مقدمة على الطرح و الجمع في جميع الأحوال؟

#2

اختي الكريمة المشتاقه للرحمن

الـ enum في السي والسي ++ هي عبارة عن تعريف مجموعة من الثوابت من نوع int

ولقد كانت الطريقة التقليدية لعمل ذلك في لغة السي كالتالي

#define RED = 0;
#define GREEN = 1;
#define BLUE = 2;

ولكن تم ابتكار او اعتماد طريقة بديله عن ذلك وهي الـ enumeration

وتكون كالتالي

enum color {RED, GREEN, BLUE};

ملاحظه: عنما لا تعطين قيم لكل متغير فان الكمبايلر بشكل افتراضي راح يعطي قيم بالتسلسي من صفر الي عدد المتغيرات ناقص 1

يعني لوك كان عندك 5 متغيرات راح تكون القيم من صفر الى 4

واليك كيفية إعطاء قيم

enum color {RED = 10, GREEN = 100, BLUE=1000};

اليك المثال التالي:

#include <iostream.h>
#include <conio.h>

enum color {RED, GREEN, BLUE};

void main () {	
	cout << RED << endl;
}
#3

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

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

enum Color {Red,Green,Blue = 7,Yellow,White};

الآن الثابت Red و Green لهما القيم 0, 1 تسلسلياً.

أما الثابت Blue فهو بكل وضوح له القيمة 7, إذاً سيقوم الجامع بتعين قيمة 8 و 9 تسلسلياً لكل من الثوابت Yellow و White

تم تعديل هذه المشاركة بواسطة العاشر في 14 مايو 2007 في 19:13

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

تبارك الذي بيده المُلك و هو على كل شيء قدير(1) الذي خلق الموت و الحياة لِيبْلُوَكُم أيّكُم أحسنُ عملاً و هُو العزيزُ الغفور(2) الذي خلق سبع سماوات طباقاً مّا ترى في خلق الرحمن من تفاوُت فارجع البصر هل ترى من فُطُور(3) ثم ارجع البصر كرّتيْن ينقلِب إليكَ البصرُ خاسِئاً و هو حسير(4)...

الآية...سورة المُلك

#4

تم تعديل هذه المشاركة بواسطة العاشر في 14 مايو 2007 في 19:05

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

تبارك الذي بيده المُلك و هو على كل شيء قدير(1) الذي خلق الموت و الحياة لِيبْلُوَكُم أيّكُم أحسنُ عملاً و هُو العزيزُ الغفور(2) الذي خلق سبع سماوات طباقاً مّا ترى في خلق الرحمن من تفاوُت فارجع البصر هل ترى من فُطُور(3) ثم ارجع البصر كرّتيْن ينقلِب إليكَ البصرُ خاسِئاً و هو حسير(4)...

الآية...سورة المُلك

#5

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

إضافة بسيطة لما قاله الأخوة ,, enum أو التعداد لم يتم اختراعه من أجل حمل القيم فقط بل تم استخدامه لتجنب مشكلة شائعة جداً و هي كالتالي ,,

لدينا الدالة التالية التي تقوم برسم مربع على سبيل المثال :

void DrawSquare ( int Color );

و سنمرر لها قيمة اللون فقط ,,

ماذا لو مررنا لها قيمة غير معرفة لدينا مثلاً في الدالة ,, لو فرضنا أن لدينا 5 ألوان فقط ؟

هنا يأتي دور enum حيث يمكننا تمريرها للدالة على اعتبارها متغير و هي ليست كذلك في الحقيقة و ما سيمرر هو ثابت فقط لا غير ,,

enum Color {
	Black,
	White,
	Red,
	Green,
	Blue
}
void DrawSquare ( Color Clr );

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

تحياتي ,,

#6

يا سلام عليك يا خالد نورتني الله ينور عليك.

ايضاً يمكننا استخدام التعداد enum بدون تعين اسم له. تستخدم هذه التقنية غالباً في إنشاء ثوابت داخل طبقة class معينة خاصة بلغة سي++. البرنامج التالي يشرح كيفية انشاء enum على المجال العام Global Scope, و لاحظ انه بدون اسم.

ثم لاحظوا داخل جسد الإجراء الرئيسي main كيف استخدمنا احد ثوابت هذا التعداد مباشرة لخلطه مع قيمة اخرى لإنتاج لون جديد(خيال برمجي فقط).

البرنامج التالي مكتوب بلغة سي++ و لكن نفس المفهوم بلغة سي

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


//The following is a global enum without a name
//just to hold a set of constants.
enum 
{
   RED,
   GREEN,
   BLUE,
   YELLOW
};

int main()
{
   //We use one of the global constants above
   //to combine it with anothor value.
   int compColor = RED << 0X00FF00;

   //print the compound color on the screen.
   cout << "The new Color is: " << compColor << endl;

   return 0;
}

لا تهتموا إلى باقي التفاصيل...المهم اننا نرى كيف نستخدم ثوابت موجودة داخل enum مباشرة و كيف يمكننا تجاهل الإسم.

إذا تُرى لماذا نضطر إلى تعين اسم للتعداد في بعض الأحيان؟

هذا إذا كنا نخطط على انشاء متغيرات في وقت لاحق في البرنامج تحمل قيم ثوابت هذا التعدادenum.

أو كما أشار لنا السيد خالد سابقاً,,,و هو في عملية تمرير الثوابت إلى إجراء ما, فهنا ينبغي تعيين اسم عام لتعداد الثوابت تلك.

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

على سبيل المثال تخيل أننا تجاهلنا تعين اسم للتعداد في مثال خالد السابق و جعلناه على النحو التالي:

enum
{
	Black,
	White,
	Red,
	Green,
	Blue
};
void DrawSquare ( Color Clr );//Error: undefined Color name

سيقوم الجامع في هذه الحالة بقذف رسالة خطأ, تُفيد أن Color غير معروف في البرنامج. و بالتالي لن نستطيع تعين تعداد يُمرر إلى الإجراء فيجب كتابة و تعين اسم لهذا التعداد

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

القطعة التالية تبين كيفية انشاء متغيرات من enum بدون اسم و لكن هذا مباشرة في التعيين و على الفور بعد إنهاء القوس المجعد و قبل الفاصلة المنقوطة من تعريف التعداد. كالتالي

enum 
{
	Black,
	White,
	Red,
	Green,
	Blue
}brushColor, penColor, hairColor, eyeColor;// a set of enum variables.

------

هذا و بالله التوفيق

تم تعديل هذه المشاركة بواسطة العاشر في 15 مايو 2007 في 15:45

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

تبارك الذي بيده المُلك و هو على كل شيء قدير(1) الذي خلق الموت و الحياة لِيبْلُوَكُم أيّكُم أحسنُ عملاً و هُو العزيزُ الغفور(2) الذي خلق سبع سماوات طباقاً مّا ترى في خلق الرحمن من تفاوُت فارجع البصر هل ترى من فُطُور(3) ثم ارجع البصر كرّتيْن ينقلِب إليكَ البصرُ خاسِئاً و هو حسير(4)...

الآية...سورة المُلك

#7

سيدي العزيز حبيت اضيف معلومة اضن انها بسيطة وهي العمليات الحسابية وهي تكون على النحو التالي

static_cast<enum name>(اسم الاوبجكت+العدد المراد الاضافة اليه)

وانا قد كتبت مثال جاهز وهو كالتالي

#include <iostream>

#include <string>

using namespace std;

enum cars {BMW = 1, MITSUBISHI , FORD , TOYOTA , HONDA};

void main()

{

for (cars A = BMW ; A < HONDA ; A = static_cast<cars>(A+1))

{

switch (A)

{

case 1:

cout << A <<" - BMW" << endl;

break;

case 2:

cout << A << " - HONDA" << endl;

break;

case 3:

cout << A << " - FORD" << endl;

break;

case 4:

cout << A << " - TOYOTA" << endl;

break;

case 5:

cout << A << " - HONDA " << endl;

break;

}

}

cout << endl << endl;

string name ;

int cars;

cout << "please sir insert your name ? ";

getline(cin , name);

cout << "please insert your choice in this cars ?";

cin >> cars;

switch (cars)

{

case 1:

cout << name << " likes bmw " << endl;

break;

case 2:

cout << name << " likes honda " << endl;

break;

case 3:

cout << name << " likes ford" << endl;

break;

case 4:

cout << name << " likes toyota" << endl;

break;

case 5:

cout << name << " likes honda" << endl;

break;

default:

cout << "error in insert !!!! . " << endl;

}

}

ارجو ان تكون قد فهمت الموضوع

main.cpp

تم تعديل هذه المشاركة بواسطة big boss 1988 في 19 مايو 2007 في 20:48

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

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