Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите выстроить последовательность
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Помогите выстроить последовательность

Страниц (1): [1]
 

1. Valimar - 19 Февраля, 2009 - 13:58:23 - перейти к сообщению
Помогите мне пожалуйста с решением одной задачи.
Допустим, мне нужно передать 1000 бит информации (1000 символов). Необходимо выстроить последовательность из нулей и единиц, где единица - ошибка.
Есть небольшой код, который генерирует несколько чисел. Эти числа представляют собой расстояние от предыдущей ошибки. Например: результат выполнения скрипта выдал следующее:

0 42
42 41
83 100
183 11
194 94
288 59
347 73
420 24
444 81
525 3
528 34
562 25
587 98
685 31
716 56
772 46
818 93
911 54
965 61

второе число указывает, сколько символов до следующей ошибки.

Таким образом, мне на основе этих данных нужно выстроить такую цепочку, например:

00000000000010000000000000000000 00000101000000000000000000000000 000000000010000000000001

У меня не получается придумать, как это реализовать.
Код генерации ниже.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $n = 0;
  4. while ($n < 1000)
  5. {
  6.     $y = rand(1, 100);
  7.     print $n . "   <b>" .$y . "</b><br />";
  8.     $n = $n + $y;
  9. }
  10. ?>
  11.  
2. Champion - 19 Февраля, 2009 - 14:02:18 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. До конца файла {
  2.   Читаешь второе число каждой строки;
  3.   Цикл от 1 до этого числа {
  4.       вывод 0}
  5.   Вывод 1
  6. }
3. Valimar - 19 Февраля, 2009 - 16:29:05 - перейти к сообщению
Champion, спасибо, вроде работает, только есть два ньюанса =)

функция fgets() при достижении конца файла возвращает пустую строку, из-за этого (я так думаю) прибавляется ещё одна единица, т.е. в конце выглядит так:
...0 0 0 0 1 [51]0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 [14]1 []
вот как мне от этого избавиться?

и ещё, допустим из 1000 бит 971-ый вывалился с ошибкой, он и пометился "единицей", а нужно как-то ещё дополнить оставшиеся биты нулями до 1000.

вот по примеру код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. while (!feof($fp))
  4. {
  5.     $file = fgets($fp);
  6.     $test = explode(" ", $file);
  7.         //echo $test[1] . "<br />";
  8.         for($i=0; $i<$test[1]; $i++)
  9.         {
  10.                 echo "0\n";
  11.         }
  12.         echo "<b>1</b>\n[$test[1]]";
  13. }
  14. ?>
  15.  

(Добавление)
с последней единицей вроде разобрался, дебагг указал Undefined offset, сделал проверку так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if(isset($test[1]))
  4.     {
  5.                 for($i=0; $i<$test[1]; $i++)
  6.                 {
  7.                         echo "0\n";
  8.                 }
  9.         echo "<b>1</b>\n";
  10.         }
  11. ?>
  12.  

все нормально стало...

теперь бы дополнить недостающими нулями последовательность =\
4. valenok - 19 Февраля, 2009 - 17:59:12 - перейти к сообщению
str_pad
5. Valimar - 19 Февраля, 2009 - 18:44:07 - перейти к сообщению
valenok, спасибо

мне нужно вычислить количество недостающих нулей, чтобы дополнить строку.
я себе это представляю, как 1000 минус максимальный бит с ошибкой (из моего примера выше - это 965), разница и есть количество нулей до 1000.

вот как мне теперь вытащить это самое "965"?
мне надо как-то обратиться к последней строке в файле и считать это самое значение (вроде так мыслю)

помогите Огорчение
6. valenok - 19 Февраля, 2009 - 19:32:43 - перейти к сообщению
До конца файла {
$a = Читаешь второе число каждой строки;
Цикл от 1 до этого числа {
вывод 0}
Вывод 1
}
Каждое повторение цикла перезаписывает переменную а.
Последнее её значение не перезаписывается.

 

Powered by ExBB FM 1.0 RC1