بدأت تعلم البرمجة (بالبايثون) بشكل حقيقي يوم الإثنين الماضي، وهذا بالطبع لأنه كان لدي اختبار عليها في يوم الثلاثاء :D

بعدما عدت من الامتحان مباشرة، قمت بتصميم هذا الاسكريبت الذي يُعد حاسبة بسيطة للمصفوفات:

لكن في اليوم التالي، اكتشفت بالصدفة (في صفحة ويكيبيديا العربية عن البايثون) أن هناك إمكانية في البايثون لإنشاء دوال مُسبقة التعريف، وهو ما مكنني من تنفيذ الأفكار التي كانت في رأسي، ونتج عنه هذا الاسكريبت:

الاسكريبت أشبه بمكتبة شاملة للعمليات الممكنة على المصفوفات، والتي وُضعت في هيئة دوال بالشكل التالي:

  • O(m,n):

المصفوفة الصفرية بأبعاد m*n

  • ‎I(n):

مصفوفة الوحدة بأبعاد n*n.

  • ‎Cmlt(A,n):

حاصل ضرب المصفوفة A في الثابت n.

  • ‎ngv(A):

سالب المصفوفة A.

  • ‎Madd(A,B):

ناتج جمع المصفوفتين A وB.

  • ‎Msub(A,B):

ناتج طرح المصفوفة B من المصفوفة A.

  • ‎Mmlt(A,B):

حاصل ضرب المصفوفتين A وB.

  • ‎det(A):

محدد المصفوفة A (كانت الخوارزمية الأصعب على الإطلاق).

  • ‎trn(A):

مدور المصفوفة A.

  • ‎sta(A):

مصفوفة العوامل المرافقة لـA.

  • ‎adj(A):

المصفوفة المرتبطة لـA.

  • ‎inv(A):

معكوس المصفوفة A.

  • ‎Mpow(A,n):

قوى المصفوفة A^n السالبة والموجبة.

  • ‎mat(m,n):

تُستخدم في إدخال المصفوفات بحيز m*n، تُكتب وتُدخل العناصر واحد تلو الآخر (بدلًا من عمل الأقواس بشكل يدوي)

فمثلًا لو أردنا إدخال مصفوفة A 3*4 نقوم بالتالي:

A=mat(3,4)

سيقوم البرنامج بطلب العناصر واحدًا تلو الآخر، حتى يتم تعريف المصفوفة

تطبيقًا على ما ذُكر بالأعلى، لو أردت حساب:

C(3A*2B)^4

نكتبها بالشكل التالي:

Mmlt(C,Mpow(Msub(Cmlt(A,3),Cmlt(B,2)),4))

البرنامج يعمل على المصفوفات بأي بعد، وليس محدودًا ببعد معين، حتى مصفوفة 100*100 يمكن العمل عليها :)

أعلم أن أسماء الدوال غبية بعض الشيء، فقط أريد بعضًا من الوقت لكي أتعلم طريقة تسمية مقبولة.

والآن..

رأيكم يهمني في الخوارزميات تحديدًا، هل يُعد هذا تقدمًا مقبولًا بعد اليوم الرابع من البدء في تعلم البرمجة؟