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

شغل مخك (29) - اختبر قدرتك في البرمجه

مغلق
بدأه Asm4all في 21 سبتمبر 2005 · 26 رد · 4,713 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

جيبتلكم مسأله برمجيه حلوه , كلها فكر , كل اللي حيشوفها, اول كلمه حيقولها هههههه بسيطه :lol: , وبعدين ..... :s :wacko:

المساله بكل بساطه , برنامج ياخذ مسأله حسابيه بسيطه على هيئة نص بهذا الشكل

((15+32.36*5)+3.14^2/13*3-4)

يحسبها ويطلع الناتج

بحيث تكون الأولويه في المعالجه لـ "()" ثم "^" ثم "/" ثم "*" ثم "-" ثم "+"

طول النص لن يتعدى 64 حرف , تماما مثل الآله الحاسبه fx82TL

أختبر نفسك , وحدد الوقت اللي تحلها فيه بينك وبين نفسك وورينا النتيجه

ويا ريت كل واحد يقول ايه المشاكل اللي طولت معاه , سواء حلها أو :s :D

#2

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

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

انا قمت بعلم مثل هذا البرنامج ولكن لم يكن فيه خاصية المرفوع, كان فقط اساسيات الحساب الاربعة, وقمت بعمل double linked list دائرية مغلقة بحيث انك لو مررت على جميع العناصر تصل للعنصر الاول وكان هناك موشر ثابت يؤشر على العنصر الاول لكى تعرف بداية السلسلة...

بالتوفيق لكل من اراد المحاولة ...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#3

ماشي يا عم احمد :) , بس كان نفسي أنك تدخل كده معانا , انا عارف الناس اللي بيستهويهم هذا النوع من البرامج , ومنتظر المشاركه الفعاله من جميع الأعضاء , ويا ريت نوضح المشاكل يا جماعه

#4

حتى أنا حاولت بالفعل كتابـة برنامج شبيه بالآلة الحاسبة (مثل ما هو مطلوب من السؤال) .. وقد وصل الكـود إلى أكثر من 100 سطر ، حينها سئمت التكملـة وتركت الكـود للأبد .. حاولت العـودة إلى الكـود ولكني أضعتـه في جهازي ولا أدري أين هـو الآن

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

#5

عملنا برنامج من هذا النوع كأحد الـ assignments في الجامعة .. و لكن بطريقة hackish مثل ما يقولون .. باستخدام المصفوفات.

سأحاول إن شاء الله هذه المرة بطريقة أفضل!

#6

يا شباب الموضوع ممتع و مش محتاج اكثر من خواريزمة العمل فقط وبعد هذا أي لغة برمجه تصلح , فين الهمه يا شباب :)

#7

يبدوا أن هناك من قام ببرمجه اضعاف هذا البرنامج , ما شاء الله

راجع هذا الرابط

