[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Преобразование в массив
Millenium
Добрый день..понимаю вопрос детский, но вкупить не могу
вот получаю двоичный код числа:
$bin = decbin ( $stepen);
теперь мне надо пробежаться по полученной переменной bin (там нолики и единички и сделать кое-какие вычисления)
мне нужно преобразовать строку( я как понял decbin() возрачает сроку) в массив? или можно как то циклом пробежаться не преобразовывая
на примере: вызвал decbin()-->получил допустим "1001" как мне работать с каждым числом по отельности 1,0,0,1 , а не с одним 1001?



Спустя 6 минут, 33 секунды (8.11.2011 - 14:58) m4a1fox написал(а):
Ну я вижу только один пока что выход! Это вытаскивать при помощи php только цифры по порядку. Сначала - первую цифру, потом второю и так далее..... о можно в цикл завертеть! Прикольно! Ща сделаем! Погоди чуток!

Спустя 1 минута, 39 секунд (8.11.2011 - 14:59) Michael написал(а):

Спустя 9 секунд (8.11.2011 - 15:00) linker написал(а):
$str = decbin($stepen);
$len = strlen($str);
for($i = 0; $i < $len; ++ $i)
{
$bit = (int)$str[$i];
...
// тут делаем вычисления
}

Спустя 4 минуты, 3 секунды (8.11.2011 - 15:04) m4a1fox написал(а):

$data = "1001";
for($i=0; $i<count(str_split($data)); ++$i){
echo $data[$i].'<br />';
}

Спустя 4 минуты, 13 секунд (8.11.2011 - 15:08) Millenium написал(а):
Michael
Вот думал что есть такая функция и искал ее, но почему-то не нашел:) спасибоlinker
Спасибо большое!
m4a1fox
huh.gif

Блин все так просто, чтож я такой осел..)

Спустя 1 минута, 52 секунды (8.11.2011 - 15:10) m4a1fox написал(а):
Millenium
Да не за что!!!!! Правда спасибо в карму не положишь!!!! rolleyes.gif rolleyes.gif rolleyes.gif rolleyes.gif

Спустя 1 минута, 43 секунды (8.11.2011 - 15:11) Millenium написал(а):
И еще такой момент: выводит лучше в самой фунции или лучше вне ее?
допустимтфункция возращает переменную $a
за функцией я смогу ее вывести echo?

Спустя 6 минут, 50 секунд (8.11.2011 - 15:18) m4a1fox написал(а):
Millenium
Лучше сразу делай в функции а выводи уже что хочешь получить в итоге!

Спустя 16 минут, 55 секунд (8.11.2011 - 15:35) Millenium написал(а):
$bin = decbin ( $stepen);
$len = strlen($bin);
$bit= str_split($len);
echo "test - " . $bit . "<br>\n";
выводит : "test - Array "
Не так вывожу?

Спустя 6 минут, 54 секунды (8.11.2011 - 15:42) m4a1fox написал(а):
А что должно в итоге получиться????

Спустя 48 секунд (8.11.2011 - 15:43) Winston написал(а):
Вот так тогда
echo "test - " . print_r($bit, 1) . "<br>\n"; 

Спустя 2 минуты, 24 секунды (8.11.2011 - 15:45) Millenium написал(а):
m4a1fox
ввожу число 4, вывести должен 100
Winston
пробую

Спустя 3 минуты, 44 секунды (8.11.2011 - 15:49) Millenium написал(а):
Winston
ввожу 4 выводит
Двоичное представление - 100
test - Array ( [0] => 3 )
т.е выводит кол-во элементов а не массив

Спустя 53 секунды (8.11.2011 - 15:50) m4a1fox написал(а):
decbin 

надо почитать!

Спустя 3 минуты, 11 секунд (8.11.2011 - 15:53) Millenium написал(а):
мой косяк..
$len = strlen($bin); выводит кол-во символов, теперь стало нормально
test - Array ( [0] => 1 [1] => 0 [2] => 0 )

Спустя 39 секунд (8.11.2011 - 15:54) Winston написал(а):
$num = '132456789';
echo $bin = decbin($num); // Здесь будет строка111111001010010000101010101
$bin = str_split($bin); // Разбиваем на массив
echo '<pre>'.print_r($bin,1).'</pre>'; // Выводим массив

В результате получим массив
Свернутый текст
Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 1
[6] => 0
[7] => 0
[8] => 1
[9] => 0
[10] => 1
[11] => 0
[12] => 0
[13] => 1
[14] => 0
[15] => 0
[16] => 0
[17] => 0
[18] => 1
[19] => 0
[20] => 1
[21] => 0
[22] => 1
[23] => 0
[24] => 1
[25] => 0
[26] => 1
)

К любому элементу мы можем обратится указав нужный индекс
Например
echo $bin[2]; // Выведет 1
echo $bin[6]; // Выведет 0

Спустя 23 минуты, 23 секунды (8.11.2011 - 16:17) m4a1fox написал(а):
Millenium
Получилось?

P.S.
Цитата
К любому элементу мы можем обратится указав нужный индекс

А если не известно кол-во эллементов массива?
Тогда только через цикл for следует!

Спустя 16 минут, 7 секунд (8.11.2011 - 16:33) Millenium написал(а):
m4a1fox
получилось
echo "Вывод массива двоичного представления - " . print_r($bit, 1) . "<br>\n";
test - Array ( [0] => 1 [1] => 0 [2] => 0 )
вопрос еще тупее как вызвать написанную функцую?

Спустя 37 секунд (8.11.2011 - 16:34) m4a1fox написал(а):
Millenium
biggrin.gif
Цитата
вопрос еще тупее как вызвать написанную функцую?

Через цикл!

P.S. А дайка код весь сюда, я попробую пошаманить!? И опиши, что в итоге ты хочешь видеть?!

Спустя 8 минут, 45 секунд (8.11.2011 - 16:43) Millenium написал(а):
m4a1fox
ок, сейчас допишу и скину.. подскажите по-ста как вызвать

Спустя 7 минут, 35 секунд (8.11.2011 - 16:50) m4a1fox написал(а):
Millenium
Цитата
ок, сейчас допишу и скину.. подскажите по-ста как вызвать

Да не могу я сказать ничего не видя кода!.... код нужен!

Спустя 37 минут, 20 секунд (8.11.2011 - 17:27) Millenium написал(а):
Есть форма, в которой вводится число и степень, нужно вывести:
1) результат через стандартную функцую pow()
2) вывести результат возведения в степень через мою функцую быстрого возведения в степень в коде VC()
куда мне ее вставить, чтоб коректно вызывалось, мозгов нехватает логически довести до ума
<form method="post" action="">       
Быстрое возведение в степень:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить..."> </form>


<?php

if ($_SERVER["REQUEST_METHOD"] == "POST")
{ $chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);

if($chislo and $stepen)
{
$ccc = VC($chislo, $stepen);
// Вызвали функцию
$result = pow($chislo, $stepen);
$bin = decbin ( $stepen);
//$len = strlen($bin);
$bit= str_split($bin);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
echo "Двоичное представление - " . $bin . "<br>\n";
echo "Вывод массива двоичного представления - " . print_r($bit, 1) . "<br>\n";
//echo '<pre>'.print_r($bin,1).'</pre>'; // Выводим массив
echo "Результат быстрого - " . $r . "<br>\n";
}


}

function VC($chislo, $stepen) // быстрое возведение в степень
{ $n =$chislo;
$r = 1;
if( $stepen == 0 ) return $s;
if ( $stepen == 1) return $stepen;
$bin = decbin ( $stepen);
$bit= str_split($bin);
$len = strlen($bin);
if($bit[$len-1] ==1) return $r =$n;
for ($i=$bit[$len-2]; $i>=0; $i--)
{
$n=$n*$n;
if ($bit[$i]) $r =$r*$n;
}
return $r;
}



?>

Спустя 1 минута, 13 секунд (8.11.2011 - 17:29) Millenium написал(а):
сильно не вините, делал на быструю руку..пока вы тут:)

Спустя 16 минут, 38 секунд (8.11.2011 - 17:45) m4a1fox написал(а):
Millenium
Так?

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST")
{ $chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);

if($chislo and $stepen)
{
$ccc = VC($chislo, $stepen);
// Вызвали функцию
$result = pow($chislo, $stepen);
$bin = decbin ( $stepen);
//$len = strlen($bin);
$bit= str_split($bin);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
echo "Двоичное представление - " . $bin . "<br>\n";
echo "Результат быстрого - " . VC($chislo, $stepen) . "<br>\n";
}


}

function VC($chislo, $stepen) // быстрое возведение в степень
{ $n =$chislo;
$r = 1;
if( $stepen == 0 ) return $s;
if ( $stepen == 1) return $stepen;
$bin = decbin ( $stepen);
$bit= str_split($bin);
$len = strlen($bin);
if($bit[$len-1] ==1) return $r =$n;
for ($i=$bit[$len-2]; $i>=0; $i--)
{
$n=$n*$n;
if ($bit[$i]) $r =$r*$n;
}
return $r;
}



?>



Спустя 8 минут, 25 секунд (8.11.2011 - 17:54) Millenium написал(а):
m4a1fox
Данные:
Число - 2
Степень - 2
Результат - 4
Двоичное представление - 10
Вывод массива двоичного представления - Array ( [0] => 1 [1] => 0 )
Результат быстрого - 16
вывод, спасибо! теперь мой косяк фукция коряво работе, буду разбираться..

Спустя 1 минута, 57 секунд (8.11.2011 - 17:56) m4a1fox написал(а):
Честно! не могу математически представить, что нужно сделать! Хочу помочь но не понимаю sad.gif Давай функцию править! Что она должна делать? Давай на примере! Вот к примеру, я ввел число 5 степень - 8. Какой должен быть вывод?

Спустя 3 минуты, 43 секунды (8.11.2011 - 17:59) m4a1fox написал(а):
Что такое результат быстрого?

Спустя 3 минуты, 59 секунд (8.11.2011 - 18:03) m4a1fox написал(а):
Что должна вернуть функция???? Двузначный код каждой цифры?

Мож так

<form method="post" action="">
Быстрое возведение в степень:<br /><br />
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value="" /><br /><br />
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" /><br /><br />
<input
type="submit" value="Выполнить..." name="send" />
</form>






<?php

if (isset($_POST['send'])) {
$chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);

if($chislo && $stepen) {
echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . pow($chislo, $stepen) . "<br>\n";
echo "Двоичное представление - " . decbin ($stepen) . "<br>\n";
echo "Результат быстрого - " . VC(pow($chislo, $stepen), decbin ($stepen)) . "<br>\n";
}
}


function VC($chislo, $stepen) { // быстрое возведение в степень
$n =$chislo;
$r = 1;
if( $stepen == 0 ) return $s;
if ( $stepen == 1) return $stepen;
$bin = decbin ($stepen);
$bit= str_split($bin);
$len = strlen($bin);
if($bit[$len-1] ==1) return $r =$n;
for ($i=$bit[$len-2]; $i>=0; $i--)
{
$n=$n*$n;
if ($bit[$i]) $r =$r*$n;
}
return $r;
}
?>

Спустя 5 минут, 47 секунд (8.11.2011 - 18:09) Millenium написал(а):
m4a1fox
это тоже самое , что и обычное возведение в степень (функция pow())
т.е нужно без вызова стандартной функции, написать функцую возведения в степень (использовать алгоритм быстрого возведения в степень)
описание по которому я делаю :http://www.opita.net/node/125

Спустя 1 минута, 7 секунд (8.11.2011 - 18:10) m4a1fox написал(а):
Millenium
Простите конечно, но для чего???? Есть же стандартная функция???

Спустя 6 минут, 24 секунды (8.11.2011 - 18:17) m4a1fox написал(а):

<?php

if (isset($_POST['send'])) {
$chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);

if($chislo && $stepen) {
echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . pow($chislo, $stepen) . "<br>\n";
echo "Двоичное представление - " . decbin ($stepen) . "<br>\n";
echo "Результат быстрого - " . VC(pow($chislo, $stepen), decbin ($stepen)) . "<br>\n";
}
}


function VC($chislo, $stepen) { // быстрое возведение в степень
$n =$chislo;
$r = 1;
if( $stepen == 0 ) return $s;
if ( $stepen == 1) return $stepen;
$bin = decbin ($stepen);
$bit= str_split($bin);
$len = strlen($bin);
if($bit[$len-1] ==1) return $r =$n;
for ($i=$bit[$len-2]; $i>=0; $i--)
{
$n=$n*$n;
if ($bit[$i]) $r =$r*$n;
}
return $r;
}
?>

Спустя 10 минут, 14 секунд (8.11.2011 - 18:27) Millenium написал(а):
m4a1fox
это не мои загоны:) я всегда пользуюсь тем, что есть
требования такие

Спустя 1 минута, 57 секунд (8.11.2011 - 18:29) m4a1fox написал(а):
Millenium
Цитата
это не мои загоны:) я всегда пользуюсь тем, что есть
требования такие

Да против ничего не имею! Просто интересно было?! Последний код возвращает из функции то, что и встроенная pow()! так должно быть?

Спустя 3 минуты, 24 секунды (8.11.2011 - 18:32) Millenium написал(а):
m4a1fox
да

Спустя 2 минуты, 18 секунд (8.11.2011 - 18:35) m4a1fox написал(а):
Millenium
Вопрос решен?

Спустя 6 минут, 7 секунд (8.11.2011 - 18:41) Millenium написал(а):
m4a1fox
да, спасибо Вам огромное!
в PHP нет отладчика? как в Си или java , чтоб можно было поставить брэйки посмотреть , что в переменных в функции?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.