За последние 24 часа нас посетили 22856 программистов и 1271 робот. Сейчас ищут 764 программиста ...

Пифагоровы тройки

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

  1. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    Три дня потратил на что ты сделать это задание и не справился, сил моих больше нет, помогайте! (

    "Напишите скрипт, который будет находить тройки целых чисел, удовлетворяющих теореме Пифагора"

    понятно что:
    PHP:
    1. $a = 3;
    2. $b = 4;
    3. $c = sqrt(pow($a,2)+pow($b,2));
    но как находить эти "тройки" с помощью PHP я не пойму... самое обидное что эти три дня потратил не обучение php, а на алгебру школьную что в данный момент мне нужно меньше ((
     
    #1 Taktreba, 26 фев 2017
    Последнее редактирование модератором: 26 фев 2017
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    По этому в школе и учат по 10-12 лет.

    Как находить с ручкой и тетрадкой понятно?
    --- Добавлено ---
    Нужно просто проверить три числа x, y, z которые предоставят или программа сама перебором должна их находить?

    Просто пример проверки, возможно не верный
    PHP:
    1. <?php
    2. $x = 3;
    3. $y = 4;
    4. $z = 5;
    5.  
    6. if ( (pow(3, 2) + pow(4, 2)) == pow(5, 2) ) {
    7.     echo 'тройка';
    8. }
     
    #2 denis01, 26 фев 2017
    Последнее редактирование: 26 фев 2017
  3. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    ничего не получается... просто не пойму, то ли три цикла делать то ли еще чего... буду ждать пока что то поможет с решением, я сделал уже более 200 заданий для начинающих php? может не сам на 100% с подсказками но все задачи разобрал и смогу сделать сам теперь, а тут просто 3.14здец (((
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Надо было в нете поискать алгоритмы. Вот, например:
    [​IMG]
    --- Добавлено ---
    С корнем - не годится, там ограничение, что все числа в тройке должны быть натуральными
     
  5. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    PHP:
    1. echo "<table>";
    2. echo "<tr>";
    3. echo "<th>X</th>";
    4. echo "<th>Y</th>";
    5. echo "<th>Z</th>";
    6. echo "</tr>";
    7. $n = 100;
    8. for ($x = 1; $x < $n; $x++) {
    9.     for ($y = 1; $y < $n; $y++) {
    10.         for ($z = 1; $z < $n; $z++) {
    11.             if ($x*$x + $y*$y == $z*$z) {
    12.                 echo "<tr>";
    13.                 echo "<td>$x</td>";
    14.                 echo "<td>$y</td>";
    15.                 echo "<td>$z</td>";
    16.                 echo "</tr>";
    17.  
    18.             }
    19.         }
    20.     }
    21. }
    22. echo "</table>";
    Оставлю ответ для будущих поколений =)
    Я вокруг решения гулял сутки почти, в if не ту проверку делал с маааленькой ошибкой
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    А по формуле-то интереснее бы получилось. Ну ладно, можно и так.
     
    denis01 нравится это.
  7. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    да я с этой формулой чуть не чокнулся )))
    У Меня там еще осталось задание на квадратные корни, вообще атас, не знаю что с ними делать
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    @Taktreba твой код генерирует 50% дублей (типа сначала x=3, y=4, а потом y=4, x=3). Это лечится просто
    PHP:
    1. for ($y = 1; $y < $x; $y++) {
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    PHP:
    1. <?php
    2. /* Возвращает делители той же чётности */
    3. function devisors($number) {
    4.     $devisors = $number % 2 === 0 ? [2]: [1];
    5.    
    6.     $n = $devisors[0];
    7.    
    8.     while (($n +=2) < $number) {
    9.         if ($number % $n === 0) {
    10.             $devisors[] = $n;
    11.         }
    12.     }
    13.     return $devisors;
    14. }
    15.  
    16. ?>
    17. <table>
    18.     <thead>
    19.         <tr><th>a</th><th>b</th><th>c</th></tr>
    20.     </thead>
    21.     <tbody>
    22.         <?php
    23.         for ($a = 3; $a < 200; $a++) {
    24.             $devisors = devisors($a);
    25.             foreach ($devisors as $d) {
    26.                 $b = ($a ** 2 - $d ** 2) / (2 * $d);
    27.                 $c = ($a ** 2 + $d ** 2) / (2 * $d);
    28.                 echo "<tr><td>$a</td><td>$b</td><td>$c</td></tr>";
    29.             }    
    30.         }
    31.         ?>
    32.     </tbody>
    33. </table>
    Ничего сложного. Хотя, конечно, поиск делителей можно было и оптимизировать попробовать :)
     
    denis01 нравится это.