Задача решена для любых видов последовательностей.
<?php
/* Последовательность является строго монотонной , если каждый
последующий член последовательности строго больше предыдущего или
строго меньше предыдущего
- это нестрогое определение монотонной последовательности , по сравнению с
определением в математическом анализе. */
// Как нам записать последовательность на языке php ?
// Используем функцию array (1,4,435,234432,435345,435345543,...., other figure,...etc...)
// Создаём массив чисел
$massive = array (5,4,3,2,1,0,2);
// Можем вывести для лучшего понимания хода
// решения , количество элементов в массиве
echo count($massive) ,"<BR>" ;
// Можете с помощью echo вывести любой элемент массива .
// Нумерация идёт от нуля .
// echo $massive [3] ;
// Выведется число 12 из ряда .
// Далее используем функцию foreach -функцию перебораэлементов массива
$i=0;
while ( ($massive [$i]>$massive[$i+1]) )
{
$i++;
if ($i==count($massive)-1)
{
break;
}
echo "<BR>","Значение счётчика: ",$i ,"<BR>";
}
echo "<BR>","Чему равно \$i=" , $i ,"<BR>";
if ($i == count($massive)-1)
{
echo "Последовательность строго монотонна убывающая" ;
}
else
{
// Может быть ,что цикл не выполнится ни разу -значит ,
// последовательность может быть возрастающей
// Обнуляем счётчик , для выполнения цикла еще раз
$i=0;
while ( ($massive [$i]<$massive[$i+1]) )
{
// Здесь хорошо виден принцип последовательности
// Имеется ввиду , сначала выполняется инкремент
// счётчика , потом выполнение условия
// echo $massive [$i] ,"<BR>" ;
$i++;
if ($i==count($massive)-1)
{
break;
}
echo "<BR>","Значение счётчика: ",$i ,"<BR>";
}
if ($i == count($massive)-1)
{
echo "Последовательность строго монотонна возрастающая" ;
}
else
/* Если в последовательности идёт возрастание , а потом резко
убывание или убывание , а потом резко возрастание ,
значит последовательность
не монотонная. Хочу заметить - если речь
идёт в задаче о строгой монотонности , то одинаковые
элементы не должны присутствовать
в последовательности , иначе
последовательность - не строго монотонная*/
{
echo "Последовательность немонотонна " ;
}
}
?>
vedro-compota
Thu, 10/08/2015 - 10:25
Permalink
Если задача решена на ваш
Если задача решена на ваш взгляд, то ставьте в начале, до кода:
а если не решена то:
_____________
матфак вгу и остальная классика =)
fgh
Thu, 10/08/2015 - 12:43
Permalink
Хорошо. Хотел сделать - не
Хорошо. Хотел сделать - не сделал. Задача решена теперь . Правильно ли всё с оформлением задачи ? Табулирование выполнено правильно ?
vedro-compota
Wed, 02/15/2017 - 19:44
Permalink
лучше улучшить)
Оптимальнее обходить массивы так:
$high = true; // предположим, что возрастает foreach($massive as $key => $val) { if ($massive [$key]>$massive[$key+1]) { // встретили убывание? $high = false; // не возрастает break; } } if ($high) { echo 'монотонно возрастает!'; }_____________
матфак вгу и остальная классика =)
fgh
Thu, 02/16/2017 - 07:38
Permalink
Решение задачи с помощью оператора перебора элементов массива
<?php $massive = array (1,2,3,4,5,6,7); $high = true; // предположим, что только возрастает // Далее используем функцию foreach -функцию перебораэлементов массива foreach($massive as $key => $val) { // Здесь перебор идёт по парным ключам (индексам) массива if ($massive [$key]>$massive[$key+1]) { //а на самом деле убывает // присваиваем переменной $high значение ложь $high = false; // echo $key,"и",$key+1,"<BR>"; /* Если условие истинно, то мы прекращаем перебор элементов массива оператором break (он прерывает работу всего цикла*/ break; } } if ($high==true){ echo "Posledovatelnost vozrastaet"; } else{ // Если не возрастает, значит либо немонотонна либо только убывает, нужно определить,что именно foreach($massive as $key => $val) { if ($massive [$key]>$massive[$key+1]) { $high=true; } else { $high=false; // Прекращаем работу всего цикла перебора элемента массива foreach break; } } if ($high==true){ echo "Posledovatelnost ybyvaet"; } else { echo "Posledovatelnost ny vozrastaet ny ybyvaet"; } } ?>vedro-compota
Thu, 02/16/2017 - 18:42
Permalink
Предлагаю обратить внимание
Предлагаю обратить внимание вот на этот фрагмент из вашего решения:
// Если не возрастает, значит либо немонотонна, либо только убывает, нужно определить,что именно foreach($massive as $key => $val) { if ($massive [$key]>$massive[$key+1]) { $high=true; } else { $high=false; // Прекращаем работу всего цикла перебора элемента массива foreach break; } }Что бы я заметил:
foreach($massive as $key => $val) { if ($massive [$key]>$massive[$key+1]) { $high=true; } else { $high=false; // Прекращаем работу всего цикла перебора элемента массива foreach break; } }+ тут же имеет смысл завести отдельную переменную - так как high означает "вверх", а мы тут проверяем убывание, то есть нам нужно использовать переменную с другим именем (дополнительную), либо же в обоих циклах использовать одну переменную, но с более нейтральным именем, например flag(флаг, признак), например используем отдельную переменную (имена переменных важны, так как они несут информационную нагрузку):
$low = true;// признак убывания foreach($massive as $key => $val) { if ($massive [$key]<$massive[$key+1]) { // если всё же не убывает $low=false; break; // Прекращаем работу всего цикла перебора элемента массива foreach } } if ($low) { echo('монотонно убывает'); } else { // (с учетом того, что проверка на монотонное возрастание уже не удалась) echo('не мононотонна!'); }_____________
матфак вгу и остальная классика =)
fgh
Fri, 02/17/2017 - 07:59
Permalink
Прошу Вас проверить, как
Прошу Вас проверить, как записан код, с учётом всех сделанных вами замечаний. Были сделаны следующие изменения: 1) Использованы функции, на выходе которых, мы имеем логическое выражение; 2) Изменен стиль записи кода; 3) Изменены комментарии к похожим строчкам кода.
<?php /************************************** Вводим пользовательские функции определения возрастания и убывания*******************/ //Определение функции на возрастание function funct_high() { // Далее используем функцию foreach -функцию перебораэлементов массива foreach($massive as $key => $val) { // Здесь перебор идёт по парным ключам (индексам) массива if ($massive [$key]>$massive[$key+1]) { //Условие убывания верно // присваиваем переменной $flag значение ложь // Важно !!! учесть, что в здесь переменная $flag не глобальна!!! а имеет смысл только в данной функции funct_high() $flag = false; /* Если условие истинно, то мы прекращаем перебор элементов массива оператором break (он прерывает работу всего цикла for*/ break; } } // конструкция return возвращает значение логической переменной flag return $flag; } // Определение функции на "ни возрастание ни убывание" function funct_less() { foreach($massive as $key => $val) { // Здесь перебор идёт по парным ключам (индексам) массива if ($massive [$key]<$massive[$key+1]) { // $flag = true; // Если условия выполняется, то значение переменной $flag - снова истинно, это означает,что последовательность не возрастает ни убывает /* Так если условие истинно, то мы прекращаем перебор элементов массива оператором break (он прерывает работу всего цикла*/ break; } } return $flag; } /* ******************************************Сама задача ******************************************************* */ // Начальное логическое условие $flag=true; // Считаем, что $flag=true, т.к. последовательность возрастает (предполагаем изначально) $massive = array (1,2,3,4,5,61,7); // Функция должна выводить значение флага, которое записывается в переменную $a $a = funct_high(); // Проверка условия флага if ($a == true){ echo "Posledovatelnost vozrastaet"; } else{ // Если не возрастает, значит либо монотонно убывает либо немонотонна $b = funct_less(); if ($b == false){ echo "Posledovatelnost ybyvaet"; } else { echo "Posledovatelnost ny vozrastaet ny ybyvaet"; } } ?>math2
Sun, 02/26/2017 - 14:16
Permalink
Привет!
Привет!
Запустил я этот скрипт в консоли.
Выполняется он не без замечаний, и ответ выдаёт неверный:
vedro-compota
Sun, 02/26/2017 - 21:23
Permalink
и то верно
ну да...массив-то в функцию не передаётся...))
_____________
матфак вгу и остальная классика =)