• 0
Asm4all

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

سؤال

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

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

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

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

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

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

26 إجابة على هذا السؤال .

  • 0

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

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أيها الإخوة، إن كان بإمكانكم قراءة الفئة 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 ودعك من الملفات الأخرى!

بالتوفيق!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

تم تعديل بواسطه عماد الخليل
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اولاً لحل مثل هذه المسئلة عليك ان تتخلص من الاقواس, يعنى لابد ان تحول النص لطريقة ال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

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

تم تعديل بواسطه vector
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

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

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

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

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

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

3- MyExpressionReader

4- SmartExpressionReader

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

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

AhmadGhareebExpressionReader

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هههههه

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هههههه

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

Asm4all.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

مثلا نتيجة

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
fn(x, y) = x + 2*y

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

كنت أستعمل المساواة فقط لإعطاء قيمة لمتغير،، أما الآن فأنا أستعملها لتعريف دالة أو عملية،،Sun Function.

الحزمة الرياضية أو المعالج الرياضي أصبح يدعم الجمل الشرطية وجمل التكرار، والعمليات Sub Functions!!

شرح مفصل للإمكانية الجديدة في الإصدار 3.5

مع الشكر والتقدير للأستاذ هاني الأتاسي!

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .