Чат Telegram
Группа ВКонтакте
Новый комментарий


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);

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

vadymbilyi@gmail.com 30.09.2018 в 00:04

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

prinzplanloser0514@gmail.com 24.09.2019 в 10:24

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

ivashkevich 24.09.2019 в 10:53

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

prinzplanloser0514@gmail.com 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. Дальше кода нет. Работа скрипта завершается.

vadymbilyi@gmail.com 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 и вернемся на уровень выше, где в функцию была передана единица. После вызова функции с передачей в неё нуля идет строка, которая выведет единицу. И так далее. Если сейчас нет понимания - ничего страшного. Тема рекурсии не сразу дается. Дождитесь следующего урока, там точно станет понятнее, обещаю =)

mik05bk@gmail.com 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

Всё верно =)

humanidis@gmail.com 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 при определении переменных? И нужно добавить приведение к типу в аргументах функции. А в целом - алгоритм верный.

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

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

kolesnikow_y@mail.ru 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 в конце не имеет смысла. Уберите, пока никто не увидел =)

vityan97@gmail.com 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 на последней строке функции необязателен, достаточно просто вызывать её, ничего не возвращая.
nemo.dont@gmail.com 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

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

ArtemijeKA 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 не используются подчеркухи. Потому что выражение сначала вычисляется, а затем выводится. Самым первым будет вычислено выражение для нуля, оно же и выведется первым.

ArtemijeKA 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

Да, конечно)

Serhio 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

Норм)

7vs13@inbox.ru 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 - некорректное имя.

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

lig7771991@list.ru 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

Отлично!

fapchat2@gmail.com 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.

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

fapchat2@gmail.com 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 завершает работу функции и возвращает то, что справа от него.

volodia.pavloff201343@gmail.com 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

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

volodia.pavloff201343@gmail.com 02.02.2019 в 11:49

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

ivashkevich 03.02.2019 в 23:40

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

rashik-2009@yandex.ru 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

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

rashik-2009@yandex.ru 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

Отлично!

babls2332@gmail.com 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 берется в фигурные скобки. Где уже нахватались кода без них?
babls2332@gmail.com 08.03.2019 в 18:57

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

ivashkevich 08.03.2019 в 19:00

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

babls2332@gmail.com 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. Исправленная функция для вычисления факториала - ОК.
s-kiryak@meta.ua 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 не будет запятой.
s-kiryak@meta.ua 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

Красава

expert12@yandex.ru 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)

anmanist@gmail.com 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. Отлично
anmanist@gmail.com 25.04.2019 в 09:18

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

ivashkevich 25.04.2019 в 12:14

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

pejma2001@mail.ru 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.

pejma2001@mail.ru 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

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

pejma2001@mail.ru 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

Отлично

pejma2001@mail.ru 27.04.2019 в 15:49

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

ivashkevich 29.04.2019 в 11:36

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

pejma2001@mail.ru 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

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

krollik1000000@gmail.com 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.

krollik1000000@gmail.com 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. Используйте для оформления кода самую первую кнопку в окне написания комментариев.

Gnev1992@mail.ru 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

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

Gnev1992@mail.ru 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

Так - огонь

Gnev1992@mail.ru 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

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

Gnev1992@mail.ru 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 раза. Перечитайте про передачу по ссылке.

Gnev1992@mail.ru 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

Теперь ок

Gnev1992@mail.ru 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.

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

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

denis_vsalda@mail.ru 29.07.2019 в 00:15

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

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

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

denis_vsalda@mail.ru 02.08.2019 в 18:27

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

ivashkevich 02.08.2019 в 20:39

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

lenapetrowa92@gmail.com 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

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

romaartemov1999@gmail.com 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 всегда должны начинаться с маленькой буквы.

romaartemov1999@gmail.com 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

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

prinzplanloser0514@gmail.com 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

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

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

prinzplanloser0514@gmail.com 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

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

zuxarevaalina88@gmail.com 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. Всё ок
zuxarevaalina88@gmail.com 08.10.2019 в 14:15

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

ivashkevich 08.10.2019 в 17:18

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

zuxarevaalina88@gmail.com 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

anton-gogo@mail.ru 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

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

anton-gogo@mail.ru 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)
Вообще ничего не возвращает.

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

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

anton-gogo@mail.ru 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 пишется тоже с маленькой.

Используйте в верхнем левом углу редактора комментария кнопку "код", чтобы звездочка не пропадала.

bsuirpas@gmail.com 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!!!

В домашнем задании нет ничего похожего на то, что вы сделали. Для чего это здесь?

bsuirpas@gmail.com 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, а ищет максимальное. Ошибка именования.

nedjes@mail.ru 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);
      };

      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);
     ?>
ivashkevich 11.12.2019 в 17:45

А где отступы? Почему всё на одном уровне? Поправьте, так невозможно проверять.

Логические задачи с собеседований