Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сильная задача на проверку логики 
:(
    Опции темы
Master
  Дата 21.5.2003, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

Репутация: 8
Всего: 10



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


Есть массив:

$arr = Array(
Array('1','2','3'),
Array('1','2'),
Array('1','2','3','4','5')
);

Результат:

$arr = Array(
Array('1','1','1'),
Array('1','1','2'),
Array('1','1','3'),
Array('1','1','4'),
Array('1','1','5'),
Array('1','2','1'),
Array('1','2','2'),
Array('1','2','3'),
Array('1','2','4'),
Array('1','2','5'),
Array('2','1','1'),
Array('2','1','2'),
Array('2','1','3'),
Array('2','1','4'),
Array('2','1','5'),
Array('2','2','1'),
Array('2','2','2'),
Array('2','2','3'),
Array('2','2','4'),
Array('2','2','5'),
Array('3','1','1'),
Array('3','1','2'),
Array('3','1','3'),
Array('3','1','4'),
Array('3','1','5'),
Array('3','2','1'),
Array('3','2','2'),
Array('3','2','3'),
Array('3','2','4'),
Array('3','2','5')
);


Ну как? smile.gif


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
Kefir
Дата 21.5.2003, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



Одно мне стало ясно - функция должна быть рекурсивоной. Вот. Писать сейчас ЛЕНЬ (чтоб её!).
PM MAIL WWW Skype   Вверх
Master
Дата 21.5.2003, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

Репутация: 8
Всего: 10



Да какой угодно. Это исключительно ваше дело. Главное решить задачу.
Я к завтраму постараюсь её решить.


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
IZ@TOP
Дата 21.5.2003, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Интересная задачка ... надо бы подумать .... а сначалa такой просто показалась biggrin.gif

Это сообщение отредактировал(а) Iz@top - 21.5.2003, 17:13


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Master
Дата 22.5.2003, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

Репутация: 8
Всего: 10



Я вчера вечером 2 часа себе мозги ломал.

Двумя способами пытался решить задачу.
Пробывал через рекуссив, - не вышло. Запутался sad.gif
Пробывал циклами (без рекурсива), тоже загнулся sad.gif

Кто-нибудь решил задачу?
Если нет, то я сегодня вечером ещё помучаюсь smile.gif

Это сообщение отредактировал(а) Master - 22.5.2003, 09:29


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
IZ@TOP
Дата 22.5.2003, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Я знаю как ... тока код завтра выложу ...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Master
  Дата 22.5.2003, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

Репутация: 8
Всего: 10



Цитата
Я знаю как ... тока код завтра выложу ...


Я тоже сначала думал, что знаю как smile.gif


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
Master
Дата 23.5.2003, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

Репутация: 8
Всего: 10



Ну что.
Никто не справился?

Я сегодня вечером напишу коды своих попыток с комментариями.
А вы тоже давайте ваши попытки.

Обсудим и попробуем решить коллективно.
Гуру. Тоже подключайтесь smile.gif

Это сообщение отредактировал(а) Master - 23.5.2003, 11:40


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
MuToGeN
Дата 2.6.2003, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Код
function subArray($arr)
{
 for($i=0;$i<sizeof($arr);$i++)
 {
   $total*=sizeof($arr[i]);
   $position[i]=0;
 }
 for($i=0;$i<$total;$i++)
 {
   for($j=0;$j<sizeof($arr);$j++)
     $r[i][j]=$arr[j][$position[j]];
   $positionSwitched=false;
   $p=sizeof($arr)-1;
   while(!$positionSwitched)
   {
     $position[$p]++;
     if($position[$p]>=sizeof($arr[$p])
     {
       $position[$p]=0;
       $p--;
     }
     else
       $positionSwitched=true;
   }
 }
 return $r;
}
В тексте возможны ошибки (даже синтаксические), т.к. эту функцию я вообще не проверял. Но теоретически все должно работать, хотя алгоритм и не самый лучший.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Master
Дата 3.6.2003, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

Репутация: 8
Всего: 10



Боже мой, нифига тут не работает, а ошибок синтаксических куча.

скобки не считаем:
$ не подставляем, переменные не определяем
и в итоге все загибается, караул...

ты бы хоть проверил это перед публикацией.



--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
MuToGeN
Дата 8.6.2003, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Master, ну уж извиняюсь, PHP с Апачем только ради этого ставить и конфигурить не охота было. Т.к. последнее время перешел на C++, то от $ перед именами переменных отвык. Будет время - все подправлю и отлажу.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
MuToGeN
Дата 9.6.2003, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Проанализировал я этот алгоритм. Единственная семантическая ошибка - в этом месте:
Код
  while(!$positionSwitched)
  {
    $position[$p]++;
    if($position[$p]>=sizeof($arr[$p])
    {
      $position[$p]=0;
      $p--;
    }
    else
      $positionSwitched=true;
  }

Когда $i == $total, то $p становится равным -1, а это недопустимое значение. Так что должно быть так:
Код
  while(!$positionSwitched &&$i!=$total )
  {
    $position[$p]++;
    if($position[$p]>=sizeof($arr[$p])
    {
      $position[$p]=0;
      $p--;
    }
    else
      $positionSwitched=true;
  }
Для исправления всех синтаксических ошибок времени нет, так же как и для того, чтоб детально расписать принцип работы алгоритма.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
MuToGeN
Дата 9.6.2003, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Цитата
Боже мой, нифига тут не работает
Master, предложи свое. А то кроме моего кода (действительно, с кучей ошибок) никто ничего другого пока не опубликовал.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Master
Дата 9.6.2003, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

Репутация: 8
Всего: 10



неа. не работаетsmile.gif

parse error кричит на эту строку:
if ($position[$p]>=sizeof($arr[$p]) {



--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
MuToGeN
Дата 9.6.2003, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



if ($position[$p]>=sizeof($arr[$p]))
Нужна еще одна скобка


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.