ابحث في المدونة

الجمعة، 27 مارس 2020

كيف نصمم خوارزمية بلغة البايثون لطباعة جدول الضرب في مستند نصي

السلام عليكم ورحمة الله وبركاته
الإخوة الكرام .. أهلًا وسهلًا بكم وأسعد الله أوقاتكم بالخير والمسرة.

جميلة هي البرمجة ... وأجمل ما فيها أن تولد لنفسك بعض الأفكار لتطبقها وشعورك بالسعادة لحظة نجاحك في تنفيذ فكرتك,وذلك بالطبع يعود بمنفعة كبيرة بالنسبة للمتعلم.

هذا ما جئت من أجله اليوم, فالفكرة التي سنعمل سويًا على حلها هي كتابة كود بلغة البايثون, يقوم هذا الكود بتوليد مستند نصي ويضع فيه جدول الضرب من 1 إلى 12

أول ما سنفكر به هو كيفية جعل الكود يقوم بضرب هذه الأعداد كلها وإخراج ناتجها

في البداية سننشئ متغيرين يحمل كلٌ منهما الرقم 1 بهذه الطريقة
count = 1 
x = 1

سنعلم لاحقًا لماذا أنشأنا هذين المتغيرين , ولماذا أنشأنا 2 وليس متغير واحد
الخطوة التالية هي إنشاء مستند فارغ لتفريغ المخرجات عليه
file = open("multiplication table.txt","a")
وكما تلاحظون أن الملف سيكون باسم multiplication table , وقد تم إنشاؤه بوضع الإضافة أي أننا في كل مرة نكتب فيه  نصًا فإنه يُضاف إلى جانب النص الموجود بالفعل.

جميل. الآن كل شيء جاهز تقريبًا
لنعمل الآن على كتابة جوهر الكود
قبل ذلك لنفكر قليلًا.
نحن نريد من الكود أن يدور 12 دورة لتوليد جدول ضرب الأرقام من 1 إلى 12
وفي كل دورة نريده أيضًا أن يدور 12 مرة ليتم ضرب ذلك العدد في الأرقام من 1 إلى 12
ونعلم جميعًا أن المفهوم المستخدم للدوران في لغات البرمجة هو مفهوم الحلقات التكرارية loops 
إذًا, فسنعمل على إنشاء حلقة رئيسية تدور 12 مرة لتنفيذ أوامر معينة بداخلها 
ستحتوي هذه الحلقة على حلقة أخرى تدور أيضًا 12 مرة في كل جدول 
ولهذا السبب إخوتي الكرام أنشأنا متغيرين وليس متغير واحد 
سنكتب الكود بهذا الشكل

while count <=12:
    while x <=12:


ماذا بقي بعد؟
بقي أن نكتب داخل الحلقة الثانية الكود الخاص بطباعة العملية الحسابية مع الناتج , بالإضافة إلى الكود الخاص بكتابة ذلك في المستند

سنكتبه بهذه الطريقة 

        print("{} × {} = {}".format(count,x,count*x))
        file.write("{} × {} = {} \n".format(count,x,count*x))

كما تلاحظون أن القيمة النصية الموضوعة في كلًا من دالة print ووظيفة write قد تم تنسيقها على النحو التالي:
كتبنا في البداية قوسين متعرجين كدلالة إلى أن هذا المكان من النص سيتم تعويضه بمتغير , ثم تم وضع علامة الضرب وكتابة قوسين آخرين للتعويض بقيمة متغير آخر , وكتبنا بعد ذلك علامة اليساوي ووضع قوسين آخرين للتعويض عن قيمة أخرى.

بعد ذلك استخدمنا الوظيفة format لتعيين القيم لأماكن الأقواس المتعرجة 
فالقوس الأول تم التعويض عنه بقيمة المتغير count التي تتغير في كل دورة تدور فيها الحلقة االرئيسية
أما الخانة الثانية فقد تم التعويض عنها بالمتغير x الذي بدوره يتغير في كل دورة تدور فيها الحلقة الثانية
أما الخانة الأخيرة فقد تم التعويض عنها بناتج ضرب المتغيرين count و x 
ملاحظة: 
سبب كتابة \n في سطر إضافة المحتويات إلى المستند وعدم كتابته في جملة print هو أن دالة print تقوم بأخذ سطر جديد بعد كل عملية طباعة , بخلاف الوظيفة  write التي تتطلب منا إضافة سطر جديد بشكل يدوي 

بعد كتابة الجملتين السابقتين سنحتاج إلى جعل قيمة x تتزايد رقمًا واحدًا في كل دورة تقوم بها الحلقة الثانية
سننفذ ذلك بالسطر التالي:
        x+=1

ممتاز. انتهينا الآن من برمجة الحلقة الفرعية 
الآن نحتاج إلى إعادة قيمة x بحيث تساوي 1 من جديد ليتم إعادة الدورة وطباعة الجدول التالي
نكتب الكود التالي بحيث يكون مندرج تحت الحلقة الرئيسية فقط وليس الحلقة الفرعية
    x = 1

أيضًا نريد من المتغير count أن يزيد قيمة عددية واحدة ليتم طباعة الجدول الموالي 
    count +=1

وأخيرًا سنغلق الملف multiplication table لتخفيف الحمل على الذاكرة 
سنستخدم الكود التالي , وهو بطبيعة الحال خارج الحلقة while 
file.close()


عمل أكثر من رائع... بتفكيرنا هذا تمكننا من إنتاج كود متكامل يستخرج جدول الضرب من العدد 1 إلى 12 , والشيء المثير هو أن الكود لم يتجاوز ال 11 سطر فقط.

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

الكود:


x = 1
count = 1
file = open("multiplication table.txt","a")
while count <=12:
    while x <=12:
        print("{} × {} = {}".format(count,x,count*x))
        file.write("{} × {} = {} \n".format(count,x,count*x))
        x +=1
    x=1
    count +=1
file.close()



لقد نفذتُ الكود , ظهر لي مستند نصي باسم multiplication table كان محتواه ما يلي
ولكم أن تعلموا أنني لا أتحلى بسعة البال التي تجعلني أكتب كل هذا  هههه


1 × 1 = 1
1 × 2 = 2
1 × 3 = 3
1 × 4 = 4
1 × 5 = 5
1 × 6 = 6
1 × 7 = 7
1 × 8 = 8
1 × 9 = 9
1 × 10 = 10
1 × 11 = 11
1 × 12 = 12
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
2 × 4 = 8
2 × 5 = 10
2 × 6 = 12
2 × 7 = 14
2 × 8 = 16
2 × 9 = 18
2 × 10 = 20
2 × 11 = 22
2 × 12 = 24
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
3 × 4 = 12
3 × 5 = 15
3 × 6 = 18
3 × 7 = 21
3 × 8 = 24
3 × 9 = 27
3 × 10 = 30
3 × 11 = 33
3 × 12 = 36
4 × 1 = 4
4 × 2 = 8
4 × 3 = 12
4 × 4 = 16
4 × 5 = 20
4 × 6 = 24
4 × 7 = 28
4 × 8 = 32
4 × 9 = 36
4 × 10 = 40
4 × 11 = 44
4 × 12 = 48
5 × 1 = 5
5 × 2 = 10
5 × 3 = 15
5 × 4 = 20
5 × 5 = 25
5 × 6 = 30
5 × 7 = 35
5 × 8 = 40
5 × 9 = 45
5 × 10 = 50
5 × 11 = 55
5 × 12 = 60
6 × 1 = 6
6 × 2 = 12
6 × 3 = 18
6 × 4 = 24
6 × 5 = 30
6 × 6 = 36
6 × 7 = 42
6 × 8 = 48
6 × 9 = 54
6 × 10 = 60
6 × 11 = 66
6 × 12 = 72
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70
7 × 11 = 77
7 × 12 = 84
8 × 1 = 8
8 × 2 = 16
8 × 3 = 24
8 × 4 = 32
8 × 5 = 40
8 × 6 = 48
8 × 7 = 56
8 × 8 = 64
8 × 9 = 72
8 × 10 = 80
8 × 11 = 88
8 × 12 = 96
9 × 1 = 9
9 × 2 = 18
9 × 3 = 27
9 × 4 = 36
9 × 5 = 45
9 × 6 = 54
9 × 7 = 63
9 × 8 = 72
9 × 9 = 81
9 × 10 = 90
9 × 11 = 99
9 × 12 = 108
10 × 1 = 10
10 × 2 = 20
10 × 3 = 30
10 × 4 = 40
10 × 5 = 50
10 × 6 = 60
10 × 7 = 70
10 × 8 = 80
10 × 9 = 90
10 × 10 = 100
10 × 11 = 110
10 × 12 = 120
11 × 1 = 11
11 × 2 = 22
11 × 3 = 33
11 × 4 = 44
11 × 5 = 55
11 × 6 = 66
11 × 7 = 77
11 × 8 = 88
11 × 9 = 99
11 × 10 = 110
11 × 11 = 121
11 × 12 = 132
12 × 1 = 12
12 × 2 = 24
12 × 3 = 36
12 × 4 = 48
12 × 5 = 60
12 × 6 = 72
12 × 7 = 84
12 × 8 = 96
12 × 9 = 108
12 × 10 = 120
12 × 11 = 132
12 × 12 = 144 



نستطيع تحسين الكود السابق بحيث لا يعيد ضرب الأرقام في الجداول
يعني في جدول 1 نعلم أن 1 ضرب 2 = 2 , لكن عندما يصل الكود إلى جدول 2 ويضرب 2 في 1 ستظهر نفس النتيجة
لكن إن قمنا بتعديل بسيط للكود نستطيع تفادي هذا الأمر
سنحذف السطر الذي يعيد قيمة x إلى الرقم 1 وبدلًا من ذلك نجعل قيمة x تساوي قيمة count
أي أن الكود يصبح هكذا

x = 1
count = 1
file = open("multiplication table.txt","a")
while count <=12:
while x <=12:
print("{} × {} = {}".format(count,x,count*x))
file.write("{} × {} = {} \n".format(count,x,count*x))
x +=1
count +=1
x = count
file.close()

ستظهر لنا النتيجة ببهذه الطريقة:


1 × 1 = 1
1 × 2 = 2
1 × 3 = 3
1 × 4 = 4
1 × 5 = 5
1 × 6 = 6
1 × 7 = 7
1 × 8 = 8
1 × 9 = 9
1 × 10 = 10
1 × 11 = 11
1 × 12 = 12
2 × 2 = 4
2 × 3 = 6
2 × 4 = 8
2 × 5 = 10
2 × 6 = 12
2 × 7 = 14
2 × 8 = 16
2 × 9 = 18
2 × 10 = 20
2 × 11 = 22
2 × 12 = 24
3 × 3 = 9
3 × 4 = 12
3 × 5 = 15
3 × 6 = 18
3 × 7 = 21
3 × 8 = 24
3 × 9 = 27
3 × 10 = 30
3 × 11 = 33
3 × 12 = 36
4 × 4 = 16
4 × 5 = 20
4 × 6 = 24
4 × 7 = 28
4 × 8 = 32
4 × 9 = 36
4 × 10 = 40
4 × 11 = 44
4 × 12 = 48
5 × 5 = 25
5 × 6 = 30
5 × 7 = 35
5 × 8 = 40
5 × 9 = 45
5 × 10 = 50
5 × 11 = 55
5 × 12 = 60
6 × 6 = 36
6 × 7 = 42
6 × 8 = 48
6 × 9 = 54
6 × 10 = 60
6 × 11 = 66
6 × 12 = 72
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70
7 × 11 = 77
7 × 12 = 84
8 × 8 = 64
8 × 9 = 72
8 × 10 = 80
8 × 11 = 88
8 × 12 = 96
9 × 9 = 81
9 × 10 = 90
9 × 11 = 99
9 × 12 = 108
10 × 10 = 100
10 × 11 = 110
10 × 12 = 120
11 × 11 = 121
11 × 12 = 132
12 × 12 = 144


في ختام هذه المشاركة أسأل الله أن يوفقكم ويبارك فيكم ويكتب لكم الخير والصلاح.
أطيب التحية.

هناك 3 تعليقات:

  1. ما المقصود بالخورزمية؟

    ردحذف
    الردود
    1. علميًا, الخوارزمية هي عبارة عن خطوات متسلسلة لحل مشكلة ما.
      وبشكل عام يمكننا اعتبار اللفظ خوارزمية كمرادف للكلمة كود أو تعليمات برمجية.

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

    ردحذف

قل شيئًا