Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Генерация всех возможных комбинаций.

Сообщения:  [1-10]   [11-19] 

 
 автор: Yuriev   (11.03.2010 в 15:20)   письмо автору
 
   для: simbel   (11.03.2010 в 15:11)
 

<?
// Это сам код
$mas[] = array();
for (
$i 0$i 256$i++) {
    
$octat sprintf('%08s'decbin($i));
    
$octat str_replace('0''nou '$octat);
    
$octat str_replace('1''yes '$octat);
    
$octat trim($octat);
    
$mas[$i] = explode(' '$octat);
}

// А это для проверки
for ($i 0$i 256$i++) {
    for (
$j 0$j 8$j++) {
        echo 
$mas[$i][$j].' ';
    }
    echo 
'<br />';
}
?>

  Ответить  
 
 автор: Loki   (11.03.2010 в 15:12)   письмо автору
 
   для: Loki   (11.03.2010 в 15:04)
 

for($i=0; $i<256; $i++)
конечно же:)

  Ответить  
 
 автор: simbel   (11.03.2010 в 15:11)   письмо автору
 
   для: Loki   (11.03.2010 в 15:04)
 

Всем спасибище большое за помощь!

  Ответить  
 
 автор: sim5   (11.03.2010 в 15:08)   письмо автору
 
   для: simbel   (11.03.2010 в 15:05)
 

Для того, чтобы узнать состояние, достаточно проверить число само, и коли уж так необходимо, заменить в нем 0 на одно слово, и 1 на другое, а вот массив создавать для этого нет никакой необходимости.

  Ответить  
 
 автор: simbel   (11.03.2010 в 15:05)   письмо автору
 
   для: sim5   (11.03.2010 в 13:13)
 

это просто так совпало что получиллась двоичная система исчисления - делаю что-то типа фильтра данных - в нём есть 8 выпадающих списков (могло быть сколько угодно - под двоичную систему специально не подстраивал), каждый из которых содержит два значения "да" и "нет". И вот в зависмости от комбинаций значений в этих выпадающих списках - будут производиться различные выборки данных. Но для начала нужно сгенерить все возможные комбинации в массив. На основе комбинаций сформировать потом код который будет фильтровать. Вобщем, там не простой фильр, я с такой задачей первый раз столкнулся.

  Ответить  
 
 автор: Loki   (11.03.2010 в 15:04)   письмо автору
 
   для: simbel   (11.03.2010 в 02:10)
 

Фига вы тут наворотили!

<?
    $arr
=array(0=>'Нет '1=>'Да ');
    for(
$i=1$i<256$i++)
    {
        echo 
str_replace(array_keys($arr), $arrsprintf('%08b'$i)).'<br />';
    }

  Ответить  
 
 автор: DJ Paltus   (11.03.2010 в 15:01)   письмо автору
 
   для: sim5   (11.03.2010 в 14:54)
 

Я изначально был уверен, что есть гораздо более изящный метод, который мне, увы, недоступен. Однако, в теме не было ни одного стОящего ответа и надо было что-то делать )

  Ответить  
 
 автор: sim5   (11.03.2010 в 14:54)   письмо автору
 
   для: DJ Paltus   (11.03.2010 в 14:42)
 

Достаточно проверить состояние каждого из восьми бит, заменив его на "нет" или "да". Зачем такой монстр?

  Ответить  
 
 автор: DJ Paltus   (11.03.2010 в 14:42)   письмо автору
 
   для: simbel   (11.03.2010 в 02:10)
 

Если я правильно понял задание, то вот решение:

<?php
function ttod($k)    //эту функцию (перевод из десятичного в двоичный вид числа) я спер на форуме, вот тут: http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=23008
{
        
$dn "";

        while (
$k >= 2)
        {
                
$m $dn;
                
$dn $k%2;
                
$dn $dn.$m;

                if (
$k%== 0)
                {
                        
$k $k/2;
                }
                else
                {
                        
$k = ($k-$k%2)/2;
                }
        }
        if (
$k == 1)  $dn "1".$dn;
        if (
$dn == 1$dn "0".$dn;
        return 
$dn;
}
$sub1 "да ";         // что пишем
$sub2 "нет ";
$len 8;           // сколько "да/нет" в строке

$num pow(2$len); // сколько вариантов получится

for ($i 0$i $num$i ++){

    
// номер варианта превращаем в строку двоичного кода
    
$str strval(ttod($i));     

    
// достраиваем строку нулями до нужной длины
    
while(strlen($str) < $len$str "0".$str;    
    
    for(
$j 0$j $len$j++){
        
// ну и всё, проверяем j-тый символ, записываем в массив то, что надо.
        
if($str[$j] == "0"$x $sub2; else $x $sub1 ;
        
$arr[$i][$j] = $x;
        }
    }
//проверка
for ($i 0$i $num$i ++){
    for(
$j 0$j $len$j++){
        echo 
$arr[$i][$j];
        }
        echo 
"<br>";
    }
?>

  Ответить  
 
 автор: Yuriev   (11.03.2010 в 13:29)   письмо автору
 
   для: simbel   (11.03.2010 в 12:56)
 

А у меня получается не 256 да нет да нет да нет да нет, а 128 да и 128 нет
И если брать триады $i, $j и содержимое по этим координатам, что и есть Ваша неповторяющаяся восьмёрка (2^3).
Но мой скрипт - незакончено и сложно. Сейчас попробую попроще.

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования