Этот урок набрал набрал достаточно большое количество комментариев и дальнейшее его комментирование отключено. Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку, посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали. Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
omk 14.06.2017 в 16:15

В 3 задаче про факториал. (произведение целых чисел от ЕДИНИЦЫ до переданного)

ivashkevich 14.06.2017 в 19:37

Глаз-алмаз :)
Спасибо, исправил.

omk 14.06.2017 в 16:18

Решение последней задачи:

<?php
function numbers(int $x) {
    if ($x == 0) {
        echo $x;
        return 0;
    }
    $y = numbers($x - 1);
    echo ', ' . $x;
    return $y;
}

numbers(5);
ivashkevich 14.06.2017 в 19:54

Принято! Отличный вариант. Однако можно чуть упростить - как я говорил, функция может и вовсе ничего не возвращать. В итоге всё можно свести к следующему коду:

<?php
function numbers(int $x) {
    if ($x == 0) {
        echo $x;
        return;
    }
    numbers($x - 1);
    echo ', ' . $x;
}

numbers(5);

По поводу бонуса написал на почту. Так держать!

[email protected] 30.09.2018 в 00:04

А если переданное значение будет отрицательное. Например -10, тогда данная функция не сработает)

[email protected] 24.09.2019 в 10:24

Я понять не могу,почему у нас отсчет идёт при выводе с 0,мы же уменьшаем переменную $x,а не увеличиваем. Значит по идее должно быть 5,4,3,2,1,0

ivashkevich 24.09.2019 в 10:53

Смотри следующий урок про отладку

[email protected] 24.09.2019 в 12:22

Посмотрел,включил XDebug . Первое действие numbers(x-1);и почему там ответ $x:1 . По идее же должно быть 4, т.к $x=5 ($x-1)=(5-1)

ivashkevich 24.09.2019 в 19:43

У меня на первом уровне погружения 5, потом 4, потом 3... Дохожу до нуля. Условие выполняется, вывожу 0. Поднимаюсь на уровень выше, следов для $x = 1 выполняется:

echo ', ' . $x;

Тут функция завершает свою работу. Возвращаюсь еще на уровень выше. там $x = 2.
Вывожу 2. И в итоге дохожу до 5. Вывожу его. Функция завершается. Возвращаюсь к месту, где она изначально была вызвана с параметром 5. Дальше кода нет. Работа скрипта завершается.

X-Nick 04.02.2020 в 12:39

solved

[email protected] 30.09.2018 в 00:06

я сделал так. Учитывая что значение может быть также и отрицательное.

<?php
function integer0 (int $x)
 {
    if ($x == 0){
        return 0;
    }
    elseif ($x > 0){
        return integer0 ($x-1) . ' '. $x;
    }
    else {return $x . ' ' . integer0 ($x+1);}
 }

 $b = -25;
 echo integer0 ($b);
?>
ivashkevich 30.09.2018 в 10:56

отличный вариант!

PHPStudent 05.07.2017 в 13:39

Ребята, вы молодцы. Огромное Вам спасибо. Подскажите когда будет продолжение курса?

ivashkevich 05.07.2017 в 15:14

Привет, спасибо!
На выходных появится новый урок, будет интересная тема =)

PHPStudent 05.07.2017 в 15:17

Спасибо, жду с нетерпением! =)

PHPStudent 05.07.2017 в 18:05

Не могу понять, а как программа в последней задаче пробегает от 0 до нужного значения.

ivashkevich 05.07.2017 в 18:14

А на листочке уже пробовали пошагово разобрать?
Вот представьте:

  1. передали в функцию число 3
  2. сравнили с 0, условие выполнилось? Нет
  3. На следующей строке происходит вызов этой же функции, выполнение текущего вызова "останавливается" и ждёт пока выполнится следующий
  4. В функцию передалось число 2

Дойдите так до 0, и напишите, стало ли понятно.

PHPStudent 05.07.2017 в 18:32

Извините но не понимаю. Если я устанавливаю первоначальное значение числа например 5 то почему стартует с 0?

ivashkevich 05.07.2017 в 19:20

Потому что именно при нуле сработает первый echo. Затем мы выполним return и вернемся на уровень выше, где в функцию была передана единица. После вызова функции с передачей в неё нуля идет строка, которая выведет единицу. И так далее. Если сейчас нет понимания - ничего страшного. Тема рекурсии не сразу дается. Дождитесь следующего урока, там точно станет понятнее, обещаю =)

[email protected] 10.07.2018 в 15:31

Я вот, что-то не понимаю. Почему в функцию передается 1, потом 2 и т.д.?

ivashkevich 10.07.2018 в 16:14

Нет, в функцию передаётся как раз в обратном порядке: 5, 4, 3...
Посмотрите следующий урок про отладку приложений, должно стать понятнее. Там тоже будет рекурсия.

Andy 06.03.2019 в 16:20

ТОже вопрос возник такой. Глаз замылился, потупил посидел. Спасибо, разъяснили!

Anril34 13.07.2017 в 23:17
<?php
function minimumNumber(float $x, float $y, float $z)
{
    if ($x > $y)
    {
        $minimum = $y;
    } else {
        $minimum = $x;
    }
    if ($minimum > $z)
    {
        return $z;
    } else {
        return $minimum;
    }
}
$x = 9;
$y = 5.1;
$z = 99.3;
echo 'Минимальное число: ' . minimumNumber($x, $y, $z);
ivashkevich 14.07.2017 в 19:49

Всё верно =)

[email protected] 05.05.2018 в 12:21

Какой код корректней использовать для решения этой задачи? Вышеуказанный или

<?php
    function getMin(float $x, float $y, float $z){
        if ($x < $y && $x < $z){
            return $x;
        }else if ($y < $z){
            return $y;
        }else{
            return $z;
        }
    }

    $a = 7;
    $b = 10;
    $c = 22;

    echo getMin($a, $b, $c);
?>
ivashkevich 05.05.2018 в 15:07

Я бы выбрал Ваш вариант, но тот тоже вполне имеет право на существование. elseif пишется слитно.

Verbum 11.07.2018 в 09:54

Catchable fatal error: Argument 1 passed to getMin() must be an instance of float, integer given, called

ivashkevich 30.10.2018 в 10:28

используйте PHP7

spacepancake 27.07.2017 в 18:11

Не могу понять как работает это выражение :( $x * power($x, $n - 1), т.е я понимаю, что под этим скрывается 2 * power(2, 2), но как происходит умножения двойки на функцию с двумя аргументами? Как двойка выбирает на какой аргумент умножать? Действительно мозги закипают!)

ivashkevich 27.07.2017 в 18:56

Посмотрите следующий урок, должно стать понятнее :)

spacepancake 27.07.2017 в 19:01

Благодарю! Кстати отличный курс, прошёл на одном дыхании. THUMBS UP

ivashkevich 27.07.2017 в 19:03

Спасибо! Но это только треть, от того что я запланировал :)

spacepancake 28.07.2017 в 07:13

Бамба!

phenomg 09.08.2017 в 15:10

1)

function minimal($x, $y, $z) {
   if ($x > $y) {
     if($y > $z) { 
       return $z;
     }
     else return $y;
   }
   elseif ($x > $z) {
     return $z;
   }
   else {
     return $x;
   }
} 

$a = (float) 7.5;
$b = (float) 5.2;
$c = (float) 21.0;

echo "Минимальное число: " . minimal($a, $b, $c);
ivashkevich 10.08.2017 в 17:57

А зачем вы сделали приведение к float при определении переменных? И нужно добавить приведение к типу в аргументах функции. А в целом - алгоритм верный.

studentDev 22.02.2020 в 11:39

Я не понял алгоритм, можете сказать как он работает?

phenomg 09.08.2017 в 15:17

2)

function x2(&$x, &$y) {
    $x *= 2;
    $y *= 2;
} 

$a = 5;
$b = 20;

echo "Первое число: $a. Второе число: $b. <br/>";

x2($a, $b);

echo "Первое число после выполнения функции: $a. Второе число после выполнения функции: $b. <br/>";
ivashkevich 10.08.2017 в 17:58

Всё хорошо, только добавьте типы для аргументов функции =)

[email protected] 15.08.2017 в 16:07
function getMin(float $x, float $y, float $z) {
    if(($z > $x)&&($x < $y)){//если min x
        return $x;
    } elseif(($z > $y)&&($y < $x)) {//если min y
        return $y;
    }
    return $z;
}
ivashkevich 15.08.2017 в 18:37

Верно!

trialex3 02.09.2017 в 17:03

ПО поводу последней задачи так и не разобрался. Вижу решение, но как это все работает вместе - хз. Будем думать.

vasyaproject 01.10.2017 в 00:09

А я первую функцию с одной & писал - это неверно?

function minArg(float $x, float $y, float $z) 
{
    if ($x < $y & $x < $z){
        return $x;
    } elseif ($y < $x & $y < $z){
        return $y;
    } else {
        return $z;
    }
}
echo minArg(6.6, 4.9, 4.5);
ivashkevich 01.10.2017 в 05:08

Конечно, неверно. Это совершенно другой оператор.

Tays 20.10.2017 в 19:17

По поводу последнего задания. Почему уменьшаем на единицу, а выводится с увеличением?

function numS(int $a){
    if($a == 0){
        echo $a;
                echo '<br>';
                return 0;
    } 
        {
        $n = numS($a - 1);
                echo $a;
        echo '<br>';
        return $n;
} 
}
numS(7);
ivashkevich 20.10.2017 в 20:45

А вы запустите код в отладчике, и всё поймёте =) Вы же смотрели урок про отладку с помощью XDebug?
P.S. код после блока if {...} не надо заключать в фигурные скобки. Это бессмысленно. Просто продолжайте писать функцию дальше без скобок.

WarLikeLaux 10.11.2017 в 07:49

Первое задание
enter image description here

ivashkevich 10.11.2017 в 17:19

Предпочтительнее - оформлять код с помощью markdown-разметки, вот так:
```
код
```

Как и у большинства начинающих - проблема с отступами и оформлением. Почитайте про Reformat Code в PhpStorm. Закрывающий тег в конце не нужен.
Задание сделано неверно, перечитайте внимательно.

WarLikeLaux 10.11.2017 в 08:00

Второе задание
enter image description here

ivashkevich 10.11.2017 в 17:26

Конкатенация строк происходит с помощью точки:

echo $x . ' ' . $y . ' ' . $z;
WarLikeLaux 10.11.2017 в 18:37

Да, точно, забыл, не привык еще) Спасибо!)

WarLikeLaux 10.11.2017 в 08:27

Третье задание
enter image description here

ivashkevich 10.11.2017 в 17:26

Тут всё хорошо.

bratko 11.03.2019 в 14:48

Подскажи куда правильно вставить var_dump или что нужно сделать, чтоб увидеть как получилось 120 в данном коде:

function factorial($x)
{
    if ($x == 1 || $x == 0) {
        return 1;
    }
    return $x * factorial($x - 1);
}
echo factorial(5);

с помощью xDebug пробовал, но не увидел как получается 120

ivashkevich 11.03.2019 в 21:05

Перед return-ами.

WarLikeLaux 10.11.2017 в 08:46

Четвертое задание
enter image description here

ivashkevich 10.11.2017 в 17:27

Тут тоже всё верно)

serb2017 10.11.2017 в 23:38

Вариант для последнего задания. Выводит числа от m до n.

function Nature($m, $n)
{
    echo $m++, ',';
    if ($m == $n + 1) return;
    return Nature($m, $n);
}

$n = 10;
$m = 0;
Nature($m, $n);
ivashkevich 11.11.2017 в 04:09

Конкатенация строк происходит с помощью точки:

echo $x . ' ' . $y . ' ' . $z;

Имена функций начинаются с маленькой буквы.

serb2017 11.11.2017 в 10:34
function getMin3(float $x1, float $x2, float $x3)
{
    if ($x1 < $x2 && $x1 < $x3) {
        return $x1;
    }
    if ($x2 < $x3) {
        return $x2;
    }
    return $x3;
}

$x1 = 3.25;
$x2 = 3.2;
$x3 = 3.3;
echo "минимально число из   $x1, $x2, $x3 ". '<br>'. getMin3($x1, $x2, $x3);
ivashkevich 11.11.2017 в 13:30

Верно! =)

Lungren 25.03.2018 в 21:14
function getMinn($x, $y, $z)
{
    if ($x < $y) {
        return $x;
    } elseif ($y < $z) {
        return $y;
    } else {
        return $z;
    }
}

$a = 6;
$b = 3;
$c = 1;
echo 'Наименьшее число ' . getMinn($a, $b, $c);
ivashkevich 26.03.2018 в 04:55

Ошибка. Если я передам числа 2, 3, 1, то вернется число 2.

1nSide 27.03.2018 в 15:54

1 Задача

<?php

function getMin ($x, $y, $z) {
    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $x && $y < $z) {
        return $y;
    } else return  $z;
}

$a = 6;
$b = 10;
$c = 8;

echo 'Наименьшее число = ' . getMin($a, $b, $c);
ivashkevich 27.03.2018 в 18:24

Всегда оформляйте код после if и else в блоки с помощью фигурных скобок.

else {
    ...
}
1nSide 27.03.2018 в 16:12

2 Задача

<?php

function multiply2(&$x, &$y){
    $x = $x * 2;
    $y = $y * 2;
}

$a = 4;
$b = 10;

multiply2($a, $b);
echo 'Первое число умноженое на 2 = ' . $a;
echo '<br>';
echo 'Второе число умноженое на 2 = ' . $b;
ivashkevich 27.03.2018 в 18:26

Тут всё гуд)

1nSide 27.03.2018 в 18:26

3 Задача

<?php
function factorialOfNumber ($number){
    var_dump($number);
    echo '<br>'.'<br>';
    if($number == 0){ // если равно 0 то программа завершает рекурсию
        return 1;
    }
    return $number * factorialOfNumber($number-1); // число умножаем на число, после прохождения условия вычитается один 
}

$a = 5;

echo 'Факториал числа ' . $a .' = '. factorialOfNumber($a);
ivashkevich 27.03.2018 в 18:36

У функции открывающая фигурная скобка находится на следующей строке. В остальном - норм.

1nSide 28.03.2018 в 14:28

2 раза пересматривал видео урок чтобы понять=)
В комментарии не смотрел, крутые курсы все достаточно понятно, было бы круто если бы задач было побольше.

4 Задача

<?php
function getSumOfNumbersFromZero($nmin,$nmax)
{
    echo 'Число: ' . $nmin . '<br>';

    //если минимально значение не равно максимальному продолжается проверка условия   
    if($nmin==$nmax){
        return;
    }

    // прибавляем в рекурсии +1 к минимальному значению
    // пока минимальное значение не станет равным максимальному и условие if выполнится
    return getSumOfNumbersFromZero($nmin+1,$nmax);
}

echo getSumOfNumbersFromZero(0,10);
ivashkevich 28.03.2018 в 19:15

Спасибо, учту) По поводу двух раз - это до вас ещё быстро дошло.
Что касается задачи - привыкайте использовать типы для аргументов функций.

function getSumOfNumbersFromZero(int $nmin, int $nmax)

Будет плюсом при трудоустройстве, если вы будете знать возможности PHP7.

1nSide 31.03.2018 в 11:28

Думал что язык сам подбирает тип переменных поэтому не считал нужным писать их в аргумент функции)

ivashkevich 31.03.2018 в 13:36

Он их не подбирает. Если их не указать, то они придут как есть. Это плохо, когда в аргументах может прийти что угодно. Это приводит к большему числу ошибок.

hkam11 28.06.2018 в 13:56

Добрый день. Подскажите, пожалуйста, при рекурсии получается, что функция преобразует запись 2^3 в 2x2^2, а потом в 2x2x2^1?

ivashkevich 28.06.2018 в 18:33

Добрый. Да, вроде того. Посмотрите видео в следующем уроке, после него точно поймёте.

hkam11 28.06.2018 в 15:21

Задание №4.

<?php
function getNumbers (int $n) {
    if ($n==0) {
        return $n;

    } else {
        echo $n, ' ';
        return getNumbers($n-1);
    }
}
echo getNumbers(6);

Не могу понять, как сделать, чтобы отсчет начинался с 0, а не с заданного числа

ivashkevich 28.06.2018 в 18:39

Подсмотрите в других комментариях, не страшно :)

FantaZ 11.07.2018 в 19:21

По поводу последней задачи - не уверен, но мне кажется самый лаконичный вариант:

<?php
declare(strict_types=1);

function numbers(int $num) {
    if ($num > 0) {
        numbers($num - 1);
    }

    echo $num;
    return;
}

numbers(5);
ivashkevich 11.07.2018 в 21:40

Отлично! Но return в конце не имеет смысла. Уберите, пока никто не увидел =)

[email protected] 16.07.2018 в 19:58
<?php
//Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
//Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
//Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)
//Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание
// повышенной сложности. Кто справится и первым напишет верное решение в комментах – тот красавчик и получит от проекта небольшой бонус.
//__________________________________________________________________
echo '<b>1-е задание</b></br>';
function minimumNumber(float $x, float $y, float $z)
{
    if ($x > $y) {
        $minimum = $y;
    } else
    {
        $minimum = $x;
    }
    if ($minimum > $z)
    {
        return $z;
    }   else
    {
        return $minimum;
    }
}
$a = 1.27;
$b = 1.26;
$c = 1.25;
echo 'Минимальное число будет равно '.minimumNumber($a, $b, $c);
echo "</br>";
//_______________________________________________________________
echo '<b>2-е задание</b></br>';
function multiplication(&$a)
{
    $a = $a*2;
}
$x = 100;
$y = 200;

multiplication($x);
echo "x = $x <br/>";
multiplication($y);
echo "y = $y </br>";
//___________________________________________________________________
echo '<b>3-е задание</b> </br>';
function faktorialOfNumbers(int $x)
{
    echo "$x *";
    if ($x <= 1)
    {
        return 1;
    }
    return $x * faktorialOfNumbers($x-1);
}
$a = 5;
echo 'Факториал числа '.$a.' = '.faktorialOfNumbers($a).'</br>';

//__________________________________________________________________
echo '<b>4-е задание</b></br>';
function getMaxNumberFromZero(int $min, int $max)
{
    echo "Число $min</br>";
    if ($min == $max)
    {
        return ;
    }
    return getMaxNumberFromZero($min + 1, $max);
}
$min = -10;
$max = 10;
echo 'Вывод чисел от '.$min.' до '.$max.'</br>';
echo getMaxNumberFromZero($min, $max);
ivashkevich 17.07.2018 в 18:16

Отлично! Из замечаний:

  1. не нужно в функции делать вывод чего-либо, она должна только вернуть число.
  2. всё хорошо, но return на последней строке функции необязателен, достаточно просто вызывать её, ничего не возвращая.
[email protected] 24.07.2018 в 13:20

C последней функцией повышенной сложности не справилась (( Рассмотрела, как решили другие, все вроде бы понятно, но вот сама не дошла до этого, увы.
Фун №1

<?php
function minNumFrom (float $a, float $b, float $c)
{ if ($a<$b && $a<$c)
   {return $a;}

   elseif ($b<$a && $b<$c)
   {return $b;}

    return $c;
}

$a=25.7;
$b=808.1;
$c=10.8;

    echo 'Минимальное число ' . minNumFrom ($a,$b,$c);
?>

Фун №2

<?php
function multi2(int &$x, int &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 9;
$b=467;

multi2($a, $b);

echo 'Первое число, умноженное на 2 равно ' . $a . '<br> ' . ' Второе число, умноженное на 2 равно ' . $b;

?>

Фун №3

<?php

function fac($a)
{
    if ($a>2)
    {return  $a * fac($a-1);}

    return $a;

}

$a=3;

echo 'Факториал числа ' . $a . ' равен ' . fac($a);

?>
ivashkevich 24.07.2018 в 16:02

Отлично!

Fox-24 12.08.2018 в 18:08

Добрый день.

Начиная с PHP 5.3.0, вы можете получить предупреждение о том, что передача переменной по ссылке устарела, если используете & в foo(&$a);. Начиная с PHP 5.4.0 передача переменной по ссылке стала невозможна, поэтому использование этого приема приведет к фатальной ошибке.

ivashkevich 13.08.2018 в 15:21

Добрый день, это про то, что нельзя при вызове функции передавать ссылку:

$x = func(&$y);

Но при определении функции это можно делать:

function func (&$x)
{
    ...
}
Fox-24 12.08.2018 в 19:58

Благодарю за урок!

<?php

// Найти минимальное число из трех
function minNum($a, $b, $c)
{
    if ($a < $b) { // Сравниваем первые два числа
        $num = $a; // Если а меньше b, записываем число в переменную num
    } else {
        $num = $b; // Если b меньше a, записываем число в переменную num
    }

    if ($num < $c) // Наименьшее число из первого сравнения сравниваем с третьим числом
        return $num;
    else {
        return $c;
    }
}

$a = 2;
$b = 6556;
$c = 55;

echo minNum($a, $b, $c); // ывод

// Произведение целых чисел от единицы до переданного
function fuctNum($a)
{

    if ($a == 1) {   // Если переданное число больше 1, вернуть значение
        return $a;
    } else {
        return $a * fuctNum($a - 1); // Умножение
    }

}

$a = 5;

echo fuctNum($a);

// Вывод на экран целых чисел от 0 до переданного значения
function funInter($a)
{

    if ($a >= 0) {
        funInter($a - 1); // Уменьшаем заданное число на единицу
        echo $a . '</br>';   // И выводим каждое новое число из предыдущей операции с новой строки

    } else {
        return;
    }

}

funInter(15);
ivashkevich 13.08.2018 в 15:17
function funInter($a)
{

    if ($a >= 0) {
        funInter($a - 1); // Уменьшаем заданное число на единицу
        echo $a . '</br>';   // И выводим каждое новое число из предыдущей операции с новой строки

    } else {
        return;
    }
}

Изменится ли что-то, если убрать вот этот кусок:

    else {
        return;
    }
Fox-24 13.08.2018 в 15:21

ничего не изменится)

ivashkevich 13.08.2018 в 15:29

Правильно, значит этот кусок кода убираем, и код становится проще :)

ivashkevich 13.08.2018 в 15:18

Не забывайте указывать типы у аргументов функций!

Fox-24 13.08.2018 в 15:21

Да, спасибо, я их специально не указываю т.к.:

Scalar type hints are available in PHP 7

А у меня в проекте 5.4.

Но я это учитываю.

ivashkevich 13.08.2018 в 15:31

Советую Вам всё же перейти на версию 7, 5.4 - старенькая. На работе будут требовать 7, и будет круто, если Вы уже её использовали.

Fox-24 13.08.2018 в 15:34

Да, я конечно же перейду, у меня просто есть проект в котором сейчас 5.4 и пока удобнее оставаться на ней. Но преимущества 7-ки я оценил.

honor 28.08.2018 в 16:05
function lowSum(float $a, float $b, float $c){
                        if ($a > $b){
                            return $a;
                        }elseif($a > $c){
                            return $a;
                        }elseif($b > $a){
                            return $b;
                        }else{
                            return $c;
                        }
                    }
                    echo 'наибольшее число'.lowSum(7.2, 6.1, 2.3);
ivashkevich 01.09.2018 в 13:19

Это к какому заданию домашка?

AxLT 30.08.2018 в 02:05

Первое:

function getMin(float $x, float $y, float $z){
    if ($x < $y){
        if ($x < $z){
            return $x;
        }
    }
    elseif($y < $z){
        return $y;
    }
    return $z;
}
echo 'Наименьшее число float из трех: ' . getMin(1.3, 2.1, 3.2)

Второе:

function doubleSomeNumber(int &$x, int &$y){
    $x *= 2;
    $y *= 2;
    return;
}
$x = 5;
$y = 3;
echo doubleSomeNumber($x,$y);

Третье

//Факториал числа
function factorialOfNumber(int $n){    
    if ($n == 1){
        return $n;
    }
    return $n * factorialOfNumber($n-1);
}
echo factorialOfNumber(3)

Все ли верно или что то лучше написать иначе?
4 глянул в комментах, не очень понятно почему выводит на экран с нуля а не наоборот =)

ivashkevich 01.09.2018 в 13:21

Всё норм, но непонятно зачем во втором вы возвращаете строку из двух склеенных чисел. По поводу четвертого - переходите к следующему уроку, будет понятнее.

AxLT 02.09.2018 в 00:31

Подправил чуток второе. Да с отладкой, четвертое стало понятнее, но еще надо с рекурсией разбираться

<?php

function doubleSomeNumber(int &$inputNumFirst, int &$inputNumSec)
{
    $inputNumFirst *= 2;
    $inputNumSec *= 2;
}

$someNumFirst = 5;
$someNumSec = 3;
doubleSomeNumber($someNumFirst,$someNumSec);
echo 'Первое произведение равно: ' . $someNumFirst . '<br>Второе произведение равно: ' . $someNumSec;
ivashkevich 02.09.2018 в 14:17

Окей, ничего страшного, рекурсия многим непонятна на первых порах.

artemjeka 03.09.2018 в 08:50

1:

function smallOfThreeArg(float $a, float $b, float $c)
{
    if ($a < $b) {
        if ($a < $c) {
            return $a;
        }
        return $c;
    }
    return $b;
}
echo smallOfThreeArg(5.2, 8.6, 3.6);

2:

$a = 4;
$b = 3;
function twoArgMultiplyBy2(&$a, &$b)
{
    $a = $a * 2;
    $b = $b * 2;
}
twoArgMultiplyBy2($a, $b);
var_dump($a, $b);

3:

function factorialBy1ToArg($arg) // 4 3 2 1 0
{
    if ($arg >= 1) {
        return $arg + factorialBy1ToArg($arg - 1); // 5 6 10
    }
}
echo factorialBy1ToArg(4); // 10

4.0:

Здесь обошелся без рекурсии и более понятно.

function echoNumberBy0ToArg_v1($arg)
{
    for ($i = 0; $arg >= $i; $i++) {
        echo $i . '<br />';
    }
}
echoNumberBy0ToArg_v1(2);

4.1:

Здесь не поянтно почему cперва 0, а не 1 ведь arg-(arg-1)=1?

function echoNumberBy0ToArg_v2($arg) // 2
{
    if ($arg >= 0) { // 2
        echo $arg - echoNumberBy0ToArg_v2($arg - 1) . '<br />'; // 0 1 2 
    }
}
echoNumberBy0ToArg_v2(2);
ivashkevich 05.09.2018 в 23:20

Нужно указывать return-type для функции, через двоеточие, как в уроке.

3 - а где обработка случая, когда не больше единицы? Вам повезло, что null преобразовался в 0. Факториал - это произведение а не сумма.

4 - в именах функций в современном PHP не используются подчеркухи. Потому что выражение сначала вычисляется, а затем выводится. Самым первым будет вычислено выражение для нуля, оно же и выведется первым.

artemjeka 06.09.2018 в 16:40

Благодарю за замечания!
3. Так будет корректно? Или не очень?

function factorialBy1ToArg($arg) // 4 3 2 6 24 120
{
    if ($arg >= 1) {
        if ($arg > 2) { // 4 3 2
            $arg *= factorialBy1ToArg($arg - 1); // 12 6
        }
        return $arg; // 2 6 24 120
    } else {
        echo 'Нельзя вычислить факториал от числа меньше 1-ого';
    }
}
echo factorialBy1ToArg(5); // 120
ivashkevich 07.09.2018 в 08:51

Привет, не очень, потому что:

  1. факториал нуля равен единице
  2. где работа над замечаниями, что я писал выше? Где типы аргументов, где тип возвращаемого значения?
  3. что за название? Почему не просто factorial? =)
Benya 18.09.2018 в 10:39

3 задание

function fact(int $x)
{
    if ($x == 1) {
        return $x;
    }
    return $x * fact($x-1);
}

echo "rezult---" . fact(5);
ivashkevich 22.09.2018 в 20:10

Отлично =)

ilyaOrlov 29.09.2018 в 15:35

Верно ли выполнение третьего задания?

function Factorial (int $a)
{
    if ($a == 0) {
        return $a + 1;
    } elseif ($a == 1) {
        return $a;
    }
    return $a * getFactorial ($a - 1);
}

echo getFactorial (6);
ivashkevich 30.09.2018 в 10:42

ну не работает же, ёлки-палки - функция называется Factorial (что некорректно - все имена функций должны начинаться с маленькой буквы), а вызывается и в теле, и снаружи getFactorial.

после блока с return необязательно ставить elseif - если верхнее условие выполнится, то функция не пойдет дальше, поэтому лучше просто if c новой строки:

function factorial (int $a): int
{
    if ($a === 0) {
        return $a + 1;
    }

    if ($a === 1) {
        return $a;
    }

    return $a * factorial($a - 1);
}
dsokol-ok 09.10.2018 в 11:33

Спасибо за урок!

function getIntFromZero ($a)
{
   if ($a >= 0) {
       if ($a == 0) {
           echo $a . '<br>';
           return;
       }
       echo $a . '<br>' . getIntFromZero($a - 1);
       return;
   }
   echo 'Введите неотрицательное число!<br>';
}
$a = 47;
getIntFromZero($a);
ivashkevich 12.10.2018 в 08:39

Хорошо!

mangol1167 31.10.2018 в 10:49
function getMin(float $a, float $b, float $c) //1ое задание
{
if ($a < $b && $a < $c) {
return $a;
} elseif ($b < $c) {
return $b;
} else {
return $c;
}
}
$x = 10;
$y = 8;
$z = -9;
echo 'Минимальное число ' . getMin($x, $y, $z); 

//2ое задание
function getMultiplication (&$x, &$y)
{
$x = $x * 2;
$y = $y * 2;
}
$a = 10;
$b = 4;
getMultiplication($a,$b);
echo $a . '<br>';
echo $b . '<br>';

В рекурсии не разобрался (отчасти понял), но комменты почитал и попробовал код других ребят копировать и разобрать. Буду дальше учить... разберусь)

ivashkevich 01.11.2018 в 22:48

Отличная домашка! Но можно еще добавить return-значения для функций (после двоеточия).

mangol1167 02.11.2018 в 07:24

Спасибо, это со временем наверное придет)

ivashkevich 02.11.2018 в 07:38

Да, конечно)

Marek 08.11.2018 в 15:00
<?php

    function minNumber(float $x, float $y, float $z)
    {
        function minValue($x, $y)
        {
            return $x < $y ? $x : $y;
        }

        return minValue(minValue($x, $y), $z);
    }

    echo minNumber(88.1, 99.6, 6.7);

Задача 1: нахождение минимального числа.

ivashkevich 08.11.2018 в 23:35

Норм)

[email protected] 11.11.2018 в 01:38
function printOfNumbers($b){
    if($b == 0){
         echo $b;
    }
    else {
        printOfNumbers($b-1);
        echo $b;
    }
}
printOfNumbers(9);

Вообще без "return" сделал. Возможно, в моем случае как-то по-другому вывод происходит, нежели в вашем примере, но все работает.

ivashkevich 12.11.2018 в 01:54

echo - выводит, return - возвращает. То есть потом значение, которое функция вернула, можно использовать. Например, вот так:

$x = getNumbers();
$y = $x / 2;
echo $x;
echo $y;
virtual2018 19.11.2018 в 21:59
<?php
function maxNumber(float $a, float $b, float $c)
{
 $maxNumber = $a;
 if ($maxNumber < $b) $maxNumber = $b;
 if ($maxNumber < $c) $maxNumber = $c;

 return $maxNumber;
}

$a = 3.1;
$b = 15.3;
$c = 11.1;
echo "Исходные числа a = $a b = $b c = $c".'<br>';
echo "Максимальное из трех чисел ".maxNumber($a,$b,$c).'<br><br>';

function multiplication_2(&$x,&$y)
{
    $x *=2;
    $y *=2;
}

$x = 5;
$y = 10;

echo "Исходные числа x = $x y = $y <br>";
multiplication_2($x,$y);
echo 'Числа умноженные на 2: <br>'.$x." ".$y;

function factorial(int $x)
{
    if ($x == 1) return $x;
    else $x *= factorial($x - 1);

    return $x;
}

$x = 4;

echo "<br><br>Число x=$x, его факториал = ".factorial($x);

function printNumbers(int $x) {
    if ($x == 0) {
        echo '<br><br>Список значений числа<br>';
        echo $x;
        return;
    }
    printNumbers($x - 1);
    echo ', ' . $x;
}

printNumbers(7);

Исходные числа a = 3.1 b = 15.3 c = 11.1
Максимальное из трех чисел 15.3

Исходные числа x = 5 y = 10
Числа умноженные на 2:
10 20

Число x=4, его факториал = 24

Список значений числа
0, 1, 2, 3, 4, 5, 6, 7

ivashkevich 19.11.2018 в 22:39
  1. Всегда после if ставьте фигурные скобки. Сэкономите в дальнейшем много времени и нервов.
  2. Открывающая скобка тела функции { всегда на новой строке
  3. Имена функций пишутся camelCase-ом. multiplication_2 - некорректное имя.

По логике - всё отлично.

[email protected] 23.11.2018 в 19:45

Последняя задача без рекурсии

<?php

function list1($x)
{
    $str = '';
    for (;$x>=0;$x--) {
        echo $x.'<br>';
    }
    return  $str;
}
echo list1(10);
ivashkevich 24.11.2018 в 21:49

Для чего здесь переменная str? Зачем в конце что-то возвращать и выводить результат функции, если она внутри своего тела выводит нужные данные.
Почему не указали типы аргументов? Где тип возвращаемого значения?
И почему не сделали как написано в задании, через рекурсию?

Waldemar 25.11.2018 в 13:13

Немного застрял поначалу в первой задаче по минимуму из трёх значений.
Посмотрел следующий урок по Xdebug, вернулся и для большего понимания сделал такой код:

<?php
$a = 11; $b = 23; $c = 5;

$min1 = $a < $b ? $a : $b;
$min2 = $min1 < $c ? $min1 : $c;

echo $min2;

На выходе получается меньшее из трёх. Ух, спасибо, Артём, такие уроки мощно прочищают мозги, заставляют заново крутиться заржавевшие механизмы. Осталось запомнить слово "тернарный"))

ivashkevich 25.11.2018 в 17:26

Хах) На здоровье! Успехов в дальнейшем обучении!

Pavel-Tonk 28.11.2018 в 22:49

Так решил задачку с наименьшим числом(необычненько). вопрос есть ли у PHP массив arguments как в js?

function getMinNum(float $x, float $y, float $z) {
    $arr[] = $x;
    $arr[] = $y;
    $arr[] = $z;
    sort($arr);
    return $arr[0];
}
echo getMinNum(2.5,1,26);

Мое решение факториала.

function getFactorialNum($x) {
    return $x === 1 ? 1 : $x * getMinNum($x-1);
}
echo getFactorialNum(5);

Так получилось без рекурсии последнюю задачу решить

function getAllNum(int $x) {
    for ($i = 0; $i <= $x; $i++) {
        echo $i.' ';
    }
}
getAllNum(5);

Так додумался с рекурсией

function recFunc($z, $y = 0) {
    echo $y.' ';
    return $y === $z ? $z : recFunc($z, $y + 1);
}
recFunc(8);

Может быть мое решения кому-то пригодятся или помогут=)

ivashkevich 28.11.2018 в 22:55

По решениям - всё ок. По вопросу - функция func_get_args(). Но еще можно вот так:

function func(...$array) {
Pavel-Tonk 29.11.2018 в 00:20

Спасибо, буду читать матчасть!=)

Bogdan 08.12.2018 в 22:11

а то что после последнего символа в выводе у него пробел, это ок?

ivashkevich 09.12.2018 в 01:04

Допустимо. Но будет лучше без него.

Bogdan 08.12.2018 в 21:09

Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.

function minOfThreeFloats(float $a, float $b, float $c)
{
    if ($a == $b || $a == $c || $b == $c) {
        echo "в переменных присутствуют одинаковые значения<br>";
        return;
    }
    if ($a <= $b && $a < $c) {
        echo "Первый аргумент меньше<br>";
        return $a;
    } else if ($b < $a || $b < $c) {
        echo "Второй аргумент меньше<br>";
        return $b;
    }
    echo "Третий аргумент меньше<br>";
    return $c;
}

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