لكن استغرب لم لا توجد محاولات :( ؟

#8

أيها الإخوة، إن كان بإمكانكم قراءة الفئة SmartExpressionReader وبالأخص الطريقة readOperation والمختصة بقراءة الجمل الرياضية. هذه الدالة هي المسئولة عن قراءة نص String وتحويله إلى عملية Operation!

سؤالك وموضوعك يا ASM4ALL جاء في وقته! وقد سررت عندما رأيت موضوعك! دعك من إمكانيات الحزمة الأخرى مثل قراءة الدوال والمتغيرات والخ..، وركز على سرعة تنفيذ مثل هذه العملية، وهي القراءة وليس إلا القراءة! سواء باستعمال Vector, Array, LinkedList, Double Array أو أي شيء غريب!!

أطلب منكم هذا الأمر لأني نفذته بطريقة عادية باستعمال خوارزمية لا أظن أنها سريعة! الأساليب التي طرحتوها لم أتعود عليها ولم أدرسها وأعتقد أنها أفضل من الخوارزمية التي اتبعتها، ربما الحزمة إمكانياتها قوية لكنها تفتقر في اعتقادي إلى سرعة ترجمة العملية الحسابية. وهذا ليس لأني لاحظت هذا، لكني أعتقد هذا لأني أحس أني أستخدم خوارزمية عادية!

وسوف أقدر لكم أي تطوير في شفرة هذا الملف بالذات SmartExpressionReader

أو MyReader أو MyExpressionReader وهي ليست إلا إصدارات مختلفة لنفس العملية.

الشفرة هنا:

http://faculty.kfupm.edu.sa/MISAC/hussam/T...urce%20Code.zip

اقرأ بالذات الملف MyExpressionReader.java ودعك من الملفات الأخرى!

بالتوفيق!

#9

الأخ أبو مازن هذه الحـزمـة بلغـة الجافا .... أليس لها مثيل في السي بلس أو السي

#10

رهيب يا احمد (Asm4all) يعني بتستخف فينا بنصف سطر بسيط و عايزنا نكتب ربع كمبايلر.

اليوم فقط رايت هذا الموضوع و انا اقرا سؤالك كنت عارف ان ابو مازن حلها فعلا بالجافا. و قد قرات المشاركة يا ابو مازن في قسم الجافا اكثر من مرة و لم اعلق حتى لا نكثر من مشكور رغم انها تستحق جدا.

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

تم تعديل هذه المشاركة بواسطة عماد الخليل في 24 سبتمبر 2005 في 01:15

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#11

اولاً لحل مثل هذه المسئلة عليك ان تتخلص من الاقواس, يعنى لابد ان تحول النص لطريقة الpost fix وهى الطريقة التى كانت تستخدم فى اجهزة الHP القديمة..

فى طريقة الpost fix تصبح المعادلة البسيطه 4+5*3 على النحو التالى +4*35 وبعد ذلك تستطيع إستخدام الstack او tree او list لحل المسئلة..

إذاً المشكلة تكمن بكل بساطة فى تحويل المعادلة إلى post fix ;; على هذا الرابط توجد الخوارزمية الخاصة بتحويل النص من infix إلى post fix

http://faculty.juniata.edu/kruse/cs2java/stackapps.htm

بالتوفيق

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#12

لقد صدمت حينما ابتدأت قراءة هذه الردود ... وشعرت بالفعل بأني أحمق في البرمجـة لدرجـة لا نظير لها

قبل مدة شهر .. أردت أن أقوم بكتابة برنامج حاسبة بلغـة السي بلس ... وكان لدي كائن اسمـه (المستخدم) حيث يطلب من المستخدم إدخال ما يريد لحسابه ومن وظائف هذا الكائن أن يقوم بالتأكد من إدخالات المستدخم .. فمثلاً إذا انتقل المستخدم إلى سطر جـديد يقوم بإلغاء هذا السطر .. ليس تخزينـه في متغير string ثم إلغاءه بل إلغاؤه في نفس اللحظـة ... وقد وجدت أن التابع getline لا يستطيع مجاراة ما أريد ... ما دعاني إلى تصميم دالة أو تابع جــديد ... وقد أثبت هذا التابع جدارتـه بالفعل...... ومن وظائف هذا الكائن إرسال المدخلات بعـد التأكد منها إلى كائن جـديد هـو الآلة الحاسبة والذي هـو مركب من عـدة كائنـات من ضمنها المعالج والحاسب ومتابع الحساب... وظيفـة كائن الآلة الحاسبة أن تقوم بجعل المعالج يقوم بمعالجـة الأرقام وحل العـمليات الحسابية ذات الأسبقية العليا (الضرب والقسمة والقوة أو الأس) ... إذا وجدت الآلة الحاسبة أي قـوس فإنها تقوم بإنشاء نسخـة من الكائن متابع الحساب وتقوم بتفويض جميع مسؤولياتها إليه وهـو سيقوم بإتمام العـملية وإذا ما وجدت هـو قوس آخر فإنه يقوم بإنشاء نسخـة جديدة من متابع الحساب ويفوض إليه مهامـه إذا وجد بعد ذلك هذا الكائن أي قوس إغلاق فإنه يرجع إلى بداية قوس الفتح ويقوم بإجراء العـمليات الحسابية ذات الأسبقية الأقل مثل الجمع وحالما ينتهي يعـود بالقيمـة الجـديدة إلى الكائن الذي قام بإنشاءه وهـي في هذه الحالة رقـم ... يقـوم هذا الكائن باستمرار الحساب بنفس الطريقـة حتى نصل إلى كائن الآلة الحاسبة والذي سيستمر في الحساب حتى يصل إلى الحل ... ويقوم بكتابة الناتج على الشاشـة

هل تعرفـون كم وصل حجم الكومبايلر آسف أقصد البرنامج .... حسب آخر عـدّ لي (بواسطـة نسخ الكود ووضعـه في الوورد حتى يظهر عـدد الأسطر) أكثر من 1000 سطر هذا على شاشة الكونسول ........ أرأيتم إلى أي حد وصلت بي الحماقة البرمجية .. بالمناسبة ذكرت في الأعلى أن عدد الأسطر وصلت إلى 100 سطر ... وليس الأمر سهـواً بل حتى لا أصدمكم أنتم......

تم تعديل هذه المشاركة بواسطة vector في 24 سبتمبر 2005 في 03:47

#13

--حزمتي مصممة بالطريقة الشيئية التوجه، تستطيع نقلها إلى C#، أو VB.Net في أقل من يوم!! وأعتقد أنه بالإمكان نقلها إلى سي ++، لكن إلى سي فليست عندي أدنى فكرة! طبعا لا تسألني عن الكيفية فأنا لا أعرف لا سي ولا سي ++!!!!

وبالمناسبة، قد أشرت في موضوعي إلى رابط للحصول على مثل هذه الحزمة بلغات مختلفة! لكنها غير مجانية،

كما أني أتمنى من أحد المبادرين أن ينقلها إلى .Net!

--تكفيني قراءتك يا عماد! فهذا يكفيني، والتعقيب بمشكور يضر بصحة المنتدى، والموضوع!

--فكرة جميلة يا أحمد غريب لم تخطر في بالي! مشاركة ثمينة جدا!! ورابط ممتاز للبداية! وخاصة أنها تجعلني أقرأ العناصر مرة واحدة، وليس كما هو الحال الآن، فالعنصر ربما يقرأ مرات عديدة!! أحتاج إلى دراسة الوضع أكثر ، لأن الجملة الرياضية تحوي أيضا دوالا، وفواصل!

--نحب أن نرى محاولتك يا (متجه)، بالمناسبة حجم قارئ العبارات الرياضية عندي مع الشرح يصل إلى 500 سطر، لكن هذا من غير ملفات المساعدة الأخرى التي لم أحسب عدد ما فيها! الشفرة متاحة!

عندي الإصدارات الحالية للقارئ:

1- MyReader: وهو الإصدار الأول

2- MyReader2: لم أحتفظ به!! قهر!!!!!

3- MyExpressionReader

4- SmartExpressionReader

5- HussamExpressionReader: وهذا متوفر في الإصدار الثالث من الحزمة الذي لم ينشر بعد! آخر إصدار رسمي 2.7

بعد أن أنتج الإصدار الثالث، سأخطط لأبدأ تنفيذ الفئة الجديدة:

AhmadGhareebExpressionReader

أرجو أن تخبرني إن أمليت الحروف خطأ!

#14

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

بالنسبة لعـدد الأسطر الكبير لدي يا أبو مازن ... فربما بسبب نمط الكتابة الذي أستخدامـه (أسلوب التمسية، أسلوب كتابة رؤوس الدوال)

#15

ذكرت أن المترجم عبارة عن 500 سطر تقريبا وللتصحيح هو 400 سطر تقريبا، لكن هذا لا يمثل إلى خمس الحزمة فقط.

حجم الحزمة 2040 سطر تقريبا، منها:

400 سطر يمثل منطق الحزمة، (تحوي تعاريف، ماهو الرقم، ماهي الإشارة، ماهو المتغير؟ ماهي الدالة...الخ)

موارد الحزمة (دوال وإشارات حسابية وغيرها مثل + ظ ^ | & ^ مطلق() أكبر () أصغر() إذا () وغيرها الكثير) تمثل 800 سطر،

المترجم 400 (الذي يقرأ الجملة ويحولها إلى شيء مفهوم!)

أمور أخرى 600 سطر.

#16

يمكن حل المسئلة بعدة طرق وذكر بعضها الأخوة ..

1- باستخدام Stack يجب تحويل المسئلة أولا إلى postfix ومن ثم من السهل قرائة ال postfix من أجل الحصول على القيمة النهائية

2- استخدام الشجرة الثنائية وهي تستخدم في المترجمات عند تحليل الكود . وهي اسرع من طريقة ال stack لأن المعادلة الرياضية بمكن تحويلها إلى شجرة في الذاكرة ومن ثم من أجل تنفيذها سوف تحتاج فقط إلى عملية مرورو في الشجرة وسرعة المرورو في الشجرة أسرع بكثير من استخدام ال stack .

3- يمكن تسريع الطريقة الأولى و الثانية أكثر إذا قمت بانتاج كود لغة آلة أو أسمبلي في الذاكرة مباشرة أثناء عمل البرنامج :) يعني بصراحة أن تصنع real time compiler . قمت بعمل هذا البرنامج من حولي 5 سنوات ولا أعرف أين الكود الآن حيث قمت باستاخدام تعليمات الآلة لل fpu (الذي يعمل كطريقة الpostfix ) وقمت بزرعها في الذاكرة مباشرة ومن ثم قمت بتنفيذ المعادلة الرياضية فقط باستدعاء تابع في السي الذي يشير للمنطقة في الذاكرة التي زرعتها بالكود ، ويمكن أيضا تمرير بارامترات . طبعا هذه الطريقة تعتبر أسرع الطرق ولكنها معقدة وليست مرنة بشكل تام.

