Подскажите плиз почему у меня максимальное число не выводит на экран в данном случае это "0" а выводит -500? В интервале 2 элементов! 0 и -500. Показывает что максимальное число -500 но это не так максимальное число будет 0. Объясните пожалуйста в чем именно подвох? Объясните без кода а объясните словами плиз. я понимаю что проблема в условии но не могу понять в чем именно! $arr =[5,1,70,900,300,0,-500,-300,-100,1,]; $n =2; $max =0; $left =5; $right =0; $right = $n + $left; for($i = $left; $i < $right; $i++){ if($max < $arr[$i]|| $max ==0) $max = $arr[$i]; } echo $max;
Прочитайте еще раз вопрос задачи) Как вы собираетесь искать с помощью функции max максимальное число в диапазоне заданных значений?)
@AlexandrS, наверное учебная задачка --- Добавлено --- @LevCheb, ты нафига второе сравнение в условие ветвления добавил? --- Добавлено --- Короче считай, что ты написал: если max==0, то max=-500. И при поиске максимума переменную max инициализируют минимально возможным (либо еще меньшим) значением или значением первого элемента диапазона (и обход в этом случае начинают обычно со второго).
и что тогда нужно сделать получается поменять условие?я к сожаления чуток не понял что вы имели ввиду во втором написанном вами текстом.(
PHP: <?php $arr =[5,1,70,900,300,0,-500,-300,-100,1,]; $max = 0; for($i = 0; $i < 10; $i++){ echo ($max < $arr[$i]) ? 'true' : 'false'; echo "<br>"; } echo "<br>"; echo "<br>"; for($i = 0; $i < 10; $i++){ echo ($max < $arr[$i] || $max==0) ? 'true' : 'false'; echo "<br>"; } ?>
Говорю, проблемы у тебя в коде тут и тут: В первом фрагменте нужно присваивать -100500, а во втором нафиг убрать сравнение вместе со связкой ИЛИ. --- Добавлено --- P.S. И обращайся (средствами форума) к тому, с кем ты разговариваешь. Я не отслеживаю темы в песочнице этом разделе.
@LevCheb вот еще наглядно: С || $max ==0 PHP: <?php $arr =[5,1,70,900,300,0,-500,-300,-100,1,]; $n =2; $max =0; $left =5; $right =0; $right = $n + $left; for($i = $left; $i < $right; $i++){ if($max < $arr[$i] || $max ==0){ echo "$max < {$arr[$i]} or $max == 0 ::: TRUE "; echo "<br>"; $max = $arr[$i]; }else{ echo "$max < {$arr[$i]} or $max == 0 ::: FALSE "; echo "<br>"; $max = $arr[$i]; } } ?> Без || $max ==0 PHP: <?php $arr =[5,1,70,900,300,0,-500,-300,-100,1,]; $n =2; $max =0; $left =5; $right =0; $right = $n + $left; for($i = $left; $i < $right; $i++){ if($max < $arr[$i]){ echo "$max < {$arr[$i]} or $max == 0 ::: TRUE "; echo "<br>"; $max = $arr[$i]; }else{ echo "$max < {$arr[$i]} or $max == 0 ::: FALSE "; echo "<br>"; $max = $arr[$i]; } } ?> В первом варианте возвращается последнее значение записанное в цикле в переменную $max т.к. всё true Во втором варианте, возвращается ноль, только этот ноль не из массива, а тот, который был изначально присвоен переменной $max до цикла. (т.е. строка #6) т.к. в массиве в условиях было false
@AlexandrS, ТС не смог норм. объяснить появление второго сравнения. Нафиг уделять ЭТОМУ столько внимания? Лучше обрати внимание на вторую указанную мной ошибку --- Добавлено --- Или ты думаешь, что у него осн. задача – расписать поведение с учетом этого бредового сравнения?
Я думаю ТС просто экспериментирует. Т.к. если ему нужно выдернуть максимальное значение из заданного диапазона, то, как бы тут array_slice() + max() PHP: <?php $arr =[5,1,70,900,300,0,-500,-300,-100,1,]; echo max(array_slice($arr, 5, 2)); ?>
@AlexandrS, я тебе про это уже писал: Человек походу учится основам, а не использованию стандартных для пыха ф-ций.
Ну так когда начинал, тоже много интересного писал, да и сейчас бывает , а потом, когда узнавал, что есть уже готовая функция, или что-то проще, удивлялся - "А чЁ так можно было?!" PS: Одни бесконечно в поисках менторов, другие просто начинают, ставить себе какие-то задачки и начинают их решать и с этого начинают свое познание и изучение. Иногда полезно наступить на грабли, чтоб узнать как они работают
Т.е. если бы сразу узнал про ф-цию, забил бы на алгоритм нахождения максимума? У нас на форуме уже имеется один такой «специалист»
Нет. Если бы я изначально не знал, а в процессе узнал, то всё-равно нашел бы решение, но пользовался бы уже тем, что нашел (т.е. то что уже есть в функционале, не велосипедом ). В любом случае нахождение решений это уже практика и познание.
Пока что обучение идёт без освоения готовых функций PHP. --- Добавлено --- По этому и стараюсь понять как все это работает
Учитесь отлаживать, выводя промежуточные шаги, а ещё лучше - настроив XDebug 0 как начальное значение не очень хорош в данном случае. Поскольку у нас не типизированный язык, мы можем воспользоваться значением null и операцией ===. Поскольку в массиве могут быть числа, которые заведомо меньше нуля, и тогда алгоритм будет всегда возвращать ноль PHP: <?php $arr =[5,1,70,900,300,0,-500,-300,-100,1,]; $n =2; $max = null; $left =5; $right = $n + $left; for($i = $left; $i < $right; $i++){ if($max === null || $max < $arr[$i]) $max = $arr[$i]; } echo $max; ?> Смотри в моей подписи, как вставляют код на форум
@mkramer Спасибо большое за помощь) Не могли бы более развернуто объяснить почему при значение null программа работает?
Так уже объяснили - срабатывало при значении -500 часть условия с нулём. А null - совершенно особое значение, null !== 0 --- Добавлено --- P.S. обрати ещё внимание на строгое равенство, в php два оператора проверки на равенство