«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/04/17 11:49:34  №1999047 1
пук.jpg (51, 1080x531)
531x1080
Меня затрахали нерешаемые моим мозгом бонусные задачи из учебника, что делать?
Ответы: >>1999073 >>1999079
Аноним 2021/04/17 12:11:23  №1999073 2
>>1999047
Скорее всего ты чего-то недогнал в процессе обучения. Тут не работает как в школе\шараге и надо честно позадрачивать с недельку.
На чём всрался?
Ответы: >>1999103
Аноним 2021/04/17 12:13:26  №1999079 3
>>1999047

Ты можешь запостить свой код, и написать, что именно непонятно. Также, можно попробовать поискать решение задачи в гугле.
Ответы: >>1999103
Аноним 2021/04/17 12:29:36  №1999103 4
1522495958120494646.jpg (136, 1080x971)
971x1080
>>1999073
>>1999079
Да че я не догнал... Все задачи решил предыдущие, но если попросить здесь помощи по бонусным мне в сотый раз льют в уши кучу помоев, которые никак не помогают решить задачу.

https://ideone.com/kzN6Eh

Вот тут например, спросил как пофиксить задачу, сказали вместо ничего выводить пробел)0 Да я как бы и так знаю в чем проблема, а как это сделать нахуй?))) Очень информативно.

Про банкомат задачу тоже как не знал как решать, так и не знаю. Высрали про какой-то последовательный перебор, но я отказываюсь понимать это.

Я в центре на пикрелейтеде, inb4 я долбоеб неблагодарный и не ценю помощь, нахуй из треда


Ответы: >>1999380 >>1999639
Аноним 2021/04/17 19:26:34  №1999639 5
>>1999103

Ты ничего не переспросил в ответ на совет выводить пробел, вот тебе ничего больше и не посоветовали.

У тебя есть переменная $i, которая указывает, какую по счету букву надо взять из строки $value. Но некоторые строки слишком короткие и в них нет $i-й буквы. Надо проверять, что $i меньше чем длина $value (mb_strlen). Если это так, то берем одну букву из $value и добавляем в $letter. Если это не так ($i >= длины строки), то надо в $letter добавлять пробел.

Если с этим все стало понятно, то вот еще совет: у тебя используется рекурсия (функция abc вызывает саму себя). Можно заменить ее на цикл for, где $i меняется от 0 до максимальной длины строки стихотворения. Сейчас эта макс. длина у тебя вписана как 33, но лучше вычислять ее: разбить стих на строки, затем преобразовать массив строк в массив длин с помощью array_map, затем взять максимальную длину с помощью max().

> последовательный перебор

Это у многих вызывает сложность. Почему бы не попробовать начать с более простой подзадачи. Допустим, у нас есть всего 2 вида купюр - по 500 и по 100. Допустим, у тебя есть функция next(), и ей дается на вход 2 массива:

- первый массив - это общее количество купюр в банкомате вида [5, 2]. Это значит, что есть 5 купюр по 500 и 2 по 100.
- второй массив - это какая-то произвольная комбинация купюр, например [2, 1] то есть 2x500 + 1x100.

Функция должна вернуть следующую за данной комбинацию (в виде массива). Если ей дали 2x500 + 1x100, она должна вернуть 2x500 + 2x100 (то есть массив [2, 2]). Если ей дали 2x500 + 2x100, она должна вернуть 3x500 + 0x100 (так как 3 купюры по 100 быть не может).

То есть, функция получает информацию о запасе купюр и одну комбинацию, и должна вернуть следующую за ней комбинацию (которая дает чуть-чуть большую сумму).

Уточняй, если что непонятно.
Ответы: >>2000963 >>2002365
Аноним 2021/04/20 11:09:59  №2002365 6
>>1999639
>Функция должна вернуть следующую за данной комбинацию (в виде массива). Если ей дали 2x500 + 1x100, она должна вернуть 2x500 + 2x100 (то есть массив [2, 2]). Если ей дали 2x500 + 2x100, она должна вернуть 3x500 + 0x100 (так как 3 купюры по 100 быть не может).

https://ideone.com/KWu2kP

Ответы: >>2002397 >>2002413
Аноним 2021/04/20 11:52:52  №2002413 7
>>2002365

Начиная с PHP5.4, можно вместо array() писать [], это компактней.

Еще, вместо сравнения массивов по одному элементу, можно сравнивать массивы целиком с помощью == или ===, подробности (не очень подробные) в мануале: https://www.php.net/manual/ru/language.operators.array.php

Хорошо, для 2 номиналов задача решена. Теперь надо переделать функцию, чтобы она работала не с 2 номиналами, а с произвольным количеством номиналов. То есть, массивы могут быть произвольного размера.

Так как количество номиналов неизвестно заранее, мы не можем просто вписать нужное количество блоков if. Нам придется сделать цикл, в котором мы идем от конца массива (самой маленькой купюры) к началу (самой большой купюре). На каждом шаге мы увеличиваем текущий элемент на 1. Если он получился меньше, чем запас данной купюры, то цикл заканчивается. Иначе, мы обнуляем текущий элемент и продолжаем цикл.

Уточняй, если что непонятно.
Ответы: >>2003091 >>2003169
Аноним 2021/04/21 04:19:45  №2003144 8
Возможно я просто сонный и чего не догоняю но вот проблема, из бд мне возвращается ничего, а в ошибке пишет просто "Ошибка". Таблица точно есть, и данные в ней тоже, регистрацию то запилил а тут что не так может быть?
Ответы: >>2003294 >>2003694
Аноним 2021/04/21 05:26:13  №2003169 9
Ответы: >>2003294
Аноним 2021/04/21 08:45:35  №2003294 10
>>2003144

Функция mysqli_fetch_assoc может вернуть false, null или массив.

При ошибке на стороне БД фукнция вернет false. Надо проверять именно это условие (что вернулось false) и тогда выводить ошибку. А ты выдаешь ошибку даже если функция вернула null, хотя это значит, что данные в таблице не найдены. Это не ошибка базы данных, если например, логин введен неправильно.

>>2003169

Здесь плохо то, что весь код написан внутри одной функции. Лучше разделить код на несколько функций:

- одна функция генерирует следующую комбинацию (и ничем другим не занимается)
- другая считает сумму купюр в комбинации

И наконец, отдельно можно написать код, который в цикле перебирает комбинации:

- сначала берем комбинацию из всех нулей
- далее делаем цикл
- если теущая комбинация дает нужную сумму, то решение найдено, выходим из цикла
- иначе, берем следующую комбинацию (вызывая функцию nextCombination)
- продолжаем цикл

После этой задачи, если ты ее сделаешь, я советую попросить у меня дополнительные задачи на массивы и рекурсию.
Ответы: >>2003601 >>2003746
Аноним 2021/04/21 14:06:26  №2003601 11
>>2003294
Хорошо, при проверке data на false результат тот же
Ответы: >>2003619 >>2003628
Аноним 2021/04/21 14:25:52  №2003619 12
>>2003601
Так, а зачем проверка на false если в data - null, значит проблема в бд или в логине, но я вроде не совсем аутист, в бд есть записи, и логин передается