الجمعة، 2 أكتوبر 2020

طباعة مثلث باسكال في ج

 

طباعة مثلث باسكال في ج

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

مثلث باسكال

تعتبر جميع القيم خارج المثلث صفراً (0). الصف الأول هو 0 1 0 بينما 1 فقط يحصل على مسافة في مثلث باسكال ، 0 ثانية غير مرئية. يتم الحصول على الصف الثاني بجمع (0 + 1) و (1 + 0). الإخراج محصور بين صفرين. تستمر العملية حتى يتم تحقيق المستوى المطلوب.

يمكن اشتقاق مثلث باسكال باستخدام نظرية ذات الحدين. يمكننا استخدام المجموعات والمضروب لتحقيق ذلك.

الخوارزمية

بافتراض أننا ندرك جيدًا العوامل ، سننظر في المفهوم الأساسي لرسم مثلث باسكال بطريقة خطوة بخطوة -

START
  Step  1 - Take number of rows to be printed, n.
  Step  2 - Make outer iteration I for n times to print rows
  Step  3 - Make inner iteration for J to (N - 1)
  Step  4 - Print single blank space " "
  Step  5 - Close inner loop
  Step  6 - Make inner iteration for J to I
  Step  7 - Print nCr of I and J
  Step  8 - Close inner loop
  Step  9 - Print NEWLINE character after each inner iteration
  Step 10 - Return
STOP

كود مزيف

يمكننا اشتقاق كود كاذب للخوارزمية المذكورة أعلاه ، على النحو التالي -

procedure pascals_triangle

   FOR I = 0 to N DO
      FOR J = 0 to N-1 DO
         PRINT " "
      END FOR

      FOR J = 0 to I DO
         PRINT nCr(i,j)
      END FOR

      PRINT NEWLINE
   END FOR

end procedure

التنفيذ

دعونا ننفذ هذا البرنامج بالكامل. سنقوم بتنفيذ وظائف عاملي (غير متكرر) وكذلك ncr (مجموعة)

#include <stdio.h>

int factorial(int n) {
   int f;
   
   for(f = 1; n > 1; n--)
      f *= n;
      
   return f;
}

int ncr(int n,int r) {
   return factorial(n) / ( factorial(n-r) * factorial(r) );
}

int main() {
   int n, i, j;

   n = 5;

   for(i = 0; i <= n; i++) {
      for(j = 0; j <= n-i; j++)
         printf("  ");
         
      for(j = 0; j <= i; j++)
         printf(" %3d", ncr(i, j));

      printf("\n");
   }
   return 0;
}

يجب أن يبدو الإخراج كالتالي -

               1
             1   1
           1   2   1
         1   3   3   1
       1   4   6   4   1
     1   5  10  10   5   1

التسميات: