За последние 24 часа нас посетили 24469 программистов и 1656 роботов. Сейчас ищут 880 программистов ...

"Отраженный" треугольник Паскаля

Тема в разделе "Прочие вопросы по PHP", создана пользователем dcc0, 4 авг 2014.

  1. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Захотелось опубликовать свой код. Писал в учебных целях, для себя.
    Код выводит треугольник Паскаля, только отраженный, согласно свойству симметрии, т.е. вычисляется только половина строки, вторая "отражается" через массив.


    Код (Text):
    1. <?php
    2.  
    3. function tre($n) {
    4.  
    5.    $ck=1;
    6. /*Число коэффициентов в строке треугольника равно показателю степени + 1*/
    7.      $kn=$n+1;
    8.      
    9. /*Проверка на четность. Если кол. коэф. четное, делить на 2*/
    10.  
    11.  if($kn%2==0) {
    12.  
    13. $kn=$kn/2;
    14.  $i=0;
    15.  
    16. }
    17.  
    18.   else
    19.  
    20.   {
    21. /*Иначе прибавить 1 и поделить на 2. Установить переменную i равной 1.
    22. Требуется для того, чтобы избавиться от лишнего числа при отражении*/
    23. $kn+=1;
    24.  $kn=$kn/2;
    25.   $i= 1;
    26. }
    27.  
    28.  for ($k = 1; $k <= $kn-1; $k++) {
    29.  
    30.  
    31.    $ck = $ck/$k*($n-$k+1);
    32.    /*Читает значения строки в массив*/
    33. $arr[] = $ck;
    34. /*Вывод первой части*/
    35.  echo  "+" . $ck ;
    36.  
    37.  
    38.   }
    39.  
    40.  
    41. /*Степень 1 не считать*/
    42. if ($kn>1) {
    43.   echo $arr[i];
    44.   /*Переворот массива*/
    45.   $arr=array_reverse($arr);
    46.  
    47.    /*Без последней итерации*/
    48.  
    49.  for ($i; $i<= $kn-1; $i++) {
    50.    /*Выводим отраженный треугольник*/
    51.  echo  "+" . $arr[$i]  ;
    52. }
    53.  
    54. }
    55.  
    56.  }
    57.  
    58. while ($n<=100) {
    59. ++$n;
    60. echo tre($n);
    61.  echo "<br/>";
    62. }
    63.  
    64.  
    65. ?>