4- في سي# .. أسهل طريقة هي أن تقوم باخراج المعادلة على ملف وترجمتها ومن ثم استخدام reflection في استدعاء التابع وتنفذيها :D .. طبعا هذه الطريقة قد تكون مكافئة لسرعة الطريقة الثالثة ..

Coding on the Cloud and for the Cloud!

My Blog

#17

أنا اعتقدت أن عدد من سيقول هاهو البرنامج لن يقل عن 15 (الناس اللي عارف انهم مبرمجين كويسين) وانه ممكن يوصل عدد الناس الى 100 واحد من الناس اللي ماعرفهاش

لكن الناس باين عليها مكسله قوي أو مشغوله جدا

عموما انا انتهيت منه ثاني يوم وظليت منظر يمكن حد يقول انه بدأ فيه , لكن الناس مشيوا تاني

الكود مكتوب بالسي شارب وبسيط جدا , هل اضعه الآن ام انتظر يمكن حد يحاول ؟

#18

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

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

ولكن بإستخدام خدعة بسيطة وكان البرنامج مكتوب....ب...GWBasic :D

أخي Asm4al لا تضع الكود، دع الإخوة يحاولون

d4baa0.gif
#19
اقتباس
في أحد الأيام قمت مع صديق بكتابة برنامج لرسم دوال

فعلا البرنامج كان مطلوب لرسم الدوال , و الدوال بدورها تستنتج من علاقات اخرى , يعني البرنامج الأصلي أكبر بكثير

الحكايه ان احد اصدقائي جالي البيت وقعدنا شويه مع بعض وفي وسط كلامه قاللي النقطه دي , فانا قلتله سهله , قاللي كل اللي باساله عليها بيقوللي سهله ومش بيعمل حاجه و فانا اتغاظت من الكلمه وقلتله ان شاء الله حاعملهولك , وساعتها كنت على النت , وكنت باقرا موضوع هنا في المنتدى مش فاكر اسمه بالضبط كان بيحل مساله رياضيه واشترك في الموضوع عدد جميل , وعرضوا حلول تهبل وهو كان بيقرأ معايا فقاللي ما تطرحها في المنتدى , قلتله حيحلوها بسرعه , قاللي نشوف طرق الحل , فانا قلت بالمره الواحد يقارن طريقة التفكير بينه وبين الناس الجامده دي وبالمره اوريه انها مش صعبه للدرجه دي

طرحت الموضوع يومها , وبدات فيها تاني يوم , كنت بدات بالسي , وبعدين لقيت اني الموضوع حيكون اسهل بالسي شارب على القل ماحملش هم التحويلات والتعامل مع النص

