Помогите тупому человеку (мне) 1)понять логику 2)понять почему у меня на выходе абра-кадабра
элементарная фунция... Код
class my_method {
function sum ($c) {
for ( $i = 0; $i <= $c; $i++ ) {
$sum = $sum + $i;
}
echo $sum;
}
}
$obj = new my_method();
$obj -> sum(10);
Смысл этой функции СУММИРОВАТЬ ВСЕ ЧИСЛА ОТ 0 ДО 10.
В учебнике получается на выходе цифра: 55
Не могу понять строку $sum = $sum + $i ;
1)По логике вещей я присвоил $sum, десятку... Тоесть цикл должен застопориться сразу же с первого раза (тут возможно я чего-то не понял по этому и прошу объяснить)
2)Редактор ошибок в оформлении не находит, а при запуске браузера выходит сообщения об ошибке строки, которую я указал выше и сплошные ВАРНИНГи (тоже непонятно потому, что код переписывал из учебника, а не сочинял сам)
Спасибо заранее!
Другие языки программирования и технологии
вопрос по PHP. Не понимаю логики в функции
почему десятку? давай распишем по-русски что происходит.
ты передаёшь 10, как параметр своей функции класса my_method. т. е. при входе в функцию значение переменной $c = 10. идём дальше, дальше у нас цикл по переменной $i, которая а) изначально равна нулю, б) на каждой итерации цикла увеличивается на 1 в) это будет продолжаться, пока её значение не станет равным 11 (потому что помним, что $c = 10, и для выхода из цикла $i должно стать строго больше значения $c, т. е. 10)
на первой итерации $i = 0, предполагаем, что $sum = 0 -> в теле цикла получаем $sum = 0 + 0 = 0
вторая итерация: $i = 1, $sum остался равным 0 -> $sum = 0 + 1 = 1
третья итерация: $i = 2, $sum после предыдущей операции стал равен 1 -> $sum = 1 + 2 = 3
четвёртая $i = 3, $sum = 3 -> $sum = 3 + 3 = 6
пятая $i = 4, $sum = 6 -> $sum = 6 + 4 = 10
и т. д. пока $i не станет равным 11, тут произойдёт выход из цикла и вывод значения echo $sum
по алгоритму как-то так.
теперь по ошибке. могу только предположить, ибо с php не дружу совсем. возможно в $sum изначально хранится мусор и её перед использованием надо инициализировать, т. е. перед циклом вставить $sum = 0, хотя полагаю что это маловероятно, т. к. php интерпретатор со всеми вытекающими.. .
второй мой вариант кроется в одинаковом названии функции класса и переменной, и echo выводит не результат выполнения операций в блоке for, а какую-нибудь служебную информацию о методе sum
попробуй по-другому обозвать что-то одно из них, например метод обзови summ...
больше предположений, к сожалению, нет.
ты передаёшь 10, как параметр своей функции класса my_method. т. е. при входе в функцию значение переменной $c = 10. идём дальше, дальше у нас цикл по переменной $i, которая а) изначально равна нулю, б) на каждой итерации цикла увеличивается на 1 в) это будет продолжаться, пока её значение не станет равным 11 (потому что помним, что $c = 10, и для выхода из цикла $i должно стать строго больше значения $c, т. е. 10)
на первой итерации $i = 0, предполагаем, что $sum = 0 -> в теле цикла получаем $sum = 0 + 0 = 0
вторая итерация: $i = 1, $sum остался равным 0 -> $sum = 0 + 1 = 1
третья итерация: $i = 2, $sum после предыдущей операции стал равен 1 -> $sum = 1 + 2 = 3
четвёртая $i = 3, $sum = 3 -> $sum = 3 + 3 = 6
пятая $i = 4, $sum = 6 -> $sum = 6 + 4 = 10
и т. д. пока $i не станет равным 11, тут произойдёт выход из цикла и вывод значения echo $sum
по алгоритму как-то так.
теперь по ошибке. могу только предположить, ибо с php не дружу совсем. возможно в $sum изначально хранится мусор и её перед использованием надо инициализировать, т. е. перед циклом вставить $sum = 0, хотя полагаю что это маловероятно, т. к. php интерпретатор со всеми вытекающими.. .
второй мой вариант кроется в одинаковом названии функции класса и переменной, и echo выводит не результат выполнения операций в блоке for, а какую-нибудь служебную информацию о методе sum
попробуй по-другому обозвать что-то одно из них, например метод обзови summ...
больше предположений, к сожалению, нет.
1. Это базовый прием, называется аккумулятор.
В $sum аккумулируется (накапливается) конечное значение: в каждом прохождении цикла к $sum прибавляется новое значение $i: 0, 1, 2,...10. Ну а в $sum получается 0,1, 3, 6,...55. Последнее значение и выводится.
И желательно:
- не давать разным вещам одинаковые имена (у тебя и функция, и переменная - sum);
- перед циклом обнулять аккумулятор (т. е. добавить $sum=0; в самое начало функции) ; тут это не особо важно, но иногда дает крайне неприятные и непонятные, особенно для новичка, результаты.
2. Тут телепатов нет - мы не знаем, какую именно ошибку и какие варнинги ты получаешь. Многое может зависеть от версии php и настроек сообщений об ошибках. Не сказал, какая ошибка - не скажем, как исправить.
В $sum аккумулируется (накапливается) конечное значение: в каждом прохождении цикла к $sum прибавляется новое значение $i: 0, 1, 2,...10. Ну а в $sum получается 0,1, 3, 6,...55. Последнее значение и выводится.
И желательно:
- не давать разным вещам одинаковые имена (у тебя и функция, и переменная - sum);
- перед циклом обнулять аккумулятор (т. е. добавить $sum=0; в самое начало функции) ; тут это не особо важно, но иногда дает крайне неприятные и непонятные, особенно для новичка, результаты.
2. Тут телепатов нет - мы не знаем, какую именно ошибку и какие варнинги ты получаешь. Многое может зависеть от версии php и настроек сообщений об ошибках. Не сказал, какая ошибка - не скажем, как исправить.
нет, ты присвоил 10 той переменной, которая будет последней в цикле, а суммировать начинает с $i = 0;
Мугидин Уллуев
Здесь функция, а не массив
Верь больше учебникам. Их составляют такие же грамотеи.
Варнинги нужно указывать, в них вся суть и весь ответ. А так алгоритм поверхностно выглядить нормально.
Sum обнули перед For.
Строка $sum = $sum + $i значит что ты к результату Sum добавил i и сохранил сумму в Sum. Если сум изначально не обнулена в некоторых компиляторах может вылетать бред.
Варнинги нужно указывать, в них вся суть и весь ответ. А так алгоритм поверхностно выглядить нормально.
Sum обнули перед For.
Строка $sum = $sum + $i значит что ты к результату Sum добавил i и сохранил сумму в Sum. Если сум изначально не обнулена в некоторых компиляторах может вылетать бред.
Похожие вопросы
- Вопрос по PHP
- Вопрос по PHP к кодерам. Как сделать поле в форме обратной связи обязательным?
- Вопрос по PHP и HTML, прав я или ошибаюсь...
- Один вопрос оп PHP&MySQL
- Вопрос по PHP.
- Вопрос по PHP. Что нужно для программирования на PHP?
- Вопрос по PHP. Какие в php преимущества и недостатки между использованием кукисов и сессий?
- Вопрос по PHP
- Вопрос по php
- Вопрос по php
Только соглашусь, для понятности можно ввести переменную и в конце сделать присвоение Sum = Result например.