Пример решения. 9. Вывести на экран массив случайных чисел "ёлочкой"
Primary tabs
Задача из этого списка
<?php /*Задайте случайным образом массив из N элементов. * Выведите его на экран "ёлочкой" */ function create_array ($n) // Создание массива случайных чисел { for ($i = 0; $i < $n; $i++) { $arr[$i] = rand(); } return $arr; } function printer_tree ($tree) // Вывод "ёлочкой" { $level_1 = array ($tree[0]); // Массив первой строки echo $level_1[0], "<br>"; // печатается $tree = array_slice ($tree, 1); // и сокращает $tree на самого себя for ($j = 0; $j <= count($tree); $j++){ for ($i = 0; $i <= count($level_1); $i++) { // Массив второй строки, равный длине первого массива +1 $level_2[$i] = $tree[$i]; echo $level_2[$i], " "; // печатается } $level_1 = $level_2; $tree = array_slice ($tree, count($level_2)); // и сокращает $tree на самого себя echo "<br>"; } } $result = create_array(36); foreach ($result as $k => $v) { echo $v, " "; } echo "<p>"; printer_tree($result);
Вроде заморочено, но получилось так.
- Log in to post comments
- 18709 reads
melisa
Mon, 04/24/2017 - 11:05
Permalink
альтернативный вариант
с помощью переменной $n, считающей количество элементов новой строки
vedro-compota
Mon, 04/24/2017 - 13:44
Permalink
Пример решений
Рекомендую рассмотреть два, пожалуй, наиболее простых решения этой задачи (синтаксис Паскаль) и реализовать оба на php (вникнув в смысл).
_____________
матфак вгу и остальная классика =)
melisa
Tue, 04/25/2017 - 09:14
Permalink
альтернативное решение с помощью доп. переменных
альтернативное решение с помощью доп. переменных, считающих длину строки
vedro-compota
Tue, 04/25/2017 - 10:40
Permalink
замечания
хорошо, но:
-- скорее это всё же, "длина очередной строки" (неточный комментарий)
-- всё же забыть про изменение счетчика в for сложнее. (это, опять же, концептуальная рекомендация, ну и for использует меньше строк кода).
_____________
матфак вгу и остальная классика =)
melisa
Tue, 04/25/2017 - 11:53
Permalink
Спасибо за уточение
В данном случае использован цикл while с ручным счётом в связи с тем, что при каждом следующем обращении к вложенному циклу \$i должно иметь присвоенное ранее значение. Цикл for каждый раз обнуляет значение счётчика, а значит, в каждой новой строке будет печататься \$tree заново, с элемента [0].
vedro-compota
Tue, 04/25/2017 - 11:57
Permalink
счетчик тут k
у вас счетчиком является k и вы его тоже обнуляете до начала вложенного цикла:
-- т.е. вы вполне можете сделать цикл for с этим счетчиком.
_____________
матфак вгу и остальная классика =)
melisa
Tue, 04/25/2017 - 12:13
Permalink
получилось так
vedro-compota
Tue, 04/25/2017 - 12:48
Permalink
то есть вы добавили проверку:
то есть вы добавили проверку:
чтобы вовремя оборвать очередную выводимую строку ёлочки -- значит она была нужна и в цикле while.
Кстати, там выводится предупреждение о выходе за диапазон (именно по этой причине):
_____________
матфак вгу и остальная классика =)
math2
Mon, 04/24/2017 - 13:22
Permalink
Подправил немного первый
Подправил немного первый вариант
math2
Mon, 04/24/2017 - 13:29
Permalink
В обоих скриптах присутствует
В обоих скриптах присутствует неточность. Если мы будем выводить массив из 38 элементов,
то последние два элемента этого массива не будут выведены.
melisa
Mon, 04/24/2017 - 14:36
Permalink
действительно, не выводятся
действительно, не выводятся первые два элемента каждой строки (начиная с 3-й), если за ними не следует вывод последующих элементов.
math2
Mon, 04/24/2017 - 16:03
Permalink
Достаточно изменить условие в
Достаточно изменить условие в одном цикле. Итерация будет выполнена, если в массиве есть числа для вывода.
melisa
Mon, 04/24/2017 - 16:19
Permalink
Спасибо!
Спасибо!