اذهب إلى المحتوى
  • 0

خوارزمية Anatoly لضرب الاعداد

Ail Ahmed

السؤال

السلام عليكم

ان كتب خورزميات Anatoly  لضرب الاعداد وده الكود بتاعي

def anatoly(a , b):

    a0 = a // 10
    a1 = a % 10
    b0 = b // 10
    b1 = b % 10

    c0 = a1 * b1
    c1 = a0 * b0
    c2 = ((a0 + a1) * (b0 + b1) - (c1 + c0))

    if c2 % 2 == 0:
        x0 = c2 // 10
        x1 = c2 % 10

    return x1 , c1 + x0 , c0

print(anatoly(32 , 14))

فا كانت عاوز اعارف هل فيه افضل من كده يعني من الكود

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

 هناك بعض التحسينات الممكنة

التعليقات:
  يفضل إضافة تعليقات لشرح كل جزء من الكود وماذا يقوم به
الأسماء المفهومة:
   - استخدام أسماء متغيرة أكثر وضوحًا قد يساعد في فهم الكود بسهولة

معالجة الإدخال:
   - يمكنك إضافة تحقق من صحة الإدخال مثل التأكد من أن الأرقام مكونة من رقمين

تم التعديل في بواسطة Mahmoud Hassan19
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

من الأفضل استخدام أسماء أكثر وضوحًا للمتغيرات، مثل استبدال "a0" بـ "tensA" و "a1" بـ "onesA" لتجعل الكود أكثر قابلية للقراءة.

وهناك إمكانية لإضافة تحقق لضمان أن الأرقام المدخلة هي أرقام صحيحة، مثل التأكد من أن a و b يتمثلان في أرقام صحيحة، ولتحسين أداء الكود تجنب إعادة حساب القيم التي تم حسابها بالفعل، مثل حساب a0 + a1 و b0 + b1 مرتين.

def anatoly(a, b):
    # تحقق من صحة الإدخال
    if not isinstance(a, int) or not isinstance(b, int):
        raise ValueError("الرجاء إدخال أرقام صحيحة")

    # تحويل الأعداد السالبة إلى إيجابية
    a = abs(a)
    b = abs(b)

    tensA = a // 10
    onesA = a % 10
    tensB = b // 10
    onesB = b % 10

    c0 = onesA * onesB
    c1 = tensA * tensB
    c2 = ((tensA + onesA) * (tensB + onesB) - (c1 + c0))

    if c2 % 2 == 0:
        x0 = c2 // 10
        x1 = c2 % 10
    else:
        x0 = 0
        x1 = c2

    return x1, c1 + x0, c0

print(anatoly(32, 14))

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

تمام جدا 

بس  حاجه تاني لوسمحت ممكن افهم الفرق بين الخورزميا ده وبين عمليه الضرب ده

c = 32 * 14

وكمان العمليه ده بتشتغل ازي خلف الكوليس

يعني انا ليه اكتب كل ده 

وبسطر واحد اضرب رقمين عادي 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 45 دقائق مضت قال Ail Ahmed:

تمام جدا 

بس  حاجه تاني لوسمحت ممكن افهم الفرق بين الخورزميا ده وبين عمليه الضرب ده

c = 32 * 14

وكمان العمليه ده بتشتغل ازي خلف الكوليس

يعني انا ليه اكتب كل ده 

وبسطر واحد اضرب رقمين عادي 

لأن كتابة الخوارزمية تساعدك على فهم كيفية عمل عملية الضرب على مستوى أعمق، حيث أنها توضح كيفية تطبيق مفهوم الضرب على مستوى أكثر تفصيلًا، وبالتالي  فهم أفضل للعمليات الحسابية.

وما يحدث هو:

  1. تقسيم الأعداد إلى جزئين: الجزء العلوي (a0) والجزء السفلي (a1)
  2.  ضرب كل جزء من الأعداد: a0 * b0، a1 * b1، (a0 + a1) * (b0 + b1)
  3.  حساب النتائج الوسيطة (c0، c1، c2)
  4.  تحديد العلامة العشرية للنتيجة النهائية (x0)
  5.  حساب النتيجة النهائية (c)
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 ساعة قال Ail Ahmed:

انا اقصد حضرتك في عمليه الضرب العادي الهي ده بتشتغل ازي 

مرحباً علي ,

إذا كان قصدك عن طريقة عملها من ناحية الآلية لتنفيذها بلغات البرمجة , فهذه تتضمن خوارزميات تعتمد الحساب الثنائي ( binary arithmetic ).

من هذه الخوارزميات هي Long Multiplication ,  والتي تعتمد على ضرب الأرقام من اليمين إلى اليسار، على غرار الطريقة التي نجري بها الضرب باليد, وطريقة عمل هذه الخوارزمية تكون كالتالي :

  1. تحويل الأرقام إلى تمثيلها الثنائي فمثلاً سيتم تمثيل الأرقام 32 و14 كقيم ثنائية: 100000 و1110.
  2.  إجراء الضرب الثنائي بدءا من الرقم الموجود في أقصى اليمين، قم بضرب كل رقم من الرقم الثاني (14) مع كل رقم من الرقم الأول (32) وقم بتخزين المنتجات الجزئية. للتوضيح ستكون كالتالي :
    100000   <-- 32
     x    1110   <-- 14
    ---------
       100000    (32 * 0)
      000000     (32 * 1, shifted one place to the left)
    +1000000    (32 * 1, shifted two places to the left)
    ---------
      1110000    (448)
  3.  قم بجمع المنتجات الجزئية للحصول على النتيجة النهائية ،ففي المثال يكون المجموع 1110000، وهو التمثيل الثنائي للقيمة العشرية 448.
  4.  التحويل مرة أخرى إلى النظام العشري ( للحصول على النتيجة بالنظام العشري ).

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

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 23 ساعة قال Hikmat Jaafer:

مرحباً علي ,

إذا كان قصدك عن طريقة عملها من ناحية الآلية لتنفيذها بلغات البرمجة , فهذه تتضمن خوارزميات تعتمد الحساب الثنائي ( binary arithmetic ).

من هذه الخوارزميات هي Long Multiplication ,  والتي تعتمد على ضرب الأرقام من اليمين إلى اليسار، على غرار الطريقة التي نجري بها الضرب باليد, وطريقة عمل هذه الخوارزمية تكون كالتالي :

  1. تحويل الأرقام إلى تمثيلها الثنائي فمثلاً سيتم تمثيل الأرقام 32 و14 كقيم ثنائية: 100000 و1110.
  2.  إجراء الضرب الثنائي بدءا من الرقم الموجود في أقصى اليمين، قم بضرب كل رقم من الرقم الثاني (14) مع كل رقم من الرقم الأول (32) وقم بتخزين المنتجات الجزئية. للتوضيح ستكون كالتالي :
    100000   <-- 32
     x    1110   <-- 14
    ---------
       100000    (32 * 0)
      000000     (32 * 1, shifted one place to the left)
    +1000000    (32 * 1, shifted two places to the left)
    ---------
      1110000    (448)
  3.  قم بجمع المنتجات الجزئية للحصول على النتيجة النهائية ،ففي المثال يكون المجموع 1110000، وهو التمثيل الثنائي للقيمة العشرية 448.
  4.  التحويل مرة أخرى إلى النظام العشري ( للحصول على النتيجة بالنظام العشري ).

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

 

ايو تمام 

شكراا جدا لحضرتك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...