خلص البرنامج ولم ارى مشاركه توحي ان هناك من بدأ أصلا , قلت انتظر بعض الوقت , لكن الموضوع جاله برود ونام في العسل , فقلت ما بدهاش بس زعلت ان الناس اللي توقعت ان ارى افكارها هنا لم يتفاعلوا

عموما لو أحد طلب الكود انا حاضعه وخلاص و ولو احد بيكتب في البرنامج حاليا يا ريت يقولنا ننتظره

#21
hasan_aljudy كتب:
همم .. انا شخصيا بدأت .. بس بعدين كسلت ...

ها يعني انتظر حتكمل ولا خلاص يا حسن ( ولا اقولك حسان زي ريكا ما مقتنع :lol: )

#22

هههههه

لو اديتني عشر لينارات هاكمل هولك اليوم و كمان اعطيك رخصة تسميني حسااااان! زي ريكا! :P :lol:

#23
hasan_aljudy كتب:
هههههه

لو اديتني عشر لينارات هاكمل هولك اليوم و كمان اعطيك رخصة تسميني حسااااان! زي ريكا!  :P :lol:

خلاص يا حسااااااااااان شد حيلك انت وخلصوا وانا حاخد لفه في المنتدى اشحتلك شوية لينارات اصلي مش معايا يكفي :lol:

حد تاني ممكن يعملها أرخص من حساااااااااان :P

#24

طيب انا انتظرت كثييير كثيييير

كود البرنامج بالسي شارب , يمكن حد يستفيد منه

Asm4all.zip

#25

أخي بعد فحص البرنامج تبين لي أن هناك خطأ في التنفيذ ..

مثلا نتيجة

8 / 4 / 2 يجب ان تسوي 1 وليس 4 .. حيث قمت انت بقسمة 4 على 2 ومن ثم قسمة 8 على 2 .. لكن في المنطق وفي طريقة عمل المترجمات فإنه يجب اولا حل 8 على 4 ومن ثم على 2.

أمس واليوم قمت بصنع class library بالسي# عبارة عن MathEvaluator يعمل على مبدأ المترجمات ، حيث يقوم بتكوين parsing tree للتابع واختصارها (simple optimization) من ثم يمكن استدعاء هذه الشجرة من أجل أن تعطينا الناتج بسرعة .

هذا بعض خرج البرنامج:

Enter (Q or q) to quiet the application...
n = 5

? n + 2
7
fn(x, y) = x + 2*y

? fn(1, 2)
5
? fn(2^3, 1+2) + 3
17
? pi
3.14159265358979
? cos(pi)
-1
? fn(cos(pi), 1)
1
? 8/4/2
1

سوف احاول وضع المشروع هنا بعد أن أفحصه بشكل كامل ..

Coding on the Cloud and for the Cloud!

My Blog

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

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