Ошибка "Функция ничего не возвращает"

Рейтинг: -1Ответов: 2Опубликовано: 08.02.2023

Этот код работает правильно в программе. Но при выводе в стороннюю консоль выдает ошибку "Функция ничего не возвращает". Что это значит? Вроде выведена, в программной консоли, на которой пишу отображает, на сайте отображает..

function task17($n)
{
$sum = 0;
for (; $sum <= $n; $sum++) {
    if ($n % 5 == 0 && $n % 3 == 0) {
        echo 'Делится и на 5 и на 3</br>';
        break;
    }elseif ($n % 5 == 0){
        echo 'Делится на 5</br>';
        break;
    }elseif ($n % 3 == 0) {
        echo 'Делится на 3</br>';
        break;
    }
  }
}
task17(20);

Изменила код на такой, сообщение о том что функция ничего не выводит осталось.

function task17($n)
{
$sum = 0;
for ($i = 0; $i <= $n; $i++) {
    $sum += $i;
    if ($n % 5 == 0 && $n % 3 == 0){
        return 'Делится и на 5 и на 3</br>';
        }elseif ($n % 5 == 0){
        return 'Делится на 5</br>';
        }elseif ($n % 3 == 0){
        return 'Делится на 3</br>';
    }
}
return $sum;
}
echo task17(15);

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

function task17($n)
{
$sum = 0;
for ($i = 0; $i <= $n; $i++) {
    if ($n % 5 == 0 && $n % 3 == 0){
        echo $n - 1;
        break;
        }elseif ($n % 5 == 0){
        echo $n+$sum;
        break;
        }elseif ($n % 3 == 0){
        echo $n;
        break;
    }
  }
}
task17(15);

Прикладываю саму задачу, цитирую:

Создайте функцию task17 с одним параметром $n

Внутри этой функции вам нужно сделать следующее:

  1. Заведите переменную: $sum = 0; - сумма чисел делящихся на 5
  2. В цикле от 0 до $n (включая) сделайте следующее (должно выполнится только одно из условий):
  • если число делится без остатка на 3 – выведите это число, с помощью оператора echo (каждое число на отдельной строке)
  • если число делится без остатка на 5 – прибавьте это число к переменной $sum
  • если число делится и на 5 и на 3 – то вычтите из $sum единицу

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

В итоге приняло такой вид функции(правильный вид):

function task17($n){
$sum = 0;
for ($i=0; $i<=$n; $i++) {
    if ($i % 5 == 0 && $i % 3 == 0) 
        $sum--;
    elseif ($i % 3 == 0) 
       echo "Делится на 3"."\r\n"; 
    elseif ($i % 5 == 0) 
       $sum += $i; 
}
return $sum;           
}

echo task17(20);

Ответы

▲ 0Принят

Полагаю, вы решаете непростую задачу FizzBuzz (название может меняться).

Ваша функция может возвращать строку примерно так (я не знаю php, но код работает):

function task17($n){
    if ($n % 5 == 0 && $n % 3 == 0) {
        return 'Делится и на 5 и на 3';
    }elseif ($n % 5 == 0){
        return 'Делится на 5';
    }elseif ($n % 3 == 0) {
        return 'Делится на 3';
    }else return  strval($n);
}

for ($i=1; $i <= 17; $i++) {
    echo task17($i)."\r\n";;
}

ОК, задание появилось. Методично выполняем то, что просили (onlinegdb):

function task17($n){
    $sum = 0;
    for ($i=0; $i<=$n; $i++) {
        if ($i % 5 == 0 && $i % 3 == 0) 
            $sum--;
        elseif ($i % 3 == 0) 
           echo "Делится на 3"."\r\n"; 
        elseif ($i % 5 == 0) 
           $sum += $i; 
    }
    return $sum;           
}

echo task17(20);

Даёт результат 33 (5+10+20-1-1)

▲ 0
  1. А зачем у вас там цикл for ? И почему он такой:

for (; $sum <= $n; $sum++)

вообще-то он у вас выполняется однократно, если число делиться на 5 или 3, или выполняется n раз, если число не делиться, но не могу понять зачем?

  1. Ваша функция выводит (echo ...) сообщения о том, что переданный параметр делиться на 5 или на 3 или на оба из них, но ничего не возвращает.

Возвращает - это когда результат выполнения (например выводимое сообщение) передается в конструкцию вида return <результат> и далее этот результат обрабатывается в месте обращения (вызова) к функции.

  1. А что такое "сторонняя консоль"? Судя по
    вы хотите это вывести в html, но ... Куда?