function multiplAllArgumOn2(&$a, &$b)
{
    $a *= 2;
    $b *= 2;
}

Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)

function factorial($a)
{
    if ($a == 1) {
        return $a;
    }
    return $a * factorial($a - 1);
}

Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности. Кто справится и первым напишет верное решение в комментах – тот красавчик и получит от проекта небольшой бонус. UPD: первым справился человек с ником omk. Вариант его решения вы можете увидеть в комментариях.

function echoInteger(int $a) {
    if ($a == 0) {
        echo "0";
        return;
        }
    echo ", " .$a . echoInteger($a - 1);
    }
ivashkevich 09.12.2018 в 01:09
  1. Функция всегда должна возвращать минимальное значение и не должна ничего выводить. Если все значения равны, значит минимальное значение - это значение любого из этих чисел.
  2. Всё супер
  3. Тоже отлично
  4. Супер!
polvanovv 23.12.2018 в 13:24

Здравствуйте! Подскажите почему не работает вариант с декрементом в функции факториала?
рабочий вариант:

function factorialOfNumNew( int $n)
{
    if ($n == 1) {
        return $n;
}
        return $n * factorialOfNumNew($n - 1);
}
$num = 5;
echo factorialOfNumNew($num);

Такой вариант выдает ошибку:

return $n * factorialOfNumNew($n--);
ivashkevich 23.12.2018 в 13:50

Прочитайте про постинкремент и преинкремент.

polvanovv 23.12.2018 в 13:57

Если использовать предекремент результат неверный.

ivashkevich 23.12.2018 в 15:11

Потому что он в выражении выполняется раньше всего остального. Он уменьшает n ещё до того как оно умножается на правую часть выражения. Для того чтобы это понять нужно изучить приоритеты операторов в PHP.

polvanovv 24.12.2018 в 17:52

Спасибо за ответы!

polvanovv 23.12.2018 в 13:27

Еще можно библиотеку GMP подключить и использовать её фунцию)

function factorialOfNum(int $x)
{
    return gmp_fact($x);

}

$y = 4;
echo factorialOfNum($y);
XXX 02.01.2019 в 15:16

Решение

XXX 02.01.2019 в 15:17
<?php
function minFloat (float $x, float $y, float $z)
{
    if($x<$y and $x<$Z){
        return $x;
    }
    elseif($y<$x and $y<$z){
        return $y;
    }
    elseif($z<$x and $z<$y) {
        return $z;
    }
}
$x=10;
$y=6;
$z=2;
echo minFloat($x,$y,$z).'<br>';

function mult2(&$e,&$r){
    $e=$e*2;
    $r=$r*2;
}
$e=4;
$r=3;
mult2($e,$r);
echo $e.' '.$r.'<br>';

function factorial($x)
{

    if($x==1)
        return 1;
    return $x*factorial($x-1);
}
echo factorial(0);
ivashkevich 02.01.2019 в 21:39

Хорошо. Тип аргумента для факториала тоже бы добавить. И прочитай про типы возвращаемых значений ещё.

SashkoUkraine 17.01.2019 в 18:45
<?php
1) function getMinNumber(float $num1, float $num2) {
    echo min($num1, $num2);
}

getMinNumber(42.9, 24.2);

2) function getMultiplyNumber(&$num1, &$num2) {
    echo $num1 = 2 * $num1;
    echo "<br>";
    echo $num2 = 2 * num2;

}

$a = 24;
$b = 123;

getMultiplyNumber($a, $b);
ivashkevich 17.01.2019 в 21:23
  1. Функция должна принимать на вход 3 аргумента. Она должна возвращать значение, а не выводить.
  2. Функция должна только изменить значения по ссылкам, она не должна ничего выводить. Вывод переменных стоит сделать после вызова функции.
SashkoUkraine 17.01.2019 в 21:46
function getMinNumber(float $num1, float $num2, float $num3) {
    return min($num1, $num2, $num3);
}

getMinNumber(42.9, 24.2, 59.7)

function getMultiplyNumber(&$num1, &$num2) {
    $num1 = 2 * $num1;
    $num2 = 2 * num2;

}

$a = 24;
$b = 123;

getMultiplyNumber($a, $b);

echo $a;
echo "<br>";
echo $b;
ivashkevich 17.01.2019 в 22:58

Отлично!

rewsteer 20.01.2019 в 08:26
<?php

function power($x, $n)
{
    var_dump($x, $n);
    // Если сейчас степень равна единице, то возвращаем само это число
    if ($n == 1) {
        return $x;
    }

    // В остальных случаях - умножаем число на возведённое в степень n - 1 и возвращаем его
    return $x * power($x, $n - 1);
}

echo 'Результат: ' . power(2, 3);
Вывод получится следующим:

int 2 int 3
int 2 int 2
int 2 int 1
Результат: 8

Откуда вы взяли значения в выводе? Это типо было 2 в стпени 3, потом стало 2 в степени 2 и умножить на 2 и т.д.?

ivashkevich 20.01.2019 в 13:17

Запустите этот код и получите этот же вывод. Для того, чтобы его понять, нужно понять как работает рекурсия. Следующий урок - в помощь =)

excent63 20.01.2019 в 13:17

Первое задание понял вот так:

<?php

function minFloat(float $x, float $y, float $s){
    if ($x < $y && $x < $s){
        return $x;
    }elseif ($x > $y){
        return $y;
    }else {
        return $s;
    }
}
echo minFloat(8.4,9.6,10.7);
ivashkevich 20.01.2019 в 13:23
echo minFloat(5, 4, 3); // вернет 4, должно быть 3
excent63 20.01.2019 в 13:31

Спасибо! сейчас вроде сработало)

<?php
function minFloat(float $x, float $y, float $s){
    if ($x < $y && $x < $s){
        return $x;
    }elseif ($y < $s){
        return $y;
    }else {
        return $s;
    }
}
echo minFloat(11.4,9.6,7.7);
ivashkevich 20.01.2019 в 14:02

Теперь норм!

excent63 20.01.2019 в 14:01

Вот так понял 2 задание:

<?php
function twoLink (&$x, &$y){
    $x *= 2;
    $y *= 2;
}
$a = 10;
$b = 5;
twoLink($a,$b);
echo $a.'<br>'.$b;
//Результат 20 и 10
ivashkevich 20.01.2019 в 14:03

Верно

Pro100Bah 20.01.2019 в 16:01
echo 'Работа с функциями' . '<br>';
//Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
function threeNumbers(float $x, float $y, float $a)
{
    var_dump($x, $y, $a);
    if ($x < $y) {
        return $min = $x;
    } else {
        return $min = $y;
    }
    if ($min < $a) {
        return $min;
    } else {
        return $a;
    }

}

$x = 1.05;
$y = 4.18;
$a = 2.14;

echo '<br>' . 'Минимальное значение: ' . threeNumbers($x, $y, $a);
echo '<hr>';
//Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
function twoNumbers(&$x, &$y)
{
    var_dump($x, $y);
    $x = $x * 2;
    $y = $y * 2;
}

$a = 25;
$b = 50;
twoNumbers($a, $b);

echo '<br>' . 'Результат 1-ое число: ' . $a . '<br>' . 'Результат 2-ое число: ' . $b;
echo '<hr>';
//Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного).
function factorial(int $x)
{
    var_dump($x);
    if ($x == 1) {
        return $x;
    }
    return $x * factorial($x - 1);
}

$x = 10;
echo '<br>' . 'Результат вычисления n!: ' . factorial($x);
Последнее задание что-то не получилось сделать, просмотрел комментарии, поэтому не стал писать код
ivashkevich 21.01.2019 в 10:17
  1. Если передам 3, 5, 1 то вернет 3, должно быть 1. Вот этот код ерунда полная:
    return $min = $x;

    разбирайтесь что такое return и как работает присваивание.

  2. ОК
  3. ОК

var_dump-ов в рабочих функциях быть не должно.

Pro100Bah 21.01.2019 в 19:57
//Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
function threeNumbers(float $x, float $y, float $a)
{
    if ($x < $y) {
        $min = $x;
    } else {
        $min = $y;
    }
    if ($min < $a) {
        return $min;
    } else {
        return $a;
    }

}

$x = 33.3;
$y = 5.3;
$a = 11.2;

echo '<br>' . 'Минимальное значение: ' . threeNumbers($x, $y, $a);

Разобрался, вроде теперь правильно все выводит. Получается у меня не была объявлена переменная $min , а я уже выводил ее через return. Сначала мы объявляем переменную(новую), если мы присваиваем ей наши аргументы в функции; потом совершаем уже действия и только в конце выводим результат.

ivashkevich 21.01.2019 в 21:19
return $min = $x;

Этот код отработает так: сначала в $min присвоим $x, затем вернем $min. Получается, просто так присваивали, хотя могли бы сразу вернуть $x.

Теперь все ок.

rewsteer 23.01.2019 в 22:01
<?php

function multiplie(float &$b,float  &$x )
{
    return $b= $b*2;
    return $x= $x*2;
}
$n=5;
$q=78;
multiplie($n,$q  );
echo $n . '<br>', $q;

Второе число не умножается на 2
Если навести на х то будет написано

Unused parameter 'x'. The reference stored in the parameter is not used anywhere. less... (Ctrl+F1) 
Inspection info: A parameter is considered unused in the following cases:
Parameter is passed by value and the value is not used anywhere or is overwritten immediately.
Parameter is passed by reference and the reference is not used anywhere or is overwritten immediately.
ivashkevich 23.01.2019 в 22:05

return завершает работу функции и возвращает то, что справа от него.

[email protected] 31.01.2019 в 16:22

Я очень сильно усложнил,но результата добился)

function minBox($a){
  if ($a%2 == 0 && $a > 1){
    return $a;
  }
  return minBox($a - 1);
 }

 $x = 21;
 echo "Предложеное число: " . $x . "<br>";
 while ($x > 1) {
   echo minBox($x) . "<br>";
   $x = minBox($x) - 1;
 }
ivashkevich 02.02.2019 в 00:03

Привет) Это что за алгоритм вообще?)

[email protected] 02.02.2019 в 11:49

Решение 4 задачи)

ivashkevich 03.02.2019 в 23:40

Очень сложно. Рекомендую ознакомиться с другими решениями в комментариях.

[email protected] 15.02.2019 в 21:37

Скорректировал, теперь выводятся именно числовое значение

<?php

function minNumber(float $x, float $y, float $z) {
  if ($x < $y) {
     if ($x < $z) {
    return $x . ' минимальное значение';
 }
 }   elseif ($y < $z) {
    return $y . ' минимальное значение';
 }
     else {
    return $z . ' минимальное значение'; 
}

}

$a = 4.2;
$b = 3.6;
$c = 5.1;

echo minNumber($a, $b, $c);

?>
ivashkevich 17.02.2019 в 22:02

Функция должна возвращать минимальное из переданных чисел. Где типы аргументов?

[email protected] 18.02.2019 в 19:04

Правильно ли я понимаю, что возвращать, это означает, выводит на экран в браузере? В скорректированной версии кода, на экран выводится именно числовое значение "$y . ' минимальное значение'".
Типы аргументов указал function minNumber(float $x, float $y, float $z)

ivashkevich 18.02.2019 в 20:13

Возврат производится с помощью return.

ABC 16.02.2019 в 16:52

Немного не понял, в этом примере мы создали функцию getSum, у неё в качестве аргументов две переменные, $x и $y, с этим ясно, вот только не пойму, если функция возвращает сумму этих переменных, каким боком она же потом и возвращает сумму переменных $a и $b? Или тут подразумевается, что переменные $a и $b выступают в качестве значений переменных $x и $y?:

<?php

function getSum($x, $y)
{
    return $x + $y;
}

$a = 5;
$b = 10;

echo getSum($a, $b) . '<br>';
echo getSum(-3, 4);
ivashkevich 17.02.2019 в 22:05

Перечитайте урок. В одном случае это аргументы функции, доступные только внутри функции. В другом - переменные, о которых функции ничего не известно. Почитайте в официальной документации об области видимости в PHP.

ABC 18.02.2019 в 11:21

Спасибо за ваш ответ, и я бы наверное его понял, если бы код был таким:

<?php

function getSum($a, $b)
{
    return $a + $b;
}

$a = 5;
$b = 10;

echo getSum($a, $b) . '<br>';
echo getSum(-3, 4);

это к вопросу об области видимости итд.
Вы мой вопрос просто не поняли. Я просто хотел уточнить, что, если мы функцию написали, и её аргументы, к примеру, в общем виде, две переменные $x и $y, то мы потом можем эту функцию многократно использовать, подставляя вместо аргументов любые другие значения и она будет работать или как? То есть, как я это понимаю, поправьте если не прав, имеем функцию:

function getSum($x, $y)
{
    return $x + $y;
}

при вызове функции мы ей передаём значения для её аргументов (не важно, статикой или по ссылкам, не суть, сейчас главное понять смысл), эти значения заменяют значения аргументов в изначальном коде функции и они же подставляются в какой-то исполняемый код в её теле, так?

ivashkevich 18.02.2019 в 13:15

Да, передавать разные аргументы вы можете сколько угодно раз. Имена переменных внутри функции никак не связаны с именами переменных за её пределами. Они могут быть как одинаковыми, так и разными по имени.

ashfedor 27.02.2019 в 17:53
//дом задание
function argumentFloat(float $x, float $y, float $z)
{
if($x > $y)
{
    $min = $y;
}else{
    $min = $x;
}
if($min > $z){
    return $z;
}
else{
    return $min;
}
}
$a = 5.5;
$b = 5.58;
$c = 0.89;
 echo 'Выводим минимальное' . argumentFloat($a, $b, $c);
echo '<br>';
//  вторая функция
function multiplier2(&$x, &$y)
{
  $x = $x * 2;
  $y = $y * 2;
}
$a = 56;
$b = 76;
multiplier2($a, $b);
echo $a . '<br>' . $b;
echo '<br>';
//третья функция факториал числа
function factorialX($x)
{
    if($x == 1){
        return $x;
    }
    return $x + factorialX($x - 1);
}
 $x = 10;
echo factorialX($x);
echo '<br>';
//четверое задание
function integerNum(int $x)
{
    if($x == 0){
        echo $x;
        return 0;
    }
    integerNum($x-1);
    echo ', ' . $x;
}

integerNum(10);

Последнее подсмотрел

ivashkevich 02.03.2019 в 16:46

Отлично

Nick 04.03.2019 в 15:26

"Использовать функцию можно только после кода её определения!"
Разве нельзя сначала ее использовать, а потом объявить? Просто так тоже работает, и вроде как программа при компиляции проходит по коду два раза, первый раз для поиска переменных и функций, а второй раз уже исполняет программу.

Nick 04.03.2019 в 15:27
function minNumber(float $a, float $b, float $c) {
  $min = $a < $b? $a : $b;
  $min = $min < $c? $min : $c;
  return $min;
}

echo minNumber(8.14, .8, .45) . '<br>' . '<br>';

function double(&$x, &$y) {
  $x *= 2;
  $y *= 2;
}

$x = 7;
$y = 3;
echo "$x $y<br>";
double($x, $y);
echo "$x $y<br><br>";

function factorialNumber($n) {
  if ($n == 1)
    return 1;

  return $n + factorialNumber($n - 1);
}

echo factorialNumber(4) . '<br>' . '<br>';

function factorialNumberEcho(int $n) {
  if ($n != 0) {
    factorialNumberEcho($n - 1);
    echo ', ';
  }

  echo $n;
}

echo factorialNumberEcho(4);
ivashkevich 06.03.2019 в 19:45

Почему нет типов у аргументов?

Nick 06.03.2019 в 23:24

Лень большая сила...

lilit 06.03.2019 в 22:45

Первое:

<?php

function getMin(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return $x;
    }
    if ($y < $x && $y < $z) {
        return $y;
    }
    return $z;
}

$a = 10.6;
$b = 0.6;
$c = 7.5;

echo 'Наименьшее число: ' . getMin($a, $b, $c);

Второе:

<?php

function multiply2(&$x, &$y)
{
    $x = $x*2;
    $y = $y*2;
}

$a = 3;
$b = 2;

multiply2($a, $b);

echo $a, $b;

Третье:

<?php

function getSumOfNumbersFromOne(int $n)
{
    if ($n == 1) {
        return 1;
    }

    return $n * getSumOfNumbersFromOne($n - 1);
}

echo 'Результат: ' . getSumOfNumbersFromOne(4);

Четвертое:

ivashkevich 08.03.2019 в 18:51
  1. С вот такими числами:
    $a = 0.6;
    $b = 0.6;
    $c = 7.5;

    Выдает: Наименьшее число: 7.5
    Что неправильно.

  2. ОК
  3. ОК
lilit 08.03.2019 в 22:34

Вот так тогда, да?

<?php

function getMin(float $x, float $y, float $z)
{
    if ($x <= $y && $x <= $z) {
        return $x;
    }
    if ($y <= $x && $y <= $z) {
        return $y;
    }
    return $z;
}

$a = 0.3;
$b = 0.3;
$c = 7.5;

echo 'Наименьшее число: ' . getMin($a, $b, $c);
ivashkevich 09.03.2019 в 19:14

Похоже на правду)

lilit 08.03.2019 в 22:48

Четвертое:

<?php
function integer(int $a) {
    if ($a == 0) {
        echo 0;
        return;
    }
    integer($a - 1);
    echo ', ' . $a;
    return;
}

integer(10);
ivashkevich 09.03.2019 в 19:15

Отлично!

[email protected] 08.03.2019 в 18:15
<?php

function minFloat(float $a, float $b, float $c)
{
    if (($a < $b) && ($a < $c))
        return $a;
    if (($b < $a) && ($b < $c))
        return $b;
    else
        return $c;
}

echo 'Минимальное число: ' . minFloat(12.5, 0.24, 0.25) . '<br>';

function multiplication(float &$a, float &$b)
{
    $a *= 2;
    $b *= 2;
}

$a = 5;
$b = 12;
multiplication($a, $b);
echo $a . '<br>';
echo $b . '<br>';

function factorial(int $a)
{
    if ($a === 0)
        return 1;

    else return ($a * factorial($a - 1));

}

echo 'Факториал 10: ' . factorial(10);
ivashkevich 08.03.2019 в 18:55
  1. Все что после if и else берется в фигурные скобки.
    Последний блок else не нужен - просто выполнится в конце, если первые два условия не выполнились.
    При входных параметрах
    minFloat(0.24, 0.24, 0.25)

    говорит, что минимальное 0.25 - неправильно

  2. ОК
  3. Все что после if и else берется в фигурные скобки. Где уже нахватались кода без них?
[email protected] 08.03.2019 в 18:57

Читал, что если идёт одна строка, то можно не ставить скобки. Мол, код так не перегружен скобками

ivashkevich 08.03.2019 в 19:00

Нужно всегда писать. Это сейчас стандарт в PHP. Скорее всего читали в устаревшем источнике.

[email protected] 08.03.2019 в 22:03

Подправил

<?php

function minFloat(float $a, float $b, float $c)
{
    if (($a <= $b) && ($a <= $c)) {
        return $a;
    }
    if (($b <= $a) && ($b <= $c)) {
        return $b;
    }
    return $c;
}

echo 'Минимальное число: ' . minFloat(0.24, 0.24, 0.25)
    . '<br>';

function multiplication(float &$a, float &$b)
{
    $a *= 2;
    $b *= 2;
}

$a = 5;
$b = 12;
multiplication($a, $b);
echo $a . '<br>';
echo $b . '<br>';

function factorial(int $a)
{
    if ($a === 0) {
        return 1;
    } else {
        return ($a * factorial($a - 1));
    }
}
echo 'Факториал 10: ' . factorial(10);
ivashkevich 09.03.2019 в 19:16

Отлично!

Grewi 11.03.2019 в 02:05

Функция - минимальное число с плавующей точкой

function getMin(float $a, float $b, float $c)
{
    if ($a < $b) {
        $min = $a;
    } else {
        $min = $b;
    }
    if ($min < $c) {
        return $min;
    } else {
        return $c;
    }
}

$a = 12.5;
$b = 6.2;
$c = 10.3;

echo 'Наименьшее число ' . getMin($a, $b, $c);

Функция - умножение по ссылке

function plNam(int &$a, int &$b)
{
     $a *= 2;
     $b *= 2;
}

$a = 3;
$b = 5;
plNam($a, $b);
echo 'Результат - '.$a.' и '.$b;

Третье задание

function factX(int $a)
{
    if ($a == 1){
        return $a;
    } else {
        return $a * factX($a - 1);
    }
}

$a = 12;
echo 'Решение '.$a.' будет равено: '.factX($a);

Функция - вывод чисел от нуля до заданного

$a = 100;
function inNam(int $a)
{
    if ($a == 0){
        echo $a;
    } else {
        inNam ($a - 1);
        echo ', '.$a;
    }
}

inNam($a);
ivashkevich 11.03.2019 в 21:24

Вторая функция должна умножать аргументы на 2.
Факториал - это произведение чисел, а не сумма.

Grewi 12.03.2019 в 02:11

:) Исправил

ivashkevich 12.03.2019 в 09:49

Вторую функцию не исправили. И забыли про аргументы функций - где их типы?

Grewi 13.03.2019 в 00:50

Так?

ivashkevich 14.03.2019 в 09:01

Теперь так)

p4elka 15.03.2019 в 20:01
function findMin3(float $x, float $y, float $z)
{
    if ($x <= 0.5*($y+$z) ){
           return $x;
    } elseif ($y <= $z){
       return $y;
    } else {
    return $z;
    }
}

echo 'myMin3=', findMin3(1.25, -56.43, 0)  , '<br>';

function multiplyBy2(float &$x, float &$y)
{
    $x= 2*$x;
    $y= 2*$y;
    return [$x, $y];
}

$x=0.48;
$y=-5.4;
echo 'x=', $x, '<br>';
[$a, $b]=multiplyBy2($x, $y);
echo 'myMult2=[', $a ,',', $b,']','<br>';
echo 'x=', $x, '<br>';

function myFactorial(int $x, int $y)
{

    if($x==1){  
       return $y;
    }
    $y = $y*$x;     
    return myFactorial($x-1, $y) ;
}

echo '4!=', myFactorial(4,1),  '<br>';

function myCount(int $x, int $i)
{
    if ($i<=$x){
       echo $i, ' ';
       return myCount($x,$i+1);
    }
}

myCount(5.7,1);

исправила факториал - посмотрела в комментах, как избавиться от дополнительной переменной. Теперь выглядит так:

function myFactorial(int $x)
{

    if($x==1){  
       return $x;
    }       
    return $x*myFactorial($x-1) ;
}

echo '5!=', myFactorial(5),  '<br>';

Давно это было, я всё подзабыла...

ivashkevich 17.03.2019 в 23:34
  1. Неправильно работает, если передать 1, 0, 2 - вернёт 1. Не нужно придумывать математические формулы, используйте простое сравнение.
  2. Значения, переданные по ссылке и измененные внутри функции, возвращать не нужно.
  3. Исправленная функция для вычисления факториала - ОК.
[email protected] 16.03.2019 в 17:24

В который раз спасибо за уроки! Прошу проверить код:

// Функция принимает три аргумента и возвращает наименьший
function minValue(float $x, float $y, float $z) 
{
    if ($x <= $y) {
    if ($x <= $z)
        return $x;
    } elseif ($y <= $z) {
      return $y;
    } elseif ($z <= $y) {
      return $z;
    }
}

echo 'Минимальное значение: ' . minValue(2, 1.34, 1.33);

// Задание №2
function getMultiply2(&$x, &$y) 
{
    $x = ($x*2) + ($y*2);
    return $x;
}
$a = 2;
$b = 2;
echo getMultiply2($a, $b);

// Функция, которая высчитывает факториал заданного числа
function factorial(int $x) 
{
    if ($x == 1)
{
    return 1;
}   
elseif ($x == 0) {
    return 1;
}
return $x * factorial($x-1);
} 
echo 'Факториал числа равен: ' . factorial(25);

// Функция выводящая последовательность целых чисел
function number(int $x) {
    if ($x == 0) {
    echo $x;
    return;
}
    if ($x<0) {
    echo $x . ',' . number($x+1);
    return;
}
number($x-1);
echo ',' . $x;
}
number(3);  

Последнее задание делал опираясь на подсказки и примеры в комментах...

ivashkevich 17.03.2019 в 23:38
  1. Всегда используйте фигурные скобки в блоках условий - это стандарт в PHP. Если x и y не являются минимальными, то не надо проверять что z меньше y. Это единственный оставшийся вариант.
  2. Перечитайте задание второй задачи.
  3. ОК. Но если передать -3, то после 0 не будет запятой.
[email protected] 21.03.2019 в 12:40

Спасибо, замечания учел.
Исправил вывод результата в задании:

function number(int $x)
{
    if ($x == 0) {
        echo $x;
        return;
    }
    if ($x<0) {
        echo ', ' . $x . number($x+1);
        return;
    }
    number($x-1);
    echo ', ' . $x;
}
echo number(-2) . '.';
ivashkevich 23.03.2019 в 22:23

Красава

[email protected] 25.03.2019 в 17:31
<?php

//Задание 1

function getMinFloat(float $x, float $y, float $z)
{if ($x>=$y&&$y>=$z){
          return $z;}          
            elseif($y>=$x&&$z>=$x){ 
            return $x;}
             {return $y;}
}
$a = 8.25;
$b = 0.37;
$c = 3.37;
echo 'Наименьшее число : '. getMinFloat($a, $b, $c).'<br>'.'<br>';

//Задание 2

function product2(&$a, &$b){
    $a=$a*2; 
    $b=$b*2; 
}
$a=4;
$b=3;
product2($a, $b);
echo "Значение первой переменной - $a".'<br>';
echo "Значение второй переменной - $b".'<br>'.'<br>'; 

//Задание 3

function getFactorial(int $n){
    if ($n == 1){
     return 1;}
     return $n *getFactorial($n-1);
} 
$n=6;
echo 'Результат - ' . getFactorial($n).'<br>'.'<br>';

//Задание 4

function getNum(int $x){
echo $x.'<br>';
    if($x==0){
     exit;}     
    return $x=getNum($x-1);}
$x = 5; 
echo getNum($x);
ivashkevich 27.03.2019 в 11:27

Исправьте отступы в первом задании, ничего не понятно. Переносите все на новые строки, как в уроках. С факториалом та же история. В шторме можно просто нажать CTRL+ALT+L и он сам все отформатирует как надо.

В четвертом задании не нужно использовать exit, это завершает работу всего скрипта. Вам же нужно просто завершить работу функции.

То, что все это работает - хорошо =)

Boodoo 28.03.2019 в 06:22

Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.

<?php
    function lowerNum(float $a, float $b, float $c) {
        if($a < $b) {
            if($a < $c) {
                return $a;
            } else {
                return $c;
            }
        } else {
            if($b < $c) {
                return $b;
            } else {
                return $c;
            }
        }
    }
    echo lowerNum(5.2,3.1,4.6);
ivashkevich 29.03.2019 в 16:15

Ок. Оформляйте код (самая первая кнопка в редакторе комментария)

Boodoo 28.03.2019 в 06:27

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

<?php
    $a = 3;
    $b = 4;
    function func(&$a, &$b) {
        $a *= 2;
        $b *= 2;
    }
    func($a, $b);
    echo $a . '<br>';
    echo $b;
ivashkevich 29.03.2019 в 16:15

Ок

Boodoo 28.03.2019 в 06:35

Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)

<?php
    function fact($x, $n) {
        if($n == 1) {
            return $x;
        } else {
            return $x * fact($x, ($n - 1));
        }
    }
    echo fact(5, 3);
ivashkevich 29.03.2019 в 16:16

Это что-то не то. Прочитайте, что такое факториал. Должен быть только один аргумент.

Boodoo 31.03.2019 в 20:10

Действительно, задумался о чем-то...
вот

<?php
    function fact($x) {
        if($x == 1) {
            return $x;
        } else {
            return $x * fact($x - 1);
        }
    }
ivashkevich 01.04.2019 в 22:12

Ок. Только типы аргументов указывайте.

Boodoo 29.03.2019 в 06:30

Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.

<?php
    function func($x, $y = 0) {
        if($y >= $x) {
            return $y;
        } else {
            echo $y . '<br>';
            return func($x, $y+1);
        }
    }
    echo func(5);
ivashkevich 29.03.2019 в 16:18

Можно обойтись функцией с одним аргументом. А то что работает - это уже хорошо.

artemship 07.04.2019 в 19:59

Задача 1:

function getMin(float $x, float $y, float $z)
{
    if (($x < $y) && ($x < $z)) {
        return $x;
    } elseif (($y < $x) && ($y < $z)) {
        return $y;
    }
    return $z;
}

$a = 3.6;
$b = 7.8;
$c = 9.3;
echo 'Минимальное число: ' . getMin($a, $b, $c);

Задача 2:

function multiplicationBy2(float &$x, float &$y)
{
    $x *= 2;
    $y *= 2;
}

$a = 2.2;
$b = 3.3;
multiplicationBy2($a, $b);
echo $a . '<br>' . $b;

Задача 3:

function getFactorial($x)
{
    if ($x == 1) {
        return $x;
    }
    return $x * getFactorial($x - 1);
}

$a = 5;
echo getFactorial($a);

С задачей №4 не справился. Почитав комменты, разобрался) Следующим уроком надеюсь закреплю знания по рекурсии! Спасибо большое за уроки, все очень доступно и понятно! За домашку отдельное спасибо!

ivashkevich 08.04.2019 в 21:43
  1. Неправильно работает
    $a = 3.6;
    $b = 3.6;
    $c = 9.3;
    echo 'Минимальное число: ' . getMin($a, $b, $c);

    Вывод: Минимальное число: 9.3

  2. ОК
  3. ОК
  4. Удачи =)
artemship 09.04.2019 в 21:46

Да, накосячил..) Спасибо за помощь! Вот, поправил:

function getMin(float $x, float $y, float $z)
{
    if (($x < $y) && ($x < $z)) {
        return $x;
    } elseif ($y < $z) {
        return $y;
    }
    return $z;
}

$a = 3.6;
$b = 7.8;
$c = 9.3;
echo 'Минимальное число: ' . getMin($a, $b, $c);
ivashkevich 09.04.2019 в 22:39

Теперь ок

Dram 16.04.2019 в 16:11

Добрый день, прошу понять почему этот код не работает? Специально не смотрел комменты, хочу сам понять и написать свое решение.

<?php

function getFloatMin(float $a, $b, $c)
{
    if ($a <= $b && $c) {
        return $a;
    } elseif ($b <= $a && $c) {
      return $b;
    }
    else {
        return $c;
    }
}
$a=4.45;
$b=1.22;
$c=1.1;

echo 'Минимально: ' . getFloatMin($a, $b, $c);

ВОТ ПРАВИЛЬНО

<?php

function getFloatMin(float $a, $b, $c)
{
if ($a <= $b && $a<=$c) {
return $a;
} elseif ($b <= $a && $b <= $c) {
return $b;
}
return $c;

}
$a=4.45;
$b=1.22;
$c=1.1;

echo 'Минимально: ' . getFloatMin($a, $b, $c);

НО ПРОШУ ОБЪЯСНИТЬ
ПОЧЕМУ НЕВЕРНЫЙ 1 вариант

ivashkevich 17.04.2019 в 22:14

$a <= $b && $c - что вы здесь пытаетесь сделать?

Dram 17.04.2019 в 22:17

Я думал так можно записать А меньше или равно В и С

ivashkevich 17.04.2019 в 22:28

Так нельзя. Прочитайте официальную документацию о приоретизации операторов. Здесь выполняется проверка на то что:
($a меньше либо равно $b) И (значение $c, приведенное к булеву типу == true)

[email protected] 24.04.2019 в 19:47
<?

function getMinimal(float $a, float $b, float $c) {
  $minimal = $a < $b ? $a : $b;
  $minimal = $minimal < $c ? $minimal : $c;
  return $minimal;
}

echo getMinimal(1, 3, 2),'<br><br>';

function doubleVar(&$a, &$b) {
  $a *= 2;
  $b *= 2;
}

$a = 8;
$b = 12;

doubleVar($a, $b);
echo $a, '<br>',$b,'<br><br>';

function factorial(int $a)
{
  if ($a == 1) {
    return 1;
  }

  return $a * factorial($a - 1);
}

echo factorial(170),'<br><br>';

function showNumTill(int $a)
{
  if ($a == 0) {
    echo $a;
    return;
  }
  showNumTill($a-1);
  echo ','.$a;
}

echo showNumTill(17);
?>
ivashkevich 25.04.2019 в 07:46
  1. Отлично
  2. Где типы?
  3. Отлично
  4. Отлично
[email protected] 25.04.2019 в 09:18

function doubleVar(&$a, &$b) {
Забавно, перед отправкой я вспомнил про типы, но потом почему-то решил, что раз это ссылки, то тут типы не нужны) Собственно, я ждал этого коммента, спасибо)

ivashkevich 25.04.2019 в 12:14

Хех, типы нужны всегда)

[email protected] 25.04.2019 в 15:45
<?php

function minNum(float $x, float $y, float $z){
    if ($x<$y and $x<$z){
    return $x;
    }elseif ($y<$x and $y<$z){
    return $y;
    } 
    return $z;
    }
$f=5.5;
$i=13.8;
$u=44;

echo minNum($f,$i,$u);
?>
Решение задача №1.
ivashkevich 25.04.2019 в 15:47

Ок. После блока, в котором выполняется return не обязательно писать elseif, можно просто if.

[email protected] 25.04.2019 в 15:59

Задача №2.

<?php

function lynk(&$x, &$z){
    $x=$x*2;
    $z=$z*2;

    }
$f=5;
$i=13;

lynk($f,$i);
echo $f. ' , ' .$i;
?>
ivashkevich 25.04.2019 в 17:53

Типы аргументов не забывайте

[email protected] 27.04.2019 в 15:43
<?php

function factorial(int $x){
    if($x==1){
        return 1;
    }
return $x*factorial($x-1);
}
echo 'Результат: ' . factorial(3);
?>
ivashkevich 29.04.2019 в 11:35

Отлично

[email protected] 27.04.2019 в 15:49

Это третья задача. Поясните, пожалуйста, вот эта строка в вашей лекции о рекурсии 'return $n + getSumOfNumbersFromZero($n - 1);' означает какой-то цикл? Так как последовательно складывает все числа. Я не понимаю как он узнает, что нужно еще складывать и еще... Пока не будет 1. Т.е. почему он продолжает считать дальше? Мог бы прибавить $n к функции с ($n-1) и на этом остановиться.

ivashkevich 29.04.2019 в 11:36

Ну, вообще-то он так и делает-останавливается именно на этом. Просто перед этим считает getSumOfNumbersFromZero($n - 1)

[email protected] 27.04.2019 в 16:15

Объясните, пожалуйста, как работает код ниже. Если можно построчно что он делает. Не понимаю как он выводит числа по порядку.

<?php
declare(strict_types=1);

function numbers(int $num) {
    if ($num > 0) {
        numbers($num - 1); //Здесь он посчитал, что 5-1=4
    }

    echo $num;//А здесь должен вывести 4. И все. Почему он начинает выводить цифры с нуля?  
    return;//И почему вообще начинает искать другие числа, а не останавливается на 4?
}

numbers(5);
ivashkevich 29.04.2019 в 11:37

Напишите в личку

[email protected] 02.05.2019 в 22:59
function getFloat(float $a,float $b,float $c)
{
    if ($a < $b && $a < $c) {
        return $a.'<br>';
    } else if ($b < $a && $b < $c) {
        return $b.'<br>';
    }
    return $c.'<br>';
}
echo getFloat(12.4,11.5,23.5);

$a = 3;
$b = 4;

function multiplication(&$x,&$q)
{
    echo $x * 2 . '<br>';
    echo $q * 2 . '<br>';

}
multiplication($a,$b);

