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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите выстроить последовательность

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Valimar
Отправлено: 19 Февраля, 2009 - 13:58:23
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




Помогите мне пожалуйста с решением одной задачи.
Допустим, мне нужно передать 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.  
 
 Top
Champion Супермодератор
Отправлено: 19 Февраля, 2009 - 14:02:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




PHP:
скопировать код в буфер обмена
  1. До конца файла {
  2.   Читаешь второе число каждой строки;
  3.   Цикл от 1 до этого числа {
  4.       вывод 0}
  5.   Вывод 1
  6. }
 
 Top
Valimar
Отправлено: 19 Февраля, 2009 - 16:29:05
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




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.  

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

теперь бы дополнить недостающими нулями последовательность =\

(Отредактировано автором: 19 Февраля, 2009 - 16:29:49)

 
 Top
valenok
Отправлено: 19 Февраля, 2009 - 17:59:12
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




str_pad


-----
Truly yours, Sasha.
 
My status
 Top
Valimar
Отправлено: 19 Февраля, 2009 - 18:44:07
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Янв. 2009  


Помог: 0 раз(а)




valenok, спасибо

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

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

помогите Огорчение
 
 Top
valenok
Отправлено: 19 Февраля, 2009 - 19:32:43
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




До конца файла {
$a = Читаешь второе число каждой строки;
Цикл от 1 до этого числа {
вывод 0}
Вывод 1
}
Каждое повторение цикла перезаписывает переменную а.
Последнее её значение не перезаписывается.


-----
Truly yours, Sasha.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB