PHP. Реальная практика в полях №1 . "Вывод в Ёлочку"
Primary tabs
Задача: Вывести любое слово в "ёлочку" . Например, cлово "WORLD!!!" вывести нужно вот так :
W
OR
LD!
!!
Как можно решить задачу :
Представить слово в виде массива.
С помощью двух циклов сделать следующее :
На первой строке вывести элемент массива с номером [0]
На второй строке [1][2]
На третьей строке [3][4][5]
И т.д.
И оборвать выполнение кода , когда количество символов закончиться.
Вот код :
<?php // Вывод в ёлочку : // Присваиваем переменной $a строку "ABCDEFGHIJKLMNOPQRSTUVWXYZ" : $a="ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; // Присваиваем переменной $arr массив , который мы создали из строки с помощью функции str_split () : $arr = str_split ($a) ; // Присваиваем начальные значения переменным : $j=0; $e=0; // Используем два цикла первый внешний цикл while нужен для контроля вывода символов , // второй for отвечает за вывод в строку : while ( $j < count($arr) ) // Пока выражение истинно делаем цикл { for ( $k = 0; $k <= $j ; $k++ ) // Выводим в строку значения символов { echo $arr[$e]; $e++; } $j++ ; echo "<BR>"; // Если вы вовремя не оборвёте выполнение цикла , то вылезет ошибка : Undefined offset: 26 in C:\www\test\index.php on line 46 // Это потому, что выводится пустой массив // Обрываем выполнение циклов if ($e > count($arr) ) { break ; } }
Cсылка : http://fkn.ktu10.com/?q=node/7179
Здесь мы будем решать эти задачи средствами PHP . Решение пишется в виде конкретной функции или конкретного кода решения задачи .
+ Задача № 1. Вывести на экран сообщение «Hello World!»
Решение :
echo "Hello World!" ;
# echo выводит любую написанную информацию в кавычках
Задача № 2. Вывести на экран три числа в порядке, обратном вводу
Решение :
$a[1]=1; $a[2]=2; $a[3]=100; echo $a[3]," ",$a[2], " ",$a[1] ;
+ Задача № 3. Вывести на экран квадрат введенного числа
Решение :
$a=3; echo pow($a,2); # возводим с помощью мат.функции в степень 2 (может быть любая степень)
+ Задача № 4. Получить реверсную запись трехзначного числа
Решение :
$a= 347 ; $c = $a % 10 ; $d = ($a-$c)/ 10; $e=$d % 10 ; $f=($d-$e) /10; echo $c*100+$e*10+$f ;
Задача № 5. Посчитать количество единичных битов числа
Условные операторы .
http://fkn.ktu10.com/?q=node/7189
- Log in to post comments
- 11467 reads
math2
Sat, 09/05/2015 - 12:46
Permalink
"ёлочка"
fgh,
в приведённом здесь решении задачи про вывод в "ёлочку" есть недочёты.
Пусть \$a == "AB". Тогда count(\$arr) == 2.
В массиве \$arr есть только элементы \$arr[0] и \$arr[1].
\$j == 0 и \$e == 0.
Начинаем выполнять цикл while.
\$j меньше count(\$arr), так как $0 \lt 2$.
Далее цикл for выводит \$arr[0].
Теперь \$e == 1.
Далее выполняется \$j++ ; Теперь \$j == 1.
Переходим на новую строку.
(\$e > count(\$arr) ) является ложью, и из цикла мы не выходим.
\$j меньше count(\$arr) , и начинается следующая итерация цикла while.
Теперь \$j == 1, поэтому цикл for должен вывести \$arr[1] и \$arr[2].
Можно исправить программу, добавив в условия обоих циклов
vedro-compota
Mon, 09/07/2015 - 09:47
Permalink
условие
условие
во внутреннем цикле является лишним.
Объясните почему.
_____________
матфак вгу и остальная классика =)
math2
Mon, 09/07/2015 - 12:15
Permalink
Если Вы уберёте условие
Если Вы уберёте условие
то скрипт, конечно, будет выполнен, но с замечаниями:
PHP Notice: Undefined offset: 26 in /home/vic/Desktop/gip.php on line 19
PHP Notice: Undefined offset: 27 in /home/vic/Desktop/gip.php on line 19
Может случиться так, что при выводе последнего ряда "ёлочки" длины j
в строке для вывода останется меньше символов, чем j, а цикл for будет выводить
все j символов, даже если в массиве \$arr их осталось меньше, чем j.
vedro-compota
Mon, 09/07/2015 - 19:25
Permalink
+1
math2, спасибо за замечание!
=> всё хорошо, а вот моя "оптимизация" оказывается не охватывает указанный вами случай)
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 09/07/2015 - 09:48
Permalink
http://fkn.ktu10.com/?q=node
это битая ссылка - исправьте. она указывает на скрипт создания нового топика.
_____________
матфак вгу и остальная классика =)