function factorial($a)
{
    if ($a !== 1) {
        return $a * factorial($a - 1);
    }
    return $a;
}
echo factorial(5).'<br>';

function show(int $a)
{
    if ($a !== 0) {
        echo show($a - 1);
    }
    return $a;
}
echo show(5);
ivashkevich 03.05.2019 в 09:28
  1. Функция должна возвращать число, а не строку. При следующих входных данных:
    echo getFloat(12.4,12.4,23.5);

    возвращает

    less all:23.5

    что неправильно.
    Фигурная скобка, открывающая тело функции, ставится на следующей строке после объявления имени и аргументов.

  2. Функция должна изменить значения аргументов, а не вывести их умноженными на два. То есть после вызова функции значения обеих переменных должны увеличиться на 2.
  3. ОК
  4. Для чего в конце возвращается $a? Это где-то используется?

По поводу вашего вопроса - в настройках PHPStorm нужно выставить версию PHP не ниже 7.0.

[email protected] 03.05.2019 в 10:10

я понял свою ошибку в 4 задаче

ivashkevich 04.05.2019 в 14:13

А по остальным когда поправите?

Moskva 05.05.2019 в 20:59

Код:

 function minValue(float $x1, float $x2, float $x3)
    {
        if (($x1 < $x2) && ($x1 < $x3)) {
            return $x1;
        } else if ($x2 < $x3) {
            return $x2;
    } else return $x3;
    }
    echo 'Результат: ' . minValue(1.5, 1,1.2);
    echo '<br>';

    function multiply(&$x, &$y){
        $x *= 2;
        $y *= 2;
        return 0;
    }
    $x = 5; $y = 6;
    echo multiply($x, $y);
    echo '<br>';
    echo $x . ' ' . $y;
    echo '<br>';

    function factorial($n){
        if ($n == 1){
            return $n;
        } else if ($n == 0){
            return 0;
        }
        return $n * factorial($n-1);
    }
    echo factorial(5);
    echo '<br>';

    function digit(int $n){
        $y = $n;
        if ($n == 0){
            echo $n;
            return 0;
        }elseif ($n < 0){
            echo $y . ', ';
            $y = digit($n+1);
        }else {
            $x = digit($n - 1);
            echo ', ' . $n;
        }
    }
    digit (6);

Результат:
Результат: 1
0
10 12
120
0, 1, 2, 3, 4, 5, 6

ivashkevich 10.05.2019 в 13:23
  1. В блоках if-else ВСЕГДА используйте фигурные скобки, даже если там один return.
  2. Для чего в конце return 0?
  3. Факториал 0 = 1
  4. ОК
Moskva 22.06.2019 в 14:48

Вас понял

function minValue(float $x1, float $x2, float $x3)
{
    if (($x1 < $x2) && ($x1 < $x3)) {
        return $x1;
    } elseif ($x2 < $x3) {
        return $x2;
    } else {
        return $x3;
    }
}

echo 'Результат: ' . minValue(1.5, 1, 1.2);

function multiply(&$x, &$y)
{
    $x *= 2;
    $y *= 2;
}

$x = 5;
$y = 6;
echo multiply($x, $y);
echo '<br>';
echo $x . ' ' . $y;
echo '<br>';

function factorial($n)
{
    if ($n == 1) {
        return $n;
    } else if ($n == 0) {
        return 1;
    }
    return $n * factorial($n - 1);
}

echo factorial(4);
echo '<br>';

function digit(int $n)
{
    $y = $n;
    if ($n == 0) {
        echo $n;
        return 0;
    } elseif ($n < 0) {
        echo $y . ', ';
        $y = digit($n + 1);
    } else {
        $x = digit($n - 1);
        echo ', ' . $n;
    }
}

digit(6);

Вроде всё исправил.

ivashkevich 23.06.2019 в 17:41

Ок. Ещё заметил, что не указаны типы аргументов во 2 и 3 задачах.

bratko 12.05.2019 в 16:46

1 задание

function minValue(float $x, float $y, float $z){
    return min($x, $y, $z);
}
echo 'Результат: ' . minValue(1, 10, 18);

Правильно ли я сделал? Смотрю все выполняли данное задание через условия, а если есть уже стандартная функция поиска минимального значения..?!?!

ivashkevich 12.05.2019 в 23:06

Засчитано. Но по-хорошему стоит реализовать на простейших условиях.

Bocha 13.05.2019 в 15:50

Второе:

<?php

function getComposition(int &$x, int &$y)
{
    $x = $x*2;
    $y = $y*2;
}

$a = 5;
$b = 4;

getComposition($a, $b);

echo "$a <br>";
echo $b;
ivashkevich 13.05.2019 в 18:58

Ок

Bocha 13.05.2019 в 16:40

Признаюсь честно - решение подглядел, но потом, вроде бы, разобрался

<?php

function getFactorial($x)
{
    if ($x == 1 || $x == 0){
        return 1;
    }
    return $a = $x * getFactorial($x - 1);
}

$a = 5;

echo getFactorial($a);
ivashkevich 13.05.2019 в 19:00

Вот здесь

return $a = $x * getFactorial($x - 1);

не нужно сначала присваивать значение переменной $a. Просто:

return $x * getFactorial($x - 1);
esqrx 04.06.2019 в 01:18
<?php

function minimalSum(float $x, float $y, float $c)
{
    if ($x <= $y & $x <= $c) {
        echo 'Минимальное число ' . $x;
    } elseif ($y <= $x & $y <= $c) {
        echo 'Минимальное число ' . $y;
    } else echo 'Минимальное число ' . $c;

}

minimalSum(1.2, 1.1, 1.5);

echo '<hr>';

function multiplication($x, $y)
{
    echo $x . ' множенное на 2 будет ' . $x * 2 . ' и ' . $y . ' множенное на 2 будет ' . $y * 2;
}

multiplication(3, 5);

echo '<hr>';

function factorial($a)
{
    if ($a == 1 || $a == 0) {
        return 1;
    }
    var_dump($a);
    return $a * factorial($a - 1);
}
echo factorial(7);

echo '<hr>';

function task5 (int $x) {
    if ($x == 0) {
        echo $x;
        return;
    }
    task5($x - 1);
    echo ', ' . $x;
}

task5(10);
ivashkevich 06.06.2019 в 09:26

Ни одно решение не соответствует задачам и примерам из урока

esqrx 10.06.2019 в 20:11
<?php

// 1

function minimalSum(float $x, float $y, float $c)
{
    $minNumber = 0;
    if ($x <= $y && $x <= $c) {
        $minNumber = $x;
    } elseif ($y <= $x && $y <= $c) {
        $minNumber = $y;
    } else {
        $minNumber = $c;
    }
    return $minNumber;
}

var_dump(minimalSum(1.1, 1.2, 1.3));
var_dump(minimalSum(1.2, 1.3, 1.1));
var_dump(minimalSum(1.3, 1.1, 1.2));

// 2

echo '<hr>';

function multiplication(int &$x, int &$y)
{
    $result = $x * 2 . ', ' . $y * 2;
    return $result;
}

$a = 3;
$b = 5;

var_dump(multiplication($a, $b));

// 3

echo '<hr>';

function factorial(int $a)
{
    if ($a == 1 || $a == 0) {
        return 1;
    }
    var_dump($a);
    return $a + factorial($a - 1);
}

var_dump(factorial(4));
ivashkevich 11.06.2019 в 02:08
  1. Отлично. Только непонятно, почему функция называется minimalSum? Ничего ведь не суммируется.
  2. Функция не должна возвращать значение. Она должна изменить значения по ссылке.
  3. var_dump в рабочей функции быть не должно! Вычисления не верны. Почитайте, что такое факториал.
esqrx 11.06.2019 в 18:49
  1. ХЗ, я все с цифрами почему-то называю Sum...
  2. Да, понял, исправил
  3. я когда пишу код везде эти var_dump-ы прописываю чтобы следить за выполнением кода, потом забываю удалять. и формулу исправил
// 2

function multiplication(int &$x, int &$y)
{
    $x *= 2;
    $y *= 2;
}

$a = 3;
$b = 5;

multiplication($a, $b);
echo $a . ', ' . $b;

// 3

echo '<hr>';

function factorial(int $a)
{
    if ($a == 1 || $a == 0) {
        return 1;
    }
    return $a * factorial($a - 1);
}

var_dump(factorial(4));
ivashkevich 11.06.2019 в 20:36

Теперь отлично.
P.S. Используйте для оформления кода самую первую кнопку в окне написания комментариев.

[email protected] 07.06.2019 в 12:09

Первое задание. Стараюсь пока не смотреть подсказки в чате, поэтому наверно много лишнего, когда уже вижу что работает как надо, смотрю варианты для упрощения) Но тут выкладываю что сам навыдумывал для честности.

<?php
function minNum(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return 'Минимальное число:' . $x;
    } elseif ($y < $z) {
        return 'Минимальное число:' . $y;
    }
    return 'Минимальное число:' . $z;
}

echo minNum (7.9, 1, 3);
ivashkevich 07.06.2019 в 12:29

Функция должна возвращать число.

[email protected] 07.06.2019 в 12:57
<?php
function minNum(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $z) {
        return $y;
    }
    return $z;
}

echo 'Минимальное число:' . minNum(7.9, 1, 3);

А так ?)

ivashkevich 07.06.2019 в 13:29

Так - огонь

[email protected] 07.06.2019 в 12:23

Вторая задача, не уверен нужен ли здесь Return в конце функции ?

<?php
function getMult(&$a, &$b ){
    echo $a * 2 . '<br>' . $b * 2;
    return;
}
$a= 2;
$b= 3;
getMult ($a,$b);
ivashkevich 07.06.2019 в 12:30

Неверно. После вызова функции значения переменных должны удвоиться. У вас они остались прежними. Выводить в функции ничего не надо.

[email protected] 07.06.2019 в 13:06
<?php
function getMult(&$a,&$b)
{
    return $a * 2 . $b * 2;
}
$a = 2;
$b = 3;
echo getMult($a,$b);
ivashkevich 07.06.2019 в 13:30

Нет. После вызова функции можно сделать echo $a, и значение будет больше изначального в 2 раза. Перечитайте про передачу по ссылке.

[email protected] 07.06.2019 в 13:41
<?php
function getMult(&$a, &$b)
{
    $a = $a * 2;
    $b = $b * 2;
}

$a = 2;
$b = 3;
getMult($a, $b);
echo $a . '<br>';
echo $b;

Теперь должно работать)

ivashkevich 07.06.2019 в 13:46

Теперь ок

[email protected] 07.06.2019 в 13:29

Третье задание.

<?php
function getFactorial(int $n)
{
    if ($n == 1) {
        return 1;
    }
    return $n * getFactorial($n - 1);
}
echo getFactorial(5);

ответ 120

ivashkevich 07.06.2019 в 13:31

Отлично

Nick 10.06.2019 в 22:30
# Минимальное число из трех предложенных:

function minFloat(float $a, float $b, float $c) {
  $min = $a < $b ? $a : $b;
  $min = $min < $c ? $min : $c;
  return $min;
}

echo minFloat(1.22, 3.558, 0.585); // 0.585

# Умножение аргументов на 2:

function double(&$a, &$b) {
  $a *= 2;
  $b *= 2;
}

$firstNumber = 5;
$secondNumber = 4.75;
double($firstNumber, $secondNumber);
echo "<br>$firstNumber, $secondNumber<br>"; // 10, 9.5

# Факториал числа (рекурсия):

function factorialRecursion(int $n) {
  if ($n === 1)
      return 1;
  return $n * factorialRecursion($n - 1);
}

echo factorialRecursion(5) . '<br>'; // 120

# Самое сложное задание (?...) :

function somethingScary($a, $b = 0) {
  echo $b;
  if (floor($a) > $b && $a > 0)
      somethingScary($a, $b + 1);
  if (ceil($a) < $b && $a < 0)
      somethingScary($a, $b - 1);
}

echo '<br>' . somethingScary(8.5);
ivashkevich 11.06.2019 в 02:14

Хорошо всё с логикой. Замечания только по кодстайлу, в соответствии с PSR:

  • Фигурная скобка, открывающая тело функции, должна находиться на отдельной строке.
  • в конструкциях if-else всегда ставятся фигурные скобки, даже если там одна строчка.

Во второй и четвертой функциях не хватает типов аргументов.

P.S. Лучше каждое решение отдельным комментарием.

Bizzzon 23.06.2019 в 22:58

<?php
function lessOfNumbers(float $x, float$y, float $z) : float {
    if ($x < $y and $x < $z) {
        return $x;
    } elseif ($y < $x and $y < $z) {
        return $y;
    } else {
        return $z;
    }
}
$a = 90.8;
$b = 90.9;
$c = 90.1;
echo 'Наименьшее число: ' .lessOfNumbers ($a, $b, $c);
?>
``` - первая задача. 
ivashkevich 24.06.2019 в 02:59

Фигурная скобка, открывающая тело функции, переносится на новую строку.
Откуда у вас взялся оператор and? Пройдите заново урок про условия.

.lessOfNumbers ($a, $b, $c);

Пробел между именем вызываемой функции и скобкой не нужен. Оператор конкатенации строк с обоих сторон должен быть разделен пробелами.

Если передать 5,5,10, то вернётся 10, что неверно.

Bizzzon 23.06.2019 в 23:48
function mult(int &$x, int &$y) : int {
    $x *= 2;
    $y *= 2;
} //ругается из-за этой фигурной скобки :<
$a = 20;
$b = 10;
mult($a, $b);
echo $a . ' ' . $b;

Выдаёт ошибку, можете подсказать, что я сделал не так?

ivashkevich 24.06.2019 в 03:03

Текст ошибки говорит совсем о другом.

Bizzzon 24.06.2019 в 06:57

Так в чём тогда моя ошибка?

ivashkevich 24.06.2019 в 09:58

Напишите сюда текст ошибки

Bizzzon 24.06.2019 в 12:56

Fatal error: Uncaught TypeError: Return value of mult() must be of the type integer, none returned in W:\domains\myproject.loc\www\index.php:4

ivashkevich 24.06.2019 в 12:58

Написано, что функция mult должна возвращать integer, но ничего не возвращает. Так и есть.

Bizzzon 24.06.2019 в 13:01

Т.е, каждая функция обязательно должна что-то возвращать? Но дальше я вызываю функцию...

ivashkevich 24.06.2019 в 13:06

Нет, необязательно. Но вы сам написали :int в её объявлении. Если написан тип возвращаемого значения, значит должен быть return. Исключение - void. Как раз ваш случай.

Bizzzon 24.06.2019 в 13:08
function mult(int &$x, int &$y) {
    $x = $x * 2;
    $y = $y * 2;
}
$a = 20;
$b = 10;
mult($a, $b);
echo $a . '; ' . $b;

Вот, работает без ошибки

ivashkevich 24.06.2019 в 13:10

Ок. Не забывайте открывающую скобку переносить на новую строку. Это стандарт PSR-2.

Bizzzon 24.06.2019 в 13:35
function factorial(int $number) : int
{
    if($number == 0) {
        return 1;
    }
    return $number * factorial($number - 1);
}
$x = 5;
echo 'Факториал числа ' . $x . ' равен' . ' ' . factorial($x);

3 задача

ivashkevich 24.06.2019 в 13:38

Супер!

Reechniy 29.06.2019 в 15:57

первое:

<?php
function getMin(float $x, float $y, float $z){
    if($x<$y&&$x<$z){
        return $x;
    }elseif($y<$z){
        return $y;
    }else{
        return $z;
    }
}
$x=3.4;
$y=3.2;
$z=3;
echo 'Minimum:'.getMin($x,$y,$z);

второе:

<?php
function multiply2(&$x,&$y)
{
    $x=$x*2;
    $y=$y*2;
}
$x=4;
$y=2;
multiply2($x, $y);
echo 'число Х'.$x;
echo '<br><br>';
echo 'число У'.$y;

третье:

<?php
function fucktorial($n)
{
    if($n==1){
        return 1;
    }
    return $n*fucktorial($n-1);
}
echo 'Результат: '.fucktorial(12);
ivashkevich 30.06.2019 в 15:05

Логика - ок. Но не указаны типы аргументов во 2 и 3 заданиях.

kvakazuabr 13.07.2019 в 18:39

пишите здесь ваш код
// 4
``function getValues(int $n) {
        if($n >= 0) {
          echo $n . ' ' . getValues($n-1);   
        } 
    }`
ivashkevich 14.07.2019 в 06:52

Отлично

AlexxxEy 16.07.2019 в 01:42
print 'Умножение двух переменных по ссылке';
print '</br>';
function ArgAdr(&$q , &$n){
    $q = $q * 2;
    $n = $n * 2;
}

$p = 4;
$d = 6;
ArgAdr($p, $d);
print $p;
print '</br>';
print $d;
print '</br>';

print '</br>';

print 'Найти минимальынй аргумент';
print '</br>';
function ArgMin(float $x, float $y, float $z){

    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $x && $y < $z) {
        return $y;
    } elseif ($z < $x && $z < $y) {
        return $z;
    }
}
    $x = 5.2;
    $y = 3.7;
    $z = 6.22;

print ArgMin($x, $y, $z);
print '</br>';
print '</br>';
print 'Получить факториал числа';
function FactNum($l){

    if($l == 1){
        return $l;
    }
    return $l * FactNum($l-1);
}
print '</br>';
print FactNum(6);
print '</br>';
print '</br>';

print 'Вывести на экран челый числа от 0 до переданного';
function ArfPr($h){

    if($h == 0){
        echo $h;
        return 0;
    }
    else {
        ArfPr($h - 1);
        echo $h;
    }

}
print '</br>';
print ArfPr(6);
print '</br>';
ivashkevich 16.07.2019 в 01:50
function ArfPr($h){
    if($h == 0){
        echo $h;
        return 0;
    }
    else {
        ArfPr($h - 1);
        echo $h;
    }
}

Для чего return 0;?

ArgMin(5, 5, 5);
Функция ничего не вернёт, хотя минимальное число - 5.

Имена функций пишутся с маленькой буквы.

Пришлите исправленный вариант ответом на это сообщение.

[email protected] 29.07.2019 в 00:15

Почему у всех в последнем задании такое сложное решение, может быть я неправильно понял задачу?

function SomeDeal($n) {
    if ($n != 0) {
        SomeDeal($n-1);
    }
    echo $n . ' ';
}
ivashkevich 29.07.2019 в 03:55

Потому что написать простой код сложнее, чем написать сложный код) Всё хорошо, только имена функций должны начинаться с маленькой буквы. Это стандарт PSR.

[email protected] 02.08.2019 в 18:27

Просто учил до этого C# поэтому для меня пока немного дико, что методы тоже начинаются с маленькой буквы

ivashkevich 02.08.2019 в 20:39

Привыкнете, я тоже на нескольких языках пишу с разными правилами

[email protected] 02.08.2019 в 15:14
Привет!
**1 задние **
function getMinimal ($x,$y,$z)
{
    if ($x < $y) {
        if ($x < $z) {
            return $x;
        } elseif ($y < $x) {
            return $y;
        } else return $z;
    }
}
$a=10;
$b=3;
$c=5;
echo getMinimal ($a,$b,$c),'<br>';

**2 задание**
function func (&$x,&$y){
    $x=$x*2;
    $y=$y*2;
}
$a=2;
$b=3;
func ($a,$b);
echo $a,'<br>',$b,'<br>';

**и 3ее**
function factorial ($x){
         if ($x==1) {
             return 1;
         }
         return ($x*factorial ($x-1));
}

echo factorial(5);

4ое пока сложновато =(
ivashkevich 02.08.2019 в 18:00

Всё хорошо, только обязательно нужно указывать типы аргументов.

} else return $z;

В PHP для блоков if-else всегда используется оборачивание в фигурные скобки.

Aleks 06.08.2019 в 14:34

Поправил

<?php

#Функция принимает 3 значения с типом float и выводит минимальное значение
function minValue(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $z) {
        return $y;
    } else {
        return $z;
    }
}
$a = 2;
$b = 3;
$c = 2;

echo minValue($a, $b, $c) . '<br>';
ivashkevich 06.08.2019 в 20:20

Если передать 5,5,10, то вернётся 10, что неверно.

Aleks 06.08.2019 в 21:04

Поправил

ivashkevich 07.08.2019 в 03:43

Теперь если передать 2, 3, 1, то вернёт 2. Не торопись.

Aleks 07.08.2019 в 14:18

Еще раз поправил

ivashkevich 07.08.2019 в 16:56

Теперь ок

Aleks 06.08.2019 в 14:52

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
Решение:

<?php
#Функция принимает на вход два аргумента по ссылкам и умножает каждый из них на два
function multip2(int &$x, int &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 10;
$b = 7;

multip2($a, $b);

echo $a . '<br>';
echo $b;
ivashkevich 06.08.2019 в 20:20

Отлично

Aleks 06.08.2019 в 19:47
<?php
#Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного)
#Ну разумеется, тут никуда без рекурсии
function factorial(int $x)
{
    if ($x == 1) {
        return 1;
    }
    return $x * factorial($x - 1);
}

echo factorial(4);
ivashkevich 06.08.2019 в 20:20

Отлично

Aleks 06.08.2019 в 21:04

Последняя

<?php
# Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.
# И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.
# Кто справится и первым напишет верное решение в комментах – тот красавчик и получит от проекта небольшой бонус.
function intNumber (int $x)
{
    if ($x == 0) {
        echo $x;
    } else {
        echo  $x - intNumber($x - 1);
    }
}
intNumber(6.7);
ivashkevich 07.08.2019 в 03:48

Что с форматированием? Кто вас учил в одну строку всё лепить? Делайте переносы, как в уроках.

return там ни к чему, функция и так завершится на этом.

Выводит числа не в том порядке. Нужно от 0 до переданного значения.

Aleks 07.08.2019 в 14:32

Исправил, вывод теперь с 0
Форматирование поправил.

ivashkevich 07.08.2019 в 16:58

Отлично

Vladimir96 08.08.2019 в 04:25
//Домашнее задание
    //Поиск минимального значения
    function getMinimumNumber(float $number_1, float $number_2, float $number_3)
    {
        return  min($number_1, $number_2, $number_3);
    }
    echo "Минимальное значение: ";
    echo getMinimumNumber(15.3,10.4,30);

    echo "<br>";

    //Ссылки
    function ArgumentsByReference (int &$reference_1, int &$reference_2)
    {
        $reference_1 *= 2;
        $reference_2 *= 2;
    }

    $NumberForFunctionReference_1 = 10;
    $NumberForFunctionReference_2 = 28;

    ArgumentsByReference ($NumberForFunctionReference_1, $NumberForFunctionReference_2);

    echo 'Результат первой ссылки: ' . $NumberForFunctionReference_1;
    echo '<br>';
    echo 'Результат второй ссылки: ' . $NumberForFunctionReference_2;

    echo "<br>";

    //Факториал числа
    function getFactorialNumbers (int $argumentForFacktorial)
    {
        if ($argumentForFacktorial == 1) {
            return $argumentForFacktorial;
        }

        return $argumentForFacktorial * getFactorialNumbers($argumentForFacktorial - 1);
    }
    echo "Факториал: ";
    echo getFactorialNumbers(5);

    echo "<br>";

    //Вывод целых чисел
    function integerOutput (int $numberForOutput)
    {
        if($numberForOutput == 0) {
            return $numberForOutput;
        }

        echo $numberForOutput - integerOutput($numberForOutput - 1);
        echo "<br>";
    }

    integerOutput(8);
    //От последнего чуть коньки не отбросил
ivashkevich 08.08.2019 в 16:26

$number_1 - в именах переменных не должно быть подчеркиваний.
Функцию поиска минимального числа рекомендую написать самостоятельно, хотя формально с заданием вы справились.

ArgumentsByReference - имена методов и переменных пишутся с маленькой буквы.

По логике - всё отлично

Vladimir96 08.08.2019 в 17:59

Почему при вызове функции внутри себя самой записывается только результат аргументов? Хотя внутри функции также есть выражение, но его просто игнорируют, когда функция вызывает саму себя.(см. код)

   //пример
   function integerOutput (int $numberForOutput)
{
    if($numberForOutput == 0) {
        return $numberForOutput;
    }
    //ВОТ ВЫРАЖЕНИЕ
    echo $numberForOutput - integerOutput($numberForOutput - 1);
    echo "<br>";
}

integerOutput(8);
ivashkevich 08.08.2019 в 18:47

Вообще не понял вопроса. Кто там что игнорирует? Вызов функции внутри себя самой не отличается от вызова этой же функции откуда-то ещё.

Ooleg 16.08.2019 в 17:06

Последнее задание не мог решить, не учёл, что работа функции приостанавливается на время вызова из неё другой функции, так может и додумался бы. Добавьте пожалуйста этот нюанс в урок, для будущих таких же тугодумов как я)

function minFloat (float $x, float $y, float $z)
{
    if ($x<$y && $x<$z) {echo $x . ' меньшее' . '</br>'; return;}
       elseif ($y<=$z) {echo $y . ' меньшее' . '</br>'; return;}
              else {echo $z . ' меньшее' . '</br>'; return;}
}
function multi (&$x, &$y)
{
$x*= 2;
$y*= 2;
}
function getFactorialis(int $n) // скопировал с урока и слегка изменил
{
    // Если сейчас 1, то просто возвращаем 1
    if ($n == 1 || $n == 0) return 1; //Факториал нуля, по соглашению, принят равным единице: 0!=1.
    if ($n < 1) { return false;}

    // В остальных случаях - прибавляем текущее число к сумме всех предыдущих
    return $n * getFactorialis($n - 1);
}

$x = 2.8;
$y = 5.7;
$z = 8.3;

minFloat($x, $z, $y);

echo 'Было x = ' . $x . ' y= ' . $y . '</br>';
multi($x, $y);
echo 'Стало x = ' . $x . ' y= ' . $y . '</br>';

if ($f = getFactorialis($z)) {echo 'Факториал ' . (int) $z . ' : ' . $f;}
    else echo 'Для работы функции вычисления факториала введите число равное или больше 0!';

?>
ivashkevich 16.08.2019 в 20:37

minFloat - а чего всё в одну строку? Сделай нормальные отступы, как у меня в уроках. Функция должна возвращать значение, а не выводить его.

getFactorialis

if ($n < 1) { return false;}

Функция не должна возвращать разные типы данных. Если она возвращает int, то никакого false там быть не должно.

else echo 

Для блоков if-else всегда используйте фигурные скобки. Где-то успели уже нахвататься плохих примеров. Переучивайтесь.

Ooleg 16.08.2019 в 20:41

Спасибо за замечания, буду отучаться от плохих примеров.

[email protected] 24.08.2019 в 19:45
<?php
function getMin(float $a,float $b,float $c)
{
    $A = $a-$b;
    $B = $a-$c;
    $C = $b-$c;
    if($A > 0){
        if($C > 0){
            return $c;
        }else{
            return $b;
        }
    }else{
        if($B > 0){
            return $c;
        }else{
            return $a;
        }
    }
}

$a = 0.5;
$b = 0.9;
$c = 5;

echo "Наименьшее число :" . getMin($a,$b,$c);
ivashkevich 25.08.2019 в 13:50

Как-то сложно. Тут достаточно простых сравнений. Имена переменных ни о чем не говорят. Имена переменных в PHP всегда должны начинаться с маленькой буквы.

[email protected] 24.08.2019 в 20:22
<?php
function opa(int $n)
{
    if ($n  == 0) {
        echo $n;
      return ;
    }
    $y = opa( $n - 1);
      echo ' ,' . $n;
      return $y;
}
$n = 5;

echo  opa($n);
ivashkevich 25.08.2019 в 13:54

Что с отступами? Нужно выровнять.
Непонятно для чего return y, если там всегда null. И для чего echo перед

echo  opa($n);

Разберитесь и исправьте.

Clawson 26.08.2019 в 20:52
<?php

function minOfFloat (float $x, float $y, float $z)
{
  return $x < $y ? ($x < $z ? $x : $z) : ($y < $z ? $y : $z);
}

function multBy2 (&$x, &$y)
{
  $x *= 2;
  $y *= 2;
}

function factorial(int $x)
{
  if ($x == 1) {
      return $x;
    }
  return $x * factorial($x-1);
}

function spamNum ($x)
{
  if ($x == 0) {
      echo $x . '<br>';
      return;
    }
  echo $x . '<br>' . spamNum($x-1);
}

$x = 1.3;
$y = 1.4;
$z = 1.2;

echo 'x = ' . $x . '<br>y = ' . $y . '<br>z = ' . $z . '<br>';

echo 'Минимальное из трех: ' . minOfFloat($x, $y, $z) . '<br>';

echo 'Умножим x и y на 2 испульзуя функцию с ссылками на две переменные.<br>';
multBy2($x, $y);
echo 'x = ' . $x . '<br>y = ' . $y . '<br>';

$w = 5;
echo 'Дано число ' . $w . '. Его факториал равен: ' . factorial($w) . '<br>';
echo 'Вывод чисел от 0 до заданного: (' . $w . ')<br>';
spamNum($w);

Минут 20 вдуплял рекурсию %) Очень понравилось последнее задание)

ivashkevich 28.08.2019 в 05:45
  1. Плохо читаемый код, на if логика прозрачнее
  2. function multBy2 (&$x, &$y) - после имени функции не должно быть пробелов. У аргументов должны быть типы аргументов.
  3. Отлично
  4. Тип аргумента не указан.

Отлично, что поняли рекурсию. Исправляйте мелкие недочеты и вперед)

Clawson 28.08.2019 в 08:34

Учту замечания. Спасибо.

Dreft 01.09.2019 в 16:48
<?php
    function minVal(float $x, float $y, float $z)
    {
        if (($x < $y && $x < $z)) {
            return $x;
        } elseif ($y < $z) {
            return $y;
        } else {
            return $z;
        }
    }

    echo 'Минимальное число:  ' . minVal(10, 5, 2);
    echo '<hr/>';

    function multiply(int &$x, int &$y)
    {
        $x *= 2;
        $y *= 2;
    }

    $a = 4;
    $b = 5;
    multiply($a, $b);
    echo $a . "<br/>" . $b;
    echo "<hr/>";

    function factorial(int $x)
    {
        if ($x == 1 || $x == 0) {
            return $x;
        }
        return $x * factorial($x - 1);
    }
    echo 'Факториал = ' . factorial(5);
    echo '<hr/>';

function printNums(int $x)
{
    if ($x == 0) {
        echo $x;
        return;
    }
    printNums($x - 1);
    echo '-', $x;
}
echo printNums(10);
ivashkevich 02.09.2019 в 04:59
  1. Функция должна всегда!!! возвращать число. Даже если они все равны. Если передам 10, 5, 2, то вернётся 10. А это нифига не минимальное.
  2. Где типы аргументов?
  3. Где типы? Почему условие в одну строку? Где вы у меня в уроках такое видели? Переделывайте.
  4. Ок
Dreft 02.09.2019 в 06:21

Поправил

ivashkevich 02.09.2019 в 10:08

Супер! Красава!

Monstrsostrova 09.09.2019 в 15:26

4 задача, так получилось, не обязательно же через рекурсию

for($i=1; $i<=100; $i++){
    if($i%2==0){
        echo ',' ."$i";
}
}
ivashkevich 09.09.2019 в 20:28

Начнем с того, что это вообще не функция. Рекурсия нужна в этом задании обязательно. Для того, чтобы вы понимали как это работает. Ну и, наконец, логика реализации никак не соотносится с логикой задачи.

Monstrsostrova 10.09.2019 в 10:56
<?php
function num($x) {
    if($x==0){
        return 0;
    }
    return num($x-1);
}
echo ',' .num(10);

попробовал так, что то не работает, хотя по логике вроде как должно. Подскажи пожалуйста в чем не правда?
ivashkevich 10.09.2019 в 12:59

Функция должна выводить числа. А здесь нет ни одной конструкции, которая бы что-либо выводила. Вот оно и не работает.

Monstrsostrova 10.09.2019 в 15:16

понял, спасибо, все получилось. Спустя 2 дня вроде поняд рекурсию

ivashkevich 10.09.2019 в 20:46

Тогда жду рабочий вариант)

Monstrsostrova 11.09.2019 в 09:11
<?php
function num($x) {

    if($x==0){
         echo 0;
        return;
    }
    num($x-1);

echo ',' . $x;
}
num(10);
ivashkevich 14.09.2019 в 19:14

Где тип аргумента?

KseniaM 13.09.2019 в 13:22
/*Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. 
И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности. */
<?php
function getNumbers(int $n) {
    switch($n<=>0){
        case 0: return 0;
                break;
        case 1: return getNumbers($n-1)."\n".$n;
                break;
        case -1:return getNumbers($n+1)."\n".$n;
                break;
    }
}

echo getNumbers(-5);
ivashkevich 14.09.2019 в 19:15

Где типы аргументов?

[email protected] 15.09.2019 в 12:51
<?php
function minimum(float $a, float $b, float $c)
{
    return min($a, $b, $c);
}

echo(minimum(3, 10, 100));
?>

Так же можно сделать?

ivashkevich 15.09.2019 в 20:15

Нуу, не оч. Хотелось бы увидеть вашу логику в решении задачи.

Floppy 16.09.2019 в 15:36
<?php

/*
 * Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
 */

function getMaxValue(float $value1, float $value2, float $value3): float
{
    $maxValue = 0.0;
    for ($i = 1; $i < 4; $i++) {
        $arg = "value{$i}";
        if ($maxValue < $$arg) {
            $maxValue = $$arg;
        }
    }
    return $maxValue;
}

function getMaxValueUnlimArg(...$_): float
{
    $numArgs = func_num_args();
    $argList = func_get_args();
    $maxValue = 0.0;
    for ($i = 0; $i < $numArgs; $i++) {
        if ($maxValue < $argList[$i]) {
            $maxValue = $argList[$i];
        }
    }
    return $maxValue;
}

var_dump(getMaxValue(5.3, 13.2, 10));
var_dump(getMaxValueUnlimArg(4.3, 9.2, 18.9));

/*
 * Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
 */

function multiplyValue(&$value1, &$value2): void
{
    $value1 *= 2;
    $value2 *= 2;
}

$value1 = 4;
$value2 = 7;
multiplyValue($value1, $value2);
var_dump($value1, $value2);

/*
 * Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного).
 */

function getFactorial(int $n)
{
    if ($n === 1) {
        return 1;
    }
    return $n * getFactorial($n - 1);
}

var_dump(getFactorial(10));

/*
 * Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не
 * обойтись без рекурсии, это задание повышенной сложности. Кто справится и первым напишет верное решение в
 * комментах – тот красавчик и получит от проекта небольшой бонус.
 */

function showNumberFromZero(int $n)
{
    if ($n === 1) {
        echo 1;
        return 0;
    }
    showNumberFromZero($n - 1);
    echo ', '. $n;
}

showNumberFromZero(10);
ivashkevich 16.09.2019 в 18:50

Для чего вся эта магия?

Floppy 16.09.2019 в 19:21

Захотелось показать альтернативу и возможность использование $$ Переменные переменных

ivashkevich 16.09.2019 в 19:36

Непонятно, почему максимальное значение 0.0. А если я передам в функцию только отрицательные числа?

getMaxValueUnlimArg(...$_) - здесь проще было сделать именованную переменную и получить на входе массив. Опять же, типы аргументов пропали.

multiplyValue(&$value1, &$value2) тоже типов нет

Не стоит бежать впереди поезда. Лучше делать просто но качественно, чем не до конца понимая как.

Floppy 16.09.2019 в 20:26

Для первой функции правильней было бы указать $maxValue = $value1;

Какой вариант был бы лучшем для решения

function getMaxValue(float $value1, float $value2, float $value3): float
{
    $maxValue = $value1;
    if ($value1 < $value2) {
        $maxValue = $value2;
    }
    if ($value2 < $value3) {
        $maxValue = $value3;
    }
    return $maxValue;
}

function getMaxValueAlternative(float $value1, float $value2, float $value3): float
{
    if ($value1 > $value2 && $value1 > $value2) {
        return $value1;
    } elseif ($value2 > $value1 && $value2 > $value3) {
        return $value2;
    } else {
        return $value3;
    }
}

