رأيك في برنامجي الأول، بدأت تعلم البرمجة الإثنين الماضي!

  • Muhammad98

بدأت تعلم البرمجة (بالبايثون) بشكل حقيقي يوم الإثنين الماضي، وهذا بالطبع لأنه كان لدي اختبار عليها في يوم الثلاثاء :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 يمكن العمل عليها :)

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

والآن..

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


التعليق السابق

بالنسبة للدالة I، أعتقد أنك كتبتها بتلك الطريقة لتقليل العمليات التي تُجرى، ففيما كتبت أنا يتم المرور على عناصر المصفوفة بأكملها لمقارنة إذا كانت i=j، لكن بهذه الطريقة تستهدف عناصر القطر الرئيسي بشكل مباشر.

بالطبع أعلم أن هذه الوظائف كُتبت لها دوال قبلًا وبطرق أفضل من هذه، لكن غرضي الأساسي لم يكن الوظائف نفسها قدرما كان التدرب على الخوارزميات وتصميمها.

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

في النهاية أنا حقًا لن تسعني الكلمات لأوفي شكرك على ما كتبت! شكرًا جزيلًا لك يا رفيق :)