За последние 24 часа нас посетил 15741 программист и 1664 робота. Сейчас ищут 818 программистов ...

Создать функцию

Тема в разделе "PHP для новичков", создана пользователем DeviceGod, 19 дек 2017.

  1. DeviceGod

    DeviceGod Новичок

    С нами с:
    2 окт 2017
    Сообщения:
    4
    Симпатии:
    1
    Даны отрезки a,b,c и d. Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. Определить функцию Plo(x,y,z), печатающую площадь треугольника со сторонами x,y и z, если такой треугольник существует.(заплачу)
     
  2. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Примерно так (не судите строго, написал по-быстрому) :)
    PHP:
    1. <?php
    2. class Triangle {
    3.     public function perebor($data = []) {
    4.         $arr = [];
    5.         $result = [];
    6.         foreach($data as $key=>$value) {
    7.             foreach($data as $key_2=>$value_2) {
    8.                 if($key!=$key_2) {
    9.                     foreach ($data as $key_3=>$value_3) {
    10.                         if($key_3 != $key_2 && $key_3 != $key_1) {
    11.                             $temparr = [$value,$value_2,$value_3];
    12.                             arsort($temparr);
    13.                             $arr[] = $temparr;
    14.                         }
    15.                     }
    16.                 }
    17.             }
    18.         }
    19.         $arr = $this->delDuplicate($arr);
    20.        
    21.         foreach ($arr as $key=>$value) {
    22.             $res = $this-> plo($value[0],$value[1],$value[2]);
    23.             $triangle = implode('/',$value);
    24.             $result .=  (!empty($res)) ? 'Площадь треугольника '.$triangle.' равна '.$res.'<br>' : 'Треугольника '.$triangle.' не существует!<br>';
    25.         }
    26.         return $result;
    27.     }
    28.     public function delDuplicate($array) {
    29.         $arr = [];
    30.         foreach ($array as $value) {
    31.             $arr[] = implode('',$value);
    32.         }
    33.         $arr = array_unique($arr);
    34.         $keys = array_keys($arr);
    35.         foreach ($array as $key=>$value) {
    36.             if(in_array($key,$keys)) {
    37.                 unset($array[$key]);
    38.             }
    39.         }
    40.         return $array;
    41.     }
    42.     public function plo($a,$b,$c) {
    43.    
    44.         $p = ($a + $b + $c)/2;
    45.         $s = sqrt($p * ($p - $a) * ($p - $b) * ($p - $c));
    46.        
    47.         return ($s > 0) ? $s : false;
    48.     }
    49. }
    50.  
    51. $a = new Triangle;
    52.  
    53. $arr = $a->perebor([10,20,30,40,50]);
    54.  
    55. echo $arr;
     
  3. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Вот, дома немного подправил. Вроде работает.
    PHP:
    1. <?php
    2.  
    3. class Triangle {
    4.     public function getSides($sides = []) {
    5.        
    6.         $tempArr = [];
    7.        
    8.         if (count($sides) > 2) {
    9.             foreach ($sides as $key_1 => $value_1) {
    10.                 foreach ($sides as $key_2 => $value_2) {
    11.                     if ($key_1 != $key_2) {
    12.                         foreach ($sides as $key_3=>$value_3) {
    13.                             if ($key_3 != $key_2 &&
    14.                                 $key_3 != $key_1 &&
    15.                                 is_numeric($value_1)&&
    16.                                 is_numeric($value_2)&&
    17.                                 is_numeric($value_1))
    18.                             {
    19.                                 $tempArr[] = [$value_1,$value_2,$value_3];
    20.                             }
    21.                         }
    22.                     }
    23.                 }
    24.             }
    25.         }
    26.         else {
    27.             return ['Вы должны ввести минимум 3 стороны!'];
    28.         }
    29.         if (count($tempArr) > 0) {
    30.             return $this->genTriangle($this->delDuplicate($tempArr));
    31.         }
    32.         else {
    33.             return FALSE;
    34.         }
    35.     }
    36.     public function delDuplicate ($array = []) {
    37.        
    38.         $tempArr = [];
    39.        
    40.         if (count($array) > 0) {
    41.             foreach ($array as $key => $value) {
    42.                 arsort($value);
    43.                 $tempArr[$key] .= implode('/',$value);
    44.             }
    45.            
    46.             $tempArr = array_unique($tempArr);
    47.            
    48.             $keys = array_keys($tempArr);
    49.            
    50.             foreach ($array as $key=>$value) {
    51.                 if (!in_array($key,$keys)) {
    52.                     unset($array[$key]);
    53.                 }
    54.             }
    55.             $result = $array;
    56.         }
    57.         return $result ?? false;
    58.     }
    59.     public function genTriangle($array = []) {
    60.        
    61.         $result = [];
    62.        
    63.         if(!empty($array)) {
    64.            
    65.             foreach ($array as $key => $value) {
    66.                 $a = $value[0];
    67.                 $b = $value[1];
    68.                 $c = $value[2];
    69.                
    70.                 $name = "<strong>$a/$b/$c</strong>";
    71.                
    72.                 $p = ($a + $b + $c)/2;
    73.                 $cc = ($p * ($p - $a) * ($p - $b) * ($p - $c));
    74.                 $s = sqrt($p * ($p - $a) * ($p - $b) * ($p - $c));
    75.                
    76.                
    77.                 $result[] .= (empty($s) || is_nan($s)) ? "Треугольник $name не существует!" : "Площадь треугольника $name равна <strong>$s</strong>";
    78.             }
    79.         }
    80.         else {
    81.             $result[] .= 'Ничего не найдено!';
    82.         }
    83.         return $result;
    84.     }
    85. }
    86. ?>
    87. <DOCTYPE html>
    88. <html>
    89.     <head>
    90.         <title>Получи свой треугольник</title>
    91.         <style>
    92.             .wrapper {
    93.                 width: 500px;
    94.                 padding: 15px;
    95.                 background-color: #cccfff;
    96.                 margin: 0 auto;
    97.             }
    98.             h1 {
    99.                 font-size: 23px;
    100.                 text-align: center;
    101.             }
    102.             label {
    103.                 display: block;
    104.                 padding: 5px;
    105.             }
    106.             .input-text {
    107.                 padding: 10px;
    108.                 width: 100%;
    109.                 margin: 10px auto;
    110.             }
    111.             .input-submit {
    112.                 display: block;
    113.                 padding: 15px;
    114.                 min-width: 100%;
    115.                 margin: 25px auto;
    116.                 cursor: pointer;
    117.             }
    118.         </style>
    119.     </head>
    120.     <body>
    121.         <div class="wrapper">
    122.             <h1>Узнай площадь треугольника!</h1>
    123.             <form method="POST">
    124.                 <label>Введите стороны треугольника через запятую</label>
    125.                 <input class="input-text" type="text" name="sides" placeholder="30,23,44,55...">
    126.                 <input class="input-submit" type="submit" name="submit" value="Рассчитать">
    127.             </form>
    128.             <?php
    129.                 if($_POST['sides']) {
    130.                    
    131.                     $triangle = new Triangle;
    132.                     $result = $triangle->getSides(explode(',',$_POST['sides']));
    133.  
    134.                     if(!empty($result)) {
    135.                         echo '<ul>';
    136.                         foreach($result as $item) {
    137.                             echo "<li>$item</li>";
    138.                         }
    139.                         echo '</ul>';
    140.                     }
    141.                 }
    142.             ?>
    143.         </div>
    144.     </body>
    145. </html>
     
  4. AlexProg

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

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Заплатил? :)
     
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    В строке 71 идет дубляж можешь его убрать, думаю он вообще не нужен.
     
  6. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    o_O ага... купаюсь в деньгах...
    --- Добавлено ---
    Где???
     
    AlexProg нравится это.
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @Sergey_Tsarev в строке 71. Там несколько пробельных символов. Вот человек думает а не убрать ли их. Чего файл раздувают...
     
    Sergey_Tsarev нравится это.