Ошибка "Функция ничего не возвращает"
Этот код работает правильно в программе. Но при выводе в стороннюю консоль выдает ошибку "Функция ничего не возвращает". Что это значит? Вроде выведена, в программной консоли, на которой пишу отображает, на сайте отображает..
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
Внутри этой функции вам нужно сделать следующее:
- Заведите переменную: $sum = 0; - сумма чисел делящихся на 5
- В цикле от 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);
Ответы (2 шт):
- А зачем у вас там цикл for ? И почему он такой:
for (; $sum <= $n; $sum++)
вообще-то он у вас выполняется однократно, если число делиться на 5 или 3, или выполняется n раз, если число не делиться, но не могу понять зачем?
- Ваша функция выводит (echo ...) сообщения о том, что переданный параметр делиться на 5 или на 3 или на оба из них, но ничего не возвращает.
Возвращает - это когда результат выполнения (например выводимое сообщение) передается в конструкцию вида return <результат> и далее этот результат обрабатывается в месте обращения (вызова) к функции.
- А что такое "сторонняя консоль"? Судя по
вы хотите это вывести в html, но ... Куда?
Полагаю, вы решаете непростую задачу 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)