p.s. к типам ещё не как не привыкну, учил php ещё 3.х

ivashkevich 17.09.2019 в 02:32

p.s. к типам ещё не как не привыкну, учил php ещё 3.х

Ах вот в чем дело. Ну старайтесь переучиваться.

getMaxValue

Если передам 3,1,2 то вернёт 2, что неверно.

getMaxValueAlternative

Если передам 2,1,3 то вернёт 2, и это тоже неверно.

Floppy 17.09.2019 в 08:46

Поправил ошибки

<?php
function getMaxValue(float $value1, float $value2, float $value3): float
{
    $maxValue = $value1;
    if ($maxValue < $value2) {
        $maxValue = $value2;
    }
    if ($maxValue < $value3) {
        $maxValue = $value3;
    }
    return $maxValue;
}

function getMaxValueAlternative(float $value1, float $value2, float $value3): float
{
    if ($value1 > $value2 && $value1 > $value3) {
        return $value1;
    } elseif ($value2 > $value1 && $value2 > $value3) {
        return $value2;
    } else {
        return $value3;
    }
}
H3licoptero 17.09.2019 в 15:16
Минимальное значение.
<?php

function minValue (float $x, float $y,float $z)
{
    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($z > $y) {
        return $y;
    } else {
        return $z;
    }

}

$a = 11.2;
$b = 1.1;
$c = 11.3;
echo minValue( $a, $b, $c);

Аргументы по ссылке.

function argsMultiple (int &$x, int &$y) 
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 10;
$b = 5;

argsMultiple($a, $b);
echo $a, '<br>';
echo $b, '<br>';

Факториал.
function getFactorial(int $n)
{
    var_dump($n);
    if ($n == 20){
        return 20;
    }
    return getFactorial($n + 1);
}

echo getFactorial(1);

Так ли? А то рекурсия пока сильнее меня, кажется)

function getInteger (int $x)
{

    if ($x == 0) {
        return '<br>' . 0;
    } elseif ($x < 0) {
        echo '<br>' . $x;
        return getInteger($x + 1);
    } else {
        echo '<br>' . $x;
        return getInteger($x - 1);
    }
}

echo getInteger(-10);
echo '<br>';
echo getInteger(10);

Storm ругался на скалярные типы и не давал указать их. Говорил, что только в 7-ой версии доступно и выдавал ошибку синтаксиса, а тут уже 7.4 подъехала. Вот я и решил, что пока так. Да и debug вчера не работал. Вроде исправил. Так?

ivashkevich 18.09.2019 в 17:44

Скобка, открывающая тело функции, переносится на следующую строку. Где типы аргументов? Как будто урок и не читали. Исправьте, потом остальное посмотрю.

dliashchenko 23.09.2019 в 13:20
<?php
function minNumber( float $a, float $b, float $c)
{
    if ($a < $b && $a < $c) {
        return $a;
    }
    elseif ($a > $b && $b < $c){
        return $b;
    }
    elseif ($a > $c && $b > $c){
        return $c;
    }
}

echo "Наименьшее число: ".minNumber(24.1, 30.4, 25.1);

echo "<br/>";

function linkNumber( int &$a, int &$b)
{
    $a = $a * 2;
    $b = $b * 2;
    return " $a, $b";
}

$z = 2;
$q = 4;

echo "Умножение на 2 по ссылкам".linkNumber($z, $q);

echo "<br/>";

function factorialNumber( int $a)
{
    if ($a == 1){
        return 1;
    }
    return $a * factorialNumber( $a - 1);
}

echo "Факториал ".factorialNumber(12);

echo "<br/>";

function wholeNumbers( int $a)
{
    if ($a == 0 ){
        echo $a;
        return;
    }
    wholeNumbers($a - 1);
    echo ", ".$a;
}

wholeNumbers(12);

Исправил

ivashkevich 23.09.2019 в 13:41
return "Есть одинаковые значения!";

Функция должна возвращать числа. Всегда. Если несколько чисел равны и являются минимальными, возвращать любое из них.

linkNumber( &$a, &$b){

Где типы аргументов?

factorialNumber( $a){

Фигурная скобка, открывающая тело функции, пишется на следующей строке.

function Number

Имена функций пишутся с маленькой буквы.

Такое чувство, что урок вообще не читали.

[email protected] 23.09.2019 в 23:11
<?php

function numbers(int $n)
{
    if ($n == 0) {
        echo '0'.'<br>';
        return 0;
    }
    $f=1 + numbers($n-1);
    echo $f.'<br>';
    return $f;
}
numbers(10);

Как-то так.

ivashkevich 24.09.2019 в 08:44

Пойдет, но можно проще, без суммирования

Evilinside 03.10.2019 в 19:00
<?php

//1ая задача
function getMinOfNumbers(float $x, float $y, float $z)
{

    if ($x < $y && $x < $z) {
        return "Число x: {$x} минимальное";
    } elseif ($y < $x && $y < $z) {
        return "Число y: {$y} минимальное";
    }else
        return "Число z: {$z} минимальное";
}
echo  getMinOfNumbers(1,1.1,1.2);

///////////////////////////////////////////////

// 2ая задача

function getProduct(&$num1, &$num2 ){

    $num1*=2;
    $num2*=2;
    echo $num1."\n";
    echo $num2;
}
$a=3;
$b=2;
 getProduct($a,$b);

///////////////////////////////////////////////

// 3я задача

function getFactrorial(int $num)
{
    if ($num < 0) {
        return 0;
    } elseif ($num == 0) {
        return 1;
    }
    return $num * getFactrorial($num - 1);
}

echo getFactrorial(0);

///////////////////////////////////////////////

// 4ая задача
function getInteger(int $num)
{
    if ($num === 0) {
        echo $num . "\n";
    } else
        echo $num + getInteger($num - 1) . "\n";
}

getInteger(20);

Расскажите, пожалуйста, как часто в реальной практике используется рекурсия? Нужна ли рекурсия, когда можно воспользоваться циклами?

ivashkevich 04.10.2019 в 14:24
  1. Функция должна возвращать ЧИСЛО! А не строку. Если передать 2, 2, 3, то напишет про 3, что тоже неверно.
  2. Где типы аргументов?
  3. Ок
  4. Функция должна выводить просто последовательность чисел. У вас там суммирование какое-то, дичь в общем.

Рекурсия нужна при обходе древовидных структур данных, при работе с вложенными сущностями. Ну и в математических вычислениях тоже порой позволяет упростить код. Что выбирать, цикл или рекурсию, решает разработчик.

kvakazuabr 06.10.2019 в 11:39

пишите здесь ваш код
```1.
function getMin(float $x, float $y, float $z) {
    return $x <= $y && $x <= $z  ? $x : $y <= $x && $y <= $z  ?  $y : $z; 
}
 echo getMin(5.1, 9.0, 4.4);
2.
function sum(int &$x, int &$y) {
    $x *= 2;
    $y *= 2;
}
$a = 4;
$b = 3;

sum($a, $b);
echo $a;
echo '<br>';
echo $b;
3.
function fact(int $n) {
    if ($n==0||$n==1||$n==2) {
        return $n;
    }
    return $n * fact($n-1);
}

echo fact(7);
4.
уже решал 
ivashkevich 06.10.2019 в 11:47
  1. Код должен быть понятным. Здесь все в одну строку, не разобраться.
    Если передам 2, 2, 3, вернёт 3, что не является минимальным значением.
    Вызывается несуществующая функция - var_dump(getMax(5.1, 9.0, 4.4));
    То есть ваш код попросту не работает. В следующий раз не буду даже разбирать. Отправляемые решение должно быть как минимум рабочим.
  2. Где типы аргументов? Урок читали?
  3. Где тип аргумента?
kvakazuabr 07.10.2019 в 07:11

все работает вернет 2

ivashkevich 07.10.2019 в 08:38

Хм. Мне казалось там не было "либо равно".

kvakazuabr 07.10.2019 в 09:10

там не было = это я ошибся все верно

ivashkevich 07.10.2019 в 09:54

Теперь отлично

[email protected] 07.10.2019 в 19:37
<?php
function getMin(float $x, float $y, float $z)
{
    if (($x < $y) && ( $x < $z ))
{return $x;}
    elseif ($y < $z)
{return $y;}

  else
{ return $z;}

}

$a = 225.5;
$b = 30.1;
$c = 15.5;
echo 'Наименьшее число: ' . getMin($a, $b, $c);
?>
<?php

function Multiple2  (&$x, &$y)
{
$x=$x*2;
$y=$y*2;
}
$b=5;
$c=10;
Multiple2 ($b, $c);
echo $b;
echo ' ';
echo $c;
?>
<?php

function fact(int $n)
{

    if ($n == 1) {
        return 1;
    }

    return $n * fact($n - 1);
}

echo 'Результат: ' . fact(4);
ivashkevich 07.10.2019 в 23:36

Что с переносами фигурных скобок? Сделайте как в уроке.

  1. Если передать 2,2,3 то вернёт 3. Это неверно.
  2. Имена функций пишутся с маленькой буквы. Куда пропали типы аргументов?
  3. Всё ок
[email protected] 08.10.2019 в 14:15

Передаю 2,2,3 возвращает 2. false&true=false значит переходим к elseif получается true и возвращает 2. Или что-то я не так поняла?

ivashkevich 08.10.2019 в 17:18

Прошу прощения, с логикой действительно всё правильно. Исправьте тогда по остальным пунктам.

[email protected] 08.10.2019 в 19:18

Спасибо, по остальным все понятно, исправлю!

NrG 12.10.2019 в 07:53

Исправил

function minOfThreeNum (float $a, float $b, float $c)
{
    if ($a < $b && $a < $c) {
        return $a;
    } elseif ($b < $c) {
        return $b;
    }
    return $c;
}
echo 'Минимальное из трех чисел: ' . minOfThreeNum(3.2, 4.7, 2.1);

function multiplicationByTwo (int &$x,int &$y)
{
    $x *= 2;
    $y *= 2;
}
$a = 3;
$b = 8;
multiplicationByTwo($a, $b);
echo $a; // Результат 6
echo $b; // Результат 16

function factorial (int $a)
{
    if ($a == 1) {
        return 1;
    }
    return $a * factorial($a -1);
}
echo factorial(4); // Результат 24
ivashkevich 12.10.2019 в 12:34
minOfThreeNum(2, 2, 3)

Возвращает 3

sar16520 13.10.2019 в 17:56
<?php
echo 'Минимальное значение';
echo '<br>', '<br>';
function minValue($a, $b)
{
    if ($a < $b) {
        return $a;
    }elseif ($a > $b) {
        return $b;
    }else {
        echo 'Нет минимального значения';
    }
}
echo minValue(4, 5);
echo '<br>';
echo 'Ссылки';
echo '<br>', '<br>';
function links(&$c, &$d)
{
    $c = $c * 2;
    $d = $d * 2;
}

$e = 4;
$f = 5;

links($e, $f);

echo $e, '<br>', $f;
echo '<br>';
echo 'факториал';
echo '<br>', '<br>';
function factorial($g)
{
    if ($g == 0 || $g == 1) {
        return 1;
    }
    return $g * factorial($g - 1);
}
echo factorial(3);
echo '<br>';
echo 'Пересчет до нужного числа';
echo '<br>', '<br>';

function minus($h)
{
    var_dump($h);
    if ($h == 1) {
        return 1;
    }elseif ($h == 0) {
        return 0;
    }elseif ($h < 0) {
        return minus($h + 1);
    }
    return minus($h - 1);
}
minus(10);

Минимальное значение

4
Ссылки

8
10
факториал

6
Пересчет до нужного числа

int(10) int(9) int(8) int(7) int(6) int(5) int(4) int(3) int(2) int(1)

ivashkevich 13.10.2019 в 19:59

Где типы аргументов?!
Поиск минимального числа должен быть среди трёх чисел. Функция должна возвращать минимальное число а не строки!
Последняя функция тоже неправильно работает.
Ужасно. Перечитайте и урок и домашнее задание.

sar16520 15.10.2019 в 10:47
//Минимальное значение

function minValue(float $a,float $b,float $c)
{
    if ($b < $a && $b < $c) {
        return $b;
    }elseif ($a < $b && $a < $c) {
        return $a;
    }elseif ($c < $a && $c < $b) {
        return $c;
    }elseif ($a == $b && $a == $c) {
        return 'Нет минимального значения';
    }
}
echo minValue(2.01,2.1,2.3), '<br>';

//Ссылки

function links(&$c, &$d)
{
    $c = $c * 2;
    $d = $d * 2;
}

$e = 4;
$f = 5;

links($e, $f);

echo $e, '<br>' ,$f , '<br>';

//Факториал

function factorial($g)
{
    if ($g == 0 || $g == 1) {
        return 1;
    }
    return $g * factorial($g - 1);
}
echo factorial(3);

//Пересчет

function cons(int $h)
{
    if ($h == 0) {
        echo '0'.'<br>';
        return 0;
    }
    $i=1 + cons($h-1);
    echo $i.'<br>';
    return $i;
}
cons(3);

ПОКАЗАЛО
2.01
8
10
60
1
2
3
.
На счет последнего еле как допер, как это сделать)

ivashkevich 15.10.2019 в 10:56
return 'Нет минимального значения';

Не нужно. Возвращайте любое из минимальных. Функция всегда должна возвращать float.

minValue(2.01,2.01,2.3)
Вообще ничего не возвращает.

И опять в двух функциях типы аргументов не указаны. Куда спешишь?

Последнее сделано слишком сложно. Там можно без всякой арифметики. Но то что работает - уже хорошо.

sar16520 15.10.2019 в 18:30

Кстати, у меня проблема с понятием рекурсии) Как она работает? Почему нужно писать "$a * power($a, %n-1)", а не просто "$power($a, $n)"?

ivashkevich 15.10.2019 в 20:14

Посмотри другие уроки в интернете. Спросил полную ерунду, именно из-за того что не понимаешь. Пока не поймёшь - не берись делать.

NrG 17.10.2019 в 22:27

Видео записано 2 года назад, сейчас declare стали чаще применять?

ivashkevich 18.10.2019 в 09:01

Я бы не сказал)

babur 05.11.2019 в 13:38

Привет! ДЗ 1й. проверьте пож.

function getMinNums(float $a, float $b, float $c)
{
    if ($a < $b && $b < $c) {
        return $a;
    }elseif ($b < $c) {
        return $b;
    } else{
        return $c;
    }
}

$a = 7.22;
$b = 6.11;
$c = 10.21;

echo 'Min number' . getMinNums($a, $b, $c);
ivashkevich 06.11.2019 в 02:35

Передал 1,2,2 - вернулось 2. Неправильно.

andreskrip 05.11.2019 в 23:41

Извиняюсь за простыню =)

// Функция, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
function minValue(float $a, float $b, float $c)
{
    if ($a > $b) {
        //если выполняется, то проверяем оставшиеся два числа
        if ($b > $c) {
            return $c;
        } else {
            return $b;
        }
    } //если не выполняется, то сравниваем с оставшимся числом  
    elseif ($a > $c) {
        return $c;
    }
    return $a;
}

echo 'Наименьшее число из трёх: ' . minValue(25, 3.4, 14);

---------------------------------------------------------------------------------------------------
// Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
function doubleMultiplication(int &$a,int &$b)
{
    $a *= 2;
    $b *= 2;
}

$a = 15;
$b = 7;
echo doubleMultiplication($a, $b) . 'Новые значения аргументов: a = ' . $a . ', b = ' . $b;
---------------------------------------------------------------------------------------------------
//Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)
function factorial(int $x)
{
    //если значение равняется единице, то завершаем умножение и возвращаем единицу
    if ($x == 1) {
        return 1;
    }
    //умножаем текущее число на предыдущее
    return $x * factorial($x - 1);
}

echo 'Факториал числа равен: ' . factorial(10);
---------------------------------------------------------------------------------------------------
//Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.
function displayNumbers(int $x)
{
    //если значение равняется нулю, то завершаем функцию
    if ($x == 0) {
        return 0;
    }
    //выводим текущее число и затем отнимаем от него единицу
    echo $x . '<br>';
    return displayNumbers($x - 1);
}

echo displayNumbers(10);
ivashkevich 06.11.2019 в 02:41
  1. Отлично
  2. Где типы аргументов?
  3. Отлично
  4. Числа выводятся в обратном порядке. Нужно от 0 и до переданного значения.
YuraG 14.11.2019 в 01:21

function getOfMin(float $a, float $b, float $c) : float
{
    return min($a, $b, $c);
}

function getProduct(int &$a, int &$b)
{
    $a *=2;
    $b *=2;
}

function getFactorial(int $n): int
{
    if ($n == 1) {
        return $n;
    }

    return $n * getFactorial($n - 1);
}

function showNumb(int $n)
{
    $first = 0;

    function getNextNumb($numb, $nextNumb)
    {
        echo ' '. $nextNumb;
        if ($nextNumb < $numb) {
            nextNumb($numb, $nextNumb + 1);
        }
    }
    getNextNumb($n, $first);
}
ivashkevich 14.11.2019 в 04:47

В первом примере напиши логику самостоятельно, хитрец ты эдакий :)

ivashkevich 14.11.2019 в 04:51

Последний пример падает с ошибкой. Хоть бы проверил его перед отправкой сюда.

YuraG 14.11.2019 в 08:09
function showNumb(int $n)
{
    $first = 0;

    function getNextNumb($numb, $nextNumb)
    {
        echo ' '. $nextNumb;
        if ($nextNumb < $numb) {
            getNextNumb($numb, $nextNumb + 1);
        }
    }
    getNextNumb($n, $first);
}

Подправил. 

function getOfMin(float $a, float $b, float $c) : float
{
    if ($a < $b && $a < $c) {
        return $a;
    } elseif ($b < $a && $b < $c) {
        return $b;
    } else {
        return $c;
    }
}   
ivashkevich 14.11.2019 в 09:50
var_dump(getOfMin(2,2,4)); //double(4) - неверно

showNumb - ок. Но можно было обойтись одной функцией.

YuraG 14.11.2019 в 20:57
function getOfMin(float $a, float $b, float $c) : float
{
    if ($a <= $b && $a <= $c) {
        return $a;
    } elseif ($b <= $a && $b <= $c) {
        return $b;
    } else {
        return $c;
    }
}   

var_dump(getOfMin(2,2,4)); // float(2)
ivashkevich 14.11.2019 в 21:09

Теперь работает. Но во втором условии можно опустить часть про $b <= $a, так как в первом условии мы уже выяснили что $a не минимальное и сравнивать с ним второй раз смысла не имеет.

SEA 21.11.2019 в 07:31
<?php

function getMin(float $a, float $b, float $c)
{
    $min = $a;
    if ($b < $min) $min = $b;
    if ($c < $min) $min = $c;
    return $min;
}

function getMultiple(&$x, &$y)
{
    $x *= 2;
    $y *= 2;
}

function factorial($x)
{
    if ($x == 1) return 1;
    return $x * factorial($x - 1);
}

function printTo($x)
{
    if ($x > 0) printTo($x - 1);
    echo $x . ' ';
}
ivashkevich 21.11.2019 в 13:34

Для блоков if-else в PHP всегда используются фигурные скобки.

getMultiple(&$x, &$y)

где типы аргументов? в следующих двух задачах тоже самое.

Поправьте, пожалуйста.

SEA 22.11.2019 в 04:17
<?php

function getMin(float $a, float $b, float $c)
{
    $min = $a;
    if ($b < $min) {
        $min = $b;
    }
    if ($c < $min) {
        $min = $c;
    }
    return $min;
}

function getMultiple(float &$x, float &$y)
{
    $x *= 2;
    $y *= 2;
}

function factorial(int $x)
{
    if ($x == 1) {
        return 1;
    }
    return $x * factorial($x - 1);
}

function printTo(int $x)
{
    if ($x > 0) {
        printTo($x - 1);
    }
    echo $x . ' ';
}
ivashkevich 22.11.2019 в 10:13

Отлично!

Salexandr 26.11.2019 в 22:57
1)
function minval(float $a, float $b, float $c)
{
   $min = ($a < $b) ? $a : $b;
   $min = ($min < $c) ? $min : $c;
   return $min;
}

2)
<?php
function multipl(&$a, &$b)
{
    $a *= 2;
    $b *= 2;
}

3)
function factorial(int $n)
{
   if ($n == 1) {
       return $n;
   }
   return $n * factorial($n - 1);
}

4)
function IntNumbers(int $n)
{
   If ($n == 0) {
      return 0;
   }
   return $n . IntNumbers($n-1);
}
echo strrev (IntNumbers(5));
ivashkevich 27.11.2019 в 20:00

IntNumbers - имена функций пишутся с маленькой буквы
If пишется тоже с маленькой.

Используйте в верхнем левом углу редактора комментария кнопку "код", чтобы звездочка не пропадала.

[email protected] 07.12.2019 в 13:37
function getEvenNumbersUpTo($a){
    $result = '';                           // создание новой строки контейнера
    for($x = 2; $x <= $a - 2; $x +=2){      // $a - 2 чтобы последнее число вывести правильно, а не больше на 1
        $result .= $x.",";                  // ложим в контейнер значения;
    }
    return $result .= $x  . "!";            //возвращаем $result;
}
echo "Выводим четные числа до ".'{$a}: '.getEvenNumbersUpTo(45);
ivashkevich 07.12.2019 в 20:08

Скобка, открывающая тело функции, переносится на следующую строку.

".'{$a}: '.

что за зубодробительная конструкция?

Для чего комментарии? Какие контейнеры? Нет такого понятия в PHP!!!

В домашнем задании нет ничего похожего на то, что вы сделали. Для чего это здесь?

[email protected] 07.12.2019 в 13:39
function minFl(float $z,float $x,float $c){
    if($z > $x && $z > $c){
        return $z;
    }elseif ($x > $z && $x > $c){
        return $x;
    }else return $c;
}
echo 'Максимальное значение равно '. minFl(2.5,3.5,4.5);
ivashkevich 07.12.2019 в 20:11

Скобка, открывающая тело функции, переносится на следующую строку.

В задании нужно было находить минимальное значение, а не максимальное.

Так нельзя:

}else return $c;

Для конструкций if-else всегда используются фигурные скобки!

Функция содержит в имени min, а ищет максимальное. Ошибка именования.

[email protected] 10.12.2019 в 23:03
<?php

    function getMinFloat (float $a, float $b, float $c) {

      if (($a<$b)&&($a<$c)) {
        return $a;
      } elseif ($b<$c) {
        return $b;
      }
      return $c;     
    };

    function toTimesTo (&$a1,&$a2) {
      $a1*=2;
      $a2*=2;
    };

    function factorial(int $n) {
      if ($n==1) {
            return 1;
      };
      return $n*factorial($n-1);
    };

    function printNum(int $n,$count) {
      echo $count++ . '<br>';
      if ($count<=$n) {
        printNum($n,$count);
      };
    };

    function printNumeric(int $n) {
          printNum ($n,0);
    };

        function printNumbers (int $n) {
          if ($n>0) {
            printNumbers($n-1);
            echo ', ' . $n;
          } else {
            echo 'ряд чисел : ' . $n;
          };

    var_dump (getMinFloat (1.2, 3.5, -6.001));
    echo '<br>';

    $x = 2;
    $y = 3;
    toTimesTo ($x,$y);
    var_dump ($x);
    var_dump ($y);
    echo '<br>';

    $n=factorial (4);
    var_dump($n);
    echo '<br>';

    printNumeric (11);
    printNumbers (20); 

 ?>
ivashkevich 11.12.2019 в 17:45

А где отступы? Почему всё на одном уровне? Поправьте, так невозможно проверять.

[email protected] 14.12.2019 в 00:06

Писал и выполнял на андроиде, поэтому получилось без пробелов. Попробовал добавить табуляции здесь и вставить в phpstorm (+ добавил решение последнего задания с рекурсией), но теперь браузер пишет error unexpected end of file, не проверяется. Извините, что отнял время...

[email protected] 18.12.2019 в 22:47
// Напишите функцию,
//  которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
function getMin(float $a, float $b, float $c)
{
    if($a > $b){
        return ($b > $c) ? $c : $b;
    } 
    return ($a > $c) ? $c : $a;
}
echo getMin(2.5, 1.5, 0.5);
//Напишите функцию,
// которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
 function multiplyTwo(&$x,&$y) 
{
    $x = $x*2;
    $y = $y*2; 
}
$a = 5;
$b = 7;
multiplyTwo($a, $b);
echo $a . '' . $b;
//Напишите функцию,
//считающую факториал числа (произведение целых чисел от единицы до переданного).
//Ну разумеется, тут никуда без рекурсии =)
function factorialNumber($x) 
{
    return ($x == 1) ? $x : $x * factorialNumber($x - 1);
}
echo factorialNumber(5);
//Напишите функцию,
//которая будет выводить на экран целые числа от 0 до переданного значения.
//И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.
function integerNumber($x) 
{
    if($x == 0) {
        echo 'Финиш';
    } else if($x % 2 == 0) {
        echo $x . '<br>';
        return integerNumber($x - 1);
    } else {
        return integerNumber($x - 1);
    }
}
echo integerNumber(15);
[email protected] 18.12.2019 в 23:13

Писал сразу после прочтения темы как понял не чего не исправляя, с целью получения опытного комментария :)

ivashkevich 19.12.2019 в 07:28
unction factorialNumber($x) 

Куда подевался тип аргумента?

function integerNumber($x) 

Аналогично.

    } else if($x % 2 == 0) {
        echo $x . '<br>';
        return integerNumber($x - 1);
    } else {
        return integerNumber($x - 1);
    }

Почему выводите только чётные?
Выводить нужно начиная с нуля, а не наоборот.

[email protected] 19.12.2019 в 20:48
function integerNumber(int $x)
{
    if($x <= 0) {
      echo $x;
    } else {
    integerNumber($x - 1);
    echo ',' . $x;
    }
}
echo integerNumber(15);

Ой да первый раз прочитал мне показалось что четные только надо выводить.
А по поводу типа аргумента указывать его считается хорошим тоном или это правильное написание и так должно быть обязательно всегда?

ivashkevich 21.12.2019 в 20:20

Работать будет и без него, но писать нужно, позволяет избежать многих ошибок. Так вы всегда знаете, что за тип, и что с ним можно, а чего нельзя делать.

serjioG 23.12.2019 в 22:41
<?php
function getMin(float $a, float $b, float $c)
{
if ($a > $b) {
    $min = $a;
}else{
    $min = $b;
}
if ($min > $c) {
    return $c;
}
    return $min;

}

$a = 5.44;
$b = 28.34;
$c = 0.45;

echo 'Наименьшее число: ' . getMin($a, $b, $c);
//-----------------------------------------------//

echo '<br>';

function getMultiplication (&$x, &$y)
{
   $x *= 2;
   $y *= 2;
}

$a = 24;
echo '<br>';

$b = 66;
getMultiplication($a , $b);
echo $a;
echo '<br>';
echo '<br>';
echo  $b;
echo '<br>';

факториал

function factorial (int $a)
{
    if ($a == 0) {
        echo $a;
        return;
    }
    factorial($a - 1);
    echo ',' .$a;
}
factorial(5);
ivashkevich 24.12.2019 в 08:01

getSumMultiplication, getSumMin - почему в названии присутствует Sum? Здесь разве что-то суммируется?

функция факториала не должна ничего выводить, она должна возвращать число!

serjioG 27.12.2019 в 09:01

Переменные исправил. А вот про факториал не понял...

ivashkevich 03.01.2020 в 03:38

Значение возвращается с помощью return, выводится с помощью echo. В задании про вывод не было ни слова. Так почему в вашем коде есть echo?

[email protected] 24.12.2019 в 13:27
function max($a,$b,$c){
    if ($a>$b and $a>$c)
        return $a;
    elseif ($b>$a and $b>$c)
        return $b;
    elseif ($c>$a and $c>$b)
        return $c;
    else echo 'ошибка';}
echo max(7, 12, 5);

Ругается, что не может переопределить функцию, но не могу понять, что именно не так ..

ivashkevich 24.12.2019 в 16:21

В PHP уже есть функция с таким именем. Назовите по-другому.
Куда пропали типы аргументов?
Фигурная скобка, открывающая тело функции, пишется на следующей строке.
Блоки if-else всегда оформляются с помощью фигурных скобок.
Что ещё за echo в функции, которая должна вернуть число? Она не должна ничего выводить!

Ну всё же абсолютно по-другому в уроке было, где вы этого нахватались? Привыкайте сразу писать правильно. Рекомендую исправить по всем пунктам.

[email protected] 24.12.2019 в 19:29

Принято, спасибо!
Правильно ли я понял, что когда использую имя встроенной функции, ругается именно таким образом? Тип аргументов убрал, пока пытался разобраться, в чем именно проблема.
Набрался то там, то сям, я и условия задачи слегка исправил, чтобы не шаблонные решать, а хоть что-то свое.
Про фигурные скобки понятно, но я где-то вычитал, что если в блоке if else только одна одна стрОка, то фигурные скобки не обязательно, хотя наверное правильно сразу приучать себя их ставить..
echo в функциях вообще никогда не используется ? Я думал, что функцией можно сократить кусок кода, чтобы его не повторять каждый раз, или я что-то не так понял? Что ещё нельзя использовать внутри функций? Где прочитать ?

ivashkevich 26.12.2019 в 19:00

Про фигурные скобки понятно, но я где-то вычитал, что если в блоке if else только одна одна стрОка, то фигурные скобки не обязательно, хотя наверное правильно сразу приучать себя их ставить..

По правилам PSR всегда нужно ставить.

echo в функциях вообще никогда не используется?

Используется, когда нужно выводить. В задании же сказано, что функция должна возвращать что-то, про выводить ничего не было сказано, значит не нужно.

[email protected] 09.01.2020 в 14:38
<?php

//функция, возвращающая минимальные дробные числа из 3-х введенных в нее
function minOfFloats (float $x, float $y, float $z) {
    if ($x <= $y && $x <= $z) {
       echo 'x = ', $x, '  ';
    }
    if ($y <= $x && $y <= $z) {
       echo 'y = ', $y , '  ';
    }
    if ($z <= $x && $z <= $y) {
       echo 'z = ', $z , '  ';
    }
};

echo 'минимальные числа из x = 12.3, y = 0, z = -5: ', '<br>', minOfFloats(12.3, 0, -5), '<br>';
echo 'минимальные числа из x = 0.01, y = -6,6, z = -6,6: ', '<br>', minOfFloats(0.01, -6.6, -6.6), '<br>';
echo '<br>';

//функция, умножающая 2 введенных в нее числа на 2
function multiplicationOnLinks (&$x, &$y) {
    $x = $x * 2;
    $y = $y * 2;
};

$a = -1.5;
$b = 100;

echo 'числа, ', $a, ' и ', $b, ', принятые по ссылкам и умноженные на 2: ', multiplicationOnLinks ($a, $b),'<br>', $a, ' и ', $b, '<br>';
echo '<br>';

//функция, высчитывающая факториал введенного числа
function factorialByRecursion(int $n) {
    if ($n == 1) {
        return 1;
    }
    if ($n < 1) {
        echo 'факториал для n < 1 не считается';
        return null;
    }
    return $n * factorialByRecursion($n - 1);
}

$n = 10;
echo 'Факториал !',$n ,' = ', factorialByRecursion($n), '<br>';
$n = 0;
echo 'Факториал !',$n ,' = ', factorialByRecursion($n), '<br>';
echo '<br>';

//последним заданием займусь позже

Результат на скрине: https://prnt.sc/ql9tyk

ivashkevich 11.01.2020 в 10:47

minOfFloats - Эта функция у вас ничего не возвращает. Читайте заново про return.

multiplicationOnLinks - OK

factorialByRecursion

if ($n < 1) {
        echo 'факториал для n < 1 не считается';

Либо возвращайте, либо выводите. Мешать не нужно. В вашем случае будет достаточно просто возвращать null.

[email protected] 10.01.2020 в 16:29

Исправил, чтобы результат выводился не через echo, а возвращался через return

<?php

//функция, возвращающая минимальные дробные числа из 3-х введенных в нее
function minOfFloats (float $x, float $y, float $z) {
    if ($x <= $y && $x <= $z) {
       return $x;
        //echo 'x = ', $x, '  ';
    }
    if ($y <= $x && $y <= $z) {
       return $y;
        //echo 'y = ', $y , '  ';
    }
    if ($z <= $x && $z <= $y) {
       return $z;
       //echo 'z = ', $z , '  ';
    }
};

//echo 'минимальные числа из x = 12.3, y = 0, z = -5: ', '<br>', minOfFloats(12.3, 0, -5), '<br>';
//echo 'минимальные числа из x = 0.01, y = -6,6, z = -6,6: ', '<br>', minOfFloats(0.01, -6.6, -6.6), '<br>';
//echo '<br>';

//функция, умножающая 2 введенных в нее числа на 2
function multiplicationOnLinks (&$x, &$y) {
    $x = $x * 2;
    $y = $y * 2;
    return $x && $y;
};

$a = -1.5;
$b = 100;

//echo 'числа, ', $a, ' и ', $b, ', принятые по ссылкам и умноженные на 2: ', multiplicationOnLinks ($a, $b),'<br>', $a, ' и ', $b, '<br>';
//echo '<br>';

//функция, высчитывающая факториал введенного числа
function factorialByRecursion(int $n) {
    if ($n == 1) {
        return 1;
    }
    if ($n < 1) {
        //echo 'факториал для n < 1 не считается';
        return null;
    }
    return $n * factorialByRecursion($n - 1);
}

//$n = 10;
//echo 'Факториал !',$n ,' = ', factorialByRecursion($n), '<br>';
//$n = 0;
//echo 'Факториал !',$n ,' = ', factorialByRecursion($n), '<br>';
//echo '<br>';
ivashkevich 11.01.2020 в 10:57
//echo 'x = ', $x, '  ';

Уберите комментарии

eNergy 11.01.2020 в 01:31
<?php
    function minValue (float $a, float $b, float $c) {
        if ($a < $b && $a < $c) {
            return $a;
        } elseif ($b <= $c) {
            return $b;
        }
        return $c;
    }
    echo minValue(2.1, 3.3, 1.5);
    echo '<br>';

    $a = 11;
    $b = 7;
    echo $a; // выведет 11
    echo '<br>';
    echo $b; // выведет 7
    echo '<br>';
    function multiplyByTwo (int &$x, int &$y) {
        $x *= 2;
        $y *= 2;
    }
    multiplyByTwo($a, $b);
    echo $a; // выведет 22
    echo '<br>';
    echo $b; // выведет 14
    echo '<br>';

    function factorialOfNumber (int $x) {
        if ($x < 0) {
            return 'Введите значение больше нуля';
        } elseif ($x == 0) {
            return $x + 1;
        }
        return $x * factorialOfNumber($x - 1);
    }
    echo factorialOfNumber(7); // выведет 5040
    echo '<br>';

    function integersToValue (int $x) {
        if ($x == 0) {
            echo $x;
            return;
        }
        integersToValue($x - 1);
        echo ', ' . $x;

    }
    integersToValue(7); // выведет 0, 1, 2, 3, 4, 5, 6, 7
ivashkevich 11.01.2020 в 11:03

Как думаете, можно ли в первой функции заменить elseif на if?

function minValue (float $a, float $b, float $c) {

Фигурная скобка, открывающая тело функции, переносится на следующую строку.

return 'Введите значение больше нуля';

Лучше чтобы функция возвращала значения одного типа, либо null, когда что-то идет не так. Чуть позже мы рассмотрим механизм обработки таких ситуаций.

В остальном, по логике - всё отлично.

eNergy 12.01.2020 в 00:29

> Как думаете, можно ли в первой функции заменить elseif на if?
Можно, результат будет тот же, но код выглядит более понятным, верно?
> Фигурная скобка, открывающая тело функции, переносится на следующую строку.
Спасибо, обязательно учту.
> Лучше чтобы функция возвращала значения одного типа, либо null, когда что-то идет не так. Чуть позже мы рассмотрим механизм обработки таких ситуаций.
Хорошо

ivashkevich 12.01.2020 в 15:34
  1. Да
SakuraUzh 16.01.2020 в 13:30

1 задание:

function minimumNum(float $num1, float $num2, float $num3)
{
    $min = $num1 < $num2 ? $num1 : $num2;
    $min = $num3 < $min ? $num3 : $min;
    return $min;
}

2 задание:

function multiplicationBy2(&$num1, &$num2)
{
    $num1 *= 2;
    $num2 *= 2;
}

$a = 5;
$b = 12;
multiplicationBy2($a, $b);

3 задание:

function factorial(int $n)
{
    if ($n === 1) {
        return 1;
    }
    return $n * factorial($n - 1);
}

4 задание

function wholeNum(int $n)
{
    if ($n === 0) {
        return 0;
    }
    echo wholeNum($n - 1) . ' ' . $n;
}
ivashkevich 18.01.2020 в 07:10

Отлично. В последнем задании только тип аргумента не указали.

Apatit 31.01.2020 в 16:53

4 Задание

function factorial( int $number) {
    for ($x=0; $x<$number; $x++){
        echo $x . '<br>';
    }
}

factorial(10);
ivashkevich 01.02.2020 в 13:07

Ок, а сможете реализовать с помощью рекурсии?

Apatit 13.02.2020 в 16:39

1 задание

function minNumber(float $a, float $b, float $c) {
    $min = min($a, $b, $c);
    return $min;
}
echo minNumber(1.15, 1.06, 14.2);

2 Задание

function linkOne(int &$a, int &$b) {
    $a *= 2;
    $b *= 2;
}
$x = 3;
$y = 4;
linkOne($x, $y);
echo $x;
echo '<br>';
echo $y;

3 задание

function factorial(int $a) {
    if ($a == 1){
        return $a;
    }
    return $a * factorial($a- 1);
}
echo 'Результат: ' . factorial(7)

если включено расширение gmp php можно так:

function factorial(int $a) {
    if ($a == 1){
        return $a;
    }
    return gmp_fact($a);
}
echo 'Результат: ' . factorial(5)

4 задание

function numberDisplay(int $x)
{
    if ($x == 0) {
        echo $x;
        return 0;
    }
    numberDisplay($x - 1);
    echo '<br>' .  $x;
}
numberDisplay(22);
ivashkevich 14.02.2020 в 07:25
  1. Ну раз уж используете готовую функцию, то сразу

    return min...

    Незачем объявлять лишнюю переменную.

  2. ОК
  3. ОК
  4. ОК
Apatit 14.02.2020 в 12:38

Спасибо!

function minNumber(float $a, float $b, float $c) {
    return min($a, $b, $c);
}
echo minNumber(1.15, 1.06, 14.2);
ivashkevich 14.02.2020 в 14:32

Отлично

[email protected] 05.02.2020 в 21:08
  1. функция, которая принимает на вход 3 аргумента с типом float и возвращает минимальное значение
    <?php
    function getMin(float  $x, float  $y, float  $z)
    {
    if ($x < $y) {
        $min = $x;
    }
        elseif ($min = $y); 
    if ($min < $z) {
    }
        elseif ($min = $z);
    return $min;
    }
    $a = 10.2;
    $b = 38.7;
    $c = 14.5;
    echo 'Наименьшее число: ' . getMin($a, $b, $c);
ivashkevich 11.02.2020 в 14:56

Вы в условии выполняете присваивание! Перечитайте урок про условия.

Fornit 06.02.2020 в 01:50
//Задание 1. Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
echo "<br>", 'Задание 1. Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.', "<br>";
//получаем случайное float с дробной частью часть от 0 до 0.9 с точностью 0.1
function getFloatRandom()
{
    $minRand = 0;
    $maxRand = 100;
    return mt_rand($minRand, $maxRand) + (mt_rand(0, 9) / 10);
}

//заполняем значения
$x1 = getFloatRandom();
$x2 = getFloatRandom();
$x3 = getFloatRandom();

//функция нахождения минимального для двух чисел
function getMin(float $x1, float $x2)
{
    if ($x1 < $x2) {
        return $x1;
    }
    return $x2;
}

//функция нахождения минимального для трёх чисел
function getMin3(float $x1, float $x2, float $x3)
{
    return getMin(getMin($x1, $x2), $x3);
}

//вызов функции и вывод результата
echo "<br>", "минимальное число из набора [$x1; $x2; $x3]: ", getMin3($x1, $x2, $x3), "<br>";
//-------------------------------------------------------------------------------------------------------------
//Задание 2. Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
echo "<br>", 'Задание 2. Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.', "<br>";
$a = getFloatRandom();//берём из предущей задачи. оптимизация, однако.
$b = getFloatRandom();
function doubleParams(float &$x1, float &$x2){
    $x1 *= 2;
    $x2 *= 2;
}
echo "было до преобразования: $a и $b", "<br>";
doubleParams($a, $b);
echo "стало после преобразования: $a и $b", "<br>";
//-------------------------------------------------------------------------------------------------------------
//Задание 3. Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)
echo "<br>", 'Задание 3. Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)', "<br>";
function getFactorial(int $x){
    if ($x < 2){
        echo $x;
        return $x;
    }
    $f = $x * getFactorial($x - 1);
    echo " * ", $x, ' = ', $f;
    return $f;
}
$minRand = 0;
$maxRand = 10;
$x = mt_rand($minRand, $maxRand);
echo "факториал числа $x:", "<br>";
$f = getFactorial($x);
echo "<br>", "итог: $f";
//-------------------------------------------------------------------------------------------------------------
//Задание 4. Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.
echo "<br>", 'Задание 4. Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.', "<br>";
function showNumbersFromZeroToCurrent(int $x){
    if ($x < 0){
        return;
    }
    showNumbersFromZeroToCurrent($x - 1);
    echo "$x ";
}
$x = mt_rand($minRand, $maxRand);
echo "последовательность числе от 0 до $x:", "<br>";
showNumbersFromZeroToCurrent($x);
ivashkevich 11.02.2020 в 14:58

Отлично. Только скобка, открывающая тело функции, пишется на следующей строке.

qroff 13.02.2020 в 06:04

return $x * power($x, $n - 1);

Зачем от $n отнимать 1?

ivashkevich 13.02.2020 в 08:35

Чтобы возвести число в степень n-1

studentDev 21.02.2020 в 15:01

Здравствуйте, почему в этом коде у меня высвечивает ошибку?

     function mediaGetCos(float $x, float $y) {
       return $x + $y;
     }

     function mediaGetCosTwo(float $x, float $y) {
       $cosX = cos($x);
       $cosY = cos($y);
       return mediaGetCos($cosX, $cosY);
     }

     echo mediaGetCosTwo(1.23, 2);
ivashkevich 23.02.2020 в 19:27

Здравствуйте. Нужен текст ошибки, чтобы понять что именно у вас ломается.

Также нарушен кодстайл. Скобка, открывающая тело функции, пишется на следующей строке.

studentDev 22.02.2020 в 07:40
 Почему каждый раз когда я указываю тип(int, str) у меня постоянно вылезает ошибка? :(
ivashkevich 23.02.2020 в 19:36

Какая ошибка? Версия PHP > 7.1?

studentDev 24.02.2020 в 05:38

Простите, у меня оказывается стояла 5-ая версия PHP, вчера обновил до 7-ой версии.

ivashkevich 25.02.2020 в 07:30

Ок)

luckyAl 28.02.2020 в 22:28
<?php

function getMin($x, $y, $z) // Первое задание
{
    var_dump($x);
    echo '<br>';
    var_dump($y);
    echo '<br>';
    var_dump($z);
    echo '<br>';

    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $x && $y < $z) {
        return $y;
    } else return $z;
}

$a = 7.5;
$b = 11.2;
$c = 8.7;

echo 'Наименьшее число = ' . getMin($a, $b, $c);

echo '<br>';

function multiplication2(&$x,&$y) // Второе задание
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 2;

$b = 4;
multiplication2($a,$b);

echo $a;

echo '<br>';

echo $b;

echo '<br>';

function factorialOfNumber ($number) // Третье задание
{
    var_dump($number);
    echo '<br>'.'<br>';
    if($number == 1){
        return 1;
    }
    return $number * factorialOfNumber($number-1);
}

$a = 4;

echo 'Факториал числа ' . $a .' = '. factorialOfNumber($a);

echo '<br>';

function numberInt(int $a) // Четвертое Задание не совсем понял, есть момент где списал и пытался 
{                          // понять "ЧТо по чем"
    if ($a == 0) {
        echo $a;
        return 0;
    }
    numberInt($a - 1);
    echo '<br>' .  $a;
}
numberInt(7)
ivashkevich 04.03.2020 в 18:33

Нужно указывать типы аргументов.

Lyubav4ik 01.03.2020 в 01:04

2.

<?php

function up2(int &$x, int &$z)
{
    $x *= 2;
    $z *= 2;
}

$a = 2;
$b = 3;
echo 'Значения: 2 и 3. Показать не тронутые: ' . $a .', '. $b . '<br>';
up2($a, $b);
echo 'Значения: 2 и 3. Показать после функции: ' .$a.', '.$b;
ivashkevich 04.03.2020 в 18:36

Отлично

Lyubav4ik 01.03.2020 в 01:25

1.

<?php
function getMin(float $x, float $y, float $z)
{
    if ($x > $y)
    {
        $minimum = $y;
    } else {
        $minimum = $x;
    }
    if ($minimum > $z)
    {
        return $z;
    } else {
        return $minimum;
    }
}

echo 'Минимальное значение (2.1, 3.1, 3.2): ' . getMin(2.1, 3.1, 3.2) . '<br>';
echo 'Минимальное значение (4.3, 5.2, 5.4): ' . getMin(4.3, 5.2, 5.4) . '<br>';
echo 'Минимальное значение (6.5, 7.4, 7.5): ' . getMin(6.5, 7.4, 7.5) . '<br>';
echo 'Минимальное значение (8.7, 9.6, 3.6): ' . getMin(8.7, 9.6, 3.6) . '<br>';
echo 'Минимальное значение (0.9, 0.8, 7.8): ' . getMin(0.9, 0.8, 7.8) . '<br>';
echo 'Минимальное значение (9.0, 8.0, 4.0): ' . getMin(9.0, 8.0, 4.0) . '<br>';
echo 'Минимальное значение (7.8, 6.9, 7.9): ' . getMin(7.8, 6.9, 7.9) . '<br>';
echo 'Минимальное значение (5.6, 4.7, 5.7): ' . getMin(5.6, 4.7, 5.7) . '<br>';
echo 'Минимальное значение (3.4, 2.5, 3.5): ' . getMin(3.4, 2.5, 3.5) . '<br>';
echo 'Минимальное значение (1.2, 1.3, 2.3): ' . getMin(1.2, 1.3, 2.3) . '<br>';
ivashkevich 04.03.2020 в 18:37

Отлично

Lungren 17.03.2020 в 20:35

Вторая задачка:

    function funct(&$x, &$y)
    {
        $x = $x * 2; 
        $y = $y * 2;
    }

    $a = 4;
    $b = 6;

    funct($a, $b);

    echo $a;
    echo '<br />';
    echo $b;
ivashkevich 18.03.2020 в 05:20

Почему не указали типы аргументов?

Lungren 18.03.2020 в 12:25
    function funct(int &$x, int &$y)
    {
        $x = $x * 2; 
        $y = $y * 2;
    }

    $a = 4;
    $b = 6;

    funct($a, $b);

    echo $a;
    echo '<br />';
    echo $b;
ivashkevich 18.03.2020 в 14:28

Другое дело)

Lungren 18.03.2020 в 17:12

В примере это у вас не написано.

ivashkevich 18.03.2020 в 19:14

В той части статьи еще не дошли до тайп-хинтинга

Fill 20.03.2020 в 04:28
<?php

function minOfFloat(float $a, float $b, float $c)
{
   if ($a < $b and $a < $c)
   {
        return $a;
    }
    elseif ($b<$c)
    {
        return $b;
    }
   return $c;
}
ivashkevich 20.03.2020 в 06:56

Отлично, только отступы почему-то пляшут.
elseif пишется на той же строке, что и }, после которого он идет. Хотя здесь можно elseif заменить на if, потому что если первое условие выполнится, то программа завершит свою работу тут же. А иначе... уже можно дальше просто if-ом проверять. Логика та же, по которой вы не стали оборачивать return $c; в блок else.

Fill 20.03.2020 в 04:33
<?php

function double(&$x, &$y)
{
    $x*=2;
    $y*=2;
}
$a=2;
$b=3;
double($a,$b);
echo 'Переменная $a = ' . $a . '<br>';
echo 'Переменная $b = ' . $b . '<br>';
ivashkevich 20.03.2020 в 06:56

А типы аргументов где? =)

Fill 20.03.2020 в 04:38
<?php

function getFact(int $a)
{
    if ($a == 1) {
        return 1;
    }
    return $a * getFact($a - 1);
}
$a = 4;
echo 'Факториал ' . $a . ': ' . getFact($a);
ivashkevich 20.03.2020 в 06:57
    if ($a == 1) {
        return 1;
    }

Правильнее так:

    if ($a === 0) {
        return 1;
    }
[email protected] 23.03.2020 в 13:43
Первое задание:
<?php
function minNumber(float $x, float $y, float $z){
    if (($x < $z) && ($x < $y)) {
        return $x;
    }
    elseif(($z > $y) && ($y < $x))
    {
        return $y;
    }
    return $z;
}
$x = 1;
$y = 2;
$z = 5;
echo 'Наименьшее число:' . minNumber($x, $y, $z);
?>
Второе задание:
<?php
function twoX(int &$x, int &$y){
    $x = 2*($x);
    $y = 2*($y);
}
$a = 3;
$b = 4;
twoX($a, $b);
echo "Первое число: $a. Второе число: $b.";
?>
Третье задание:
<?php
function faktorial(int $x)
{
    if ($x == 1 || $x == 0) {
        return 1;
    }
    return $x * faktorial($x - 1);
}
echo faktorial(8);
?>
Четвертое задание:
<?php
function number(int $x){
    if ($x == 0){
        echo $x;
        return;
    }
    number($x - 1);
    echo ',' . $x;
}
number (7);
?>
В этом задании чуть чуть пришлось подсмотреть, и я вот понять не могу почему мы сразу не можем написать number ($x - 1); 
echo ',' . $x; без if($x == 0) и так далее?
ivashkevich 23.03.2020 в 14:16
function minNumber(float $x, float $y, float $z){

Открывающая фигурная скобка пишется на новой строке

if (($x < $z) && ($x < $y)) {

Для чего столько скобок?

    }
    elseif(($z > $y) && ($y < $x))
    {

Правильная запись:

} elseif ($z > $y && $y < $x) {

Кроме того, elseif здесь можно заменить на if, так как в блоке выше выполняется return.

?>

Закрывающий тег не нужен.

Ну и, наконец:

var_dump(minNumber(3, 3, 5));

Выведет 5, что неправильно.

Переходим ко второму заданию.

$x = 2*($x);

Для чего здесь скобки? Нужно убрать.

Третье задание:

if ($x == 1 || $x == 0) {

можно заменить на:

if ($x === 0) {

и результат, возвращаемый функцией, не изменится. Но код упростится.

Четвертое - ОК.

Ну а как вы поймете, в какой момент нужно остановиться?

Lungren 24.03.2020 в 17:16

Здравствуйте. Вариант третьей задачки.

function countNumber(int $n)
    {
        if($n == 1){
            return 1;
        }
        return $n + countNumber($n - 1);
    }

    echo 'Результат: '.countNumber(9);
ivashkevich 24.03.2020 в 19:16

Не было такой домашки

Lungren 26.03.2020 в 14:46

Тогда так:


function countNumber(int $n)
    {
        if($n == 1){
            return 1;
        }
        return $n * countNumber($n - 1);
    }

    echo 'Факториал числа 8 будет: '.countNumber(8);
ivashkevich 27.03.2020 в 15:04

Теперь ОК)

WarLikeLaux 05.04.2020 в 15:10

Первая задача

function minOf3Float(float $a, float $b, float $c) {
    return min($a, $b, $c);
}

Вторая задача

function multiplyTo2(&$a, &$b) {
    $a *= 2;
    $b *= 2;
}

Третья задача

function getFactorial($a) {
    if ($a == 1) {
        return 1;
    } else {
        return $a * getFactorial($a - 1);
    }
}

Четвертая задача

function printSeqFromZeroToNumber($n) {
    if ($n >= 0) {
        printSeqFromZeroToNumber($n - 1);
        echo $n;
    }
}
ivashkevich 05.04.2020 в 19:26
  1. Хотелось бы увидеть самостоятельную реализацию алгоритма от вас, но формально с задачей справились
  2. Типы аргументов забыли
  3. Отлично
  4. Отлично

{ с новой строки пишется!

Timurik 08.04.2020 в 13:19
//Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.

function mimimumFromThreeFloat(float $x,float $y,float $z)
{
    return min($x,$y,$z);
}
$x=3;
$y=2;
$z=7;
echo 'Минимальным числом из '.$x.'; '.$y.'; '.$z. ' является число '.mimimumFromThreeFloat($x,$y,$z);

Результат:
Минимальным числом из 3; 2; 7 является число 2

//Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

function multiplicationTwo(&$x,&$y)
{
    $x =$x * 2;
    $y =$y * 2; 
}
$a = 3;
$b = 5;
echo 'После умножения чисел '.$a.' и '.$b.' на 2'.'<br>';
multiplicationTwo($a,$b);
echo 'Получаем числа '.$a.' и '.$b.' соответственно.';

Результат:
После умножения чисел 3 и 5 на 2
Получаем числа 6 и 10 соответственно.

//Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =).

function factorialNumber($x)
{
    switch($x) {
        case 1:
        case 2:
        return $x;
        break;
        default:
        return $x * factorialNumber($x - 1);
    }
}
$a = 7;
echo 'Фактериал числа '.$a.' равен '.factorialNumber($a);

Результат:
Фактериал числа 7 равен 5040

//Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.

function integersNumber($x)
{
    switch($x) {
        case 0:
        echo $x;
        break;
        default:
        integersNumber($x-1);
        echo ', ' . $x;
    }
}
$a = 7;
echo 'Целые числа от 0 до '. $a.'<br>';
integersNumber($a);

Результат:
Целые числа от 0 до 7
0, 1, 2, 3, 4, 5, 6, 7

ivashkevich 08.04.2020 в 19:04
  1. Напишите реализацию самостоятельно
  2. Где типы аргументов?
  3. Почему все без отступов в switch? Где тип аргумента? Для чего столько кейсов? Достаточно одного условия с проверкой того, что в агрумент - 0.
  4. Тип аргумента. switch для двух случаев неуместен. Достаточно одного if-a.
Timurik 09.04.2020 в 09:42
//Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.

function mimimumFromThreeFloat(float $x,float $y,float $z)
{
    if ($x < $y) {
        if ($x < $z) {
            return $x;
        } else return $z;
    } elseif ($y < $z) {
        return $y;
    } else return $z;
}
$x=3;
$y=2;
$z=7;
echo 'Минимальным числом из '.$x.'; '.$y.'; '.$z. ' является число '.mimimumFromThreeFloat($x,$y,$z).'<br><br>';

//Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

function multiplicationTwo(float &$x,float &$y)
{
    $x =$x * 2;
    $y =$y * 2; 
}
$a = 3;
$b = 5;
echo 'После умножения чисел '.$a.' и '.$b.' на 2'.'<br>';
multiplicationTwo($a,$b);
echo 'Получаем числа '.$a.' и '.$b.' соответственно.<br><br>';

//Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =).

function factorialNumber(int $x)
{
    if ($x == 0){
        return 1;       
    } else return $x * factorialNumber($x - 1);
}
$a = 7;
echo 'Факториал числа '.$a.' равен '.factorialNumber($a).'<br><br>';

//Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.

function integersNumber(int $x)
{
    if ($x == 0) {
        echo $x;
    } else integersNumber($x-1);echo ', ' . $x; 
}
$a = 7;
echo 'Целые числа от 0 до '. $a.'<br>';
integersNumber($a);

Результат:
Минимальным числом из 3; 2; 7 является число 2

После умножения чисел 3 и 5 на 2
Получаем числа 6 и 10 соответственно.

Факториал числа 7 равен 5040

Целые числа от 0 до 7
0, 0, 1, 2, 3, 4, 5, 6, 7

Спасибо, с if код стал намного проще!
Первый ещё вот так можно сделать:

function mimimumFromThreeFloat(float $x,float $y,float $z)
{
    if (($x < $y) && ($x < $z)) {       
        return $x;      
    } elseif ($y < $z) {
        return $y;
    } else return $z;
}
$x=3;
$y=2;
$z=7;
echo 'Минимальным числом из '.$x.'; '.$y.'; '.$z. ' является число '.mimimumFromThreeFloat($x,$y,$z).'<br><br>';

И четвёртый исправил на:

function integersNumber(int $x)
{
    if ($x == 0) {
        echo $x;
    } else {integersNumber($x-1);echo ', ' . $x;}   
}
$a = 7;
echo 'Целые числа от 0 до '. $a.'<br>';
integersNumber($a);

теперь результат:
Целые числа от 0 до 7
0, 1, 2, 3, 4, 5, 6, 7

ivashkevich 09.04.2020 в 10:48
} else return $z;

Всегда для if-else используйте фигурные скобки. В остальных примерах аналогично.

По логике замечаний нет

Timurik 09.04.2020 в 11:00

Спасибо, исправил.

ivashkevich 09.04.2020 в 11:07

Не всё исправили. И переносить на новые строки нужно то, что внутри скобок.

Timurik 09.04.2020 в 11:16

Вот так сделал:

function mimimumFromThreeFloat(float $x,float $y,float $z)
{
    if (($x < $y) && ($x < $z)) {       
        return $x;      
    } elseif ($y < $z) {
        return $y;
    } else {
        return $z;
    }
}
$x=3;
$y=2;
$z=7;
echo 'Минимальным числом из '.$x.'; '.$y.'; '.$z. ' является число '.mimimumFromThreeFloat($x,$y,$z).'<br><br>';

function multiplicationTwo(float &$x,float &$y)
{
    $x =$x * 2;
    $y =$y * 2; 
}
$a = 3;
$b = 5;
echo 'После умножения чисел '.$a.' и '.$b.' на 2'.'<br>';
multiplicationTwo($a,$b);
echo 'Получаем числа '.$a.' и '.$b.' соответственно.<br><br>';

function factorialNumber(int $x)
{
    if ($x == 0){
        return 1;       
    } else {
        return $x * factorialNumber($x - 1);
    }
}
$a = 7;
echo 'Факториал числа '.$a.' равен '.factorialNumber($a).'<br><br>';

function integersNumber(int $x)
{
    if ($x == 0) {
        echo $x;
    } else {
        integersNumber($x-1);
        echo ', ' . $x;
    }   
}
$a = 7;
echo 'Целые числа от 0 до '. $a.'<br>';
integersNumber($a);

Всё правильно?

ivashkevich 09.04.2020 в 11:18

Ага, теперь огонь. Из улучшений - в факториале можно опустить else

Timurik 09.04.2020 в 11:23

Вот так?

function factorialNumber(int $x)
{
    if ($x == 0){
        return 1;       
    } return $x * factorialNumber($x - 1);
}
$a = 7;
echo 'Факториал числа '.$a.' равен '.factorialNumber($a).'<br><br>';
ivashkevich 09.04.2020 в 12:34

Только не надо лепить все в одну строку) Перенесите return на следующую

Timurik 09.04.2020 в 12:52
function factorialNumber(int $x)
{
    if ($x == 0){
        return 1;       
    }
    return $x * factorialNumber($x - 1);
}
$a = 7;
echo 'Факториал числа '.$a.' равен '.factorialNumber($a).'<br><br>';

Ну теперь совсем красота)!

ivashkevich 09.04.2020 в 13:15

Теперь да)

Developer 08.04.2020 в 19:13
<?php
// first task
function returnMin(float $x, float  $y, float $z)
{
    if ($x <= $y && $x <= $z)
    {
        return $x;
    }
    if ($y <= $x && $y <= $z)
    {
        return $y;
    }
        return $z;
}
$x = 22;
$y = 23;
$z = 16;
echo 'Минимальное число: ' . returnMin ($x, $y, $z) . '<br><br>';

//second task
function theMultiplicationFunction(int &$x, int &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}
$a = 3;
$b = 4;

theMultiplicationFunction($a, $b);
echo 'Результат умножения: ' . $a, ', ', $b . '<br><br>';

//third task
function factorial (int $x)
{
    if ($x == 1)
    {
        return $x;
    }
    return $x * factorial($x - 1);
}
$a = 4;
echo "Факториал числа $a равен: " .  factorial($a) . '<br><br>';

//fourth task
function getAllIntegers (int $x)
{
    if ($x == 0)
    {
        echo $x;
        return 0;
    }
    getAllIntegers ($x - 1);
    echo '<br>' . $x;
}
echo getAllIntegers (5);

Результат:
Минимальное число: 16

Результат умножения: 6, 8

Факториал числа 4 равен: 24

0
1
2
3
4
5

p.s. 4ую задачу пришлось подглядеть, не до конца сам допер((
Первую задачу можно решить с помощью функции min()
И объясните пожалуйста как записываются и хранятся значения $x в 3ей и 4ой задачи. Я понимаю что это работает как "счётчик", но почему когда вызываешь функцию внутри функции, то $x берётся как $x -1(всегда уменьшенный на 1), а не один вычитается из полученного за прошлый раз значения, например
в факториале после 1 прохода получается 12, то почему далее берется не 12-1, а 3-1.
На вашем примере со степенью всё понятно, там $n не трогают, а вот как это работает с одной переменой, не понятно. Надеюсь поняли о чём я.
А так мне материал понятен.

ivashkevich 08.04.2020 в 19:33
if ($y <= $x && $y <= $z)

На прошлом шаге мы уже поняли, что x не минимальное. С ним сравнивать уже не имеет смысла.

Факториал нуля - единица

В каждом вызове функции эта переменная своя. Текущий вызов функции ничего не знает о той переменной в функции, из которой она была вызвана. Смотрите видео из следующего урока. Должно стать понятнее.

Developer 09.04.2020 в 16:29

1ое задание

<?php
// first task
function returnMin(float $x, float  $y, float $z)
{
    if ($x <= $y && $x <= $z) {
        return $x;
    }
    if ($y <= $z) {
        return $y;
    }
        return $z;
}

$x = 23;
$y = 24;
$z = 22;
echo 'Минимальное число: ' . returnMin ($x, $y, $z) . '<br><br>';

3ее задание

//third task
function factorial (int $x)
{
    if ($x == 0) {
        return 1;
    }
    return $x * factorial($x - 1);
}

$a = 4;
echo "Факториал числа $a равен: " .  factorial($a) . '<br><br>';

Теперь все задания ок??

ivashkevich 09.04.2020 в 17:40
    if ($x == 0)
    {

Скобка после условия пишется на той же строке. И нужно соблюдать отступы. Если пользуетесь PHPStorm, там можно просто нажать сочетание клавиш CTRL+ALT+L

Developer 10.04.2020 в 16:40

Понял, редактировал)
p.s. Артём, может поправить эту строку: "А сейчас убираем строку _declare(stricttypes=1); из нашего кода и идём дальше." Убрать нижнее подчёркивание перед declare и поставить между strict и types, чтобы как надо было)

ivashkevich 11.04.2020 в 21:00

Спасибо, поправил

n.yurasheva 08.04.2020 в 22:10
<?php
echo 'Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.<br>';
function getMin(float $x, float $y, float $z)
{
    if (($x < $y) && ($x < $z)) {
        return $x;
    } elseif ($y < $z) {
        return $y;
    }
    return $z;
}
echo 'a = '.$a = 4;
echo '<br>b = '.$b = 3;
echo '<br>c = '.$c = 1;
echo '<br>Минимальное значение: ' . getMin($a, $b, $c);

echo '<br><br>Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.<br>';
function multiply2(&$x, &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}
echo 'a = '.$a = 3;
echo '<br>b = '.$b = 4;
multiply2($a, $y);
echo '<br>2a = ' . $a;
echo '<br>2b = ' . $b;

echo '<br><br>Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). <br>';
function factorial(int $x)
{
    if ($x == 0) {
        return 1;
    }
    return $x * factorial($x - 1);
}
echo 'x = '.$x = 5;
echo $x < 0 ? '<br>Задано отрицательное число' : '<br>x! = ' . factorial($x);

echo '<br><br>Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.<br>';
function row (int $x)
{
    if ($x == 0) {
        return $x;
    } elseif ($x > 0) {
        return row($x - 1) . ', ' . $x;
    } else {
        return row($x + 1) . ', ' . $x;
    }
}
echo 'x = '.$x = -10;
echo '<br>Ряд: ' . row($x);

Результат:
Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
a = 4
b = 3
c = 1
Минимальное значение: 1

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
a = 3
b = 4
2a = 6
2b = 4

Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного).
x = 5
x! = 120

Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.
x = -10
Ряд: 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10

ivashkevich 09.04.2020 в 10:42
  1. ОК
  2. Не указаны типы аргументов
  3. ОК
  4. ОК
n.yurasheva 10.04.2020 в 19:05

2.

echo '<br><br>Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.<br>';
function multiply2(int &$x, int &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}
echo 'a = '.$a = 3;
echo '<br>b = '.$b = 4;
multiply2($a, $b);
echo '<br>2a = ' . $a;
echo '<br>2b = ' . $b;
ivashkevich 11.04.2020 в 21:09

Красота

[email protected] 09.04.2020 в 16:01

У меня вопрос.
Почему рекурсия, а не цикл? Просто для того, чтобы в этой теме рекурсию изучить? Или это потребует меньше ресурсов при вычислении?
Просто, например, как в третьей задаче:

$result = 1;
    for ($i = 2; $i <= $num; $i++) {
        $result *= $i;
    }
    return $result;

, так и в последней -

for ($i = 0; $i <= $num; $i++) {
        echo $i.'<br>';
    }

фактически проще циклом пробежаться.

Или рекурсия все же предпочтительней? Если да - почему?


Дополняю комментарий ответами.
Буду честен - 3 и 4 задания ответы подсмотрел в комментариях других участников. Не дается мне пока рекурсия :(

function returnMinimal(float $num1, float $num2, float $num3)
{
    if ($num1 < $num2 && $num1 < $num3) {
        return $num1;
    } elseif ($num2 < $num3) {
        return $num2;
    } else {
        return $num3;
    }
}

function multiplyByTwo(&$x, &$y)
{
    $x *= 2;
    $y *= 2;
}

function factorial($x)
{
    if ($x == 0) {
        return 1;
    }
    return $x * factorial($x - 1);
    /*Закомментил вариант без рекурсии:
    for ($i = 2; $i <= $x; $i++) {
        $result *= $i;
    }
    return $result;
    */

}

function printInts($num)
{
    /*Закомментил вариант без рекурсии
    for ($i = 0; $i <= $num; $i++) {
        echo $i.'<br>';
    }
    */
    if ($x == 0) {
        return $x;
    } elseif ($x > 0) {
        return row($x - 1) . ', ' . $x;
    } else {
        return row($x + 1) . ', ' . $x;
    }
}
ivashkevich 09.04.2020 в 17:38

Это просто примеры рекурсии. Но есть некоторые алгоритмы, которые реализуются с помощью рекурсии более элегантно, а есть, которые реализуются только с помощью рекурсии. О них позже.

  1. ОК
  2. Не указаны типы аргументов
  3. См. выше
  4. См. выше + ничего не выводит
[email protected] 10.04.2020 в 07:20

2.

function multiplyByTwo(int &$x, int &$y)
{
    $x *= 2;
    $y *= 2;
}

3.

function factorial(int $x)
{
    if ($x == 0) {
        return 1;
    }
    return $x * factorial($x - 1);
}
  1. Согласен, скопипастил невнимательно, не адаптировал под свое.
    Но, на второй итерации копипасты в процессе дебага кажется начало приходить легкое подобие понимания рекурсии...
    function printInts(int $num)
    {
    if ($num == 0) {
        echo $num;
        return;
    }
    printInts($num - 1);
    echo $num.'<br>';
    }
ivashkevich 10.04.2020 в 13:06

Теперь ок

Allaga 10.04.2020 в 09:11

Четвёртое задание подсмотрела в комментариях. Трудновато даётся понять логику. Надеюсь с этим справится.

<?php
    echo 'Задание 1'.'<br>';
    function minNumber(float $x, float $y, float $z){
        if($x < $y && $x < $z){ 
            return $x; 
        }elseif($y < $z){ 
            return $y; 
        }else{ 
            return $z; 
        } 
    } 
    $a = 7.8; 
    $b = 9.1; 
    $c = 98.5;

    echo 'Минимальное число: ' . minNumber($a, $b, $c) .'<br><br>'; 

    echo 'Задание 2'.'<br>';

    function multiplyNumber(int &$x, int &$y){
        $x = $x * 2;
        $y = $y * 2;
    }
    $a = 3;
    $b = 5;
    multiplyNumber($a, $b);
    echo $a .'<br>';
    echo $b .'<br><br>';

    echo 'Задание 3'.'<br>';

    function fact(int $n)
    {
        if ($n == 1);{
            return $n;
        }
            return  $n * fact($n - 1);
    }

    $n = 4;

    echo 'Факториал числа ' . $n . ' равен ' . fact($n) .'<br><br>';

    echo 'Задание 4'.'<br>';

    function integNum(int $x)
    {
        if($x == 0){
            echo $x;
            return 0;
        }
        integNum($x-1);
        echo ', ' . $x;
    }
    integNum(20);
ivashkevich 10.04.2020 в 13:08
if($x < $y && $x < $z){ 

Пробелы добавляйте

function minNumber(float $x, float $y, float $z){

Скобка, открывающая тело функции, переносится на новую строку

Если используете PhpStorm, эти проблемы решаются нажатием сочетания CTRL+ALT+L

С логикой всё отлично, а вот оформление страдает.

[email protected] 11.04.2020 в 17:33
1 задание

function getMin($a, $b) {
    return $a < $b ? $a : $b;
}

function getMinOfThree(float $a, float $b, float $c) {
    return getMin($a, getMin($b, $c));
}

2 задание

function doubleValues(&$a, &$b) {
    $a *= 2;
    $b *= 2;
}

3 задание

function getFactorial($x) {
    if ($x == 1) return $x;
    return $x * getFactorial($x - 1);
}

4 задание (блин, без цикла не понимаю, как)

function showValuesTillX($x) {
    for ($i = 0; $i <= $x; $i++) {
        echo '<br/>'.$i;
    }
}

А еще вопрос - в цикле не лучше решать задачи типа возведения в степень, например, пример из статьи сделать так?

function onDegree($a, $b) {
    $c = $a;
    while ($b > 1) {
        $b -= 1;
        $a *= $c;
    }
    return $a;
}

Более или менее это ресурсозатратно или все равно?) Спасибо)
ivashkevich 11.04.2020 в 21:39

Не забывайте оформлять код! Первая кнопка в редакторе комментариев.

Типы аргументов почти везде отсутствуют.

Фигурная скобка, открывающая тело функции, пишется на следующей строке.

В блоках if-else всегда пишутся фигурные скобки. Делайте как в уроках написано. То как у вас нарушает все правила PSR.

Рекурсию часто можно заменить циклом. Но решение с помощью рекурсии зачастую более выразительно и читается человеком проще.

[email protected] 11.04.2020 в 22:23
<?php
function Row($x)
{
    if ($x == 0) {
        return $x;
    }
    echo $x . "</br>";
    return Row($x - 1);
}

function Factorial(int $x)
{
    if ($x == 1) {
        return $x;
    }
    return $x * Factorial($x - 1);
}

function getMTwo(&$one, &$two)
{
    echo "Функция -2 аргумента -возвращает по ссылке</br>";
    $one = $one * 2;
    $two = $two * 2;
}

function getMinFromThree(float $x, float $y, float $z)
{
    echo "Функция -3 аргумента(float) -возвращает min</br>";
    echo ($x < $y) ? (($x < $z) ? $x : $z) : (($y < $z) ? $y : $z);
}

echo getMinFromThree(0.006, 33.1, 3.1) . "</br>";

$a = 28;
$b = 77;
echo getMTwo($a, $b);
echo $a . "</br>";
echo $b . "</br>";

echo "Функция Факториал</br>";
echo Factorial(10) . "</br>";

echo "Функция Числовой ряд</br>";
echo Row(17);
ivashkevich 12.04.2020 в 06:24

Имена функций пишутся с маленькой буквы. Где типы аргументов? Факториал нуля - единица. Функции не должны ничего выводить, они должны возвращать. getMinFromThree не читаемая от слова совсем, тернарный оператор тут не к месту. Нужно всё переделать.

[email protected] 12.04.2020 в 13:47

Добрый день !Спасибо за проверку! Вроде как все переделал , посмотрите пожалуйста.


<?php
declare(strict_types=1);
function row(int $x)
{
    if ($x == 0) {
        return $x;
    }
    echo $x . "</br>";
    return row($x - 1);
}

function factorial(int $x)
{
    if ($x == 0) {
        return 1;
    }
    if ($x == 1) {
        return $x;
    }
    return $x * factorial($x - 1);
}

function getMTwo(&$one, &$two)
{
    echo "Функция -2 аргумента -возвращает по ссылке</br>";
    $one = $one * 2;
    $two = $two * 2;
    return $one . "</br>" . $two;
}

function getMin(float $x, float $y, float $z)
{
    echo "Функция -3 аргумента(float) -возвращает min</br>";
    $array = [$x, $y, $z];
    sort($array);
    return $array[0];
}

echo getMin(0.006, 33.1, 3.1) . "</br>";

$a = 2;
$b = 77;
echo getMTwo($a, $b) . "</br>";

echo "Функция Факториал</br>";
echo factorial(0) . "</br>";

echo "Функция Числовой ряд</br>";
echo row(17);
ivashkevich 13.04.2020 в 13:00

Функции не должны ничего выводить, только возвращать.

[email protected] 13.04.2020 в 13:43

Вы имеете ввиду echo внутри функций? echo "Функция -2 аргумента -возвращает по ссылке</br>";-вот это ?

ivashkevich 13.04.2020 в 15:02

Да

[email protected] 13.04.2020 в 15:10

Спасибо! Теперь понятно ,надо ли переделать?(убрать эти строки) и переслать?

ivashkevich 14.04.2020 в 16:49

Конечно :)

[email protected] 14.04.2020 в 17:52
<?php
declare(strict_types=1);
function row(int $x)
{
    if ($x == 0) {
        return $x;
    }
    echo $x . "</br>";
    return row($x - 1);
}

function factorial(int $x)
{
    if ($x == 0) {
        return 1;
    }
    if ($x == 1) {
        return $x;
    }
    return $x * factorial($x - 1);
}

function getMTwo(&$one, &$two)
{
    $one = $one * 2;
    $two = $two * 2;
    return $one . "</br>" . $two;
}

function getMin(float $x, float $y, float $z)
{
    $array = [$x, $y, $z];
    sort($array);
    return $array[0];
}

echo getMin(0.006, 33.1, 3.1) . "</br>";

$a = 2;
$b = 77;
echo getMTwo($a, $b) . "</br>";

echo "Функция Факториал</br>";
echo factorial(0) . "</br>";

echo "Функция Числовой ряд</br>";
echo row(17);
ivashkevich 14.04.2020 в 19:48
    if ($x == 1) {
        return $x;
    }

А нужно ли это в факториале?

getMTwo(&$one, &$two)

Где типы аргументов?

return $one . "</br>" . $two;

Вы не поняли смысл передачи по ссылке

[email protected] 14.04.2020 в 20:12

Добрый вечер! Да, действительно

  if ($x == 1) {
        return $x;
    }

явно не к месту)
С остальным все доработаю.

ivashkevich 14.04.2020 в 20:22

Ок) сообщите, как поправите)

[email protected] 15.04.2020 в 09:14

Доброе утро!

<?php
declare(strict_types=1);
function row(int $x)
{
    if ($x == 0) {
        return $x;
    }
    echo $x . "</br>";
    return row($x - 1);
}

function factorial(int $x)
{
    if ($x == 0) {
        return 1;
    }
    return $x * factorial($x - 1);
}

function getMTwo(int &$one, int &$two)
{
    $one = $one * 2;
    $two = $two * 2;

}

function getMin(float $x, float $y, float $z)
{
    $array = [$x, $y, $z];
    sort($array);
    return $array[0];
}

echo getMin(0.006, 33.1, 3.1) . "</br>";

$a = 2;
$b = 77;
getMTwo($a, $b);
echo $a . "--Передали в 1е число</br>" . $b . "--Передали в 2е число</br>";

echo "Функция Факториал</br>";
echo factorial(0) . "</br>";

echo "Функция Числовой ряд</br>";
echo row(17);
ivashkevich 15.04.2020 в 11:41

Отлтично!

[email protected] 15.04.2020 в 16:31

решение предыдущей задачи с учетом возможности ввода отрицательного числа, и не целого

function echoInteger(float $upperNum){
    if ($upperNum > 0) {
        $upperNum = floor($upperNum);
        $step = 1;
    } else {
        $upperNum = ceil($upperNum);
        $step = -1;
    }
    if ($upperNum  == 0) {
        echo $upperNum.'</br>';
        return;
    }
    echo $upperNum.', ';
    echoInteger($upperNum - $step);
}
echoInteger(-12);
ivashkevich 15.04.2020 в 17:46
function echoInteger(float $upperNum){

Фигурная скобка по уроку везде переносится на следующую строку. Почему пишете так?

[email protected] 16.04.2020 в 00:18
function power(int $x, int $n)
{
    var_dump($x, $n);
    if ($n == 1) {
        return $x;
    }

    return $x * power($x, $n - 1);
}

echo 'Результат: ' . power(2, 3);

Сломал себе всю голову. Позвольте я расскажу, как я "читаю" эту функцию, а вы, если найдете время, наставьте, пожалуйста.

  1. Фунцкция вызывается и проверяется первое условие. 3 не равно единице, поэтому происходит следующей шаг, в котором
    $n уменьшается на единицу и за счет обращения функции к самой себе - она начинается сначала.
  2. Снова проверяется первое условие: 2 не равно единице. После чего опять $n уменьшается на единицу и все возвращается к началу.
  3. Теперь $n == 1, значит функция может завершиться и вернуть $x. К следующему шагу мы не переходим.
    Вот...
    Судя по вардампу переменная х во всех циклах не менялась и оставалась двойкой.
    int(2) int(3) int(2) int(2) int(2) int(1)

Мне, хоть убей, не понятно - за счет чего получается 8.
Сори, если глупость пишу, самому стыдно.
Но я что-то вообще никак.

ivashkevich 16.04.2020 в 10:05

Ну всё правильно, $x ни в одном вызове не меняется. Посмотрите видео из следующего урока.

[email protected] 17.04.2020 в 16:41

Сделала последнее задание двумя способами - с помощью рекурсивной функции и массива.

<?php
// Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
function minFloat (float $a, float $b, float $c) {
    if ($a < $b && $a < $c) {
        return $a;
    } elseif ($b < $a && $b < $c) {
        return $b;
    } else {
        return $c;
    }
}
echo minFloat(1.55, 2.01, 1.22), '<br>', '<br>';

// Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
function multInt (int &$x, int &$y) {
    $x *= 2;
    $y *= 2;
}
$d = 2;
echo $d, '<br>';
$e = 3;
echo $e, '<br>';
multInt($d, $e);
echo $d, '<br>', $e, '<br>', '<br>';

//Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного).
function myFactorial (int $n) {
    if ($n === 1) {
        return 1;
    } else {
        return $n * myFactorial($n - 1);
    }
}
$n = mt_rand(1, 10);
echo $n, '<br>';
echo myFactorial($n), '<br>', '<br>';

// Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.
// Решение с помощью массива
function getInt1 (int $num) {
    $arr = range(0, $num, 1);
    return  implode(',', $arr);
}
$m = mt_rand(1, 20);
echo $m, '<br>';
echo getInt1($m), '<br>', '<br>';

// Решение рекурсивной функцией
function getInt2 (int $f) {
    if ($f === 0) {
        return 0;
    } else {
        return  getInt2($f - 1). ',' . $f;
    }
}
$f = mt_rand(0, 10);
echo $f, '<br>';
echo getInt2($f);
ivashkevich 18.04.2020 в 05:38
function minFloat (float $a, float $b, float $c) {

Фигурная скобка, открывающая тело функции, пишется на новой строке!

var_dump(minFloat(1, 1, 2)); //float(2)

Некорректно работает

    } else {
        return $n * myFactorial($n - 1);
    }

можно опустить else, потому что если if выполнится выше, произойдёт return:

    }
    return $n * myFactorial($n - 1);

Факториал нуля - единица.

По getInt - в задании сказано, что функция должна выводить, а не возвращать.

[email protected] 19.04.2020 в 15:04

Спасибо за комментарии, свои ошибки поняла.
Проверила еще раз функцию minFloat, дело в том, что было задано два одинаковых числа, а я не прописала это в условии. На будущее запомню и буду обращать внимание на это)

ivashkevich 19.04.2020 в 15:54

Лучше исправьте и пришлите заново :)

X-Nick 22.04.2020 в 00:37
function recursive (int $n)
{
    if ($n == 0) {
        return 0;
    }
    else {
        return recursive($n-1).' '.$n;
    }
}
echo recursive(12);
ivashkevich 22.04.2020 в 06:05
    }
    else {

else пишется на той же строке, что и закрывающая скобка блока if:

    } else {

После имени функции пробел не ставится.

Делайте оформление как в уроках. Оно соответствует стандартам PSR.

Ну и в целом тут можно опустить else, так как в if-е уже есть return.

function recursive (int $n)
{
    if ($n === 0) {
        return 0;
    }
    return recursive($n-1).' '.$n;
}
X-Nick 22.04.2020 в 11:46

Ну и в целом тут можно опустить else, так как в if-е уже есть return.

function recursive (int $n)
{
    if ($n === 0) {
        return 0;
    }
    return recursive($n-1).' '.$n;
}

Тогда и в объявлении функции не должно быть пробела между именем функции и открывающей скобкой аргументов:

function recursive(int $n)
{
...

Немного путает то, что в замыканиях должен быть пробел между словом function и открывающей скобкой, а в объявлении функций, методов - нет.

П.С.: Если код вложен в цитату - markdown не не воспринимает отступы в начале строки. Или нужен какой-то специальный формат записи такой вложенности?

ivashkevich 22.04.2020 в 12:14

Да не, это баг в парсере markdown. Нужно добавлять перенос строки после цитаты.

Тогда и в объявлении функции не должно быть пробела между именем функции и открывающей скобкой аргументов

Верно.

Немного путает то, что в замыканиях должен быть пробел между словом function и открывающей скобкой, а в объявлении функций, методов - нет.

Так пробел после слова function остаётся, просто в замыкании имени нет, сразу идут аргументы.

[email protected] 22.04.2020 в 13:42

//Задание.1
function getMini (float $x,float$y,float$z){
if ($x <$y and $y<$z){
return $x;
}if ($y <$x and $y <$z){
return $y;
}
return $z;
}
$a=50.5;
$b=136.8;
$c=-5.90;

echo'Наименьшее число:'. getMini($a,$b,$c);
echo '<br>';
//Задание.2
function getMulti (&$a,&$b){
$a =2;
$b
=2;

}
$x =3;
$y =5;
getMulti ($a,$b);
echo 'Перво числое:'.($x) 2;
echo '<br>';
echo 'второе число:' .($y)
2;
echo '<br>';
//Задание.3
function getFact ($x)
{
if($x == 0){
return 1;
}
return $x * getFact($x-1);
}

$a = 3;

echo 'Факториал числа ' . $a .' = '. getFact($a);
P.S.Последнее задание не стал делать,чтобы не обманывать себя и тебя.Третье подглядел но вроде понял.

ivashkevich 22.04.2020 в 16:56

А код оформить? Кнопка в редакторе комментария такая есть :) Как поправишь - напиши ответ на этот комментарий, проверю домашку после этого.

[email protected] 22.04.2020 в 14:32
<?php
//Задание №1.
function getMini (float$x, float$y, float$z)://Функция принимает на входе 3 аргумента типа float.
{
    if ($x < $y && $x < $z) {://Если число $x меньше, то возвращаем это число.
        return $x;
    }
    if ($y < $x && $y < $z) {://Если число $y меньше, так же возвращаем это число.
        return $y;

    }
        return $z;
}
$a = 5.5;
$b = 2.34;
$c = 3.45;
echo 'Наименьшее число:' . getMini($a,$b,$c); // Наименьшее число:2.34

echo '<br><br>';
//Задание №2.
function getMultiply ( &$a, &$b){ ://Функция принимает на входе два аргументаи по ссылке  
                                    и умножает каждый из них 2.
    $a *= 2;
    $b *= 2;
}
$x1 = 4;
$x2 = 10;
echo 'Первое число:' . ($x1) * 2 . '<br><br>';// Первое число 8.
echo 'Второе число:' . ($x2) * 2 . '<br><br>';// Второе число 20.
echo '<br>';

//Задание №3.
function factorial(int $x1, int $x4) :// Функция ,считающая факториал произведения целых чисел от
{                                        единицы до переданного.
    var_dump ($x1,$x4);
    echo '<br><br>';
    if ($x4 == 1) { // Если степень равна 1, то возвращаем само это число.
        return $x1;
    }
    return $x1 * factorial ($x1, $x4 -1);//Умножаем число на возведенную в степень $x4 -1 и   
}                                          возвращаем его.
echo factorial (2, 3);// int(2) int(3) int(2) int(2) int(2) int(1) =8
ivashkevich 22.04.2020 в 17:05

and - откуда взялось? Мы разве так писали?

var_dump(getMini(1, 1, 2)); 

Возвращает 2, что неверно.

function getMulti (&$a, &$b, &$c)

Откуда взялся третий аргумент?! Где типы данных?

ivashkevich 23.04.2020 в 10:47
(float$x, float$y, float$z)

Куда пробелы убежали между типом и именем переменной?

Функция по-прежнему неправильно работает, как и выше.

function factorial(int $x1, int $x4) :

Тут вообще нерабочий код. Для чего 2 аргумента?

[email protected] 24.04.2020 в 07:20

Ок. На ошибках учатся.

  1. Как правильно оформлять код? Покажи на реальном примере.
  2. В чем собственно моя ошибка в коде.? Почему код вообще не работает? Можешь подсказать?
ivashkevich 24.04.2020 в 07:29
  1. Как в уроках. Соблюдать так же все отступы и переносы. Дополнительно можно изучить PSR-12.
  2. Там двоеточие стоит, этот код даже не выполнится.
ivashkevich 24.04.2020 в 07:30

Вообще это двоеточие во всех примерах у вас присутствует. Значит вообще ни одно решение не является рабочим.

[email protected] 24.04.2020 в 08:53

А все понял. Я это двоеточие ставил для того ,чтобы отделить код от комментов (://). Я не писал его в коде. На будущее учту))

ivashkevich 24.04.2020 в 10:54

Ок. Тогда нужно поправить первые два задания.

[email protected] 23.04.2020 в 09:52

Я переделал. Как на этот раз?

ivashkevich 23.04.2020 в 10:44

Отвечайте на комментарии, а не добавляйте новые! Для этого справа от комментария есть стрелочка.

Stimi 24.04.2020 в 15:35
<?php
function minNumb( float $x, float $y, float $z )
{
    if ($x < $y && $z) {
        return $x;
    } elseif ($y < $z && $x) {
        return $y;
    }
    return $z;
}

$a = 1.4;
$b = 8.7;
$c = 9.2;
echo minNumb($a, $b, $c);

echo "<br><br>";

function mult2 (&$x, &$y)
{
     $x = $x * 2;
     $y = $y * 2;

}
$a = 2;
$b = 4;
 mult2($a, $b);
echo $a."<br>". $b;

echo "<br><br>";

function power($x)
{

  if ($x == 1) {
      return 1;
  }
  return $x * power($x - 1);
}

echo power(9);
ivashkevich 24.04.2020 в 20:24
minNumb(2, 3, 1);

Возвращает 2, что неверно.

Где типы аргументов у второго и третьего решений?

Почему функция называется power?

Stimi 24.04.2020 в 21:16
<?php
function minNumb( float $x, float $y, float $z )
{
    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $z && $y < $x ) {
        return $y;
    } else {
        return $z;
    }
}

$a = 6.4;
$b = 3;
$c = 7.8;
echo minNumb($a, $b, $c);
Stimi 24.04.2020 в 21:50
<?php
function mult2 (int &$x, int &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}
$a = 2;
$b = 4;
mult2($a, $b);
echo $a."<br>". $b;

Типы аргументов нужно указывать обязательно? Я правильно понял?

Stimi 24.04.2020 в 21:57

Функция не может называться power?
Я не нашел такой зарезервированной. Видел только pow

ivashkevich 25.04.2020 в 08:57

А почему power, если она факториал считает? Название должно отражать то, что она делает.

ivashkevich 25.04.2020 в 08:56

Везде где можно, следует указывать

ivashkevich 25.04.2020 в 08:56

Теперь minNumb(2, 2, 3) вернёт 3 :D

Stimi 26.04.2020 в 15:45
function minNumb(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $z) {
        return $y;
    } else {
        return $z;
    }
}

$a = 2;
$b = 2;
$c = 3;
echo minNumb($a, $b, $c);
ivashkevich 26.04.2020 в 17:08

Отлично

Hellbound 25.04.2020 в 00:09

Задание 1 (может быть слишком нагромождено, но мне просто пока что легче по одному шагу расписывать)

<?php

function minimum(float $a, float $b, float $c)
{
    if ($a > $b) {
        if ($b > $c) {
            return $c;
        } else {
            return $b;
        }
    } else {
        if ($a > $c) {
            return $c;
        } else {
            return $a;
        }
    }
}
$x = 4;
$z = 3.7;
$y = 5;

echo minimum($x, $z, $y);

Задание 2

<?php
function times2(int &$a, int &$b)
{
    $a = 2 * $a;
    $b = 2 * $b;
    echo $a,', ', $b;
}

$x = 3;
$y = 4;

times2($x, $y);

Задание 3

<?php

function factorial(int $n)
{
    if ($n == 1){
        return 1;
    }
    return $n * factorial($n-1);
}

$x = 5;
echo 'Факториал числа ', $x,  ' равен = ', factorial($x);

С четвертым заданием сам не справился, в комментариях посмотрел решение и разобрался, что к чему

ivashkevich 25.04.2020 в 09:01

Во втором задании функция не должна ничего выводить. Проверять значения нужно за пределами функции и после её вызова.

Факториал нуля - единица

Artt 25.04.2020 в 15:08
<?php
// Задание 1
function getSmallestValue (float$a,float $b,float $c)
{
    if ($a < $b && $a <$c)
    {
        return $a;
    } elseif ($b < $c)
    {
        return $b;
    } else 
    {
        return $c;
    }
}
echo 'Smallest value is: ' . getSmallestValue(8.1,8,7.9) . '<br>','<br>','<br>';

// Задание 2
function doubleValue (float &$x,float &$y)
{
    $x *= 2;
    $y *= 2;
}

$a = 3;
$b = 4;

doubleValue($a, $b);

echo $a . '<br>';
echo $b . '<br>','<br>','<br>';

// Задание 3
function factorialOfNumber (int $a)
{
    if ($a == 1){
        return $a;
    }
    return $a * factorialOfNumber($a - 1);
}
$a = 4;
echo 'Factorial of ' . $a . ' = ' . factorialOfNumber($a) .'<br>','<br>','<br>';

// Задание 4
function showNumbersFromZeroToValue (int $a)
{
    if ($a == 0){
        echo $a;
        return;
    }
    showNumbersFromZeroToValue($a -1);
    echo ' ' . $a;
}

showNumbersFromZeroToValue(9);
echo '<br>','<br>','<br>';

В последнем задании была проблема с ВЫВОДОМ. Так и не решил, подсмотрел в комментариях.
Но уже после осталось непонятным как работает оператор return; без какого-либо значения. Можете объяснить?

ivashkevich 25.04.2020 в 17:38

Где типы аргументов в первых двух задачах?

return завершает работу функции и возвращает то, что справа от него написано. Если ничего не написано, значит возвращает ничего, то есть null.

Artt 25.04.2020 в 18:45

Спасибо, теперь понятно!
Код обновил!

ivashkevich 25.04.2020 в 21:00

Для блоков if-else всегда пишутся фигурные скобки! Оформляйте код как в уроках.

titelivus 28.04.2020 в 16:33

Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.

<?php

function minOfThreeNumbers(float $a, float $b, float $c)
{
    $min = $a; // Возьмем за текущее минимальное значение первый аргумент

    // Сравниваем его с остальными аргументами. Меняем если нашелся аргумент поменьше.
    if ($min > $b) {
        $min = $b;
    }

    if ($min > $c) {
        $min = $c;
    }

    return $min;
}

$a = rand();
$b = rand();
$c = rand();

echo "Минимальное значение среди чисел $a, $b, $c = " . minOfThreeNumbers($a, $b, $c);

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

<?php

function multiByTwo(float &$a, float &$b)
{
    $a *= 2;
    $b *= 2;
}

$x = 5;
$z = 7;
multiByTwo($x, $z);
echo $x . ' ' . $z;

Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)

<?php

function factorial(int $n)
{
    if ($n == 0 or $n == 1) 
    {
        return 1;
    }

    $n *= factorial($n - 1);
    return $n;
}

echo 'Факториал числа 5 = ' . factorial(5);

Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.

<?php

function fromZeroToX(int $x)
{
    if ($x == 0) {
        echo '0';
        return;
    }
    fromZeroToX($x - 1);
    echo ', ' . $x;
}

fromZeroToX(254);
ivashkevich 28.04.2020 в 19:31
function multiByTwo(&$a, &$b)

Где типы аргументов?

    $a *= 2;
    $b *= 2;
    return;

Для чего return в конце?

function factorial(int $n)

Где тип аргумента?

Факториал нуля = 1

titelivus 28.04.2020 в 19:40

Исправил.

Где тип аргумента?

function factorial(int $n)

ivashkevich 28.04.2020 в 19:58
    if ($n == 0 or $n == 1) 

Что за or? Используйте для ИЛИ ||.

Для чего два условия, когда можно ограничиться одним?

titelivus 28.04.2020 в 20:07
if ($n <= 1)

Точняк)

ivashkevich 29.04.2020 в 04:47

Вообще-то я имел в виду

$n == 0
annferny 29.04.2020 в 15:45
 <?php
 function getMin(float $x, float $y, float $z)
 {

     if ($x < $y && $x < $z) {
         return $x;
     } elseif ($y < $z) {
         return $y;
     }
        return $z;
 }

 echo 'Минимальное: ' . getMin(3.4, 0.1, 0.2);

 echo '<br>';

 function links(int &$x, int &$y)
 {
     $x *= 2;
     $y *= 2;
 }
 $a = 2;
 $b = 4;
 links( $a, $b);
 echo 'Ссылки: ' . $a . ', ' . $b;

 echo '<br>';

 function factorial(int $n)
 {
     if ($n == 1 || $n == 0) {
         return 1;
     }
     return $n * factorial($n - 1);
 }

 echo 'Факториал: ' . factorial(4);

 echo '<br>';

 function numbers (int $n)
 {
     echo ($n) . '<br>';
     if ($n == 1) {
         return 0;
     }
return numbers($n - 1);
 }
  echo numbers (4);

День добрый! Я знаю, что последняя задача решена неверно (порядок цифр не тот), так еще и коряво. Просто хотела показать, что сама смогла додумать. Следующий урок пока не смотрела.
Я посмотрела Ваш пример правильного решения задачи, и от этого еще больше путаницы возникло: я думала, что return должен возвращать что-то конкретное, тогда как в примере после него ничего нет. Какую роль тогда он выполняет в данном случае?

ivashkevich 29.04.2020 в 20:27
if ($n == 1 || $n == 0) {

Достаточно

if ($n == 0) {
echo ($n)

Для чего скобки?

numbers (4);

Пробел не нужен.

Какую роль тогда он выполняет в данном случае?

Завершает работу функции. Это то, что он делает вместе с возвратом значения. Если справа от него не указано значение, возвращается null, то есть "ничего".

annferny 30.04.2020 в 16:53
if ($n == 1 || $n == 0) {

В данном случае прописала именно так для правила факториала, если значение = 0.
Скобки там по невнимательности)

Вроде начала понимать, как это работает: После выполнения условия, когда $x == 0, функция дает команду на выведение значения, завершается цикл, и тогда начинают выводиться, раннее выполненные действия.

ivashkevich 30.04.2020 в 19:13

Там нет никакого "выведения". Внимательно прочитайте про return еще раз. И в документации тоже прочитайте.

XXX 30.04.2020 в 00:24

4 задание

function numbersTo0(int $x, $i = 0)
{
    if ($x == 0) {
        echo $x + $i;
        return;
    } elseif ($x > 0) {
        echo $i . ' ';
        return numbersTo0($x - 1, $i + 1);
    }
    echo $i . ' ';
    return numbersTo0($x + 1, $i - 1);
}
ivashkevich 30.04.2020 в 11:16

Почему не указан тип второго аргумента?
Можно одним аргументом обойтись, второй не нужен.

XXX 30.04.2020 в 11:31

Если убрать аргумент 'i', то выводить будет в обратном порядке. Не 0, 1, 2, 3 ... а ..., 3, 2, 1, 0. Можно сделать так, но таких решений выше много, а хотелось что-то уникальное.

function numbersTo0(int $x)
{
    if ($x == 0) {
        echo $x;
        return;
    } elseif ($x > 0) {
        numbersTo0($x - 1);
        echo ' ' . $x;
    } elseif ($x < 0) {
        numbersTo0($x + 1);
        echo ' ' . $x;
    }
}
ivashkevich 30.04.2020 в 11:46

Не нужно уникального, надо простое)

2yeezy4me 30.04.2020 в 11:34

Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.

<?php

function getMin(float $x, float $y, float $c)
{
    if ($x < $y && $x < $c) {
        return $x;
    } elseif ($y < $c) {
        return $y;
    } else {
        return $c;
    }
}

$x = 31;
$y = 15;
$c = 5;

echo 'Наименьшее число: ' . getMin($x, $y, $c);

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

<?php
function multiTwo(int &$a, int &$b)
{
    $a *= 2;
    $b *= 2;
}

$a = rand(1, 15);
$b = rand(1, 15);
echo 'Переменная а равна = ' . $a . '<br>';
echo 'Переменная b равна = ' . $b . '<br>';
echo 'Применяем функцию multiTwo<br>';
multiTwo ($a, $b);
echo 'Теперь а равна = ' . $a . '<br>';
echo 'Теперь b равна = ' . $b . '<br>';

Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Ну разумеется, тут никуда без рекурсии =)

<?php
function factorial(int $a)
{
    if ($a == 0) {
        return 1;
    }
    return $a * factorial($a - 1);
}

echo 'Факториал равен: ' . factorial(5);

Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.

<?php
function getNumbers(int $n)
{
    if ($n == 0) {
        return $n;
    } else {
        echo $n . ' ';
        return getNumbers($n - 1);
    }
}

echo getNumbers(10);
ivashkevich 30.04.2020 в 11:47
if ($a == 1 || $a == 0) {

Достаточно

if ($a == 0) {
        return $n;

    } else {

Лишний перенос

echo $n, ' ';

Используй конкатенацию строк.

2yeezy4me 30.04.2020 в 11:56

Исправил, проверь, пожалуйста.

ivashkevich 30.04.2020 в 19:04

Отлично

Sviatoslav 01.05.2020 в 14:26

Задание 1:

function minValue (float $x, float $y, float $z) {
 return min($x, $y, $z); 
}

Задание 2:

function multiplicateTwo (&$x, &$y) {
  $x*= 2;
  $y*= 2;
}

Задание 3:

function factorial ($n) {
  if ( $n == 1) {
      return $n; }
  return $n * factorial($n -1);
}
ivashkevich 01.05.2020 в 15:30

А первое задание сможете решить без помощи встроенной функции?

function minValue (float $x, float $y, float $z) {

Скобка, открывающая тело функции, пишется на новой строке.
После имени функции пробел не нужен.

function multiplicateTwo(&$x, &$y)

Где типы аргументов?

if ( $n == 1) {
      return $n; }

Что с форматированием? Пишите как в уроках.
Для этого в шторме можно нажать Ctrl+Alt+L

Sviatoslav 02.05.2020 в 19:19

Задание 1:

<?php
function minValue(float $x, float $y, float $z)
{
    $result = $x;
    if ($x >= $y and $y >= $z) {
        $result = $z;
    } elseif ($x >= $y and $z >= $y) {
        $result = $y;
    }
    return $result;
}

Где типы аргументов?

При получении аргументов по ссылкам также нужно приводить тип аргументов? Например если в источнике ссылки переменные типа float, а мы приводим их к int? Или я не так Вас понял?

Что с форматированием? Пишите как в уроках.

Прошу прощения. Писал код в sublime text. В следующих заданиях буду учитывать замечание.

ivashkevich 03.05.2020 в 20:51
and

Нужно заменить на

&&

При получении аргументов по ссылкам также нужно приводить тип аргументов?

Да, всегда стоит указывать.

[email protected] 02.05.2020 в 13:22

Это мое решение
<?php
function factorial($a)
{
if($a == 0){
return 0;
}
if($a == 1){
return 1;
}

return $a * factorial($a - 1);

}

echo 'Рузультат : '. factorial(1);
?>
но посмотрев все ответы очень понравилось
<?php
function factorial(int $a)
{
if($a < 2)
return $a;

return $a * factorial($a - 1);

}

echo factorial(0);
?>
Оно тоже правильно работает с 0 и очень понятное и короткое!

ivashkevich 02.05.2020 в 16:30

Оформляйте код (в редакторе комментариев самая первая кнопка).
Как поправите - напишите. Проверю ДЗ

IePyton 05.05.2020 в 21:06
<?php

// возвращение минимального значения

function whoIsLessNumber(float $a, float $b, float $c)
{
    if ($a < $b && $a < $c) {
        return $a;
    } elseif ($b < $a && $b < $c) {
        return $b;
    } else
        return $c;
}

$x = 6.6;
$y = 9.6;
$z = 1.3;

echo 'Наименьшее число ' . whoIsLessNumber($x, $y, $z);

// принимает на вход два аргумента по ссылкам и умножает каждый из них на 2
echo '<br >' . '<br >' . '<br >';

function multDouble(int &$x, int &$y)
{
    $x = 2 * $x;
    $y = 2 * $y;
}

$a = 3;

$b = 4;

multDouble($a, $b);

echo $a . '<br >' . $b;

// факториал числа
echo '<br >' . '<br >' . '<br >';

function factorial(int $x)
{
    if ($x == 1) {
        return $x;
    }
    return $x * factorial($x - 1);

}

$x = 4;

echo "Факториал $x равен " . factorial($x);

// числа от 0 до переданного значения
echo '<br >' . '<br >' . '<br >';

function intNumber(int $min, int $max)
{
    echo ' ' . $min . ' ';
    if ($min == $max) {
        return;
      }
    return intNumber($min + 1, $max);
}

$nol = 0;
$number = 5;

intNumber($nol, $number);

Я не понял про дебаг? где смотреть? не было урока же?
ivashkevich 06.05.2020 в 13:54
        return $c;

Всегда используйте фигурные кавычки для блоков if-else

whoIsLessNumber(1,1,2) возвращает 2, что неверно

    if ($min == $max) {
        return;
      }

Проблема с форматированием. Делайте отступы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

IePyton 06.05.2020 в 15:21
<?php

// возвращение минимального значения

function whoIsLessNumber(float $a, float $b, float $c)
{
    if ($a <= $b && $a <= $c) {
        return $a;
    } elseif ($b <= $a && $b <= $c) {
        return $b;
    } else {
        return $c;
    }
}

$x = 1;
$y = 1;
$z = 2;

echo 'Наименьшее число ' . whoIsLessNumber($x, $y, $z);

// принимает на вход два аргумента по ссылкам и умножает каждый из них на 2
echo '<br >' . '<br >' . '<br >';

function multDouble(int &$x, int &$y)
{
    $x = 2 * $x;
    $y = 2 * $y;
}

$a = 3;

$b = 4;

multDouble($a, $b);

echo $a . '<br >' . $b;

// факториал числа
echo '<br >' . '<br >' . '<br >';

function factorial(int $x)
{
    if ($x == 1) {
        return $x;
    }
    return $x * factorial($x - 1);

}

$x = 4;

echo "Факториал $x равен " . factorial($x);

// числа от 0 до переданного значения
echo '<br >' . '<br >' . '<br >';

function intNumber(int $min, int $max)
{
    echo ' ' . $min . ' ';
    if ($min == $max) {
        return;
    }
    return intNumber($min + 1, $max);
}

$nol = 0;
$number = 5;

intNumber($nol, $number);
ivashkevich 06.05.2020 в 20:03

Теперь отлично

nersesyan.sargis 11.05.2020 в 16:50
<?php
echo '<h3>Задание 1:</h3>';

function getMin (float $x, float $y, float $z)
{
    if ($x <= $y && $x <= $z) {
        return $x;}
    elseif ($y <= $x && $y <= $z) {
        return $y;}
    else {
        return $z;}
}

$a = 5;
$b = 7;
$c = 2;

echo 'Наименьшее число:'. getMin($a, $b, $c);
echo '<br>';

echo '<h3>Задание 2:</h3>';

function multDoubt(int &$x, int &$y)
    {
        $x = 2*$x;
        $y = 2*$y;
}

$a = 5;
$b = 7;
multDoubt($a, $b);

echo 'Результаты умножения:<br>'. $a . '<br >' . $b;
echo '<br>';
echo '<h3>Задание 3:</h3>';

function fact($x)
{
    if ($x <= 0) return 1;
    return $x * fact($x - 1);
}

echo fact(4);
nersesyan.sargis 11.05.2020 в 16:51
Задание 1:
Наименьшее число:2
Задание 2:
Результаты умножения:
10
14
Задание 3:
24
ivashkevich 12.05.2020 в 08:03
function fact($x)

Потеряли тип аргумента

И проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

superbobr 18.05.2020 в 10:33
<?php
declare(strict_types=1);

function findMin(float $a, float $b, float $c ) {
    if ($a < $b && $a < $c) {
        return $a;
    } elseif ($b < $a && $b < $c) {
        return $b;
    }
    return $c;
}

echo findMin(2.5, 2.3, 2.8);
ivashkevich 18.05.2020 в 20:19
findMin(1, 1, 2)

Вернуло 2, что неверно

superbobr 19.05.2020 в 13:23
<?php
declare(strict_types=1);

function findMin(float $a, float $b, float $c ) {
    if ($a <= $b && $a <= $c) {
        return $a;
    } elseif ($b <= $a && $b <= $c) {
        return $b;
    }
    return $c;
}

echo findMin(1, 1, 2);
ivashkevich 19.05.2020 в 17:59

Теперь ок

superbobr 19.05.2020 в 19:58

Спасибо за ревью кода! :)

ivashkevich 20.05.2020 в 07:54

Пожалуйста)

superbobr 18.05.2020 в 10:36

Артем, не подскажете, почему PHP не ругается если в функцию где в аргументах указан тип float передать int? Если сделать наоборот то сразу выскакивает ошибка.

ivashkevich 18.05.2020 в 20:21

Работает автоматическое приведение типов. Если хотите чтобы типы были всегда такими, как написано, можно использовать директиву strict_types (погугли самостоятельно)

superbobr 19.05.2020 в 13:16

Директиву strict_types использовал, нашел вот такой ответ "Единственное место, где режим строгой типизации позволяет автоматические преобразования — из int в float."

ivashkevich 19.05.2020 в 17:59

Сейчас еще раз перечитал вопрос и понял, что в первый раз ответил не совсем про то. int можно безболезненно преобразовать во float, просто добавится .0
Если же float приводить к int, то придется отбросить часть после запятой, что некорректно. Ну а вообще не стоит никогда полагаться на автоприведение, всегда делайте это явно.

superbobr 18.05.2020 в 10:54
<?php

function multipleTo2(int &$a, int &$b)
{
    $a *= 2;
    $b *= 2;
}

$x = 8;
$y = 55;

multipleTo2($x, $y);

echo $x . ' ' . $y;
ivashkevich 18.05.2020 в 20:22

Отлично

superbobr 18.05.2020 в 11:10
<?php
function getFactorial(int $number)
{
    if ($number == 0 || $number == 1) return 1;
    else {
        $number = $number * getFactorial($number - 1);
    }
    return $number;
}

echo getFactorial(8);
ivashkevich 19.05.2020 в 06:02

Всегда используйте фигурные скобки для блоков if-else.

superbobr 18.05.2020 в 11:15

Или даже так можно :)

<?php
function getFactorial(int $number)
{
    if ($number == 0 || $number == 1) return 1;
    else return $number * getFactorial($number - 1);
}

echo getFactorial(8);
ivashkevich 19.05.2020 в 06:03

Всегда используйте фигурные скобки для блоков if-else.

Alex-neo 20.05.2020 в 19:08
<?php
/*Функция, которая будет принимать на вход 3 аргумента
с типом float и возвращать минимальное значение*/

function getMin(float $x, float $y, float $z)
{
    function getMinXY(float $x, float $y)
    {
        if ($x < $y) {
            return $x;
        }
        return $y;
    }

    if ($z < getMinXY($x, $y)) {
        return $z;
    } return getMinXY($x, $y);
}
$a = 3;
$b = 1;
$c = 5;
echo 'Наименьшее число: ' . getMin($a, $b, $c);
ivashkevich 20.05.2020 в 19:19

getMin(2, 3, 1) возвращает 2, что неверно

Alex-neo 20.05.2020 в 20:39
<?php
/* Исправил!
Функция, которая будет принимать на вход 3 аргумента
с типом float и возвращать минимальное значение*/

function getMin(float $x, float $y, float $z)
{
    function getMinXY(float $x, float $y)
    {
        if ($x < $y) {
            return $x;
        }
        return $y;
    }

    if ($z < getMinXY($x, $y)) {
        return $z;
    } return getMinXY($x, $y);
}
$a = 5;
$b = 7;
$c = 4;
echo 'Наименьшее число: ' . getMin($a, $b, $c);
ivashkevich 21.05.2020 в 07:07

Работает. Но не стоило для этого добавлять еще одну функцию. Рекомендую ознакомиться с другими решениями в комментариях.

ivashkevich 21.05.2020 в 07:09

Ну или использовать эту функцию по-максимуму

function getMin(float $x, float $y, float $z)
{
    function getMinXY(float $x, float $y)
    {
        if ($x < $y) {
            return $x;
        }
        return $y;
    }

    return getMinXY($x, getMinXY($y, $z));
}
Alex-neo 21.05.2020 в 20:32
<?php
/*Функция, которая принимает на вход два аргумента по ссылкам
 и умножает каждый из них на 2. */

function multiOn2(&$x, &$y)
{
    $x = $x*2;
    $y = $y*2;
}
$a = 3;
$b = 5;
multiOn2($a, $b);
echo $a;
echo '<br>';
echo $b;
ivashkevich 22.05.2020 в 08:11

Где типы аргументов?

Alex-neo 21.05.2020 в 20:58
<?php
/*Функция, считающая факториал числа
(произведение целых чисел от единицы до переданного)*/

function getMultiOfNumbersFromZero(int $n)
{
    // Если сейчас 1, то просто возвращаем 1
    if ($n == 1) {
        return 1;
    }
    // В остальных случаях - умножаем текущее число на произведение всех предыдущих
    return $n * getMultiOfNumbersFromZero($n - 1);
}
echo 'Результат: ' . getMultiOfNumbersFromZero(7);
ivashkevich 22.05.2020 в 08:13

Факториал нуля равен 1, это тоже стоит учесть.

Лучше ДЗ для одного урока отправлять одним комментарием. Так будет проще и мне и вам)

Alex-neo 21.05.2020 в 22:41
<?php
//Функция, которая будет выводить на экран целые числа от 0 до переданного значения.

function numbers(int $x) {
    if ($x == 0) {
        echo $x;
        return;
    }
    numbers($x - 1);
    echo ', ' . $x;
}
numbers(5);

// 0, 1, 2, 3, 4, 5
ivashkevich 22.05.2020 в 08:16

Отлично

[email protected] 26.05.2020 в 15:18
<?php
/* Функция которая будет принимать на вход 3 аргумента
 с типом float и возвращать минимальное значение.*/

function getMin(float $v, float $q, float $p) {
    if ($v < $q || $v < $p) {
        return $v;
    }elseif ($q < $p) {
        return $q;
    }else{
        return $p;
    }
}
$v = 9; $q = 9.9; $p = 999;
        echo 'минимальное значение: ' . getMin($v, $q, $p);
<?php
/* Функцию, которая принимает на вход два аргумента по ссылкам
 и умножает каждый из них на 2.*/
function multiplication3(&$x, &$y) {
    $x = $x * 2;
    $y = $y * 2;
}
$a = 4;
$b = 6;
multiplication3($a, $b);

echo $a . '<br>';
echo $b;

<?php
//функция считающуя факториал числа
function factik($n)
{
    if ($n <= 0) return 1;
    return $n + factik($n - 1);
}
echo factik(9);

Первое и второе задание не составило большого труда сделать, но вот на 3ем задание пришлось обращаться в справочник PHP. 4 задание слишком пока сложновато для понимания, оставлю на потом...
Надеюсь в будущем это уже всё укомплектуется в голове и не будет таких тугодуманий над рекурсией)))

ivashkevich 27.05.2020 в 17:55
getMin(2, 3, 1)

возвращает 2, что неверно

Скобка, открывающая тело функции, пишется на новой строке.

function multiplication3(&$x, &$y)

Где типы аргументов?

    if ($n <= 0) return 1;

Всегда используйте фигурные скобки для блоков if-else.

Проблема с форматированием. Делайте отступы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

[email protected] 28.05.2020 в 17:46

Хорошо, я учту всё выше сказанное.
Благодарю вас за обратную связь, работа над ошибками это составляющая часть обучения. В дальнейшем надеюсь такие ошибки не совершать!)

ivashkevich 28.05.2020 в 20:42

Пожалуйста)
У нас принято делать работу над ошибками - в ответ на мой комментарий пришлите вариант с исправлениями

[email protected] 29.05.2020 в 09:57

Подправил, проверил на валидность, в итоге всё нормально.

<?php
/* Функция которая будет принимать на вход 3 аргумента
 с типом float и возвращать минимальное значение.*/

function getMin(float $v, float $q, float $p)
{

    if ($v < $q && $v < $p) {
        return $v;
    } elseif ($q < $p) {
        return $q;
    } else {
        return $p;
    }
}

$a = 12;
$b = 9.9;
$c = 9;
echo 'минимальное значение: ' . getMin($a, $b, $c);

Скобку тут перенёс.

<?php
/* Функцию, которая принимает на вход два аргумента по ссылкам
 и умножает каждый из них на 2.*/
function multiplication3(&$x, &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}
$a = 4;
$b = 6;
multiplication3($a, $b);

echo $a . '<br>';
echo $b;

Подправил, посмотрел ход действий через Xdebug. Всё работает получилось 45, вместо 46.

<?php
//функция считающая факториал числа
function factik($n)
{
    if ($n == 1 || $n == 0) return 1;
    return $n + factik($n - 1);
}

echo factik(9);
ivashkevich 29.05.2020 в 12:50

Типы аргументов в последних двух решениях пропустили

UtillitE 24.06.2020 в 14:50
 Привет!
1. Первое задание я подсмотрела решение. :(((
2. Второе решила сама
<?php

function mult2(&$x, &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 39;
$b = 107;

mult2($a, $b);

echo $a, '<br>', $b;
ivashkevich 24.06.2020 в 18:28

А где типы аргументов?

UtillitE 24.06.2020 в 15:44
 3. Задание про факториал
?php
function factorial(int $x)
{
    if ($x == 1) {
        return 1;
    }
              return $x * factorial( $x - 1);
}

echo factorial(9);
ivashkevich 24.06.2020 в 18:30

var_dump нужно убрать.

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Факториал нуля = 1

UtillitE 25.06.2020 в 20:40
<?php
function factorial(int $x)
{
    if ($x == 1) {
        return 1;
    }
    return $x * factorial($x - 1);
}

echo factorial(9);
ivashkevich 26.06.2020 в 09:26

Если передать 0, программа уйдет в бесконечную рекурсию и завершится с ошибкой

UtillitE 26.06.2020 в 09:34

Привет, немного не поняла. Поправь, если не права. Задание было найта факториал от 1 до заданного числа. Моя программа при переменной, равной 1, заканчивает работу. Причём здесь 0 и бесконечная рекурсия?

UtillitE 26.06.2020 в 09:50

Я поняла, ты имеешь в виду, работу программы, если задать число, до которого считается факториал, равным 0?

ivashkevich 26.06.2020 в 10:54

Факториал нуля = 1. Ладно, забейте, и так пойдет)

UtillitE 24.06.2020 в 16:03
 4 Выполнено
<?php
function wholeNumber(int $x)
{
    if ($x == -1) {
        return -1;
    }
    if ($x + wholeNumber($x - 1)) {
        echo $x;
}
}

echo wholeNumber(9);
ivashkevich 24.06.2020 в 18:31

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Лучше разделять числа пробелами или запятыми, а то так сплошняком идут, не понятно.

UtillitE 25.06.2020 в 21:54

Исправила!

<?php
function wholeNumber(int $x)
{
    if ($x == -1) {
        return -1;
    }
    if ($x + wholeNumber($x - 1)) {
        echo $x,', ';
    }
}

echo wholeNumber(9);
ivashkevich 26.06.2020 в 09:27

Отлично

[email protected] 01.07.2020 в 15:17
<?php
// Задание №1.
function minznach(float $a, float $b, float $c)
{
    if ($a <= $b)
        $d = $a;
    else
        $d = $b;
    if ($d <= $c)
        return ($d);
    else
        return ($c);
}
// Задание №2.
function umnog2(&$a, &$b)
{
    return array($a * 2, $b * 2);
}
// Задание №3.
function factorial(int $x)
{
    if ($x <= 0)
        echo ("Ошибка ввода.")return 1;
    else
        return $x * factorial($x - 1);
}
//Задание №4.

function output($a)
{
    static $a;
    echo "$a";
    $a++;
}
for ($i = 0; $i++ < $n + 1; )
    output($a);
ivashkevich 01.07.2020 в 19:57

Всегда используйте фигурные скобки для блоков if-else, for, foreach.

function umnog2(&$a, &$b)

Где типы аргументов?

    return array($a * 2, $b * 2);

Такой синтаксис для массивов устарел. И для чего здесь вообще возврат этого массива?

Факториал нуля = 1, это корректное значение.

        echo ("Ошибка ввода.")return 1;

Это вообще что такое? Строки пишутся в одинарных кавычках. Для чего здесь скобки? В конце выражения ставится ;. Только одно выражение на строку.

Пишите, как в уроках, пожалуйста. И лучше пока отложите в сторону учебник или что там, откуда вы успели начерпать всего этого ужаса :)

    static $a;

Ну это вообще дичь) Рекомендую вам идти строго по материалам курса и пока его не пройдете вообще не рассматривать альтернативные источники.

love34r434 04.07.2020 в 22:08

Проверяла на http://sandbox.onlinephpfunctions.com/ Выдает то, что задано.
Идею рекурсии я поняла. Пока сложно думать на языке программирования. Поэтому задания делала скорее интуитивно, чем осмысленно.

1.Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.

 <?php
function getMin(float $x,float $y, float $z) {
    if ($x < $y && $x < $z) {
        return $x;
    } else {
        if ($y < $z) {
            return $y;
        }
        return $z;
    }
}
echo 'Минимальное число: ' . getMin(1.22, 0.27, 3.44);
  1. Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
<?php
function doDouble(float &$x, float &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 4.8;
$b = 5.33;

echo ' a=' . $a . ', b=' . $b;

doDouble($a, $b);

echo ' a=' . $a . ', b=' . $b;

3 . Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного).

<?php

function factorial(int $n)
{
    if ($n == 1) {
        return $n;
    }
    return $n * factorial($n - 1);
}
  1. Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. (Не совсем поняла чем же тут сложность выше, чем в предыдущем? Типа там можно было из примера в уроке содрать и плюс на умножить поменять, а тут надо было извилиной шевельнуть? =))) )
<?php
function fromZeroToX(int $x, int $n)
{
    echo $n . "\n";
    if ($n == $x) {
        return;
    }
    return fromZeroToX($x, $n + 1);
}

fromZeroToX(13, 0);
ivashkevich 06.07.2020 в 07:07

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Закрывающий тег ?> в конце файла не нужен.

  1. Блок else можно опустить:
    if ($x < $y && $x < $z) {
        return $x;
    }
    if ($y < $z) {
        return $y;
    }
    return $z;
  2. Где типы аргументов?
  3. var_dump нужно убрать
  4. Где тип аргумента $n?

Типа там можно было из примера в уроке содрать и плюс на умножить поменять, а тут надо было извилиной шевельнуть?

Всё так)

love34r434 11.07.2020 в 18:01

описание картинки
Я и в первый раз вставляла оформленный в шторме код и в шторме он выглядел ничего так...
Каюсь, чтобы не делать отдельных файлов просто запхнула все в хтмл, поэтому и использовала закрывающий тег.

--- Может стоит к оформлению кода добавить до и после кавычек отступы? А то я пока поняла, что стоит код отделить от текста дополнительными переводами строк, такого наформатировала... Это из-за неправильно расставленных абзацев код отображался неправильно.

(Т_Т Рекурсия по сравнению с оформлением и настройками всех компонентов для организации обучения - просто детский лепет. Чувствую себя, словно осталась всего одна извилина, и та прямая.)

Не могла понять, почему в первом задании можно опустить else. А тут пришла мысль: Если первое условие выполнится, то после return функция просто завершится. В противном случае продолжится чтение условия. Получается, что если бы не было return опустить else было бы нельзя?

  1. Ну пусть будут float. В задании же не указано, что они должны быть целыми =)

В любом случае, спасибо вам, за ваше такое полезное хобби ))

ivashkevich 12.07.2020 в 06:11

Получается, что если бы не было return опустить else было бы нельзя?

Да, опустить можно именно из-за return

VitaliyB 06.07.2020 в 20:05
function getMin(float $x, float $y, float $z) {
    if ( $x < $y){
        return $x;
    }
    elseif ( $y < $z){
        return $y;
    }
    return  $z;
}
$a = 4.6;
$b = 1.1;
$c = 15.9;

echo 'Наименьшее число:' . getMin($a, $b, $c);
ivashkevich 08.07.2020 в 14:22

Оформляйте код (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте, пожалуйста. А потом ответьте мне на этот комментарий. Проверю домашку после этого.

VitaliyB 08.07.2020 в 15:55

Оформил

ivashkevich 09.07.2020 в 05:19

Всё отлично, но проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

VitaliyB 07.07.2020 в 16:24

3-е задание

function factorialis (int $n)
{

    if ($n == 1) {
        return 1;
    }
    return $n * factorialis ($n - 1);
}

echo 'Результат: ' . factorialis(5);
ivashkevich 08.07.2020 в 14:24

Оформляйте код (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте, пожалуйста. А потом ответьте мне на этот комментарий. Проверю домашку после этого.

VitaliyB 08.07.2020 в 18:39

Гуд

ivashkevich 09.07.2020 в 05:23

Лишний перенос строки после скобки, открывающей тело функции. В остальном - отлично.

VitaliyB 08.07.2020 в 15:49

Долго разбирался с последним заданием, всё понял ))
Немного усложнил и вывел только чётные числа.

function integer(int $x)
{
    if ($x == 0) {
        echo $x;
        return;

    }
    $y = integer($x - 1);
    if ($x % 2 == 0) {
        echo ', ' . $x;
    }
      }

integer(10);
ivashkevich 09.07.2020 в 05:15

Всё отлично, но есть проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Nobody 29.07.2020 в 23:57
<?php 

    echo "Задание №1 <br/>";
    function myFirstFunction($x, $y, $z) {
        if($x < $y) {
            if($x < $z) {
                echo $x;
            }
        } elseif ($y < $z) {
            echo $y;
        } else {
            echo $z;
        }
    }
    $x = 1.25;
    $y = 0.5;
    $z = 0.75;
    myFirstFunction($x, $y, $z);
    echo '<br/>';
    echo '<hr/>';

    /////////////////////////////////////////////////////////////////////////////////////

    echo "Задание №2 <br/>";
    function multiply2(&$x, &$y) {
        $x = $x * 2;
        $y = $y * 2;
    }

    $a = 3;
    $b = 5;
    multiply2($a, $b);
    echo $a . '<br/>' . $b;
    echo '<br/>';
    echo '<hr/>';

    /////////////////////////////////////////////////////////////////////////////////////

    echo "Задание №3 <br/>";
    function factRec($fact) {
        if($fact == 1) {
            return $fact;
        }
        return $fact * factRec($fact - 1);
    }
    $fact = 5;
    echo $fact . '! - ';
    echo factRec($fact);
    echo '<br/>';
    echo '<hr/>';

    /////////////////////////////////////////////////////////////////////////////////////

    echo "Задание №4 <br/>";
    function numsInOrder($begin, $finish) { // Гогль сказал Numbers In Order = числа по порядку
        if($begin == $finish) {
            return $begin;
        }
        return $begin . ', ' . numsInOrder($begin + 1, $finish);
    }
    $begin = 0;
    $finish = 54;
    echo numsInOrder($begin, $finish);
    echo '<br/>';
    echo '<hr/>';

    /////////////////////////////////////////////////////////////////////////////////////

    function numsInOrder($endNums) {
        if ($endNums == 0) {
            echo $endNums;
            return;
        }
        numsInOrder($endNums - 1);
        echo ', ' . $endNums;
        return $result;
    }
    numsInOrder(54);
ivashkevich 02.08.2020 в 17:18

Где типы аргументов?

Скобка, открывающая тело функции, пишется на новой строке.

Megido 07.08.2020 в 18:51

в решении 3 задачи ошибка:

if ($x === 0) {
        return $x;

должно быть:

if ($x === 0) {
        return 1;
ivashkevich 11.08.2020 в 13:17

Спасибо, исправил.

Оформляйте код (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте, пожалуйста.

[email protected] 19.08.2020 в 17:42

3)

<?php
function fact(int $n) {
    if ($n === 1) {
        return 1;
    } 
            return $n*fact($n-1);
}

$num = 4;
echo fact($num);
?>
ivashkevich 19.08.2020 в 18:01

Скобка, открывающая тело функции, пишется на новой строке.

Закрывающий тег ?> в конце файла не нужен.

            return $n*fact($n-1);

нарушен отступ

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

[email protected] 19.08.2020 в 17:52

4)

<?php
function sequence(int $n) {
    if ($n === 0) {
            echo $n;
            return;
    }
        sequence($n - 1);
        echo ' '.$n;
}

$num = 25;
sequence($num);
?>
ivashkevich 19.08.2020 в 18:02

Те же недочеты

MikeSiebel 28.08.2020 в 22:34

Четвертое задание действительно показалось сложным, воспользовался подсказкой, а потом сделал вывод в обратном порядке. В общем получилось два варианта. Так делают?

Up
<br>
<?php
function numbersUp(int $x)
{
    var_dump($x);
    if ($x === 0) {
        echo $x;
        return;
    }
    numbersUp($x - 1);
    echo    ',' . $x;
}
$a = 10;
 numbersUp($a);
?>
<br>
Down
<br>
<?php
function numbersDown(int $x)
{
    var_dump($x);
    if ($x === 0) {
        echo $x;
        return;
    }
    echo   $x . ',';
    numbersDown($x - 1);
}
$a = 10;
numbersDown($a);
?>
<br>
ivashkevich 29.08.2020 в 18:09

Да, всё норм

Sergey503 31.08.2020 в 21:43

1-e

$a = 2.5;
$b = 40.4;
$c = 107.7;

function getMiniCount(float $a, float $b, float $c)
{
    if ($a < $b && $a < $c) {
        return $a;
    } elseif ($b < $c && $b < $a) {
        return $b;
    } elseif ($c < $a && $c < $b) {
        return $c;
    }
}

echo getMiniCount($a, $b, $c); // 2.5

2-e

$d = 10;
$f = 70;

function getTwoArg(int &$i, int &$g)
{
    $i *= 2;
    $g *= 2;
}

getTwoArg($d, $f);

echo 'Первое число умноженое на 2 = ' . $d . '<br>'; // 20
echo 'Второе число умноженое на 2 = ' . $f; // 140

3-e

$x = 4;

function facOfNum(int $x)
{
    if ($x > 2) {
        return $x * facOfNum($x - 1);
    }
    return $x;
}

echo 'Число ' . $x . ' = ' . facOfNum($x); // Число 4 = 24

4-e

function getInt(int $z)
{
    if ($z == 0) {
        echo $z . ' ';
        return;
    }
    echo $z . ' ' . getInt($z - 1); // 0 1 2 3 4 5 6 7 8 9 10
}

echo getInt(10);
ivashkevich 03.09.2020 в 17:19
  1. Если передать 3 одинаковых числа, функция ничего не вернет.

Остальные ок

elda 10.09.2020 в 15:34
<?php
function numbers(float $a, float $b, float $c){
    if($a < $b && $a < $c)
    {
        return $a;
    }
    if($a < $c)
    {
        return $b;
    }
        return $c;
}
$a = 1.3;
$b = 2.3;
$c = 3.3;
echo numbers($a, $b, $c);
ivashkevich 11.09.2020 в 19:25

Чет ерунда какая-то. Условия разве так пишутся? Откуда там точки с запятой после if взялись?

elda 11.09.2020 в 19:40

да напортачил надо исправить

ivashkevich 11.09.2020 в 20:08

Пересмотрите урок про условия)

elda 10.09.2020 в 16:05
<?php
function multiPlication(int &$a, int &$b)
{
    $a = 2 * $a;
    $b = 2 * $b;
}
    $a = 10;
    $b = 20;
 multiPlication($a, $b);
 echo 'первое' . $a;
 echo '<br>';
 echo 'второе' . $b;
ivashkevich 11.09.2020 в 19:26

Отлично. Только отступы немного поехали

elda 10.09.2020 в 18:31
<?php
function factorial(int $d)
{
    if ($d === 0)
    {
        return  1;
        }
        return $d * factorial($d - 1);

}
$a = 6;
echo  factorial($a);
ivashkevich 11.09.2020 в 19:28

Всё отлично, но проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Deny 10.09.2020 в 20:44
//ex.1
function getMin(float $a, float $b, float $c)
{
    if ($a < $b and $a < $c) {
        return $a;
    } elseif ($b < $c) {
        return $b;
    }
    return $c;
}

$a = -1.6;
$b = -8.5;
$c = -7.6;
var_dump(getMin($a, $b, $c));

//ex.2
function linkArg(int &$x, int &$y)
{
    $x *= 2;
    $y *= 2;
}
$a = 4;
$b = 5;
(linkArg($a, $b));
echo $a . "<br>";
echo $b;

//ex.3
function factNum(int $n)
{
    if ($n == 0) {
        return 1;
    }
    return $n * factNum($n - 1);
}
ivashkevich 11.09.2020 в 19:29

вместо and пишите &&. в остальном - всё супер

elda 11.09.2020 в 15:45
<?php
function integer(int $a) {
    if ($a === 0) {
        echo $a;
        return;
    }
    integer($a - 1);
    echo ', ' . $a;
}
ivashkevich 11.09.2020 в 19:30

Отлично

[email protected] 06.10.2020 в 15:15

Я не понимаю как работает код:
описание картинки
в строчке: return $x * power($x, $n - 1);
как функция понимает что $n-1 это степень, что $x надо умножать на себя n-1 раз, этого нигде не прописано, т.е. выглядит так буд-то функция обращается сама к себе, но все что в ней есть это: if ($n == 1) {
return $x; и к чему тут обращаться?

ivashkevich 07.10.2020 в 19:30

Пройдите следующий урок, с дебаггером многим становится понятнее.

Ed8L 11.10.2020 в 19:33

Привет, а можно так?

function getRange($n)
{
    if($n == 0 ) {
        return 0;
    }

    return getRange($n - 1) . ',' . $n;
}

echo getRange(5);
ivashkevich 12.10.2020 в 07:45

А где типы данных?

Ed8L 12.10.2020 в 09:23
function getRange(int $n)
{
    if ($n == 0 ) {
        return 0;
    }

    return getRange($n - 1) . ',' . $n;
}

echo getRange(5);
ivashkevich 12.10.2020 в 11:22

Отлично!

Larisa 24.10.2020 в 19:40
<?php
function getMin(float $x, float $y, float $z)
{
    if ( $x > $y && $x > $z) {
        return $x;
    }
    if ($y > $x && $y > $z) {
        return $y;
    } else {
        return $z;
    }
}
$a = 10;
$b = 12;
$c = 15;
echo 'Минимальное значение ' . getMin($a, $b, $c);
echo '<br>';

function multiply2(&$x,&$y) {
    $x *=2;
    $y *=2;
}
$a = 5;
$b = 3;
multiply2($a,$b);
echo 'Аргументы равны ' . $a. ' и ' . $b;
echo '<br>';

function factorial($x) {
    if ($x == 0 || $x == 1) {
        return 1;
        }
        return $x * factorial($x-1);
    }
echo factorial(6);
echo '<br>';

function wholeNumbers($x)
{
    if ($x == 0) {
        echo $x . ' ';
    } else {
        wholeNumbers($x - 1);
        echo $x . ' ';
    }
}
    wholeNumbers(12);
?>

Результат:
Минимальное значение 15
Аргументы равны 10 и 6
720
0 1 2 3 4 5 6 7 8 9 10 11 12
ivashkevich 26.10.2020 в 13:32

getMin(2, 2, 3) возвращает 3, что неверно

function multiply2(&$x,&$y) {

Где типы аргументов?

function factorial($x) {

Где типы аргументов? Скобка, открывающая тело функции, пишется на новой строке.

    if ($x == 0 || $x == 1) {
        return 1;
        }
        return $x * factorial($x-1);
    }

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Закрывающий тег ?> в конце файла не нужен.

Larisa 26.10.2020 в 22:07
<?php

function getMin(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return $x;
    }
    if ($y < $x && $y < $z) {
        return $y;
    } else {
        return $z;
    }
}

$a = 10;
$b = 12;
$c = 15;

echo 'Минимальное значение ' . getMin($a, $b, $c);
echo '<br>';
function multiply2(int &$x, int &$y)
{
    $x *= 2;
    $y *= 2;
}

$a = 5;
$b = 3;
multiply2($a, $b);
echo 'Аргументы равны ' . $a . ' и ' . $b;

echo '<br>';

function factorial(int $x)
{
    if ($x == 0 || $x == 1){
    return 1;
    }
    return $x * factorial($x - 1);
}

echo factorial(6);

echo '<br>';

function wholeNumbers(int $x)
{
    if ($x == 0) {
        echo $x . ' ';
    } else {
        wholeNumbers($x - 1);
        echo $x . ' ';
    }
}

wholeNumbers(12);
Larisa 26.10.2020 в 22:08

Спасибо поправила.

ivashkevich 28.10.2020 в 20:20

Теперь getMin(2, 2, 1) возвращает 2

Larisa 28.10.2020 в 21:28
<?php
function getMin(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return $x;
    } elseif ($y < $z) {
        return $y;
    } else {
        return $z;
    }
}

$a = 2;
$b = 2;
$c = 1;

echo 'Минимальное значение ' . getMin($a, $b, $c);

Результат: 
Минимальное значение 1
ivashkevich 29.10.2020 в 20:23

Теперь отлично

Larisa 29.10.2020 в 23:05

Спасибо!

[email protected] 25.10.2020 в 18:27

<?php
function MinX(float $x, float $y, float $c){
if ($x > $y & $x > $c){
return $x;
}elseif($y > $x & $y > $c){
return $y;
}else return $c;
}

echo 'результат: '.MinX(3, 6, 7).'<br>';
function Ahref(&$a, &$b){
$a = $a2;
$b = $b
2;
echo $a.' , '.$b;
}
$h = 4;
$l = 5;
Ahref($h,$l);
function getSumOfNumbersFromZero(int $n)
{
// Если сейчас 1, то просто возвращаем 1
if ($n == 1) {
return 1;
}

// В остальных случаях - прибавляем текущее число к сумме всех предыдущих
return $n * getSumOfNumbersFromZero($n - 1);

}

echo '<br>'.'Результат: ' . getSumOfNumbersFromZero(6).'<br>';
function numbers(int $n)
{
// Если сейчас 0, то просто возвращаем 0
if ($n == 0) {
echo 0;
return 0;
}else
{

// В остальных случаях - прибавляем текущее число к сумме всех предыдущих
echo $n. '<br>';
return numbers($n - 1);
}

}

numbers(15);
?>

ivashkevich 26.10.2020 в 13:33

Оформляйте код (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте, пожалуйста. А потом ответьте мне на этот комментарий. Проверю домашку после этого.

tnull 28.10.2020 в 08:12
<?php

//1
function min3(float $a, float $b, float $c)
{
    $min = $a < $b ? $a : $b;
    $min = $c < $min ? $c : $min;
    return $min;
}

//2
function multiply2(&$a, &$b)
{
    $a *= 2;
    $b *= 2;
}

//3
function factorial(int $n)
{
    if ($n == 0 || $n == 1)
    {
        return 1;
    }

    return $n * factorial($n - 1);
}

//4
function showNumbers(int $max)
{
    $sign = $max < 0 ? 1 : -1;

    if ($max == 0)
    {
        echo 0 . ' ';
        return;
    }

    showNumbers($max + $sign);
    echo $max . ' ';
}

//echo

//1
echo 'min3(2.5, 1.3, 10) = ' . min3(2.5, 1.3, 10) . "<br>";

//2
$x = 3;
$y = 5.5;
multiply2($x, $y);
echo "x = $x, y = $y <br>";

//3
echo 'factorial(6) = ' . factorial(6) . "<br>";

//4
echo 'showNumbers(35):' . "<br>";
showNumbers(35);
echo "<br>";

echo 'showNumbers(-23):' . "<br>";
showNumbers(-23);

?>
ivashkevich 28.10.2020 в 20:29
multiply2(&$a, &$b)

А типы аргументов где?

    $min = $c < $min ? $c : $min;
    return $min;

Можно заменить сразу на

    return $c < $min ? $c : $min;
tnull 29.10.2020 в 07:13

Типы агрументов не нужны, чтобы работало на float и на int. Так и было задумано.

ivashkevich 30.10.2020 в 20:48

Тогда ок)

ValeriiNN 29.10.2020 в 00:39

1 задание

<?php

function returnMinimuValue (float $x, float $y, float $z)
{
    if ($x<$y && $x<$z)
    {
        return $x;
    }if ($y<$x && $y<$z)
{
    return $y;
}return $z;
}

echo returnMinimuValue(3.14 , 4.4 , 4,5);

2 задание

<?php

function multiplicationByTwo (&$a, &$b)
{
    $a = $a*2;
    $b = $b*2;
}
$a = 2;
$b = 3;
 multiplicationByTwo($a , $b);
 echo $a . '<br>' . $b;

3 и 4 пока не понимаю, или не до конца, завтра на свежую голову еще раз пройду рекурсию)

ivashkevich 30.10.2020 в 20:47

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

echo returnMinimuValue(2, 2, 1);

пишет 2, что неверно

function multiplicationByTwo (&$a, &$b)

Нужно указать типы аргументов

vbd 30.10.2020 в 17:26
<?php
/*Напишите функцию, которая будет принимать на вход 3 аргумента
с типом float и возвращать минимальное значение.*/

function getMinFrom3(float $x, float $y, float $v) {
    $c = $x;
    if($y < $x) {
        $c = $y;
    }
    else if($v < $x) {
        $c = $v;
    }

    return $c;
}

echo "<br><br>";
echo getMinFrom3(3, 4, 5); echo "<br>";
echo getMinFrom3(12, 4, 5); echo "<br>";
echo getMinFrom3(12, 15, 5); echo "<br>";

//Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

function multBy2(&$x, &$y) {
    $x *= 2;
    $y *= 2;
}

echo "<br><br>";
$b = 5;
$v = 6;
multBy2($b, $v);
echo $b.' '.$v;
echo "<br>";

/*Напишите функцию, считающую факториал числа*/

function myFactorial($n) {
    if($n == 1) {
        return 1;
    }
    else {
        return $n * myFactorial($n - 1);
    }
}

echo myFactorial(3);

/*Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения.*/

function myListFromN(int $x) {
    echo ' '.$x;
    if($x == 0) {
        return $x;
    }
    else {
        myListFromN($x - 1);
    }
}

echo "<br><br>";
myListFromN(6.3);
ivashkevich 31.10.2020 в 06:35

getMinFrom3(3,2,1) возвращает 2, что неверно.

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

function myFactorial($n) {

Нужно указать типы аргументов

vbd 01.11.2020 в 12:23
function getMinFrom3(float $x, float $y, float $v) {
    $c = $x;
    if($y < $x && $y < $v) {
        $c = $y;
    }
    else if($v < $x && $v < $y) {
        $c = $v;
    }

    return $c;
}

...

function myFactorial(int $n) {...
ivashkevich 03.11.2020 в 17:57

getMinFrom3(3,2,2) - возвращает 3

[email protected] 31.10.2020 в 10:50

Первые довольно простые задания, второе из-за невнимательности много времени потратил...

КОД

<?php

function getNumberFromZero($n, $m)
{   
 echo $m . '<br>';
    if ($m == $n) {
        return $m;
    }

    return $m + getNumberFromZero($n, $m + 1);

}

$a = 5;
$b = 0;

getNumberFromZero($a, $b);

Результат
0
1
2
3
4
5

ivashkevich 31.10.2020 в 16:20

Нужно оформить код в комментарии (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте ваш комментарий, пожалуйста. А потом ответьте мне на этот комментарий. После этого проверю вашу домашнюю работу.

grantge 06.11.2020 в 14:53

Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение;

<?php 

function num(float $a, float $b, float $x)
{
    if ($a < $b && $a < $x) {
        return $a;
    } elseif ($b < $a && $b < $x) {
        return $b;
    } elseif ($x < $a && $x < $b) {
        return $x;
    }
}

num(3.1, 2.8, 1.2);

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

<?php

function sumTwo ($a, $b) 
{
    $a = $a * 2;
    $b = $b * 2;
}

sumTwo(2, 4);

Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.

<?php
function countUp($a, $b)
{
    if ($b === $a) {
        return;
    }
    echo $b;
    echo '<br>';
    countUp($a, $b + 1);
}

countUp(10, 0);
ivashkevich 06.11.2020 в 16:11

А почему всё закомментировано?

grantge 06.11.2020 в 17:12

Здравствуйте!
Исправил )

ivashkevich 08.11.2020 в 14:59
  1. А где типы аргументов?)
    num(1, 1, 1);

    выводит ошибку. По заданию эта функция должна возвращать значение, а не выводить.

  2. вообще не то, перечитайте задание, значения нужно передать по ссылке.
  3. Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L
grantge 08.11.2020 в 16:57

Спасибо!
Исправил )

ivashkevich 09.11.2020 в 19:13

Что-то не вижу исправлений. Давайте их ответом на этот комментарий

grantge 09.11.2020 в 20:27

Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение;

function num(float $a, float $b, float $x)
{
    if ($a < $b && $a < $x) {
        return $a;
    } elseif ($b < $a && $b < $x) {
        return $b;
    } elseif ($x < $a && $x < $b) {
        return $x;
    }
}

num(3.1, 2.8, 1.2);

Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.

<?php

function sumTwo ($a, $b) 
{
    $a = $a * 2;
    $b = $b * 2;
}

sumTwo(2, 4);

Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже не обойтись без рекурсии, это задание повышенной сложности.

<?php
function countUp($a, $b)
{
    if ($b === $a) {
        return;
    }
    echo $b;
    echo '<br>';
    countUp($a, $b + 1);
}

countUp(10, 0);
ivashkevich 10.11.2020 в 19:15

num(1, 1, 1) ничего не возвращает.

function sumTwo ($a, $b) 

Где типы? Где передача по ссылке?

function countUp($a, $b)

Где типы?

RosenRot 07.11.2020 в 10:27

Здравствуйте. Что я делаю не правильно? Если я хочу вывести значения.

<?php
function xVozvrat(int &$x, int &$y){
    $x = $x * 2;
    $y = $y * 2;
}
$a = 4;
$b = 8;
echo xVozvrat($a, $b);
?>
ivashkevich 08.11.2020 в 15:09

У вас функция ничего не возвращает, так что и ничего не выводится.

После ее выполнения выведите значения переменных:

$a = 4;
$b = 8;
xVozvrat($a, $b);
var_dump($a);
var_dump($b);
kan22 11.11.2020 в 16:06
<?php

//возвращает минимальное число
function getMinNumber (float $a, float $b, float $c) 
{
    if ($a < $b && $a < $c ) {
        return $a;
    }
    if ($b < $c) {
        return $b;
    }
    return $c;
}

//умножает каждый аргумент на 2
function multiply2 (int &$x, int &$y) 
{
    $x *= 2;
    $y *= 2;
}

//считает факториал
function getFactorial (int $n) 
{
    if ($n == 1) {
        return $n;
    }
    return $n + getFactorial ($n - 1);
}

//выводить на экран целые числа от 0 до переданного значения
function displayNumbersFrom0ToN (int $n) 
{
    if ($n == 0) {
        echo $n;
        return;
    }
    displayNumbersFrom0ToN ($n - 1);
    echo ', ' . $n;
}
ivashkevich 13.11.2020 в 02:32

В 2 и 3 не указали типы аргументов.

Скобка, открывающая тело функции, ставится на отдельной строке. Это стандарт.

Sinner3d 22.11.2020 в 18:04

В первом задании выполнил сравнение переменных, может код и не сильно красивый, но он работает))
К сожалению или к счастью решить 4 задание смог только таким методом, через 2 функции.

<? 
    echo '<h1> Task #1</h1>';
function maxNumber (float $x, float $y, float $z)
{
    if ($y == $z || $z == $x || $y == $x )
    {
        if ($y == $z && $z == $x && $y == $x)
            {$caseNumber = 4;}
        elseif ($x == $y){
            $caseNumber = 1;
        }
        elseif ($x == $z){
            $caseNumber = 2;
        }
        elseif ($y == $z){
            $caseNumber = 3;
        }
    }
    else 
    {
        if ($x > $y)
        {
            if ($x > $z){return $x;}
            else {return $z;}
        }
        elseif ($y > $z) 
        {
            return $y;
        }

    }
    switch ($caseNumber)
    {
        case 1: //$x == $y
            if ($x>$z) {return $x.' и '.$y;}
            else {return $z;}
                break;
        case 2: //$x == $z
            if ($x>$y) {return $x.' и '.$z;}
            else {return $y;}
                break;
        case 3: //$y == $z
            if ($x<$z) {return $y.' и '.$z;}
            else {return $x;}
                break;
        case 4: //$y == $z == $x
            {return $x.' равно '.$y.' и равно '.$z;}
            break;
    }

} 
    echo '221.5, 13.3, 51.1 -';
    echo 'максимальное число'.maxNumber(221.5, 13.3, 51.1);
    echo '<br>';
    echo '221.5, 1223.3, 51.1 -';
    echo 'максимальное число'.maxNumber(221.5, 1223.3, 51.1);
    echo '<br>';
    echo '221.5, 13.3, 5221.1 -';
    echo 'максимальное число'.maxNumber(221.5, 13.3, 5221.1);
    echo '<br>';
    echo '55.55, 13.3, 55.55 -';
    echo 'максимальное число'.maxNumber(55.55, 13.3, 55.55);
    echo '<br>';
    echo '65.5, 65.5, 13.3 -';
    echo 'максимальное число'.maxNumber(65.5, 65.5, 13.3);
    echo '<br>';
    echo '13.3, 75.5, 75.5 -';
    echo 'максимальное число'.maxNumber(13.3, 75.5, 75.5);
    echo '<br>';
    echo '85.5, 85.5, 85.5 -';
    echo 'максимальное число'.maxNumber(85.5, 85.5, 85.5);
    echo '<br>';

echo '<h1> Task #2</h1>';

function multiplicationByTwo(&$x,&$y)
{
        $x *=2;
        $y *=2;     
}
$a = 3;
$b = 5;
echo '$a ='.$a;
echo'<br>';
echo '$b ='.$b; 
echo'<br>';
multiplicationByTwo($a,$b);
echo $a;
echo'<br>';
echo $b;    
echo'<br>'; 

echo '<h1> Task #3</h1>';
    function getFactorialNumber(int $n)
{
    if ($n == 1) {
        return 1;
    }
    return getFactorialNumber($n - 1)*$n;
}

echo 'Результат: ' . getFactorialNumber(5);
echo '<h1> Task #4</h1>';
function outputNumberOfDisplayTest (int $n)
{
    if ($n == 0)
    {echo ' 0';}
    else {
    echo ' '.$n;
    return outputNumberOfDisplayTest ($n-1);}
}
echo '<h1> Task #4</h1>';

function outputNumberOfDisplay(int $n, int $max)
{

    if ($n == $max) {
        echo ' '.$max;
    }
    else {

    echo ' '.$n;
    return outputNumberOfDisplay($n+1,$max);}
}
    function portal ($x)
    {
        $max = $x;
        $n = 0;
        return outputNumberOfDisplay($n,$max);
    }
    $number = 126;
    portal($number)

?>
Sinner3d 22.11.2020 в 18:30

Посмотрел работы однокурсников, да, что то я не совсем понял как работает функция по моему.
был близок но не дошел до решения, не совсем понял что делает return, ниже пример кода

function outputNumberOfDisplayTest (int $n)
{
    if ($n == 0)
    {echo ' 0';}
    else {
    echo ' '.$n;
    return outputNumberOfDisplayTest ($n-1);}
}

позже переделал конечно на

function outputNumberOfDisplayTest (int $n)
{
    if ($n == 0)
    {echo ' 0';
    return;}

    outputNumberOfDisplayTest ($n-1);
    echo ' '.$n;
}

Но это уже после того как посмотрел ((

ivashkevich 25.11.2020 в 21:23

Ух. Что-то вы переборщили. Я просто порекомендую внимательно изучить примеры других решений к этому уроку в комментариях. Обратите внимание на ошибки.

Soundgetcha 28.11.2020 в 17:02
<?php

echo '1) Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение';
echo '<br>';
echo '<br>';

function minimalValue(float $x, float $y, float $z)
{
    return min($x, $y, $z);
}

$a = 5.5;
$b = 3.7;
$c = 9.2;

echo 'Минимальное значение: ' . minimalValue($a, $b, $c);

echo '<br>';
echo '<br>';
echo '<br>';

echo '2) Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2';
echo '<br>';
echo '<br>';

function multi2(int &$x, int &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 2;
$b = 5;

multi2( $a, $b);

echo 'Значение №1: ' . $a;
echo '<br>';
echo 'Значение №2: ' . $b;

echo '<br>';
echo '<br>';
echo '<br>';

echo '3) Напишите функцию, считающую факториал числа';
echo '<br>';
echo '<br>';

function fact(int $n)

{
    if ($n == 1) {
        return $n;
    }
    return $n * fact($n - 1);
}
$a = 7;
echo 'Результат: ' . fact($a);

echo '<br>';
echo '<br>';
echo '<br>';

echo '4) Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения';
echo '<br>';
echo '<br>';

function showNumbers(int $x, int $y)
{
    var_dump($x);
    echo '<br>';

    if ($x == $y) {
        return $x;
    }
    return showNumbers($x + 1, $y);
}
$a = 0.3;
$n = 17;

print showNumbers($a, $n);
ivashkevich 29.11.2020 в 11:52
function minimalValue(float $x, float $y, float $z)
{
    return min($x, $y, $z);
}

Решение засчитывается. А сможете самостоятельно реализовать логику, не используя готовой функции?

X-Nick 28.11.2020 в 23:04

Почему в примере возведения в степень, рекурсия заканчиванется при n==1 с возвратом основания, а не при n==0 с возвратом единички?

<?php

function power(int $x, int $n)
{
    // Если сейчас степень равна единице, то возвращаем само это число
    if ($n == 1) {
        return $x;
    }

    // В остальных случаях - умножаем число на возведённое в степень n - 1 и возвращаем его
    return $x * power($x, $n - 1);
}

echo power(2, 3);
ivashkevich 29.11.2020 в 11:57

Да, согласен, так будет правильнее. Поправил. Спасибо за замечание!

Alex-neo 04.12.2020 в 01:06
//РЕКУРСИЯ от 0 до N

<?php

function getPrint(int $n)
{ 

 // Если сейчас -1, то просто возвращаем 0

if ($n == -1) 
  { 
   return 0;
  } 

 // В остальных случаях - от заданого числа минусуем его же, но на 1 единицу меньше)

echo $n- getPrint($n - 1). '</br>'   ; 
} 

getPrint(32) ;
ivashkevich 06.12.2020 в 07:17

Всё отлично, но проблема с форматированием. Сделайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Alex-neo 04.12.2020 в 01:17

ФАКТОРИАЛ

<?php
function getFactorial(int $n)
{ 

 // Если сейчас 1, то просто возвращаем 1

if ($n == 1) 
  { 
   return 1;
  } 

 // В остальных случаях - умножаем текущее число к проиведению всех предыдущих

return $n * getFactorial($n - 1); 
} 

echo 'Результат: ' . getFactorial(9);
ivashkevich 06.12.2020 в 07:18

Всё отлично, но проблема с форматированием. Сделайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Alex-neo 04.12.2020 в 01:21

РЕКУРСИЯ: Сумма от 0 до 5

<?php
function getSumOfNumbersFromZero(int $n)
{ 

 // Если сейчас 1, то просто возвращаем 1

if ($n == 1) 
  { 
   return 1;
  } 

 // В остальных случаях - прибавляем текущее число к сумме всех предыдущих

return $n + getSumOfNumbersFromZero($n - 1); 
} 

echo 'Результат: ' . getSumOfNumbersFromZero(5);
ivashkevich 06.12.2020 в 07:19

Всё отлично, но проблема с форматированием. Сделайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L.

P.S. Скидывайте к одному уроку один комментарий, пожалуйста

Alex-neo 04.12.2020 в 01:23

Умножаем входные данные по ссылке на 2

<?php
function getX2(&$a, &$b)
{
  $a*=2;
  $b*=2;
}
$x=3;
$y=5;

getX2($x,$y);
echo $x.'</br>';
echo $y;
ivashkevich 06.12.2020 в 07:19

Не указаны типы аргументов

Alex-neo 04.12.2020 в 01:25

Вывод наименьшего из 3-х чисел типа float

<?php
function getMin(float $a, float $b, float $c)
{
    if ($a>$b && $a>$c) { 
     echo $a;
     }
    if ($b>$a && $b>$c) { 
     echo $b;
     }
    if ($c>$b && $c>$a) { 
     echo $c;
     }
}
getMin(32.5, 5.5, 4.5);
ivashkevich 06.12.2020 в 07:20

Функция по заданию не должна ничего выводить, она должна возвращать.

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

[email protected] 05.12.2020 в 13:43
<?php
function getMinValue(float $a, float $b, float $c)
{
    if ($a < $b && $a < $c) {
        return $a;
    }
    if ($b < $c) {
        return $b;
    }
    return $c;
}
echo getMinValue(1.22, 3.44, 0.11);
echo '<br>';
function multiplyByTwo(int &$x, int &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 2;
$b = 3;

multiplyByTwo( $a, $b);

echo $a;
echo '<br>';
echo $b;

function factorial(int $x)
{
    if ($x === 0) {
        return 1;
    }
    return $x * factorial($x - 1);
}
echo factorial(6);

function numbers(int $x) {
    if ($x === 0) {
        echo $x;
        return;
    }
    numbers($x - 1);
    echo ', ' . $x;
}
echo numbers(7);
ivashkevich 06.12.2020 в 07:21

Скобка, открывающая тело функции, пишется на новой строке.
В остальном отлично

zarin 11.01.2021 в 09:20
<?php

//1. Напишите функцию, которая будет принимать на вход 3 аргумента с типом float и возвращать минимальное значение.
function getMinNumberOfthree(float $x, float $y, float $z)
{
    if ($x < $y) {
        if ($x < $z) {
            return $x;
        }
        return $z;

    } elseif ($y < $z) {
        return $y;
    }
    return $z;

}

echo getMinNumberOfthree(0.12, 3.54, 1.01);
echo '<hr>';

//2. Напишите функцию, которая принимает на вход два аргумента по ссылкам и умножает каждый из них на 2.
function getMultiplicationTwoNumbersByTwo(int &$x, int &$y)
{
    $x *= 2;
    $y *= 2;
}

$a = 4;
$b = 6;

getMultiplicationTwoNumbersByTwo($a, $b);
echo $a;
echo '<br>';
echo $b;
echo '<hr>';

//3. Напишите функцию, считающую факториал числа (произведение целых чисел от единицы до переданного). Реализуйте с помощью рекурсии.
function getFactorial(int $x)
{
    if ($x === 0) {
        return 1;
    }
    return $x * getFactorial($x - 1);
}

echo getFactorial(0);
echo '<hr>';

/*4. Напишите функцию, которая будет выводить на экран целые числа от 0 до переданного значения. И да, тут тоже нужно
реализовать с помощью рекурсии (чтобы лучше с ней познакомиться, несмотря на то что вариант с циклом проще).*/
function getRowOfNumbers(int $x)
{
    if ($x === 0) {
        return $x;
    }
    return getRowOfNumbers($x - 1) . ", $x";
}

echo getRowOfNumbers(5);
echo '<hr>';

По первому упражнению увидел что два условия можно проверять вместе когда уже своё сделал, но не стал менять чтобы просто не копировать. Можно вопрос: Это обязательно делать строгое сравнение в функции если мы и так определям какой тип аргумента будет передаваться? Вначале я сделал просто сравнение (==).

ivashkevich 11.01.2021 в 19:47

Отлично.

Это обязательно делать строгое сравнение в функции если мы и так определям какой тип аргумента будет передаваться?

Необязательно, но приветствуется. Строгое сравнение гарантирует что типы совпадают.

Alexandr92 12.01.2021 в 21:42
<?php

/* Напишите функцию, которая будет принимать на вход 3 
аргумента с типом float и возвращать минимальное значение.*/
function minFloat(float $x, float $y, float $z)
{
    if ($x > $y && $x > $z) {
        return $x;
    } else if ($y > $x && $y > $z) {
        return $y;
    }
    return $z;
}

$a = 3.1;
$b = 5.5;
$c = 9.2;

echo minFloat($a, $b, $c);
echo '<br><br>';

/* Напишите функцию, которая принимает на вход два 
аргумента по ссылкам и умножает каждый из них на 2.*/
function numbersMult2(int &$a , int &$b)
{
    $a *= 2;
    $b *= 2;
}

$a = 3;
$b = 53;

numbersMult2($a, $b);

echo $a . ' and ' . $b; 
echo '<br><br>';

/* Напишите функцию, считающую факториал числа (произведение 
целых чисел от единицы до переданного). Реализуйте с помощью 
рекурсии. */

function factorial(int $a) {
    if ($a == 1) {
        return 1; 
    }
    return $a * factorial($a - 1);
}

$a = 4;
echo factorial($a);
echo '<br><br>';

/* Напишите функцию, которая будет выводить на экран целые числа 
от 0 до переданного значения. И да, тут тоже нужно реализовать с 
помощью рекурсии (чтобы лучше с ней познакомиться, несмотря на 
то что вариант с циклом проще).*/

function orderNumber(int $a, int $i) {
    if ($i == $a) {
        echo $i;
        return 0; 
    }
    echo $i . ' ';
    return orderNumber($a, $i + 1);
}
$a = 3;
$i = 0;
orderNumber($a, $i);
ivashkevich 15.01.2021 в 19:13

minFloat(1, 1, 2) возвращает 2, что неверно

Скобка, открывающая тело функции, пишется на новой строке.

[email protected] 13.01.2021 в 11:50
<?php
//1
function getMin(float $x, float $y, float $z)
{
    if ($x < $y && $z) {
        return $x;
    } elseif ($x < $y && $z) {
        return $y;
}
    return $z;
}

$a = 3.2;
$b = 8.1;
$c = 5.9;

echo 'Наименьшее число: ' . getMin($a, $b, $c);
echo '<br>';
//2
function multiplication2(&$x, &$y)
{
    $x = $x * 2;
    $y = $y * 2;
}

$a = 3;
$b = 2;

multiplication2($a, $b);

echo $a;
echo '<br>';
echo $b;
echo '<br>';
//3 
function factorial(int $n) 
{
    if ($n == 1) {
        return 1;
    }
    var_dump($n);
    echo '<br>';
    return $n * factorial($n - 1);
}
echo 'Факториал числа 5: ' . factorial(5);
[email protected] 13.01.2021 в 12:26
//4
function getNumbersFromZeroToTen(int $n)
{
    if ($n == 0) {
        return 0;
    }
    return getNumbersFromZeroToTen ($n - 1) . " $n";
}

echo 'Результат: ' . getNumbersFromZeroToTen(10);
ivashkevich 15.01.2021 в 19:16

getMin(1, 1, 2) возвращает 2, что неверно

[email protected] 30.01.2021 в 11:09
<?php
function getMin(float $x, float $y, float $z)
{
    if ($x <= $y && $x <= $z) {
        return $x;
    } elseif ($x >= $y && $z >= $y ) {
        return $y;
    }
    return $z;
}

$a = 2.6;
$b = 1.5;
$c = 0.1;

echo 'Наименьшее число: ' . getMin($a, $b, $c);
echo '<br>';
ivashkevich 01.02.2021 в 06:21

Отлично

Khrystyna 13.01.2021 в 22:54
  1. function getMin(float$x, float$y, float$z)
    {
    if ($x < $y && $x<$z) {
    return $x;
    } elseif ($y < $x) {
    return $y;
    } else {
    return $z;
    }
    }
    $a = 3.1;
    $b = 3.2;
    $c=3.3;
    echo 'Наименьшее число: ' . getMin($a, $b, $c);

Result: Наименьшее число: 3.1

  1. function multiplyBy2(int &$x, int &$y)
    {
        $x = 2 $x;
        $y = 2
    $y;
    }

  2. function factorial(int $x)
    {
        if ($x === 0) {
            return 1;
        }
        return $x * factorial($x - 1);
    }

  3. function numbers(int $x) {
        if ($x === 0) {
            echo $x;
            return;
        }
        numbers($x - 1);
        echo ', ' . $x;
    }
ivashkevich 15.01.2021 в 19:16

Нужно оформить код в комментарии (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте ваш комментарий, пожалуйста. А потом ответьте мне на этот комментарий. После этого проверю вашу домашнюю работу и отвечу на вопросы.

1stClass 15.01.2021 в 19:46

Мой вариант решения первого задания:

function minimal (float $a, float $b, float $c){
$x=0;
if ($a>$b) { $x=$b; }
        else { $x=$a; }

    if ($x>$c){ $x=$c; }   

return $x;
}
echo minimal(6.5 , 4.5 ,7.5 );
ivashkevich 17.01.2021 в 12:18

Совершенно нечитаемый код. Нужно исправить оступы и переносы строк, чтобы было как в уроках. Скобка, открывающая тело функции, пишется на новой строке.
Если передать 3, 3, 3 то вернётся 0, что неверно.

1stClass 17.01.2021 в 13:00

Поправил, при передаче 3 3 3 возвращает 3

function minimal (float $a, float $b, float $c)
{
$x=0;
    if ($a>=$b) {
    $x=$b;
    }
    else {
     $x=$a;
    }

    if ($x>=$c) {
    $x=$c;
    }

return $x;
}
echo minimal(3, 3, 3);
ivashkevich 19.01.2021 в 19:02

Всё отлично, но проблема с форматированием. Сделайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

[email protected] 16.01.2021 в 14:48
<?php

// Ищем минимальное значение
function searchMin(float $a, float $b, float $c)
{
    if ($a < $b) {
        $min = $a;
    } else {
        $min = $b;
    }
    if ($min < $c) {
        return $min;
    } else {
        return $c;
    }
}

$a = 2.5;
$b = 6.9;
$c = 7.6;
echo 'Минимальное значение' . ' ' . searchMin($a, $b, $c);
echo '<br>';

// Умножение на 2
function generateNumber(int &$x, int &$y)
{
    $x *= 2;
    $y *= 2;

}

$x = 2;
$y = 3;
generateNumber($x, $y);
echo 'Первое число:' . $x . ',' . 'Второе число:' . $y;
echo '<br>';
// Факториал

function factorial(int $n){
    if ($n === 1){
        return 1;
    } else {
        return $n*factorial($n-1);
    }
}
echo 'Факториал равен'.' '.factorial(5);
echo '<br>';

// Вывод чисел на экран

function numbers(int $f){

    if ($f === 0){
        echo $f;
        return ;
    } else{
         numbers ($f-1);
        echo ', '.$f;
    }
}
$f = 5;
echo numbers($f);
ivashkevich 17.01.2021 в 12:27

Супер! Всё правильно и с оформлением всё отлично. Только скобка, открывающая тело функции, пишется на новой строке.

function numbers(int $f){
anna.igorevna.0 21.01.2021 в 17:43

Здравствуйте! Решение последней задачи:

function numbersFromZero (int $x)
{
    if ($x==0)
        return 0;
    echo numbersFromZero ($x-1) . ", $x";
}
$x=7;
echo "Числа от 0 до $x: ";
numbersFromZero($x);
ivashkevich 23.01.2021 в 20:16

Всегда используйте фигурные скобки для блоков if-else.

Trop 22.01.2021 в 18:45
// первое задание //
<?php

function getMin( float $x, float $y, float $z)
{
    return min($x, $y, $z);
}

echo 'Минимальное число: ' . getMin( 5.3, 6.4, 7.5);
// второе задание //
<?php

function mult2(&$x, &$y)
{
    $x = $x * 2;
    $y = $y * 2;

}
$a = 7;
$b = 3;
mult2($a, $b);
echo $a, $b;

// третье //

<?php

function factorial(int $num)
{
    if ($num == 1) {
        return 1;
    } else return ($num * factorial($num - 1));
}

echo 'Фактораил: ' .  factorial(5);

// четвертое //

<?php

function numb(int $n)
{
    if ($n === 0) {
        echo $n;
        return;
    }
    numb($n-1);
    echo ',' . $n;
}

 numb(25);

Последние задание вызвало трудности - пришлось подсмотреть, понимание появилось.

ivashkevich 23.01.2021 в 20:24
function getMin( float $x, float $y, float $z)
{
    return min($x, $y, $z);
}

Ок) А самостоятельно сможете реализовать логику?

function mult2(&$x, &$y)

Потеряли типы аргументов

    } else return ($num * factorial($num - 1));

Всегда используйте фигурные скобки для блоков if-else.

Trop 23.01.2021 в 21:01
function getMin( float $x, float $y, float $z)
{
    return min($x, $y, $z);
}

Тут я её самостоятельно и реализовал. Первые три задания делал не глядя в комменты, только 4 " вызвало трудности - пришлось подсмотреть, понимание появилось."

function mult2(&$x, &$y)

Типы int упустил =(

<?php

function numb(int $n)
{
    if ($n === 0) {
        echo $n;
        return;
    }
    numb($n-1);
    echo ',' . $n;
}

 numb(25);

Не хватает скобки? Тут не понял

ivashkevich 23.01.2021 в 21:17
    if ($num == 1) {
        return 1;
    } else {
        return ($num * factorial($num - 1));
    }
Bulat 24.01.2021 в 19:08
1. Минимальное значение:
function minNum(float $a, float $b, float $c)
{
    if ($a < $b && $a < $c) {
        return $a;
    }
    elseif ($b < $c) {
        return $b;
    }
    return $c;
}

$a = 3.5;
$b = 0.1;
$c = 11.02;

echo "Из набора чисел ($a, $b, $c) минимальное значение = " . minNum($a, $b, $c);
// ответ "Из набора чисел (3.5, 0.1, 11.02) минимальное значение = 0.1"

2. Умножение на 2:
function numMultiplication(&$a, &$b)
{
    $a *= 2;
    $b *= 2;
}
$a = 7;
$b = 11;
Echo "a = $a, b = $b <br>";
numMultiplication($a, $b);
Echo "a = $a, b = $b <br>";
// "a= 7, b = 11"
// "a = 14, b = 22"

3. Факториал числа:
function numFactorial(int $a)
{
    if ($a < 1) {
        echo "Неверное исходное значение = $a <br>";
        exit;
    }
    elseif ($a == 1) {
        return 1;
    }
    else {
        return $a *= numFactorial($a - 1);
    }
}
$a = 7;
Echo 'Факториал для числа ' . $a . ' = ' . numFactorial($a) . '<br>';
// ответ "Факториал для числа 7 = 5040"

4. Вывод на экран целых чисел от 0 до переданного значения:
function numSequence(int $a)
{
    if ($a >= 0) {
        numSequence($a - 1);
        echo $a . ' ';
    }
}
$a = 7;
echo 'Последовательность чисел от 0 до ' . $a . ' = ';
echo numSequence($a) . '<br>';
// ответ "Последовательность чисел от 0 до 7 = 0 1 2 3 4 5 6 7"
ivashkevich 25.01.2021 в 19:37
    }
    elseif ($b < $c) {

elseif должен быть на той же строке, что и закрытая скобка, после пробела.

function numMultiplication(&$a, &$b)

Где типы аргументов?

    if ($a < 1) {
        echo "Неверное исходное значение = $a <br>";
        exit;
    }

Факториал нуля = 1

Vladimir96 29.01.2021 в 23:15
<?php
//возвращает минимальное значение.
function floatMin(float $a, float $b, float $c)
{
    if($a <= $b && $a <= $c) {
        return $a;
    }
    elseif ($b <= $a && $b <= $c) {
        return $b;
    }
    elseif ($c <= $a && $c <= $b) {
        return $c;
    }
}
echo floatMin(4, 4, 4);
echo "<br>";

//принимает на вход два аргумента по ссылкам и умножает каждый из них на 2
function multiplyingByTwo(int &$a, int &$b)
{
    $a = $a * 2;
    $b = $b * 2;
}
$x = 2;
$y = 4;
multiplyingByTwo($x,$y);
echo $x . " ";
echo $y;
echo "<br>";

//факториал через рекурсию
function factorial(int $a)
{
    if($a == 1) {
        return 1;
    }

    return $a * factorial($a - 1);
}
echo factorial(4);
echo "<br>";

//вывод целых чисел через рекурсию
function outputOfIntegers(int $a)
{
    if($a == 0) {
        return 0;
    }
    outputOfIntegers($a - 1);
    echo $a . " ";
}

outputOfIntegers(10);

Если я использовал вместо === с привидений типов ==, то это считается как ошибка?

ivashkevich 01.02.2021 в 06:18
    }
    elseif ($b <= $a && $b <= $c) {

должно быть

    } elseif ($b <= $a && $b <= $c) {
    if($a == 1) {

=>

    if ($a == 1) {

Если я использовал вместо === с привидений типов ==, то это считается как ошибка?

Нет, но более строгое сравнение предпочтительнее. У вас же гарантированно здесь совпадают типы, поэтому лучше использовать его.

Egor.Ka 02.02.2021 в 17:44

Здравствуйте! Вот, вроде все работает)

<?php

//Напишите функцию, которая будет принимать на вход 3 аргумента с типом
//float и возвращать минимальное значение.
function getMin(float $x, float $y, float $z)
{
    if ($x < $y && $x < $z) {
        return $x . '</br>';

    } elseif ($y < $x && $y < $z) {
        return $y . '</br>';

    }

    return $z . '</br>';

}

$a = 2;
$b = 2;
$c = 1;

echo 'Минимальное значение:' . getMin($a, $b, $c);

//Напишите функцию, которая принимает на вход два аргумента по ссылкам и
//умножает каждый из них на 2.
function argX2(int &$x1, int &$y1)
{
    $x1 = 2 * $x1;
    $y1 = 2 * $y1;

    return $x1 . " " . $y1;
}

$a1 = 4;
$b1 = 2;

echo 'Ответ:' . argX2( $a1, $b1) . '</br>';

//Напишите функцию, считающую факториал числа (произведение целых
//чисел от единицы до переданного). Реализуйте с помощью рекурсии.
function factor(int $x3)
{
    if ($x3 <= 0) {
        return 1;
    }
    return $x3 * factor($x3 - 1);
}

$a2 = 5;

echo 'факториал равен:' . factor($a2) . '</br>';

//Напишите функцию, которая будет выводить на экран целые числа от 0 до
//переданного значения. И да, тут тоже нужно реализовать с помощью
//рекурсии (чтобы лучше с ней познакомиться, несмотря на то что вариант с
//циклом проще).

function intOUT(int $x4)
{

    if ($x4 > 0) {
        echo intOUT($x4 - 1);
    }

    return $x4;
}

$a3 = 8;

echo   intOUT($a3) . '</br>';
?>
ivashkevich 04.02.2021 в 07:46

getMin(2, 2, 1) возвращает 2, что неверно.

 function argX2(&$x1 , &$y1)

Где типы аргументов? В остальных то же самое.

Скобка, открывающая тело функции, пишется на новой строке.

Проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L

Egor.Ka 08.02.2021 в 17:30

Типы добавил, оформление исправил, но что-то я не понял, почему вы сказали, что getMin(2, 2, 1) возвращает 2, у меня возвращает 1, если я вас правильно понял![описание картинки](https://php.zone/uploads/img/20210208904983d14487252b0562b629f34f417ff96e165a0cb2c33cb84fe441832ee9cd.PNG)

IlyaPHP 05.02.2021 в 15:24

Артем, подскажи, пожалуйста, а как написать функцию, чтобы получить первые несколько слов из предложения?
Я использую такую конструкцию, чтобы получить первое слово:

function my_get_cat( $description ) {
    $description = explode( ' ', $description );
    return reset( $description );
}

Было: "мужская куртка синяя на замке"
Стало: "мужская"
reset получает первое слово. А если мне нужно два первых слова или три?

ivashkevich 08.02.2021 в 05:52

Проходи курс дальше, там будут циклы.

Имена функций пишутся в camelCase. У аргументов нужно указывать типы.

Zamir 04.03.2021 в 21:36
function minOfThree(float $x, float $y, float $z): float
{
    $min = $x;

    if ($y < $min) {
        $min = $y;
    }

    if ($z < $min) {
        $min = $z;
    }

    return $min;
}

function multiplyArgumentsByTwo(int &$x, int &$y): void
{
    $x *= 2;
    $y *= 2;
}

function factorial(int $n): int
{
    return $n ? $n * factorial($n - 1) : 1;
}

function displayFromZeroToN(int $n): void
{
    if ($n >= 0) {
        displayFromZeroToN($n - 1);
        echo $n;
    }
}
ivashkevich 10.03.2021 в 08:10

Отлично

serega19860511 12.04.2021 в 21:34

function get_Min_Value(float $a, float $b, float $c) {
    if ($a > $b && $a > $c) {
        return 'наибольшее '.$a;
    }elseif($b > $a && $b > $c) {
        return 'наибольшее '.$b;
    }
    return 'наибольшее '.$c;
}

echo get_Min_Value(122.5, 04.6, 16.8). '<br>';

$num1 = 2;
$num2 = 3;
function myFunc(int &$x, int &$y) {
   $x *= 2;
   $y *= 2;
}
myFunc($num1, $num2);
echo $num1.'<br>';
echo $num2;
```С рекурсией вроде понятно, но вот эти всякие факториалы, вот эти слова пугают
ivashkevich 13.04.2021 в 07:28

Что с именем функции?)

Возвращает не то что нужно, перечитайте задание.

Скобка, открывающая тело функции, пишется на новой строке. Да и в целом с форматированием беда какая-то. Нужно сделать как в уроках с соблюдением отступов и переносов.

Ничего сложного в факториале нет. Просто загуглите что это такое.

serega19860511 13.04.2021 в 21:10

Ок, спасибо поправил имя функции и отформатировал с помощью шторма, а в первой функции перепутал наименьшее с наибольшим.

<?php
function getMinNumbers(float $a, float $b, float $c)
{
    if ($a < $b && $a < $c) {
        return 'наименьшее число ' . $a;
    } elseif ($b < $a && $b < $c) {
        return 'наименьшее число ' . $b;
    }
    return 'наименьшее число ' . $c;
}

echo getMinNumbers(2.5, 4.6, 1.8);
echo '<br>';

$num1 = 2;
$num2 = 3;
function myFunc(int &$x, int &$y)
{
    $x *= 2;
    $y *= 2;
}

myFunc($num1, $num2);
echo $num1 . '<br>';
echo $num2;
echo '<br>';

function getFactorial(int $x)
{
    if ($x === 0) {
        return 1;
    }
    return $x * getFactorial($x - 1);
}

echo getFactorial(5);
echo '<br>';

function getAnInteger(int $x)
{
    if ($x === 0) {
        echo $x;
        return;
    }
    getAnInteger($x - 1);
    echo ' ,' . $x;

}

getAnInteger(5);
ivashkevich 17.04.2021 в 20:49

Функция должна возвращать число а не строку.

getMinNumbers(1, 1, 2) выдает неправильный результат

shark741 04.02.2022 в 22:30

Добрый вечер Артём, подскажи пожалуйста, как написать (решить правильно) рекурсивную функцию для палиндрома (если делать через функцию strrev - понятно, но, если делать рек

shark741 05.02.2022 в 15:53

Немного подумав, такое решение

<?php
function palindrom(string $str)
{
if(strlen($str)<=1) { // выход из рекурсии 
return true;
}
if($str[0] != $str[-1]) {
return false;
}
return palindrom(substr($str, 1, -1)); // срезку сделал через substr()
}
echo palindrom(amasdama); // даёт 0 
?>
SoVan90 05.05.2022 в 08:46

1я задача.

function minimum (float $x, float $y, float $z)
{
    if ($x < $y && $x < $z)
    {
        return $x;
    }elseif ($y < $x && $y < $z){
        return $y;
    }else{
        return $z;
    }
}
echo 'Результат ' . minimum (25, 12, 10);
SoVan90 05.05.2022 в 08:56

Вторая задача.

<?php
function twoLinks(float &$x, float &$y)
{
    $x *= 2;
    $y *= 2;

}

$x = 2;
$y = 3;

twoLinks($x, $y);
echo '<br>';
echo $x;
echo '<br>';
echo $y;

?>
SoVan90 05.05.2022 в 09:01

3я задача

<?php
function fuckTorial(int $n)
{
    if ($n == 1)
    {
        return 1;
    }
    return $n * fuckTorial($n - 1);
}

echo fuckTorial(3);

?>
SoVan90 05.05.2022 в 09:53

4я задача

<?php
function fromZeroToNumber(int $n)
{
    if ($n == 0)
    {
        return 0;
    }
   return  fromZeroToNumber($n - 1) . $n;

}
echo fromZeroToNumber(3);
ivashkevich 17.05.2022 в 13:56

А вы как комментарий сюда добавили? Они же закрыты к этому уроку.

SoVan90 18.05.2022 в 06:37

После домашнего задания тык по слову "Комментарии".

ivashkevich 02.06.2022 в 15:43

Понял, спасибо. В PHP фигурная скобка ставится на той же строке что и условие.

Логические задачи с собеседований