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

ظهور إستثناء ... يعطلني عن إكمال عملي

بدأه الزمن الجميل في 5 يونيو 2010 · 17 رد · 992 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام من الله عليكم ورحمته وبركاته ....

مساؤكم عذوبة أخوتي ....

قبل عدة أيام قم بتنزيل موضوع بخصوص مشكلة الأخطاء الظاهرة في الكود ...وقام الأخ محمد (جزاه الله عنا كل خير ) بمساعدتي في هذا الأمر ...

اما اليوم فموضوعي يشابه ولايشابه موضعي السابق :

أقصد هو مشابه للكود السابق لكن أجريت عليه بعض التغيرات ... ولامشاكل هناك والحمدلله ...

لكن أثناء قيامي بعمل رن للبرنامج يظهر لي أكسبشن

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

الإكسبشن الظاهر هو :

A first chance exception of type 'System.InvalidOperationException' occurred in System.dll

أتمنى ان أجد منكم الفائدة ... في توجيهي مالذي يجب علي إصلاحه ..

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

جزيتم خيرا ....

ConsoleApplication1(2).rar

#2

يظهر الإستثناء بسبب إضافة LinkedListNode إلى أكثر من LinkedList في نفس الوقت ...

هذا جزء من كودك

   neighbor1.tower2.AddFirst(neighbor1.tower1.First);
                    neighbor1.tower1.RemoveFirst();
                    neighbors.AddLast(neighbor1);

ما تقومين به هو إضافة العقدة الأولى neighbor1.tower1.First إلى السلسلة tower2 ، و بإعتبار أنها مازالت موجودة في السلسلة tower1 فهذا ما يؤدي لظهور الإستثناء ..

ما يجب القيام به :

تصحيح إلى :

LinkedListNode<int> first = neighbor1.tower1.First;
                    neighbor1.tower1.RemoveFirst();
                    neighbor1.tower2.AddFirst(first);

                    neighbors.AddLast(neighbor1);

اولاً :

1- الإحتفاظ بالعقدة الأولى في السلسلة tower1 :

LinkedListNode<int> first = neighbor1.tower1.First;

2- إزالتها أولا من السلسلة tower1 ...

       neighbor1.tower1.RemoveFirst();

3-إضافتها إلى السلسلة tower2>>>

هذا التصحيح يجب تطبيقه على جميع أجزاء الكود لديك ...

بالتوفيق

#3

ردت الي روحي من جديد ... بعد مشاهدة ردك أخي المهندس حسام ...

لاحرمك الله الأجر .... أشكرك من الأعماق على التوضيح .....

سأقوم الأن بالتعديل .... وبإذن الله لي عودة لكن لتبشيركم ..

شكرااا مرة أخرى .

#4

م. حســــــام أجريت جميع التغيرات المطلوبة + قمت بإضافة try ,cach حتى تظهر لي ان كان هناك اكسبشن أخر

وكانت النتيجة ...بأنه لم تظهر لي أي اكسبشن آخر ...

لكن مازالت مشكلة النافذه المسماه vshost.exe has stopped working

وتجبرني على التوقف ......

سؤال آخر :هل من الضروري تغيرر first في كل جملة شرطية (لايشمل الإلس) واستبالها بمتغير آخر أو لايهم ....فقط أستخدم first في كل البرنامج ..

رأيك يهمني جدااا استاذي

#5

إرفقي ملف الكود بعد التصحيح ...

#6

أرفقت الملف ..... شكراا مقدما لك أستاذي لتجاوبك معي

ConsoleApplication1(2).rar

#7

يتم إنشاء الإستثناء من قبلك في هذا السطر :

if (neighbor2.tower1.First.Value < neighbor2.tower3.First.Value) throw new Exception();

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

بالتوفيق

#8

:wacko: :wacko:

لك جل شكري وتقديري أستاذ حسام

#9

هل تحتاجين للعبارة throw new Exception بعد الشرط If

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

أحذفي هذه العبارة من كل الشروط وسيعمل ان شاء الله

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#10

أستاذي was_hal

لا لست بحاجة لهذا الأمر لذا قمت بما طلبته مني ....لكن مازالت مشكلة النافذه المسماه vshost.exe has stopped working تظهر لي ..

سؤالي هل حين قيامك بعمل رن لبرنامجي تظهر لكم النافذة الآنفة الذكر .... أما فقط المشكلة من جهازي أما جهازي ...

أتمنى أن اجد إجابة لتساؤلي ...

وأخيراااااا اختفت النافذة ......

لكن بقيت المشكلة الأكبر لايوجد أوتبت أعتقد بأن في الكود مشكلة ما ... :wacko: ...<<< ألهمني صبراا يارب على هالبرنامج ..

#11

لا لم تظهر عندي النافذة

ولكن لا يوجد تنفيذ على الشاشة

بصراحة أنا لم أفهم اصلا ما هو هذا البرنامج هل هي خوارزمية DFS للرسم على ما اذكر :huh:

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#12

أهلا بعودتك أستاذي سوف أشرح لك البرنامج بالتفصيل هو عبارة عن لعبة هاوني تاور

بحيت تحتوي على 3 تاور ولتكن تاور a ,تاورb ,وتاورc

في البداية سيكون تاور a محتوي على 3 ديسكات مرتبة من الأسفل للأعلى بالشكل التالي

الديسك الأكبر سيكون بالأسفل يليه الديسك الأوسط سيكون في المنتصف يليه الديسك الأصغر في الأعلى .

أما يقية التاور فستكون خالية من الديسكات المطلوب ايصال هذه الديسكات الى التاورc مرتبة بنفس الترتيب الذي كان عليه فيA

في كل خطوة يسمح لي فقط بنقل ديسك واحد الى أي تاور بشرط أن يكون الديسك الصغير في الأعلى ...

وهكذا حتى نصل لـc

توضيح للمصطلحات Depth-first search (DFS) هنا ياخذ النود ثم يبحث في أولادها ( في العمق)

IDS iterative depth first

BFS Breadth-first search هنا ياخذ النود ليفل باي ليفل ( يبحث في جيرانها)

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

كيفية الربط بين هالشيئن يوضحها هالرابط

http://en.wikipedia.org/wiki/Depth-first_search وتوجد جميع الخوازميات في القائمة اليمنى

هنا عملية تمثيل وتحويل الديسكات الى نود http://en.wikipedia.org/wiki/Tower_of_Hanoi

#13

جزاك الله خيرا .. على هذا التوضيح

تذكرت اثنين منها DFS و BFS واذكر اني طبقتها بال ++C منذ سنوات

تحتاج لتركيز عند الحل فقط ... وسنساعدك ان شاء الله

تم تعديل هذه المشاركة بواسطة was_hal في 6 يونيو 2010 في 14:32

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#14

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

شكرا لأنك شددت من أزري ....

هو يحتاج كل التركيز لأنه برمجي بحت .... ومتخصص أكثر في الداتا ستركشر ...

لكن من أتي بالتركيز ... وأنا لم انتهي بعد من تنفيذ مشروع تخرجي الذي لم يبقى عليى تسليمه سوى اسبوعين ...

وجاء هذا البرنامج ليزيد من الطين بله .....

المشكلة الكبرى هي الوقت الوقت والوقت ..

ولكن ثقتي بان ربي سيفرجها كبيرة..

شكرا كبيرة لك أستاذي على وقفتك معي .... أثابك الله .

#15

قمت بتعديل كود أول خوارزمية كان هناك خطأ في الشرط.. الأن يعمل ولكن لم يعثر على قيمة ..:huh:

 public virtual bool depthFirst(Sol start, Sol goal)
 	{
 	Stack<Sol> nextStack = new Stack<Sol>();
 	Stack<Sol> traversed = new Stack<Sol>();

 	bool found = false;

 	start.depth = 0;
 	nextStack.Push(start);

 	while(nextStack.Count > 0)
 	{
 	//Dequeue next State for comparison
 	//And add it 2 list of traversed States
 	Sol sol = nextStack.Pop();


 	DFS.AddFirst("poped State:" + sol.ToString() + "level " + sol.depth);


 	traversed.Push(sol);


 	if (sol.Equals(goal))
 	{
 	found = true;
 	DFS.AddFirst("Goal:" + sol.ToString());
 	break;
 	}
 	else
 	{

 	sol.getneighbors();
 	foreach (Sol neighbor in sol.neighbors)
 	{
 	if(!traversed.Contains(neighbor) && nextStack.Contains(neighbor))
 	//if (!neighbor.containedin(traversed) && !neighbor.containedin(nextStack))
 	{
 	neighbor.depth = sol.depth + 1;
 	nextStack.Push(neighbor);
 	}



 	}
 	}

 	}
 	return found;



 	}

وأيضا عدلت الكود التالي .. لا تستخدمي While لان هذا يؤدي الى الدخول في حلقة غير منتهية

 if (userinput.Equals("DFS")|| userinput.Equals("dfs") )
		 	{
		 		solution.depthFirst(Des,Goal);
 	if(Sol.DFS.Count != 0)
 	{
 	string R = Sol.DFS.First();
		 		 	Console.WriteLine(R);
 	Console.ReadLine();

 	}
		 	}//end if

بالتوفيق

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#16

أشكرك أخي وأستاذي بحجم أكبر شيء في هذه الدنيـــــــــا .....

أثابك الله وزادك في علمك ,,,,, اللهم آمين ....

* * * *

قمت بإضافة تعديلك لكن لدي سؤال أثناء الرن واختيا dfs تظهر أسطر عديدة .... هل هذا ماكنت تقصد بأنه لايعثر على قيمة ؟؟؟؟

* * * * *

وفقك الإله وأسعدك سعادة لاشقاء بعدها

#17

آميييييين

اقتباس
قمت بإضافة تعديلك لكن لدي سؤال أثناء الرن واختيا dfs تظهر أسطر عديدة .... هل هذا ماكنت تقصد بأنه لايعثر على قيمة ؟؟؟؟

أختي عليك بتعديل الكود الثاني ضعي If بدلا من While في الملف Program ..حتى تتجنبي تكرار الاسطر لان الحلقة غير منتهية دائما الشرط صحيح

Sol.DFS.Count != 0 // Always = true

لا يعثر على قيمة لان التابع يرجع Found = false

حاولي ان تتاكدي من القيم التي ادخلتها

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#18

قمت بالتحقق لكن لم أتوصل لنتيجة تذكر ....

سأحاول المعاودة مرة أخرى لعلي أكتشف شيئا ما.

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

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

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

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

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