Перейти к содержимому



РЕШЕНИЯ задач на PHP для начинающих

#21 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143
0

Отправлено 22 Январь 2011 - 23:57

Задача №13 ("Перевертыш", работа со строками)

Вводиться слово, выводиться его перевертыш. Например: "перевертыш" => "шытревереп".


Решение задачи:
<?php
isset($_POST['ok']) ? '' : exit; // если нажали кнопочку ...

$re = $_POST['re'];

if (!empty($re)) // если ввели строку (заполнили форму)
{
for ($i=strlen($re);$i>=0;$i--) { // перебираем символы строки справа на лево
$good[] = $re[$i]; // и заноси их в массив
}
foreach ($good as $value) echo $value; // шытревереп шан мидовыВ
}
?>

Немного дополню... В PHP есть функция для данной задачи - strrev(). Т.е., задачу можно решить, по сути одной строкой ;) :
<?php

echo strrev('перевертыш'); // шытревереп

?>

  • 0


#22 juniorspecialistphp

juniorspecialistphp
  • Пользователь
  • 7 сообщений
  • Репутация: 0

Отправлено 07 Февраль 2011 - 19:11

Задача №16 (Случайная строка)
Итак сам код, я использовал его для реггера ЯХУ, передаем функции число и по указанному числу получаем строку, нужной длины. Я использовал лишь латиницу и цифры.
	function generate_login_unic($len) {
$r = '';
$allowedSymbols = array('b','a','c','e','d','o','f','i','g','u','h','o','j','e','k','o','l','e','m','u','n','o','p','a','q','e','r','o','s','i','t','u','v','e','w','a','x','o','y','i','z','1','2','3','4','5','6','7','8','9');
for ($i = 0; $i < $len; $i++) {
$rand = array_rand($allowedSymbols);
if ($i % 2 == 0) {
while($rand % 2 != 0) {
$rand = array_rand($allowedSymbols);
}
$r .= $allowedSymbols[$rand];
} else {
while($rand % 2 == 0) {
$rand = array_rand($allowedSymbols);
}
$r .= $allowedSymbols[$rand];
}
}
return $r;
}

  • 0

#23 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 08 Февраль 2011 - 14:06

Задача №19(работа с массивами)
Постановка - имеем массив например - array(1,2,3,8,14,89,45). Получить массив array(45,89,14,8,3,2,1). Необходимо сделать перестановку.
Использовать нельзя
Конструкцию подобную такой - $element=array[1];
Нельзя использовать функции пхп по перестановки значений в массиве, типа array_push или array_pop.
Также нельзя добавлять элементы массива и удалять их.

Решается одной функцией array_reverse(), если, конечно, ее можно использовать по условиям задачи ;)
<?php
$arr = array(1, 2, 3, 8, 14, 89, 45);
echo "<pre>";
print_r($arr);
echo "</pre>";

$res = array_reverse($arr);
echo "<pre>";
print_r($res);
echo "</pre>";
?>

  • 0


#24 juniorspecialistphp

juniorspecialistphp
  • Пользователь
  • 7 сообщений
  • Репутация: 0

Отправлено 09 Февраль 2011 - 14:18

Так в том то и дело, что нельзя использовать функции для работы с массивами, я в условии, не стал все их перечислять.. так написал парочку ;)
  • 0

#25 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 10 Февраль 2011 - 15:07

Так в том то и дело, что нельзя использовать функции для работы с массивами, я в условии, не стал все их перечислять.. так написал парочку ;)

Если без них, тогда можно так:
<?php
$arr = array(1, 2, 3, 8, 14, 89, 45);
echo "<pre>";
print_r($arr);
echo "</pre>";

$count = count($arr) - 1;

for($i = $count; $i >= 0; $i--){
$newarr[] = $arr[$i];
}

echo "<pre>";
print_r($newarr);
echo "</pre>";
?>

  • 0


#26 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 10 Февраль 2011 - 21:40

Если без них, тогда можно так:

<?php
$arr = array(1, 2, 3, 8, 14, 89, 45);
echo "<pre>";
print_r($arr);
echo "</pre>";

$count = count($arr) - 1;

for($i = $count; $i >= 0; $i--){
$newarr[] = $arr[$i];
}

echo "<pre>";
print_r($newarr);
echo "</pre>";
?>

А как же запрет "Использовать нельзя Конструкцию подобную такой - $element=array[1];"?
  • 0

#27 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 10 Февраль 2011 - 22:04

А как же запрет "Использовать нельзя Конструкцию подобную такой - $element=array[1];"?

Ну, если и так нельзя, то моя фантазия наверное пасует ;)
P.S. Мне аж интересно тогда глянуть решение автора задачи.
  • 0


#28 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 11 Февраль 2011 - 11:59

matroskin8,
может что-нибудь вроде такого?
<?php
$arr = array(1, 2, 3, 8, 14, 89, 45);
echo "<pre>";
print_r($arr);
echo "</pre>";

$count = count($arr) - 1;

foreach($arr as $key => $value){
$arr[$count-$key] = $value;
}

echo "<pre>";
print_r($arr);
echo "</pre>";
?>

Что интересно, работает даже без использования второго массива.
  • 0

#29 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 11 Февраль 2011 - 12:16

Тоже вариант ;)
Подождем еще вариант автора, если конечно автор появится )
  • 0


#30 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Февраль 2011 - 14:13

yury, особенность интересная.
Получается, что массив, который мы используем в параметрах цикла foreach и тот массив, что используется в теле foreach друг с другом никак не связаны. Выходит массив, переданный в параметры цикла буферизуется и не изменяется.
Замечу, что с циклами, такая особенность только для foreach, Если сделать такую же конструкцию с использование for, while, и т.д., то мы получим ожидаемый результат.

Внимание: Цикл foreach оперирует не исходным массивом, а его копией. Это означает, что любые изменения, которые вносятся в массив, не могут быть "видны" из тела цикла. Что позволяет, например, в качестве массива использовать не только переменную, но и результат работы какой-нибудь функции, возвращающей массив (в этом случае функция будет вызвана всего один раз - до начала цикла, а затем работа будет производиться с копией возвращенного значения).


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru