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

لغز برمجي لم أجد له حلا

بدأه أحمد أبو عبد البر في 1 أبريل 2012 · 13 رد · 1,321 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

السلام عليكم أيها المبرمجون العرب

أنا مبتدئ في برمجة لغة الباسكال (يقال لغة الباسكال وليس دالفي لأنه مجرد بيئة تطويرية , مثله مثل lazarus)

نص المشكلة

يوجد في إحدى الجرائد لدينا لعبة رياضية أحببت أن اضع لها برنامجا يقوم بحلها واللعبة هي ملء الفراغات بإحدى عمليات الرياضيات المشهورة + - * / دون تكرار

100 52 51 2 4 = 15

بشرط ان العمليات تتم من اليمين إلى اليسار دون النظر إلى اولوية الضرب على الجمع مثلا

خيط حل اللغز أن نعرف متغيرا يأخذ إحدى العمليات الحسابية

ثم نعمل على الحلقات

ولكن المشكلة أن المتغير سيكون من نوع char ولا يمكن إدخاله في تركيب المعادلة

فمن يستطيح حلها؟

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#2

الحل يكون بتجريب جميع الاحتمالات

إذا وجد أحد الاحتمالات صحيح، يقوم بطباعته

إذا كل الاحتمالات لا تفيد، يطبع انه لا يوجد جواب

عدد الاحتمالات 24 احتمال

كيف تم حساب عدد الاحتمالات

اول فراغ متاح لدينا اربع عمليات ثم الفراغ التالي يتبقى لدينا ثلاث عمليات والفراغ الثالث يتبقى عمليتين والفراغ الرابع يتبقى له العملية الاخيرة

4*3*2*1 = 24 احتمال

لازم يتم تجريب كل هذه الاحتمالات:

+-*/

+-/*

+*-/

+*/-

+/*-

+/-*

______

-+*/

-+/*

...

الى الاحتمال 24

#3

أحسن الله إليك

والله لم يخف علي جوابك ... ولكني أبحث عن طريق أسهل

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#4

الله يرفع قدرك ويبارك فيك

هل تتوقع أنه يوجد حل آخر غير تجربة الاحتمالات

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

بالنسبة لي أرى أن أسهل حل هو مثل التالي

read a,b,c,d,e;//قراءة الارقام الخمسة من المستخدم
read r;// ادخال النتيجة

double[] x= new double[24]; // عمل مصفوفة للارقام

x[0]=(a+b)-c)/d*e;
x[1]=(a+b)-c)*d/e;
...

 r ثم اختبار النتائج باستخدام حلقة تكرارية ومقارنتها مع
#5
اقتباس
م تقصد أن طريقة الحل وهي تجربة الاحتمالات أنك لا تريد أن تضعها يدويا، وإنما تريد أن الحاسب يأخذ الاشارات ويصنع المعادلة لكل احتمال

بوركت أخي الكريم

هذا ما أريده

تم تعديل هذه المشاركة بواسطة linuxman في 2 أبريل 2012 في 21:02

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#6
بـارع كتب:

الله يرفع قدرك ويبارك فيك

هل تتوقع أنه يوجد حل آخر غير تجربة الاحتمالات

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

بالنسبة لي أرى أن أسهل حل هو مثل التالي

read a,b,c,d,e;//قراءة الارقام الخمسة من المستخدم
read r;// ادخال النتيجة

double[] x= new double[24]; // عمل مصفوفة للارقام

x[0]=(a+b)-c)/d*e;
x[1]=(a+b)-c)*d/e;
...

 r ثم اختبار النتائج باستخدام حلقة تكرارية ومقارنتها مع

الأفضل من ذلك هو توليد هذه المعادلات من قبل الحاسب , باستخدام حلقات متداخلة على قائمة Enum بالعمليات المسموحة في اللعبة .. بدلاً من كتابة العمليات يدوياً

بالتوفيق

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#7

يا دلفاوي يا جزاك الله خيرا

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

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#8
linuxman كتب:

يا دلفاوي يا جزاك الله خيرا

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

:D الحقيقة تعمدت كتابتها هكذا لأرى ان كانت الفكرة ستصل , الكود التالي يوضح ما قصدت :

type
  Ts = (Pl, Mi, Lt, Di) ;

function Main(a,b,c,d,e,r : integer) :string ;
var
  s1,s2,s3,s4 : Ts ;  
  v1,v2,v3 : integer ;
begin
    for s1 := Pl to Di do 
    begin
      v1 := Calc(a,b,s1) ;

      for s2 := Pl to Di do
      begin
        if (s2 = s1) then Continue ;
        v2 := Calc(v1,c,s2) ;

        for s3 := Pl to Di  do
        begin
          if (s3 = s2) then Continue ;
          v3 := Calc(v2,d,s3) ;

          for s4 := Pl to Di  do
          begin
            if (s4 = s3) then Continue ;
            if (Calc(v3,e,s4) = r) then
            begin
              result := IntToStr(a)+TsConv(s1)+
                        IntToStr(b)+TsConv(s2)+
                        IntToStr(c)+TsConv(s3)+
                        IntToStr(d)+TsConv(s4)+ IntToStr(e)+' = '+IntToStr(r);
            end;
          end;
        end;
      end;
    end;
end;

مع ملاحظة :

Calc دالة تحسب ناتج العملية المدخلة إليها (من النوع Ts) ,

TsConv تحول نوع Ts المدخل إلى شكل نصي يمكن عرضه في البرنامج

جرب وأخبرني :)

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#9

احسن الله اليك يا دلفاوي

والله لقد ازلت الغموض واوضحت السبيل

فالذي كنت افتقده هوالمجموعة ts و الدالة calc و الدالة tsconv

والحقيقة ان هذه الاشياء غير موجودة لدي او لم اجدها انا بما اني استعمل lazarus

فاذا اكملت خيرك ومعروفك فلترفع لي الوحدة التي تحتوي هته الاشياء

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#10

النوع Ts هو من كتابتي , وهو ليس إنجاز كبير الحقيقة :) فهو يسمى Enum وهو مجموعة قيم معرفة معاً , يمكن عمل دورات عليها .. مثلاً النوع Boolean هو Enum لكن له قيمتان فقط True , False

وهو معرف في أول سطر في الكود السابق (نعم بهذه البساطة :))

الدوال الأخرى سهلة جداً :

function Calc(a,b:integer; op:Ts) :integer ;
begin
  case op of
    Pl : result := a+b ;
    Mi : result := a-b ;
    Lt : result := a*b ;
    Di : result := a div b ;
  end;
end;

function TsConv(op:Ts) :string ;
begin
  case op of
    Pl: result := ' + ' ;
    Mi: result := ' - ' ;
    Lt: result := ' * ' ;
    Di: result := ' / ' ;
  end;
end;

تم تعديل هذه المشاركة بواسطة Delphawi في 4 أبريل 2012 في 20:29

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#11

الآن اكتملت الصورة وجزاك الله خيرا على ما فعلت وأرجو أن أستفيد منك مرات اخرى فلا تستثقلني واجعلني لك تلميذا أكن لك شاكرا وفيا

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#12

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

من الأفضل استخدام مكتبات جاهزة موثوقة ومعتمدة أفضلا من برمجة كل شيء من الصفر

الشيء الذي تبحث عنه يسمى محلل جمل Expression parser (بالفرنسي Evaluateur d'expression)

دوره يقوم بتحليل جمل رياضية (مثال: '(1+3)/2') وحساب الناتج (2) أو التنفيذ

كثيرا جدا في النت لدلفي وغيره، منها البسيط وسهل مثال:

CalcExpress

http://www.aidaim.com/products/download.php#CalcExpress

وأخرى لاستخدامات متقدمة، مثال:

ArtFormula

http://artsoft.nm.ru/works.html#formula

المزيد من موقع Torry.net

http://www.torry.net/pages.php?id=307

بالتوفيق.

تم تعديل هذه المشاركة بواسطة kachwahed في 8 أبريل 2012 في 01:38

1
#13

شكرا لقد قمت بالتحميل وسأجربها إن شاء الله

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#14

قمة في الإبداع :lol:

من جد وجد ومن زرع حصد

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