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

النقاش حول برنامج القبول المركزي لطلاب السادس اعدادي

بدأه Rasool Micro في 4 أغسطس 2010 · 3 رد · 1,045 مشاهدة · في الذكاء الاصطناعي وتطبيقاته
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

برنامج القبول المركزي برنامج مهم وهو ذكي ايضاً فهو يحاول ترتيب الرغبات حسب المجموع التنافسي.....

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

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

قسمت هذا البرنامج إلى خمسة classes :

الاول:- يعرف كل المتغيرات في البرنامج.

الثاني:- فيه دالة وهمية وهي لإدخال القيم (اسم الطالب، مجموعه، رغباته، مواده ودرجاتها).

الثالث:- وهو ترتيب الطلاب من الاعلى الى الادنى (وهذا هو سر نجاح البرنامج).

الرابع:- وهو ترتيب الرغبات حسب التنافس على المجاميع.

أما الخامس:- فهو لطباعة النتائج.

لكن إذا أدخلت طالبين (على سبيل المثال) وكانا يحملان نفس المجموع التنافسي ولم يبق سوى مقعد واحد في الكلية الواحدة فيجب أن يتنافسا على المواد الخاصة باختصاص الكلية...كيف..؟؟ :blink: :excl:

فإذا كان هناك من هو مستعد للنقاش حول هذه الحالة التي لا بد ان تحصل عند ادخال القيم التي ذكرناها في class الاول....

ملاحظة:-إن هذا البرنامج مكتوب بالسي بلس بلس وبطريقة البرمجة الكيانية وبكل طرقها (Constractor & Deconstractor, scop, Inhertince and polymorphism).

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

central acceptance.zip

#2

ملاحظة1:

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

الوراثه في مفهومها العادي هي علاقة Is-A بين كائنين.. فمثلا الكلاس Print ما هي علاقته مع الكلاس Wishes_ascending حتى تقوم بالوراثه منه؟

قبل تطبيق أي عملية وراثه أسأل السؤال التالي "هل الكائن B يمكن أن يكون ابن للكلاس A" .. "هل الكلاس Print هو ابن Wishes_ascending " الجواب ، لا، حيث لا توجد أي علاقه.

أيضا ما الفائدة من جعل الدالة students دالة polymorphism ؟

ملاحظة2:

الكلاس:

class students_information
{
public:
char Name[100][40],N[40],wish[100][50][40],Wishes[100][40],W[40];
float ave[10],z,subjects[100][7];;
int n,m,x,y,c,h,k,p,d,i,j;
};

غير مصمم بطريقة جيدة.. قم بعمل بكلاس اسمه Student يمثل طالب واحد فقط.. ثم استخدم أي Container (مثلا Vector) لكي تضع أكثر من طالب فيه.. أما بهذه الطريقة فأنت تحصر نفسك في 100 طالب ، وقد تحتاج أحياناً الى أكثر من ذلك وأحياناً الى أقل من ذلك أيضا.

اضافة الى تسمية المتغيرات غير جيدة..اتبع Conventions معين في تسمية المتغيرات ..و حاول أن تكون ذات معنى.. نفس الأمر في تسمية الدوال..

ملاحظة3:

استخدم نقاط القوة في سي++ (مكتبة STL) مثلا string و vector .. وسوف تسهل الكثير في بناء برنامجك..

نعود للسؤال:

اقتباس
لكن إذا أدخلت طالبين (على سبيل المثال) وكانا يحملان نفس المجموع التنافسي ولم يبق سوى مقعد واحد في الكلية الواحدة فيجب أن يتنافسا على المواد الخاصة باختصاص الكلية...كيف..؟؟

لنفرض أن هناك 3 مواد تخصصية بالكلية.. قم بعمل متغير لكل طالب يعتبر كsum .. وستقوم في النهايه بأخذ الطالب ذو الsum الأكبر.

قارن درجة الطالب الأول مع الثاني في المادة الأولى.. قم بزياده الsum بواحد للطالب الأكبر..

واستمر هكذا لل3 مواد..

أرجع الطالب الذي مجموعه أكبر من الأخر

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

بالتوفيق..

1

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

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

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

#3

ماعليش ممكن تشرح المشكله بدون كود ولا شي

وش اللي تبي تسويه بالضبط ؟

#4
Wajdy Essam كتب:

ملاحظة1:

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

الوراثه في مفهومها العادي هي علاقة Is-A بين كائنين.. فمثلا الكلاس Print ما هي علاقته مع الكلاس Wishes_ascending حتى تقوم بالوراثه منه؟

قبل تطبيق أي عملية وراثه أسأل السؤال التالي "هل الكائن B يمكن أن يكون ابن للكلاس A" .. "هل الكلاس Print هو ابن Wishes_ascending " الجواب ، لا، حيث لا توجد أي علاقه.

أيضا ما الفائدة من جعل الدالة students دالة polymorphism ؟

ملاحظة2:

الكلاس:

class students_information
{
public:
char Name[100][40],N[40],wish[100][50][40],Wishes[100][40],W[40];
float ave[10],z,subjects[100][7];;
int n,m,x,y,c,h,k,p,d,i,j;
};

غير مصمم بطريقة جيدة.. قم بعمل بكلاس اسمه Student يمثل طالب واحد فقط.. ثم استخدم أي Container (مثلا Vector) لكي تضع أكثر من طالب فيه.. أما بهذه الطريقة فأنت تحصر نفسك في 100 طالب ، وقد تحتاج أحياناً الى أكثر من ذلك وأحياناً الى أقل من ذلك أيضا.

اضافة الى تسمية المتغيرات غير جيدة..اتبع Conventions معين في تسمية المتغيرات ..و حاول أن تكون ذات معنى.. نفس الأمر في تسمية الدوال..

ملاحظة3:

استخدم نقاط القوة في سي++ (مكتبة STL) مثلا string و vector .. وسوف تسهل الكثير في بناء برنامجك..

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

نرجع الى صلب الموضوع

اقتباس

نعود للسؤال:

لنفرض أن هناك 3 مواد تخصصية بالكلية.. قم بعمل متغير لكل طالب يعتبر كsum .. وستقوم في النهايه بأخذ الطالب ذو الsum الأكبر.

قارن درجة الطالب الأول مع الثاني في المادة الأولى.. قم بزياده الsum بواحد للطالب الأكبر..

واستمر هكذا لل3 مواد..

أرجع الطالب الذي مجموعه أكبر من الأخر

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

بالتوفيق..

هذه الفكرة التي طرحتها قد فكرت بها قبلاً فالمشكلة ليست كيف انافس الطالبين في موادهم الاختصاصية للكلية واعطي المقعد للطالب الاعلى..... ولكن ان امعنت انت النظر في البرنامج وخاصةً في الclass wishes ascending انه كيف اجعل البرنامج يفهم انه هذا الطالب مساوي له في المجموع وعلى شرط انه يوجد مقعد واحد اخير لهما (لا تسئ الفهم ان قدراتي في البرمجة ليست عالية ولكن الامر صعب في مثل هذه الحالة) فالبرنامج يستجاهل الطالب ذو المجموع المساو له وسيكمل البرنامج عمله......

class Wishes_ascending: public students_accepting
{
public:
	void students_wishes()
	{
		d=n/m;
		for(x=0;x<n;++x)
			for(y=0;y<m;++y)
			{
				p=0;
				for(k=0;k<h;++k)
				{
					if(!strcmp(wish[x][y],Wishes[k])) p++;
					if(p==d) break;
				}
				if(p!=d)
				{
					for(i=0;wish[x][y]!='\0';++i)
						Wishes[h]=wish[x][y];
					Wishes[h]='\0';
					h++;
					break;
				}
			}
	}
};

سأحاول ان اجد حلاً لها...وانت ايضاً حاول...

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…