Этого треда уже нет.
Это копия, сохраненная 5 октября 2014 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
33 Кб, 500x500
34 Кб, 650x384
228 Кб, 420x279
109 Кб, 568x559
Клуб изучения PHP 31 !ОП # OP #382412 В конец треда | Веб
Привет. В этом ИТТ треде (уже 31-й!) мы все еще изучаем PHP (и некоторые другие языки для веба вроде JS), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет научиться программировать, кто-то хочет изучить этот язык, кто-то хочет просто размять мозги и заняться чем-то полезным.

Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.

Требуемые знания: умение читать. Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Netbeans PHP или PhpStorm (необязательно).

Предыдущий тред был тут: >>377570

У нас есть уроки по основам PHP, они собраны и выложены по адресу http://archive-ipq-co.narod.ru Если ты ньюфаг, просто решай задачки оттуда, они там реально простые, и пости сюда ссылки на решения, мы посмотрим и скажем, правильно или нет и дадим совет, если можно что-то улучшить. Если не совсем ньюфаг, напиши, что ты знаешь, что нет, что хочешь изучить, я дам тебе какую-нибудь задачку посложнее. После прохождения учебника напиши, ОП даст тебе более сложные задания.

Есть задачки по основам JS и DOM, хорошие, многие их с ходу решить не могут, попроси, дадим ссылку. Есть задачка на MySQL.

Правила: ведем себя воспитанно, помогаем новичкам, постим ссылки на решения задачек, ОП их проверяет и дает советы и замечания.

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

Оформляй код аккуратно!!! например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492

Что почитать?

Мануал по PHP — http://www.php.net/manual/ru/langref.php
Начинающим: Никсон Р. - Создаем динамические веб-сайты с помощью PHP (аноны говорят, она не очень хорошая и устаревает)
Сайт phptherightway
По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
JS: learn.javascript.ru
Позиционирование в CSS: http://softwaremaniacs.org/blog/category/primer/ (снизу вверх).
MySQL: https://gist.github.com/codedokode/10539213

Слишком простые задачи? Напиши что знаешь, что хочешь изучить и придумаем тебе задачку посложнее.

Сайт опять упал!!!!! Не паникуй, а открой http://rghost.net/45000175

Не поздно ли в мои 40 становиться программистом? Ох, это будет сложно, но если ты покажешь лучшие знания, чем моложежь, то шансы есть.

Где архивы предыдущих тредов? Известно, где, на mediafire: http://www.mediafire.com/download/gza5360wdzqd743/threads-archive-pr-1..17.zip (189Мб, треды 1-17 из pr), http://www.mediafire.com/download/kgzl1f9366gc6ed/threads-archive-11..20.zip (72 Мб, треды 11-20 из b). Также один анон выложил все на дропбокс: https://www.dropbox.com/sh/4sb69jrx9qwrpcw/-nY5ia__VC (ок, он иногда не работает)

Как начать пользоваться командной строкой — gist.github.com/anonymous/9378956452c8e4a72ac8

Расскажи про поиск работы, фриланс etc Информация о фрилансе есть в /wrk . Также, походи по сайтам вроде hh.ru, hantim.ru, geekjob, fl.ru, посмотри, поизучай ситуацию. Имей в виду, кроме фриланса, где ты 2 дня ищешь заказ, полдня обсуждаешь за бесплатно суть работы, день делаешь и еще 2 дня слушаешь от заказчика что он о тебе думает, есть удаленная работа — продаешься в рабство, и занимаешься только программированием, задачи тебе будут подкидывать наготово. Ищется по слову «удаленно» на перечисленных сайтах. Зарплата на удаленной работе может быть меньше чем в офисе в столице, но больше чем в твоей деревне. На одеске зарабатывают больше, чем на русском фрилансе.

В общем, давайте начинать уже!
55 Кб, 500x644
3449 Кб, 1920x1080
!ОП # OP #2 #382414
Побежал писать код? Стой, прочти сначала этот пост.

Как и чем отформатировать код

Важно писать код не как попало, а аккуратно, как принято. Почему? Ну потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Ты же не хочешь, чтобы тебя называли быдлокодером?

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.

Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):

- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...

Вот так, нажатием одной кнопки ты можешь сделать жизнь гораздо проще.

Как видишь, c IDE жизнь может быть намного проще (еще в них есть автодополнение, автоматическая проверка кода и подсветка ошибок, навигация по файлам и функциям и много чего еще).

Основные правила

Если ты вдруг решил выровнять код вручную, запомни эти правила:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский (неужели такое бывает?) Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо
- мы используем для отступов 4 пробела, а не табы (нужно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)

скобки в for и if/else ставятся так (египетские скобки):

[code]
if (...) {
// ...
} else {
// ...
}
for (...) {
// .....
}
[/code]

у определений функций и классов так:

[code]
function bakeCookies(...)
{
// ...
}
[/code]

Официальные ссылки

В PHP есть система стандартов с названием PSR. Вот стандарты, относящиеся к оформлению кода:

http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
55 Кб, 500x644
3449 Кб, 1920x1080
!ОП # OP #2 #382414
Побежал писать код? Стой, прочти сначала этот пост.

Как и чем отформатировать код

Важно писать код не как попало, а аккуратно, как принято. Почему? Ну потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Ты же не хочешь, чтобы тебя называли быдлокодером?

Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт http://phpformatter.com и нажать кнопку Format. Робот сам выровняет твой код в лучших традициях.

Если ты используешь для редактирования кода IDE, то все еще проще (а если не используешь, то почему бы не начать?):

- Eclipse PDT — жми Ctrl + Shift + F для автоматического форматирования кода.
- Netbeans for PHP — жми Alt+Shift+F
- Zend Studio — жми Ctrl + A (выделить все), затем Ctrl + Shift + F
- PhpStorm — жми Ctrl+Alt+L
- PHPDesigner — поищи нужную опцию в меню, она там есть. Или жми Ctrl + Shift + F1
- Komodo IDE — правая кнопка -> Format Using...

Вот так, нажатием одной кнопки ты можешь сделать жизнь гораздо проще.

Как видишь, c IDE жизнь может быть намного проще (еще в них есть автодополнение, автоматическая проверка кода и подсветка ошибок, навигация по файлам и функциям и много чего еще).

Основные правила

Если ты вдруг решил выровнять код вручную, запомни эти правила:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский (неужели такое бывает?) Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо
- мы используем для отступов 4 пробела, а не табы (нужно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)

скобки в for и if/else ставятся так (египетские скобки):

[code]
if (...) {
// ...
} else {
// ...
}
for (...) {
// .....
}
[/code]

у определений функций и классов так:

[code]
function bakeCookies(...)
{
// ...
}
[/code]

Официальные ссылки

В PHP есть система стандартов с названием PSR. Вот стандарты, относящиеся к оформлению кода:

http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
#3 #382416
>>382414

>название функции начинается с глагола, в стиле «сделайЧтоТо»


Почему? Это же неудобно? Удобней же когда наоборот, ЧтоТо и действия, TableCreate(),TableRepair(), TablePaint(), например.

>мы используем для отступов 4 пробела


Почему? Пробелы же говно - шифт таб не работает сразу для нескольких строк и нужно по 4 раза на backspace нажимать.
#4 #382418
>>382416

Так принято

> шифт таб не работает сразу для нескольких строк


Неправда, работает. По крайней мере в Sublime Text которым я пользуюсь.

Табы использовать в принципе нельзя так как код с ними разваливается, на вид таб от пробела никак не отличить (как убедиться что правильно их расставил? как исправить?), а правила где что ставить придумывали какие-то аутисты.

И назови хоть одну выгоду от табов? Недостатки я перечислил. «Можно настраивать отступ» - это не выгода, ты и с пробелами можешь настраивать величину отступа, если редактор умный.
#5 #382419
>>382416

> TableCreate()


В каком языке или стандарте ты это видел? В Java, JS используется сделайЧтоТо (в PHP — не всегда, это по историческим причинам. В новых библиотеках, например PDO, все праивльно: fetchAll, bindValue).
#6 #382420
>>382416

> TableCreate(),TableRepair(),


Для этого надо использовать возможности ООП:

$table->create();
$table->repair();
#7 #382421
>>382418
Ты не назвал ни одного недостатка.

>>382420
Это у тебя частный случай, когда есть переменная с названием table. А если у тебя есть просто список какой-нибудь, то не сразу станет понятно, с каким классом работаешь. А если класс наследуется и в родителе есть метод с таким же названием, то перегружать придется.
#8 #382422
>>382421

> то не сразу станет понятно, с каким классом работаешь.


Значит надо писать понятно, например с помощью phpDoc указать что возвращает тот или иной метод

> А если класс наследуется и в родителе есть метод с таким же названием, то перегружать придется.


Я не очень понял как это, но видимо это ошибка в проектировании. Методы переопределяют, когда надо поменять поведение наследника.
#9 #382423
>>382421

> Ты не назвал ни одного недостатка.


Ты прочел мой пост?

Они выглядят одинаково и это усложняет жизнь. Предеставь, что в твоем коде кто-то поменял часть латинских букв на русские. Или сделал например 2 функции с одинаковыми именами, в одной латинская буква,в другой на ее месте русская. Смешивать табы и пробелы — то же самое — занятие для аутистов, а не для тех кто хочет решать задачи.
#10 #382429
>>382423
А представь обычный редактор и тебе надо выровнять код? Затрахаешь пробел до невозможного.
#11 #382430
>>382402
Я советую отказаться от click и использовать только mousedown.

Как раз недавно вычитал, что mousedown работает быстрее, чем click.
#12 #382431
>>382402

В сапере на первом ходе можно напороться на мину?
#13 #382432
>>382402

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

Ну то есть я знаю, что это реально. Я встречал программы, которые делают что-то за юзера. Там как-то рассчитываются координаты сапера на странице и координаты ячеек? Я просто не имею представления, как это делается. Или сторонний js как-то впихивают? А клик как реализуется?
#14 #382436
>>382431
Нельзя. Поле генерится после первого клика.
p.s. Задачи уровня "сделать сапера" - это насколько милиметров выше полного дна в программировании?
#15 #382437
>>382412
Респект и Уважуха стартеру, красивы скрины... старается человек не на свое благо.
только все таки одиночные кавычки быстрей и намного )
46 Кб, 562x446
#16 #382439
#17 #382441
ОП, ты посмотришь >>377570? Если да - то ответь на вопросы из поста
#18 #382442
Промазал, вот он пост: >>381744 Элементы видео там доделал
#20 #382444
Ну что ж ты будешь делать, теперь почему-то вторая ссылка на пост отклеилась. 382441 --> 382442
#21 #382454
>>382393
А, работают. Надо куда-нибудь console.log() тогда вставить, чтобы ошибку выводило? Там потом выскакивает ошибка jsbin'a. Так и должно быть? http://jsbin.com/lubewuqa/9/edit?js,console - попытался сделать проверку на повторную добавку, не получается. Не могу разобраться с возникающей ошибкой. Алсо, как мне постоянно пополнять объект с добавками, не обнуляя его? Через замыкание?
#22 #382455
>>382436
Нажми F12 и посмотри в консоли что за ошибка.
#23 #382457
>>382455
Перепутал.

>>382454
Это тебе >>382455
#24 #382461
>>382430

он не быстрее, он просто раньше срабатывает (click срабатывает только после отпускания кнопки)
#25 #382470
Анончики, тут есть гуру по нод.жс?
Не хочу учить пхп, решил взяться за ноду, но тяжело дается она.
#26 #382490
>>382457
Я смотрел, там у меня что-то с переменной не так.
#27 #382525
ОП, как лучше изучать Mysql? Практиковаться через phpMyAdmin или через командную строку?
#28 #382534

Что почитать годного что виртуозно владеть php+mysql?(сейчас читаю о работе с mysql via pdo)
Что правильного посоветуете на эту тему? Спасибо
#29 #382549
Ньюфаг в треде. Освоил html+css, могу верстать шаблоны средней сложности как мне кажется Сейчас учу php и пытаюсь освоить wordpress. В голове ужасная каша. Прошу помощи.
1. Где найти задания по php разбитые на уровни по сложности и с примерами решений? Интересуют именно реальные задания, с которыми регулярно сталкиваются php программисты.
2. Вот сверстал я макет, как мне натянуть его на wordpress, вообще не понимаю. Зашел в папку с wp, открыл первый попавшийся файл с расширением .php, 1000 строк кода, нихуя не понятно, в ужасе закрыл.
Круто было бы если дали ссылку, где весь процесс описывается и разжевывается для полных новичков. Я погуглил, из того что нашел все равно не понятно.
!ОП # OP #30 #382554
>>382549

> Интересуют именно реальные задания, с которыми регулярно сталкиваются php программисты.


Чтобы делать реальные задания, надо хорошо знать сам PHP, функции, регулярные выражения, ООП, может быть какие-то фреймворки. Вот пример похожего на реальное задания: сделать сайт-файлообменник: https://gist.github.com/codedokode/9424217

Реальные задания — не для начинающих, а для тех, кто уже что-то знает. Для начинающих есть упрощенные учебные задания.

> Вот сверстал я макет, как мне натянуть его на wordpress,


Очень просто. Правильно это назвается «сделать тему для вордпресса». Это все прекрасно описано в документации, надо искать раздел вроде «Docs for template designers» или «documentation for developers». Погуглим:

Вот официальное руководство:

http://codex.wordpress.org/Theme_Development (на английском)
http://codex.wordpress.org/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BC (перевод)

Заметь, в документации встречаются ссылки на другие разделы. Их тоже стоит прочесть.

Функции, которые используются в шаблонах, объясняются в API documentation. И естественно, надо знать сам Php чтобы сделать тему для вордпресса. А в исходники сразу лезть смысла нету.
#31 #382555
>>382412
ОП, посоветуй какую смс или фрейм учить.
#32 #382561
>>382534

Можешь почитать для начала

http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html (это третья часть, первую и вторую части тоже надо прочесть)

http://denis.in.ua/foreign-keys-in-mysql.htm

http://phpclub.ru/mysql/doc/tutorial.html

И решить задачку https://gist.github.com/codedokode/10539213

>>382525

Только через командную строку.

>>382470

Я немного разбираюсь, но только немного. Если есть каике-то вопросы, задавай, может я знаю ответ. Алсо, я хорошо умею гуглить.

>>382454

Там вообще-то можно выбрать несколько добавок, лишь бы они были разные. Например, можно попросить добавить и приправу, и майонезом полить.

> как мне постоянно пополнять объект с добавками, не обнуляя его?


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

> чтобы ошибку выводило


Ошибки идут либо в jsbin-овскую консоль, либо в консоль в отладчике (Ctrl + Shift + J), лучше смотреть обе.
#32 #382561
>>382534

Можешь почитать для начала

http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html (это третья часть, первую и вторую части тоже надо прочесть)

http://denis.in.ua/foreign-keys-in-mysql.htm

http://phpclub.ru/mysql/doc/tutorial.html

И решить задачку https://gist.github.com/codedokode/10539213

>>382525

Только через командную строку.

>>382470

Я немного разбираюсь, но только немного. Если есть каике-то вопросы, задавай, может я знаю ответ. Алсо, я хорошо умею гуглить.

>>382454

Там вообще-то можно выбрать несколько добавок, лишь бы они были разные. Например, можно попросить добавить и приправу, и майонезом полить.

> как мне постоянно пополнять объект с добавками, не обнуляя его?


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

> чтобы ошибку выводило


Ошибки идут либо в jsbin-овскую консоль, либо в консоль в отладчике (Ctrl + Shift + J), лучше смотреть обе.
#33 #382568
>>382554

Спасибо. Еще пара вопросов.
Я прошел курс php из этого треда. Потом начальный курс на php.net. Сейчас просто гуглю всякие конструкции и пытаюсь разобраться, что они делают в коде.
Скачал книгу "Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования", полистал, она мне показалась не для новичка.
Эту "Никсон Р. - Создаем динамические веб-сайты с помощью PHP", не стал скачивать из-за плохих отзывов в оп-посте. На rutracker глянул, там книги по php очень старые (6-10+) лет назад написаны, одолевают сомнения.
Так вот, может кто посоветует книгу с которой начинал и смог в php. Прошлый тред пролистал, но не нашел чего-то конкретного или я слепой

И самое важное. Нужен проект, который бы писался в процессе изучения php. Не слишком сложный, такой что бы можно было написать в одиночку, но и который бы заставлял думать в процессе реализации. Например написать борду, соц.сеть, какой-нибудь твиттер, но такое наверное пишет толпа разработчиков и надо что-нибудь полегче.
Кто что делал и подобного в процессе обучения? Может посоветуете.
#34 #382570
>>382568

>апример написать борду, соц.сеть


У Никсона в последней главе показывается как делать соц сеть.
#35 #382572
>>382454

Что касается ошибки

> "TypeError: this.additives is undefined (line 62)"


То тут все просто. У тебя есть строка:

> if (this.additives.additive


В функции Hamburger.checkAdditive ты не можешь обращаться к this (точнее можешь но this указывает на Hamburger, а не на объект который тебе нужен).
#36 #382575
ОП, я написал не-до-блог с регистрацией, хочешь покажу?
#37 #382577
>>382570

Только там приведен адский быдлокод, которому учить нельзя. То ли автор не силен в ООП и архитекутре, то ли поленился.

>>382568

>она мне показалась не для новичка.


Если ты прошел наш учебник (и решил все сложные задачи в нем), то у тебя должен быть как раз подходящий уровень чтобы ее читать. Разве что про веб-серверы, HTTP и HTML у нас не рассказано.

> там книги по php очень стары


Это верно. много старья и много книг от авторов, которые сами плохо знают язык и не могут в ООП например.

> Например написать борду, соц.сеть, какой-нибудь твиттер


У меня есть задачка сделать файлообменник: https://gist.github.com/codedokode/9424217
\
И задача сделать борду, верстка готова: https://github.com/codedokode/board-markup
#38 #382581
>>382575

Кидай ссылку на гитхаб. А тебе нужны критические комментарии и замечания по поводу кода?

>>382555

Начни с микрофреймворков, Slim например. Потом Yii, потом Symfony 2. У нас кстати есть задачка помогающая освоить Slim: https://gist.github.com/codedokode/9424217 — сделать файлообменник.

Знание PHP и ООП необходимо. Также, основы HTML/CSS (не знаешь, читай самоучитель на htmlbook.ru) и основы MySQL (это можно будет изучить по ходу выполнения).

>>382441

Посмотрю.

>>382436

Некоторые дают такие задачи как тестовое задание стажерам. Но знать, конечно, надо гораздо больше.

>>382432

Реально.

> как это делается.


Способы:

— расширение к браузеру (пишется на яваскрипте, имеет доступ к DOM и объектам на странице),

— сторонняя десктопная программа (которая взаимодействует с браузером через COM — тогда есть доступ к DOM — или WinAPI, то есть делает скриншот экрана и имитирует движение мыши и нажатие клавиш). Если код под твоим контролем, то можно прямо в код что нужно дописать.

>>382429

Используй нормальный редактор кода, а не блокнот, для таких вещей.
#38 #382581
>>382575

Кидай ссылку на гитхаб. А тебе нужны критические комментарии и замечания по поводу кода?

>>382555

Начни с микрофреймворков, Slim например. Потом Yii, потом Symfony 2. У нас кстати есть задачка помогающая освоить Slim: https://gist.github.com/codedokode/9424217 — сделать файлообменник.

Знание PHP и ООП необходимо. Также, основы HTML/CSS (не знаешь, читай самоучитель на htmlbook.ru) и основы MySQL (это можно будет изучить по ходу выполнения).

>>382441

Посмотрю.

>>382436

Некоторые дают такие задачи как тестовое задание стажерам. Но знать, конечно, надо гораздо больше.

>>382432

Реально.

> как это делается.


Способы:

— расширение к браузеру (пишется на яваскрипте, имеет доступ к DOM и объектам на странице),

— сторонняя десктопная программа (которая взаимодействует с браузером через COM — тогда есть доступ к DOM — или WinAPI, то есть делает скриншот экрана и имитирует движение мыши и нажатие клавиш). Если код под твоим контролем, то можно прямо в код что нужно дописать.

>>382429

Используй нормальный редактор кода, а не блокнот, для таких вещей.
#39 #382584
>>382581
Спасибо тебе, ОП, ты няша.

>>Знание PHP и ООП необходимо.


>>основы HTML/CSS


>>основы MySQL


Их есть у меня. Но вот среди прочих приблуд запутался. Значит начну со слима.
Алсо посоветуй какую смс поковырять, чтобы не сложно, но актуальненько. Начал смотреть битрикс, но охуел и в ужосе бежал оттуда.
#40 #382589
>>382442

Infinitacats

У тебя в видео снизу какая-то желтая полоска.

Логотип должен быть чуть левее (проведи на макете вертикальную линию по краю видео и увидишь). При оптическом выравнивании объекты выравнивают не строго по границам, а разрешают тонким выступам или скруглениям быть чуть дальше.

Также, логотип должен быть чуть выше надписи THEYALOW (а надпись craft by - чуть ниже).

> <div class="page-name">


Это называется h1. Внутри слайда, я подумал, делать h1 смысла нет.

Ты добавил в код 2 картинки-логотипа. Картинки загружаются всегда, даже если не отображаются. Потому картинки, образующие дизайн, лучше ставить их не через img, а через фоновое изображение.

Контент (рисунки, фото к статьям) принято ставить через img в HTML. Картинки как часть дизайна (кнопки, уголки, декорации) ставятся через background-image в CSS.

> font-size: 17px;


Всегда рядом с font-size задавай line-height

Сделай окно шириной 800-900 px. Надписи Cool, mimimal уезжают из заголовка при этом. Вообще, попробуй менять ширину окна и посмотри что происходит.

«Better design», «Its free» мне кажется, должны быть ссылками и чуть темнеть при наведении.

Надпись The cool The minimal у тебя смещена вниз относительно видео (на макете она выше). Вообще, верстальщик должен видеть направляющие, относительно которых выравниваются объекты, выравнвиание, сетку, все это вещи.

Под шапкой у тебя странная белая полоса. Она лишняя.

Тень под блоком «BETTER DESIGN» надо сделать чуть поменьше или послабее.

Плюсик справа внизу квадратика «25 april» — это кнопка, он должен реагировать на наведение.

Линейка прокрутки под блоком «25 April» сделана наоборот — сравни сам.

В самом низу тень у подвала должна быть темнее, над логотипом должен быть небольшой отступ. Тень у надписи THEYALOW должна быть темнее.

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

meta charset должно идти до title.

> <span class="icon">


Почему бы не использовать тут севдоэлементы вместо спан? Они не работают только в ИЕ7/6 или ты их тоже будешь поддерживать?

> <div class="clearfix"></div>


Есть лучшее решение: http://nicolasgallagher.com/micro-clearfix-hack/

Если ты хочешь отцентрировать объект с абсолютным позиционированием (иконку внутри кнопки например) используй top 50%, left 50% + отрицательные margin-left/top. Тогда выравнивание будет работать незаисимо от размеров родителя. Не высчитывай top/left в пикселях.

> <a class="logo" href="index.html"></a>


> <a class="page-name">THEYALOW</a>


Тут должна быть одна ссылка. Лого можно вставить через псевдоэлемент если не нужен ИЕ7. Да тут можно кучу тегов выкинуть если перейти на псевдоэлементы. Почему не перейдешь?

> .header .slider


Я бы сделал просто .header-slider

> .header .left-column a:active { color: transparent;


Зачем?

В ИЕ8 макет разваливается. Паста в помощь: https://gist.github.com/codedokode/855e3970124687b26a1c
#40 #382589
>>382442

Infinitacats

У тебя в видео снизу какая-то желтая полоска.

Логотип должен быть чуть левее (проведи на макете вертикальную линию по краю видео и увидишь). При оптическом выравнивании объекты выравнивают не строго по границам, а разрешают тонким выступам или скруглениям быть чуть дальше.

Также, логотип должен быть чуть выше надписи THEYALOW (а надпись craft by - чуть ниже).

> <div class="page-name">


Это называется h1. Внутри слайда, я подумал, делать h1 смысла нет.

Ты добавил в код 2 картинки-логотипа. Картинки загружаются всегда, даже если не отображаются. Потому картинки, образующие дизайн, лучше ставить их не через img, а через фоновое изображение.

Контент (рисунки, фото к статьям) принято ставить через img в HTML. Картинки как часть дизайна (кнопки, уголки, декорации) ставятся через background-image в CSS.

> font-size: 17px;


Всегда рядом с font-size задавай line-height

Сделай окно шириной 800-900 px. Надписи Cool, mimimal уезжают из заголовка при этом. Вообще, попробуй менять ширину окна и посмотри что происходит.

«Better design», «Its free» мне кажется, должны быть ссылками и чуть темнеть при наведении.

Надпись The cool The minimal у тебя смещена вниз относительно видео (на макете она выше). Вообще, верстальщик должен видеть направляющие, относительно которых выравниваются объекты, выравнвиание, сетку, все это вещи.

Под шапкой у тебя странная белая полоса. Она лишняя.

Тень под блоком «BETTER DESIGN» надо сделать чуть поменьше или послабее.

Плюсик справа внизу квадратика «25 april» — это кнопка, он должен реагировать на наведение.

Линейка прокрутки под блоком «25 April» сделана наоборот — сравни сам.

В самом низу тень у подвала должна быть темнее, над логотипом должен быть небольшой отступ. Тень у надписи THEYALOW должна быть темнее.

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

meta charset должно идти до title.

> <span class="icon">


Почему бы не использовать тут севдоэлементы вместо спан? Они не работают только в ИЕ7/6 или ты их тоже будешь поддерживать?

> <div class="clearfix"></div>


Есть лучшее решение: http://nicolasgallagher.com/micro-clearfix-hack/

Если ты хочешь отцентрировать объект с абсолютным позиционированием (иконку внутри кнопки например) используй top 50%, left 50% + отрицательные margin-left/top. Тогда выравнивание будет работать незаисимо от размеров родителя. Не высчитывай top/left в пикселях.

> <a class="logo" href="index.html"></a>


> <a class="page-name">THEYALOW</a>


Тут должна быть одна ссылка. Лого можно вставить через псевдоэлемент если не нужен ИЕ7. Да тут можно кучу тегов выкинуть если перейти на псевдоэлементы. Почему не перейдешь?

> .header .slider


Я бы сделал просто .header-slider

> .header .left-column a:active { color: transparent;


Зачем?

В ИЕ8 макет разваливается. Паста в помощь: https://gist.github.com/codedokode/855e3970124687b26a1c
#41 #382598
>>382442

Кнопка громкости в плееере не выровнена по вертикали с полосой вопроизведения. Ну ты же верстальщик, ты должен обращать внимание на такие вещи.

> bg-for-slider.jpg


PNG (особенно PNG8) жмет такие картинки лучше, не? Ты разбираешься в форматах картинок для веба: PNG, PNG8, JPEG, GIF, SVG, забыл-как-его-гугловский-убийца-png? Прозрачность и полупрозрачность, альфа-канал? Ели нет то иди почитай хотя бы википедию или нагугли что-нибудь.

> tw.png


Попробуй приклеить эту картинку к фону (чтобы не было прозрачности) и сжать PNG8 — наверняка будет меньше весить.

> правильно я шрифты подключаю, или надо через @font-face?


Открой ссылки на гугл и увидишь там font-face. Все верно, хотя мне не нравится такое количество похожих шрифтов, но это уже не к тебе претензии.

> И это, как там сделать перенос слов?(в блоке перед футером есть список и там слова переносятся с " - " на новую строку)


Есть CSS3 свойство «хайфнс»: http://htmlbook.ru/css/hyphens — оно работает не везде, там где не работает можно либо использовать яваскриптовый плагин, либо расставить «робкие» переносы через & shy ; или wbr на самом деле shy значит soft hyphen либо оставить без переносов. Я считаю, лучше без переносов оставить.

Про переносы можешь почитать

http://csslike.me/perenosy-slov/
http://indysite.ru/line-breaking-in-css2/
http://caniuse.com/#feat=css-hyphens
#42 #382599
>>382584

Вордпресс, затем Друпал. Читать официальную документацию в первую очередь, естественно.
#43 #382681
>>382402

http://jsbin.com/dagoxeleburo/61/edit?js,output

Без третьего аргумента и рекурсии нет.
#44 #382682
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!
`` #45 #382696
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
`` #45 #382696
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #46 #382697
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #46 #382697
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #47 #382698
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #47 #382698
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #48 #382699
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #48 #382699
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #49 #382700
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #49 #382700
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #50 #382710
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #50 #382710
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #51 #382711
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #51 #382711
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #52 #382712
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
``` #52 #382712
Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!Начал сразу с решения бонусных задач, так как опыт программирования имеется (питон). Вот решил задачу №1, про раздачу купюр.
http://ideone.com/9Kgn03
программирования имеется (питон).
#53 #382724
>>382682

Бонусные — это ок, но я советую еще решить задачи на регулярки (теорию опытным программистам можно не читать).

>>382681

Посмотри на свой код:

> cell.drawEmptyCell();


> ...


> if (!cell.isOpened) {


как часто, по твоему, срабатывает этот if? (ответ: чуть реже чем никогда). drawEmptyCell ставит флаг isOpened.
#54 #382726
>>382682

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res+= $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";

Вообще, для первой задачи неплохо. И еще, старайся не называть переменные бессмысленными названиями типа key или value.
#54 #382726
>>382682

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res+= $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";

Вообще, для первой задачи неплохо. И еще, старайся не называть переменные бессмысленными названиями типа key или value.
#55 #382762
Зачем нужен блок finally в исключениях? Ведь код после try catch и так будет выполняться.
#56 #382763
>>382762

> Ведь код после try catch и так будет выполняться.


Catch выполняется только если в try произошла ошибка. Finally выполняется всегда.
#57 #382764
Какой есть лучший швабодный ftp-клиент и sql-клиент?
#58 #382838
>>382724
>>382726
>>382762
>>382763
>>382764
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {



Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=
#58 #382838
>>382724
>>382726
>>382762
>>382763
>>382764
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {



Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=
``` #59 #382839
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
``` #59 #382839
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
``` #60 #382841
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
``` #60 #382841
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
#61 #382842
>>382412
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
#61 #382842
>>382412
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
#62 #382844
>>382437
>>382414
>>382443
>>382457
>>382461
>>382534
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";

#62 #382844
>>382437
>>382414
>>382443
>>382457
>>382461
>>382534
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";

#63 #382845
>>382555
>>382570
>>382575
>>382577
>>382589
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";

#63 #382845
>>382555
>>382570
>>382575
>>382577
>>382589
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";

``` #64 #382846
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
``` #64 #382846
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
``` #65 #382847
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
``` #65 #382847
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
#66 #382849
>>382847
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
#66 #382849
>>382847
Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";

> print $key . "x" . $val . "\t";


Если использовать подстановку переменных, кавычек и точек будет меньше:

print "{$key}x{$val}\t";Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

Программа ворует деньги и выдает меньше чем положено: http://ideone.com/LmdcBD

Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:

checker -> checkAmount
viewer -> displayResult

> while ($count < $arr[$item] && $res <= $amount) {


> $res += $item;


Зачем тут цикл? Хватит деления и функции min() чтобы не взять больше купюр чем имеется.

Цикл нужен там где есть повторяющееся действие. Тут его нет.

> $amount = $amount - $item $count;


Можно писать через -=

> $errorMsg .= "сумма меньше нуля (0)";


Тут наверно проще написать return "....";

> print "Выдача возможна, число купюр:";


> print "\n";


Можно просто print "lalala\n";
#67 #382878
Оп, а второй урок то делается вообще? Если да, о чем он будет?
#68 #382886
http://jsbin.com/xugik/9/

Оп, посмотри. Как тебе? Укажи на косяки, что исправить. Хочу до совершенства довести.
#69 #382888
>>382886
Охуенно. Сколько js'ом занимаешься?
мимо-не-оп
#70 #382894
>>382888
Где-то с середины июля вроде.
#71 #382898
Что-то я не понял логики этой функции в последнем уроке:

[CODE]function createQuestions()
{
$questions = array();

$q = new Question;
$q->text = ...
...
// Кладем вопрос в массив
$questions[] = $q;

$q = new Question;
...

return $questions;
}[/CODE]

Ей ничего не передается. Или я должен её сам дописать? Просто там так написано, будто она уже готовая.
#72 #382906
>>382894
Не посоветуешь с каких книг/видеоуроков начать?
Что сам читал?
#73 #382919
>>382906
Я задачи ОПа решаю и читаю http://learn.javascript.ru/
#74 #382932
Оп, скажи, а сложно разобраться в Big Data анализе и структурировании потока данных?
#75 #382961
>>382886

Правая кнопка мыши не ставит флажок, а просто открывается контекстное меню.
#76 #382964
>>382762

Чтобы избежать копипасты. Без finally придется писать так:

try {
...
действие;
} catch (E1) {
действие;
...
} catch (E2) {
действие;
...
}

То есть писать одно и то же несколько раз. Плюс, с finally можно сделать такую штуку:

try {
...
} finally {
....
}

finally выполнится даже в случае выброса исключения внутри try.

>>382764

Не знаю насчет лучших, я использую тот что встроен в Total Commander или WinSCP (он еще и SFTP умеет), для SQL использую adminer.php, а из программ работал с sqlYog.

>>382878

Дальше по идее должно быть основы HTML, что такое HTTP, как работает веб-сервер, как работает PHP на сервере, шаблоны, работа с БД, MVC. Но пока как-то руки не доходят все написать, есть только черновики и задания на разные темы, выложенные тут: https://gist.github.com/codedokode
#76 #382964
>>382762

Чтобы избежать копипасты. Без finally придется писать так:

try {
...
действие;
} catch (E1) {
действие;
...
} catch (E2) {
действие;
...
}

То есть писать одно и то же несколько раз. Плюс, с finally можно сделать такую штуку:

try {
...
} finally {
....
}

finally выполнится даже в случае выброса исключения внутри try.

>>382764

Не знаю насчет лучших, я использую тот что встроен в Total Commander или WinSCP (он еще и SFTP умеет), для SQL использую adminer.php, а из программ работал с sqlYog.

>>382878

Дальше по идее должно быть основы HTML, что такое HTTP, как работает веб-сервер, как работает PHP на сервере, шаблоны, работа с БД, MVC. Но пока как-то руки не доходят все написать, есть только черновики и задания на разные темы, выложенные тут: https://gist.github.com/codedokode
#77 #382965
Оп, по заданию Поиск по селектору, мне нужно создать библиотеку всех имеющихся тегов? Или как? В jquery смотрю используется sizzle, а там как-то непонятно все, но вроде без библиотеки.
#78 #382973
>>382886

Неплохо, с оформлением стало гораздо лучше. Советы по оформлению:

- белый попап смотрится на сером фоне гораздо лучше, чем серый
- я бы еще сделал попап чуть шире, добавиви поля, так как-то привычнее
- фон дляо ткрытой клеточки я бы сделал посветлее
- для клекток ты выставил фон через linear-gradient. Но надо еще задать серый фон для тех браузеров, которые не поддерживают градиент ( http://caniuse.com/#search=gradient — Ie8/9 например ):

background: ...color..;
background: linear-gradient(...);

Тогда старые браузеры прочтут только первую строчку и используют цвет из нее, а новые — градиент из второй.

Серый оверлей не закрывает всю страницу, слева есть белая полоса — ты наверно забыл сбросить padding/margin на body/html?

Правая кнопка не работает. Что за ерунда?

> popUp.children[0].insertBefore(p, popUp.children[0].children[0]


Вот это нехорошая конструкция. Смотри, если мы захотим изменить верстку попапа, мы должны не забыть вернуться в код и переписать этот кусок. Это очень плохо. Я бы сделал попап так:

- сделал шаблон с html-кодом вида

<div>{{message}}</div>....

- этот шаблон поместил бы в тег скрипт с типом text/x-template (чтобы браузер не пытался его выполнить как яваскрипт, почитай: http://learn.javascript.ru/templates#хранение-шаблона-в-документе )

- когда надо отобразить попап, загружаем шаблон из тега скрипт, заменяем в нем message на нужный текст, создаем новый див, вставляем шаблон в innerHTML и добавляем этот див в DOM.

При таком подходе мы можем как угодно менять верстку шаблона, не трогая яваскрипт-код.

> .pop-up-content span {


То же замечание. Не делай селекторов «все спаны внутри .pop-up» так как если ты захочешь поменять там спан на див или добавить пару новых спанов, это все перестанет работать. Лучше используй класс, например .pop-up .message

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

> opacity: 0;


> visibility: hidden;


Для скрытия надо применять display: none — такие элементы не занимают место на странице и для них не просчитывается размер и расположение. А с visibility hidden твой попап занимает место — попробуй убери например position: fixed и увидишь что таблица уедет вниз (на самом деле, попробуй).

Но лучше всего, вообще не вставлять попап в ДОМ пока он не нужен.

> var lostCells = this.width this.height - this.mines;


Я бы это в отдельный метод вынес.

> !cell.isOpened


Я бы просто поставил в начале openCell такое условие: если клетка уже открыта, делаем return

> document.getElementById('pop-up').children[0].children[1]


Надо кнопке дать id и искать по нему

А, еще. В настоящем сапере, чтобы не проиграть первым ходом, мины генерируются после первого клика, открывающего клетку. Если у тебя в программе правильная архитектура, то сделать это не составит труда, я так думаю?
#78 #382973
>>382886

Неплохо, с оформлением стало гораздо лучше. Советы по оформлению:

- белый попап смотрится на сером фоне гораздо лучше, чем серый
- я бы еще сделал попап чуть шире, добавиви поля, так как-то привычнее
- фон дляо ткрытой клеточки я бы сделал посветлее
- для клекток ты выставил фон через linear-gradient. Но надо еще задать серый фон для тех браузеров, которые не поддерживают градиент ( http://caniuse.com/#search=gradient — Ie8/9 например ):

background: ...color..;
background: linear-gradient(...);

Тогда старые браузеры прочтут только первую строчку и используют цвет из нее, а новые — градиент из второй.

Серый оверлей не закрывает всю страницу, слева есть белая полоса — ты наверно забыл сбросить padding/margin на body/html?

Правая кнопка не работает. Что за ерунда?

> popUp.children[0].insertBefore(p, popUp.children[0].children[0]


Вот это нехорошая конструкция. Смотри, если мы захотим изменить верстку попапа, мы должны не забыть вернуться в код и переписать этот кусок. Это очень плохо. Я бы сделал попап так:

- сделал шаблон с html-кодом вида

<div>{{message}}</div>....

- этот шаблон поместил бы в тег скрипт с типом text/x-template (чтобы браузер не пытался его выполнить как яваскрипт, почитай: http://learn.javascript.ru/templates#хранение-шаблона-в-документе )

- когда надо отобразить попап, загружаем шаблон из тега скрипт, заменяем в нем message на нужный текст, создаем новый див, вставляем шаблон в innerHTML и добавляем этот див в DOM.

При таком подходе мы можем как угодно менять верстку шаблона, не трогая яваскрипт-код.

> .pop-up-content span {


То же замечание. Не делай селекторов «все спаны внутри .pop-up» так как если ты захочешь поменять там спан на див или добавить пару новых спанов, это все перестанет работать. Лучше используй класс, например .pop-up .message

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

> opacity: 0;


> visibility: hidden;


Для скрытия надо применять display: none — такие элементы не занимают место на странице и для них не просчитывается размер и расположение. А с visibility hidden твой попап занимает место — попробуй убери например position: fixed и увидишь что таблица уедет вниз (на самом деле, попробуй).

Но лучше всего, вообще не вставлять попап в ДОМ пока он не нужен.

> var lostCells = this.width this.height - this.mines;


Я бы это в отдельный метод вынес.

> !cell.isOpened


Я бы просто поставил в начале openCell такое условие: если клетка уже открыта, делаем return

> document.getElementById('pop-up').children[0].children[1]


Надо кнопке дать id и искать по нему

А, еще. В настоящем сапере, чтобы не проиграть первым ходом, мины генерируются после первого клика, открывающего клетку. Если у тебя в программе правильная архитектура, то сделать это не составит труда, я так думаю?
#79 #382976
>>382898

Ей ничего не передается, потому что эта функция сама создает и возвращает массив объектов-вопросов и аргументы ей не нужны.

> будто она уже готовая.


Так и есть

>>382906

Вот кстати «задачи ОПа» если интересно: https://gist.github.com/codedokode/ce30e7a036f18f416ae0

>>382932

Не знаю.

>>382965

> мне нужно создать библиотеку всех имеющихся тегов?


Нет, зачем? Тебе не надо проверять, правильное ли имя введено или нет — ты просто ищешь элементы с такими именем. То есть если дан селектор 'abcdef' то ты ищешь элементы с именем abcdef, даже несмотря на то, что таких не существует.

Хотя, браузер (кроме ИЕ8 и ниже) разрешает создавать элементы с несуществующими именами и создает для них узлы DOM (элементы напоминают спан по поведению и для них созадется DOM-элемент класса https://developer.mozilla.org/en-US/docs/Web/API/HTMLUnknownElement ). То есть ты можешь написать <mytag>...</mytag> и это будет работать.

>>382886

Еще. Ты проверял свою игру в ИЕ8? Я понимаю, что он не может рисовать круглые уголки и тени (так как не поддерживает CSS3), пусть будут квадратные, но хотя
бы бордер добавь для попапа. Вот паста в помощь: https://gist.github.com/codedokode/855e3970124687b26a1c

Уверен, для тебя это будет интересный и полезный опыт. Ие8 скоро вымрет, но пока иногда приходится под него править верстку.
#79 #382976
>>382898

Ей ничего не передается, потому что эта функция сама создает и возвращает массив объектов-вопросов и аргументы ей не нужны.

> будто она уже готовая.


Так и есть

>>382906

Вот кстати «задачи ОПа» если интересно: https://gist.github.com/codedokode/ce30e7a036f18f416ae0

>>382932

Не знаю.

>>382965

> мне нужно создать библиотеку всех имеющихся тегов?


Нет, зачем? Тебе не надо проверять, правильное ли имя введено или нет — ты просто ищешь элементы с такими именем. То есть если дан селектор 'abcdef' то ты ищешь элементы с именем abcdef, даже несмотря на то, что таких не существует.

Хотя, браузер (кроме ИЕ8 и ниже) разрешает создавать элементы с несуществующими именами и создает для них узлы DOM (элементы напоминают спан по поведению и для них созадется DOM-элемент класса https://developer.mozilla.org/en-US/docs/Web/API/HTMLUnknownElement ). То есть ты можешь написать <mytag>...</mytag> и это будет работать.

>>382886

Еще. Ты проверял свою игру в ИЕ8? Я понимаю, что он не может рисовать круглые уголки и тени (так как не поддерживает CSS3), пусть будут квадратные, но хотя
бы бордер добавь для попапа. Вот паста в помощь: https://gist.github.com/codedokode/855e3970124687b26a1c

Уверен, для тебя это будет интересный и полезный опыт. Ие8 скоро вымрет, но пока иногда приходится под него править верстку.
#80 #382984
>>382973
display: block -> display: none; не анимируется.
#81 #382986
>>382984
А остальное все понятно пока.
#82 #382989
>>382984

А, что-то я не подумал. Тогда можно сначала снять свойство display: none (например убрав класс hidden), а только потом поменять отвечающий за анимацию класс (возможно «потом» придется делать через setTimeout 0).

В твоем случае, если ты будешь вставлять попап в ДОМ, возможно придется сначала вставить невидимый попап, а потом использовать setTimeout для анимации.
дцп-кун #83 #383009
Поясните, почему код такого вида работает:
<?php
$a="899944";
$b="/^8911[0-9]{7}$/";
$c=preg_match($b,$a);
if ($c=1)
{echo "vse verno";}
else { "vy duren";
}
?>
А такого не работает
<?php
$a="899944";
$b="/^8911[0-9]{7}$/";
if (preg_match($b,$a))
{echo "vse verno";}
else { "vy duren";
}
?>
#84 #383015
>>383009

>if ($c=1)


if($c) нужно писать, это во первых, во вторых у тебя один знак равенства - ты присваиваешь единицу к С, а не сравниваешь.
дцп-кун #85 #383016
>>383015
но в таком случае ничего не выводится?
#86 #383018
>>383016
Потому что в твоём примере $c равняется false, и в блоке else нету команды echo, чтобы вывести строку.
дцп-кун #87 #383019
>>383018
спасибо
#88 #383020
>>383009

= значит присвоить значение переменной
== значит проверить, равны ли значения

Не путай.

> else { "vy duren";


echo пропущено

Алсо, пропусти свой код через phpformatter.com ибо он весь перекошен и неправильно отоформтирован.

Алсо, если ты делаешь задачу на номера, то вот еще совет:

Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек! Давай-ка научимся основам автоматического тестирования и заставим железяку проверять саму себя.

Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).

Вот список номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);

Если что-то еще непонятно, спрашивай.
#88 #383020
>>383009

= значит присвоить значение переменной
== значит проверить, равны ли значения

Не путай.

> else { "vy duren";


echo пропущено

Алсо, пропусти свой код через phpformatter.com ибо он весь перекошен и неправильно отоформтирован.

Алсо, если ты делаешь задачу на номера, то вот еще совет:

Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек! Давай-ка научимся основам автоматического тестирования и заставим железяку проверять саму себя.

Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).

Вот список номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);

Если что-то еще непонятно, спрашивай.
#89 #383034
>>382989
http://jsbin.com/xugik/13/edit?js,output

getElementById в gameOver не хочет работать. Даже если this.table написать, все равно не работает.

Градиент я всегда хаком для ie добавляю. Это плохо?

Правый клик не воспринимается. Я отладчиком изучал, но он почему-то не показывает, что возвращает dom.isRegionButton(e, 'right').
#90 #383046
>>383034

Смотри, как надо поступать (и учись пользоваться отладчиком). Открываем страницу http://jsbin.com/vologotinuye/1 и открываем отладчик (я тестировал в Хроме, но наверняка аналогично все в ФФ). В нем переходим на вкладку Scripts, открываем скрипт с названием «1» и ищем там проблемную строчку

dom.addEvent(document.getElementById('pop-up').childr...

(кстати не надо так писать, поиск кнопки надо было сделать отдельной строкой через переменную. И кстати вместо children[0] надо искать кнопку по id).

Ставим на нее брейкпойнкт после чего кликаем по полю пока не найдем мину и не сработает брейкпойнкт.

Когда сработает, переходим в консоль и пишем

document.getElementById('pop-up')

Чтобы проверить, что там. Там null. Тогда открываем вкладку Elements и смотрим что у нас в ДОМе. А в ДОМе мы видим таблицу, а вот попапа не видим. Значит, кто-то забыл его вставить в ДОМ.

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

> Градиент я всегда хаком для ie добавляю. Это плохо?


Это не хак, а фильтры. Ничего плохого в них нет, только надо тестировать, так как с ними возможны какие-то баги. У тебя например у ячеек бордер отвалился (может position: relative поможет?). Если фильтры не заработают нормально, можешь просто серый фон поставить.

> Я отладчиком изучал, но он почему-то не показывает, что возвращает dom.isRegionButton(e, 'right').


Поставь брейкпойнт на событии правого клика и посмотри в консоли чему равно e.which и e.button. Также можешь пошагово прошагать функцию isRegionButton (почему Region кстати?)
#90 #383046
>>383034

Смотри, как надо поступать (и учись пользоваться отладчиком). Открываем страницу http://jsbin.com/vologotinuye/1 и открываем отладчик (я тестировал в Хроме, но наверняка аналогично все в ФФ). В нем переходим на вкладку Scripts, открываем скрипт с названием «1» и ищем там проблемную строчку

dom.addEvent(document.getElementById('pop-up').childr...

(кстати не надо так писать, поиск кнопки надо было сделать отдельной строкой через переменную. И кстати вместо children[0] надо искать кнопку по id).

Ставим на нее брейкпойнкт после чего кликаем по полю пока не найдем мину и не сработает брейкпойнкт.

Когда сработает, переходим в консоль и пишем

document.getElementById('pop-up')

Чтобы проверить, что там. Там null. Тогда открываем вкладку Elements и смотрим что у нас в ДОМе. А в ДОМе мы видим таблицу, а вот попапа не видим. Значит, кто-то забыл его вставить в ДОМ.

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

> Градиент я всегда хаком для ie добавляю. Это плохо?


Это не хак, а фильтры. Ничего плохого в них нет, только надо тестировать, так как с ними возможны какие-то баги. У тебя например у ячеек бордер отвалился (может position: relative поможет?). Если фильтры не заработают нормально, можешь просто серый фон поставить.

> Я отладчиком изучал, но он почему-то не показывает, что возвращает dom.isRegionButton(e, 'right').


Поставь брейкпойнт на событии правого клика и посмотри в консоли чему равно e.which и e.button. Также можешь пошагово прошагать функцию isRegionButton (почему Region кстати?)
#91 #383050
>>383046
Я кстати не могу никак полноценно проверить в IE8. У меня 11й стоит. Только через различные сайты, которые скриншоты делают.
#92 #383070
>>383050

Я пасту давал вроде выше по поводу ИЕ. К сожалению, единственный нормальный способ тестировать код в ИЕ — виртуальные машины (да, для каждой версии ИЕ нужна отдельная). Но поверь, раньше было еще хуже, так как сейчас в ходу 10, 9, 11, и немного 8, а раньше были 6 и 7 (и отладчика в них не было), так что можно легко было целый день потратить на исправления багов.

А так, можешь ссылку скидывать, я могу проверить. В ИЕ9 кстати linear-gradient тоже не работает, а фильтры надо подключать через -ms-filter
#93 #383071
Как относитесь к сайту кодакадеми? Мне кажется очень даже неплохо у них. Есть кучу ящыков. Учить интереснее чем с книг.

И еще такой вопросец: есть тут те кто начиная с курса ОПа начал через какое-то время заниматься фрилансом и зарабатывать? Какие еще знания пришлось подтянуть? Какие проекты берете на одексе?
#94 #383072
>>383071

Там вроде уровень очень базовый, скорее для ознакомления подходит.

> есть тут те кто начиная с курса ОПа начал через какое-то время заниматься фрилансом и зарабатывать? Какие еще знания пришлось подтянуть?


Были аноны (несколько), которые писали что смогли устроиться на работу (не на фриланс) после сидения в нашем треде.
#95 #383077
Треду самое место в /web/. Нужно просто выгнать SEO.
#96 #383092
>>383077
Нет. Мы тут практикуем само программирование и сопутствующие техники ради повышения скиллов, а не каких-то других целей. Этакие теоретики.
#97 #383104
>>383077
Вообще да, но когда я вижу что за пиздец в /web/ я понимаю что даже такому пиздецу как этот тред еще рано туда перекатываться.
#98 #383150
>>383077
Лол.
Это единственный тред в /пр, где реально занимаются программированием, а не кидаются друг в друга говном. Если его выпиливать, то вместе с ним можно выпилить и /пр.
#99 #383152
>>383070
http://jsbin.com/lezipu/4/

Анимация не удалась. С помощью setTimeout сделать?

Mousedown и в правом и в левом клике воспринимаются одинаково. С этим проблема большая.
#100 #383157
>>383152
http://jsbin.com/lezipu/6/

С событиями вроде все наладилось. Если клик происходит между ячейками, то ошибка вылазит.

С анимацией все в силе.

Также generateMines пробовал засунуть в rightClickListener не помогает почему-то даже если вызов происходит после self.openCell.

Наверное у меня архитектура кривая и чтобы переставить одну строчку нужно переписывать весь код, или делать много проверок.
24 Кб, 339x327
#101 #383161
>>383157
Оп, у меня косяк с цифрами и минами.
#102 #383163
>>383161
http://jsbin.com/lezipu/8/

Вроде исправил.
#104 #383168
>>383166
Тебе надо было поймать отладчиком координаты всех мин. Просто я уже раз 100й тестирую, такого у меня не было. Где попадалась 4-ка было все верно.
#105 #383171
>>383166
Ладно, спасибо за скрин, исправил http://jsbin.com/gadiqu/2/
#106 #383182
Оп, 1 раз пишу в этом треде, изучаю Mysql. Когда ввожу mysql -uusername -pPassword пишет: " "mysql" не является внутренней или внешней командой, исполняемой программой или пакетным файлом ". В гугле ничего толкого нет. Подскажи как пофиксить.
#107 #383185
>>383182
Куда вводишь? В командной строке нужно писать путь к файлу, например C:\Programm Files\Mysql\Mysql Server 5.5\bin\mysql.exe -u -p
#108 #383186
>>383185
Да все, спасибо, разорбрался.
#109 #383222
>>383171
http://jsbin.com/gadiqu/3/

Последний вариант. Не дождался ответа сделал анимацию через setTimeout. Все работает кроме winGame.

Посмотри в IE вроде при нажатии там фон не меняется? Я скачал IE tester, но он багнутый какой-то.
#110 #383226
Решил вот вторую бонусную задачу. Постарался учесть все минусы решения первой по стилю и т.д.:
http://ideone.com/laAlb6

А первая бонусная задача, это разновидность "задачи о рюкзаке"?
#111 #383230
Помогите с регулярными циклами.

Есть список слов. Нужно определить слова, в которых повторяется 1-я и 3-я, 2-я и 4-я буква: koko, kaka, mimi.
#112 #383231
>>383230

>регулярными выражениями


быстрофикс
#113 #383232
>>383231
Не уверен, что такое возможно с помощью регулярных выражений, а вот обычным циклом - вполне.
#114 #383234
>>383230
k([a-z])k\1
Насколько я понял обратный слеш с номером позволяет обратиться к предыдущему захваченному скобками подвыражению.
43 Кб, 1776x1452
!ОП # OP #115 #383241
>>383230

Тебе нужны backreferences: http://php.net/manual/ru/regexp.reference.back-references.php

>>383222

Я запустил в ИЕ8. Там не работает клик по клеткам, то есть ничего не происходит. Если посмотреть отладчиком (это по идее ты должен конечно делать), то видно что в событии target.tagName == 'TABLE' то есть ИЕ нам сообщает о клике по таблице, а не по ячейке. Меня это не удивило — я убрал CSS-правила filter/ms-filter и все внезапно заработало. Ну и заодно бордеры появились у ячеек.

Флажки в ИЕ8 ставятся, только из-за каких-то багов он не отображает флажок и мину, выводится просто квадратик.

> Я скачал IE tester, но он багнутый какой-то.


К сожалению, надежно тестировать можно только в виртуалках. Я специально для них нашел урезанные версии XP и 7-ки, где почти все вырезано, так что они у меня занимают лишь 2-3 Гб на диске каждая. Плюс MS на сайте modern.ie выложила уже готовые (лицензионные) образы.
#116 #383242
>>383234
[code](\w{2})\1[/code]
sage #117 #383244
>>383242
Гребаная макака...
`code`?
``code``?
[code]code[/code]?
274 Кб, 580x707
sage #118 #383245
>>383244
Осатанеть.
#119 #383246
<?php

error_reporting(-1);
mb_internal_encoding('utf-8');

$text = "ну что. не смотрел еще black mesa.я собирался скачать ,но все как-то некогда было.";
$r=explode(" ",$text);
echo "$r";
?>
Выдает ошибку Array to string conversion in. В чем причина?
25 Кб, 887x535
#120 #383247
>>383242
Малаца!
#121 #383248
>>383241
http://jsbin.com/suqiji/4/

Оп, хочу подробно рассказать по поводу метода getNumberOpenCells. Я включил отладчик, поставил метку на методе openCells, хотел посмотреть, что возвращает getNumberOpenCells, но оно не показывало. И вообще странно как-то, он практически мимо условия (this.getNumberOpenCells == lostCells) проходит.

Поставил метку на методе getNumberOpenCells, так отладчик совсем там не останавливает по клику. Ну и еще один пруф был console.log(openCells) тоже не сработало.

Оп, рассуди. Ну и generateMines некуда засунуть.
#122 #383250
Вот вроде есть решение бонусной задачи №3 (Считалка), а вроде и нет:
http://codepad.org/bXUKN6Dv
Не пойму, в чем причина. Хелп ми плз!
#123 #383251
В первой задаче на классы не работает этот код.
// Функция, создающая массив с вопросами:
function createQuestions()
{
$questions = array();

$q = new Question;
$q->text = ...
...
// Кладем вопрос в массив
$questions[] = $q;

$q = new Question;
...

return $questions;
}
В переменную $q надо что-то дописывать или нет?
#124 #383252
>>383250
помогли уже, оказалось что нет return при вызове в ветке else! Вообщем вот окончательный вариант:
http://codepad.org/PwiBZQFI
!ОП # OP #125 #383257
>>383222

Не работает клик по клетке с флажком. Или это специально?

> .pop-up-content p


Надо использовать класс вместо p

> <span class="newGame">


Для кнопок есть тег button, стоит его использовать.

> if (target.tagName != 'SPAN'


Та же ошибка. Проверяй не по имени тега, а по уникальному id или классу. Или может проще дать кнопке id и искать ее по id.

В фаерфоксе когда в клетке появляется флажок или бомба, ее высота увеличивается и таблица чуть съезжает, очень некрасиво. Это лечится, видимо, указанием line-height (кстати почему она не указана? всегда когда пишешь font-size надо указывать и line-height).

Победа не работает скорее всего из-за этого:

> this.openCells++;


> return;


> if (this.openCells == lostCells) {


> this.winGame();



Там встречается 2 раза

dom.addEvent(this.table, 'mousedown',...

Можно обработчики объединить в одну функцию.
!ОП # OP #125 #383257
>>383222

Не работает клик по клетке с флажком. Или это специально?

> .pop-up-content p


Надо использовать класс вместо p

> <span class="newGame">


Для кнопок есть тег button, стоит его использовать.

> if (target.tagName != 'SPAN'


Та же ошибка. Проверяй не по имени тега, а по уникальному id или классу. Или может проще дать кнопке id и искать ее по id.

В фаерфоксе когда в клетке появляется флажок или бомба, ее высота увеличивается и таблица чуть съезжает, очень некрасиво. Это лечится, видимо, указанием line-height (кстати почему она не указана? всегда когда пишешь font-size надо указывать и line-height).

Победа не работает скорее всего из-за этого:

> this.openCells++;


> return;


> if (this.openCells == lostCells) {


> this.winGame();



Там встречается 2 раза

dom.addEvent(this.table, 'mousedown',...

Можно обработчики объединить в одну функцию.
#126 #383262
>>383246

> В чем причина?


echo "$r";

Массив нельзя вывести с помощью echo (и нельзя вставить внутрь строки), echo выводит только строки и числа. Чтобы вывести массив пиши var_dump($r); или print_r($r);

>>383182

Вот еще паста по командной строке, там объяснено почему mysql не работает у тебя (каталога нет в PATH): https://gist.github.com/codedokode/10539568

Также, полный путь лучше писать в двойных кавычках, а то там есть пробелы:

"C:\Programm Files\Mysql\Mysql Server 5.5\bin\mysql.exe" -u -p

>>383222

> document.body.innerHTML += popUp;


Никогда так не делай. Это верный способ получить кучу трудноразрешимых проблем. Смотри, эта команда фактически делает такую вещь:

- создает html-код содержимого body
- добавляет к нему popUp
- удаляет все содержимое body (вместе с обработчиками событий например)
- вставляет новый tml-код

Надо создавать див и добавлять через appendChild.

В setTimeout можно использовать 0, будет работать.

В winGame и gameOver копипаста. Надо ее убрать и сделать метод вроде showPopup(message)
#126 #383262
>>383246

> В чем причина?


echo "$r";

Массив нельзя вывести с помощью echo (и нельзя вставить внутрь строки), echo выводит только строки и числа. Чтобы вывести массив пиши var_dump($r); или print_r($r);

>>383182

Вот еще паста по командной строке, там объяснено почему mysql не работает у тебя (каталога нет в PATH): https://gist.github.com/codedokode/10539568

Также, полный путь лучше писать в двойных кавычках, а то там есть пробелы:

"C:\Programm Files\Mysql\Mysql Server 5.5\bin\mysql.exe" -u -p

>>383222

> document.body.innerHTML += popUp;


Никогда так не делай. Это верный способ получить кучу трудноразрешимых проблем. Смотри, эта команда фактически делает такую вещь:

- создает html-код содержимого body
- добавляет к нему popUp
- удаляет все содержимое body (вместе с обработчиками событий например)
- вставляет новый tml-код

Надо создавать див и добавлять через appendChild.

В setTimeout можно использовать 0, будет работать.

В winGame и gameOver копипаста. Надо ее убрать и сделать метод вроде showPopup(message)
68 Кб, 604x1300
#127 #383265
>>383226

В utf-8 буквы состоят из нескольких байт (русские — из двух). Потому функции вроде strlen, substr, обращение к стоке как к массиве — не работают. Не используй их.

Потому твой код ничего не выводит на ideone — твой код пытается вывести битые символы и ideone отказывается их выводить.

> foreach ( $txtArr as $line ) {


> array_push($txtLines, rtrim($line));


Это лучше написать в 1 строку с помощью array_map

> $maxLineLen = max($lenOfTxtLines);


Это тоже.

> strlen($line));


strlen считает число байт, а не число букв. Смотри пикредейтед.

> foreach ( range(0, ($lineLength - 1))


тут надо использовать for. Какой смысл создавать массив и обходить его вместо того чтобы использовать цикл со счетчиком? В PHP так не пишут.

Вместо выравнвиания строк по моему, проще просто в цикле проверять, если мы вышли за край строки то выводить пробел.

> $chunk[$elem]


К строке нельзя обращаться как к массиву, PHP не Питон (точнее, обращаться можно но она вернет не N-ю букву, а N-й байт строки, в utf-8 буква состоит из нескольких байт и ты в итоге получишь битые символы). Используй mb_substr.

Писать return 1 по моему нет смысла так как это ничего не значит (все равно функция других значений не вернет) и никак не используется. Да и почему 1? Что за странное магическое число?

> А первая бонусная задача, это разновидность "задачи о рюкзаке"?


Если с купюрами по 200 то да. Если без то нет.
68 Кб, 604x1300
#127 #383265
>>383226

В utf-8 буквы состоят из нескольких байт (русские — из двух). Потому функции вроде strlen, substr, обращение к стоке как к массиве — не работают. Не используй их.

Потому твой код ничего не выводит на ideone — твой код пытается вывести битые символы и ideone отказывается их выводить.

> foreach ( $txtArr as $line ) {


> array_push($txtLines, rtrim($line));


Это лучше написать в 1 строку с помощью array_map

> $maxLineLen = max($lenOfTxtLines);


Это тоже.

> strlen($line));


strlen считает число байт, а не число букв. Смотри пикредейтед.

> foreach ( range(0, ($lineLength - 1))


тут надо использовать for. Какой смысл создавать массив и обходить его вместо того чтобы использовать цикл со счетчиком? В PHP так не пишут.

Вместо выравнвиания строк по моему, проще просто в цикле проверять, если мы вышли за край строки то выводить пробел.

> $chunk[$elem]


К строке нельзя обращаться как к массиву, PHP не Питон (точнее, обращаться можно но она вернет не N-ю букву, а N-й байт строки, в utf-8 буква состоит из нескольких байт и ты в итоге получишь битые символы). Используй mb_substr.

Писать return 1 по моему нет смысла так как это ничего не значит (все равно функция других значений не вернет) и никак не используется. Да и почему 1? Что за странное магическое число?

> А первая бонусная задача, это разновидность "задачи о рюкзаке"?


Если с купюрами по 200 то да. Если без то нет.
#128 #383270
>>383248

> хотел посмотреть, что возвращает getNumberOpenCells, но оно не показывало.


Отладчик показывает только значения переменных (Хром при наведении мыши, фаерфокс в правой панели). Чтобы увидеть что возвращает метод, перейди в консоль во время останова и набери там любой код. Либо сохраняй результат вызова в переменную.

Либо же (что может быть удобнее) добавь этот метод в панель Watch expressions - там можно писать любые выражения и он сам будет их пересчитывать при изменении. Впиши туда например this.getNumberAroundMines(cell) и он будет вызывать эту функцию и отображать ее значение после каждого шага.

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

Ты должен уметь полноценно использовать отладчик. Он может сэкономить много времени при правиьном использовании. Если что-то еще непонятно, спрашивай, я подскажу.

В Хроме например есть «условные точки останова» — можно указать условие и точка сработает только если оно выполняется, они ставятся правой кнопкой мыши. Можно делать шаг с заходом в функцию (Step In), а можно перепрыгнуть (Step Over).

> И вообще странно как-то, он практически мимо условия (this.getNumberOpenCells == lostCells) проходит.


Может оно не выполняется?

> Поставил метку на методе getNumberOpenCells, так отладчик совсем там не останавливает по клику



надо ставить не на определении функции, а на первой строке кода то есть

function x() {
#129 #383274
>>383262

> Массив нельзя вывести с помощью echo (и нельзя вставить внутрь строки), echo выводит только строки и числа. Чтобы вывести массив пиши var_dump($r); или print_r($r);


Пиздец же, как вы на этом говне пишете?
мимо проходил
#130 #383276
>>383265
Спасибо. Надо все внимательно прочитать все-таки, и забывать про питон, когда кодираю на пхп и наоборот.
#131 #383277
>>383251

> В первой задаче на классы не работает этот код.


Как это не работает? выдает ошибку? Возващает не то что надо? Пиши чуть больше подробностей.

> В переменную $q надо что-то дописывать или нет?


Не знаю, если не хочешь можешь не дописывать.

>>383252

> main( range(1, $total), $skip );


Логичнее наверно просто передавать $total.

Да и писать main смысла особого нет − в Си его пишут так как там нет кода вне функций, а в PHP код можно писать вне функций.

return 1 не имеет никакого смысла и ничего не делает — раз так, не надо его писать. Если ты хочешь вернуть код возврата, пиши в конце exit(0);, хотя 0 и так возвращается по умолчанию. Но писать return 1 неправильно.

Ты используешь рекурсию. Это не очень хорошая идея, так как в некоторых конфигуациях PHP может быть оганичени на число вложенных вызовов, порядка 100 или около того. Ну для этой задачи хватит, но ты должен помнить об этом и не пытаться писать рекусивные решения для больших объям ов данных.

> foreach ( $result as $num ) {


> print $num . " ";


исользуй implode вместо цикла.
#132 #383279
>>383274

>здец же, как вы на этом говне пишет


А в каком языке массив можно подставить прямо в строку через подстановку переменных? Да в половине языков вообще нет интерполяции строк

Ты наркоман наверно
#133 #383373
Какие есть легковесные аналоги "шторму"? На винду. А еще лучше кросс.
#134 #383378
>>383373
Никаких.
#135 #383407
4 задание почему-то не взлетело, решил взяться сразу за 5. Набросал такой код http://jsfiddle.net/xcLq3d48/ пока анимируются только самые простые св-ва в пикселях. ОП, прокомментируй пжлст.
#136 #383409
>>383407
Хм. Заметил крупный косяк со временем исполнения анимации - она почему намнооого дольше чем нужно.
#137 #383413
>>383407
Походу очередность выполнения кода в js это отдельная большая тема.
#138 #383416
Сап Анон! Выручай! Дали задачку тестовую .
У меня идеи как ее решать есть, но боюсь что идеи не совсем верные , хочу у тебя совета спросить .
Вот собственно задачка:
написать класс логера
должно быть 3 метода debug, info, error
У класса две настройки: уровень логирования и куда логировать (файл/firePHP)

Объясни пожалуйста как ее правильно решить?
П.с. Не могу понять в чем разница между 3 методами?
И правильно ли я понимаю что в зависимости от уровня логирования, вызывается тот или иной метод?
Примерно так :
Logger::start (1,1,$msg) , где 1- уровень логирования ,1 - тип записи , gms - сообщение.
Следовательно сам код метода :
static function start ($level ,$type , $mgs){
if ($level ==1){
self::info ($msg);
}
elseif ($level == 2){
self ::debug($msg);
}
} - ну и т.д.
#139 #383426
#140 #383449
http://jsbin.com/suqiji/6/

Оп, вроде все твои замечания учел. Только generateMines я не могу понять куда правильней засунуть.

Решился уже вчера поставить винду с ie8 на virtualbox. Качал с modern.ie, так у меня ничего не вышло, только куча ошибок, однозначного ответа на которые в гугле нет. Сам virtualbox после запуска либо зависает, либо закрывается. Понял, что не судьба.

Посмотри на код. На архитектуру. Меня смущает, что Game только создает Field и больше ничего не делает. Код хорошо читается?
#141 #383458
>>383416

> задачку тестовую


Сочувствую твоему работодателю если по результатам выполнения этой задачи тебя берут на работу\фриланс etc.
#142 #383528
>>383416

Тестовое задание должно проверяет твои, а не наши знания. Не забывай. В данном случае, видимо проверяют знание ООП.

> П.с. Не могу понять в чем разница между 3 методами?


Лучше всего в таком случае спросить у того, кто задал задачу. Я думаю, разница в том, что перед сообщением пишется [warning], [error] или что-то еще. У некоторых логгеров также есть настройка «не логгировать сообщения ниже определенной важности», там это может использоваться.

Также, прежде чем делать, посмотри на другие логгеры:

- стандарт PSR-3 для логгеров: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md (англ)

- библиотека Monolog https://github.com/Seldaek/monolog (англ)

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

> Примерно так :


> Logger::start (1,1,$msg)


Нет конечно. Где здесь ООП? Использоват статические методы — все равно что использовать функции. Надо сделать нормальный объект. Ты наверно мой урок по ООП не проходил, иначе сам бы увидел что это не то.

Вместо чисел надо использовать константы.

> И правильно ли я понимаю что в зависимости от уровня логирования, вызывается тот или иной метод?


Нет. Есть 3 метода, какой хочешь такой и вызывыаешь.
#143 #383529
>>383458

Задача унылая, но знания ООП проверяет — я вижу кучу ошибок например. И чем тебе не нравятся тестовые задания? Это практически единственный способ проверить джуниора. На словах-то все Львы Толстые, такого в резюме напишут что Керни и Ричиган отдыхают в сторонке.
!ОП #144 #383542
>>383407

> 4 задание почему-то не взлетело


А почему? Может тебе подсказку надо дать? Разбор селектора на массив объектов сделал? Потом по ним надо сделать поиск через рекурсию или цикл.

> пока анимируются только самые простые св-ва в пикселях. ОП, прокомментируй



Ну так у тебя только на пиксели код и рассчитан вроде бы. Там же px дописывается ко всему. А что не анимируется? opacity? Там числа дробные.

По идее надо смотреть на название свойства и выбирать метод для парсинга значения, для прозрачности один, для размеров — другой, неподдерживаемые свойства не анимировать (а то при попытке записать в color значение в пикселях вполне может вылететь исключение).

А, еще отдельный if нужен для поддержки scrollLeft/scrollTop. Это не стиль, а свойство, но оно тоже должно анимироваться.

По идее, в той же jquery в $.animate() еще анимируется цвет (а еще они принимает проценты, которые тоже сама вычисляет), но это надо писать разбор цвета в CSS-выражении на ARGB компоненты, это заморочно, я решил это в задачу не добавлять.

> this.duratrion = (duratrion || 0.3) 1000000;


Почему на миллион умножаешь? Ты в чем меряешь время?new Date().getTime() возвращает целое число в миллисекундах, 1 мс = 1/1000 секунды.

> new Date().getTime();


В ES5 появилось Date.now(), до этого некоторые писали еще +newDate() (но это напоминает хак, в учебной задачке так писать не стоит).

Ты поддержку старых ИЕ8 будешь пилить? Там нет ES5 (в том числе function.bind), а вместо getComputedStyle() надо писать node.currentStyle.width (мануал: http://msdn.microsoft.com/en-us/library/ie/ms535231(v=vs.85).aspx (англ))

> var progressPercent = 100 - Math.floor(100 (this.end - time) / this.options.duratrion);


Как-то сложно. Нельзя попроще записать? Например (текущее - начаьное) / длительность 100. Округлять ни в коем случае не надо, иначе анимация будет дерганой. Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).

> currentAnimated[prop] = (this.animatedValue[prop] (progressPercent / 100)) | 0;


Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.

Алсо, что это за | 0? Это битовая операция, она фактически делает округление, но надо тогда писать его явно (а не с помощью хаков), да и лучше поместить в getStringValue().

> this.animationLoop = setInterval(function() {


Тело функции надо сделать отдельным методом, а то там слишком много кода. Также. вместо setInterval надо использовать requestAnimationFrame там, где он есть:

Кстати, прочти еще тут http://proverstka.com.ua/blog/css-ili-js-animaciya-chto-bystree-velocity/ про группировку чтения и записи в DOM.

> if (progressPercent >= 100) {


> this.stopAnimation();


Сначала надо выставить значения свойств а потом заканчивать анимацию.

> if ((typeof this.options.onTick) == 'function') {


Можешь проверять просто через if (this.options.onTick) — если кто-то передал туда не функцию то сам виноват.

> this.timeout = 10;


Меньше 16 ставить смысла нет так как LCD-мониторы обновляются обычно с частотой 60 FPS. Если ты рисуешь больше кадров в секунду, то часть из них просто не отобразится.

> Animation.prototype.getInitValue


Не надо сохранять тут все свойства, надо только анимируемые.

> return Number(match[0]);


Лучше наверно использовать parseInt(x, 10) или parseFloat(x) (чем лучше? не знаю, наверно тем что это специально придуманная для этого функция).

> getDigital


Правильнее назвать parseCssValue

> strProp.match(/\d+/);


Ты бы хоть проверял что число идет в начале. Алсо, дробная часть теряется. Алсо, я помню, раньше getComputedStyle работала как повезет: поведет — вернет в пикселях, не повезет — в процентах или чем-нибудь еще — но сейчас вроде это исправили.

> function AnimationOptions(duratrion, onEnd, onTick) {


Я бы наверно не делал тут ради 3 свойств отдельный класс, а перенес бы эту функцию внутрь основного объекта. Соответственно и код вызова анимации проще получится.
!ОП #144 #383542
>>383407

> 4 задание почему-то не взлетело


А почему? Может тебе подсказку надо дать? Разбор селектора на массив объектов сделал? Потом по ним надо сделать поиск через рекурсию или цикл.

> пока анимируются только самые простые св-ва в пикселях. ОП, прокомментируй



Ну так у тебя только на пиксели код и рассчитан вроде бы. Там же px дописывается ко всему. А что не анимируется? opacity? Там числа дробные.

По идее надо смотреть на название свойства и выбирать метод для парсинга значения, для прозрачности один, для размеров — другой, неподдерживаемые свойства не анимировать (а то при попытке записать в color значение в пикселях вполне может вылететь исключение).

А, еще отдельный if нужен для поддержки scrollLeft/scrollTop. Это не стиль, а свойство, но оно тоже должно анимироваться.

По идее, в той же jquery в $.animate() еще анимируется цвет (а еще они принимает проценты, которые тоже сама вычисляет), но это надо писать разбор цвета в CSS-выражении на ARGB компоненты, это заморочно, я решил это в задачу не добавлять.

> this.duratrion = (duratrion || 0.3) 1000000;


Почему на миллион умножаешь? Ты в чем меряешь время?new Date().getTime() возвращает целое число в миллисекундах, 1 мс = 1/1000 секунды.

> new Date().getTime();


В ES5 появилось Date.now(), до этого некоторые писали еще +newDate() (но это напоминает хак, в учебной задачке так писать не стоит).

Ты поддержку старых ИЕ8 будешь пилить? Там нет ES5 (в том числе function.bind), а вместо getComputedStyle() надо писать node.currentStyle.width (мануал: http://msdn.microsoft.com/en-us/library/ie/ms535231(v=vs.85).aspx (англ))

> var progressPercent = 100 - Math.floor(100 (this.end - time) / this.options.duratrion);


Как-то сложно. Нельзя попроще записать? Например (текущее - начаьное) / длительность 100. Округлять ни в коем случае не надо, иначе анимация будет дерганой. Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).

> currentAnimated[prop] = (this.animatedValue[prop] (progressPercent / 100)) | 0;


Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.

Алсо, что это за | 0? Это битовая операция, она фактически делает округление, но надо тогда писать его явно (а не с помощью хаков), да и лучше поместить в getStringValue().

> this.animationLoop = setInterval(function() {


Тело функции надо сделать отдельным методом, а то там слишком много кода. Также. вместо setInterval надо использовать requestAnimationFrame там, где он есть:

Кстати, прочти еще тут http://proverstka.com.ua/blog/css-ili-js-animaciya-chto-bystree-velocity/ про группировку чтения и записи в DOM.

> if (progressPercent >= 100) {


> this.stopAnimation();


Сначала надо выставить значения свойств а потом заканчивать анимацию.

> if ((typeof this.options.onTick) == 'function') {


Можешь проверять просто через if (this.options.onTick) — если кто-то передал туда не функцию то сам виноват.

> this.timeout = 10;


Меньше 16 ставить смысла нет так как LCD-мониторы обновляются обычно с частотой 60 FPS. Если ты рисуешь больше кадров в секунду, то часть из них просто не отобразится.

> Animation.prototype.getInitValue


Не надо сохранять тут все свойства, надо только анимируемые.

> return Number(match[0]);


Лучше наверно использовать parseInt(x, 10) или parseFloat(x) (чем лучше? не знаю, наверно тем что это специально придуманная для этого функция).

> getDigital


Правильнее назвать parseCssValue

> strProp.match(/\d+/);


Ты бы хоть проверял что число идет в начале. Алсо, дробная часть теряется. Алсо, я помню, раньше getComputedStyle работала как повезет: поведет — вернет в пикселях, не повезет — в процентах или чем-нибудь еще — но сейчас вроде это исправили.

> function AnimationOptions(duratrion, onEnd, onTick) {


Я бы наверно не делал тут ради 3 свойств отдельный класс, а перенес бы эту функцию внутрь основного объекта. Соответственно и код вызова анимации проще получится.
#145 #383547
>>383413

А что не так? Давай разберемся.

>>383449

Сделать флаг «сгенерировано ли поле» а в openCell поставить условие:

если (поле не сгенерировано) { сначала сгенерировать поле }

> Качал с modern.ie, так у меня ничего не вышло, только куча ошибок, однозначного ответа на которые в гугле нет.


Ты виндоуз не смог установить что ли? Печалька.

> Сам virtualbox после запуска либо зависает, либо закрывается.


Может у тебя версия просто кривая? Ты с официального сайта качал? Сколько памяти выделил виртуалке? Я ставлю 384 Мб для XP и 512 МБ для семерки (на то чтобы открыть 1 страницу в браузере этого хватает).

Там еще могут быть проблемы с 32- и 64-битными ОС, если пытаться из-под одной запускать другую.

Ну если у тебя не идет виртуалбокс (что странно), там есть образы например для VMWare player или microsoft virtual PC.

> Меня смущает, что Game только создает Field и больше ничего не делает.


Точно! Как я не заметил! gameOver и winGame (и showPopup) естественно должны быть в классе Game, а не Field. Только вот как это сделать, ведь Game не получает события кликов. Надо либо слушатели событий переместить в Game, либо ликвидировать его совсем.

> dom.toggleClass(document.getElementById('pop-up'), 'inactive');


тут логичнее сделать addClass.

> dom.addEvent(document.getElementById('pop-up'),


А почему ты не хочешь сразу на кнопку повесить событие?

Вообще, код нормальный. Конечно, в openCell и clickListener как-то многовато кода, но это мелочи.

Насчет ИЕ8 — там не работает темный оверлей при выигрыше/проигрыше (так как в нем нет opacity — правда есть фильтр Opacity, но возможно он с подвохами аналогично градиенту). Я бы там еще добавил бордер для попапа, а то светлый попап выводится на светлом фоне. Можно использовать CSS-хак чтобы бордер добавился только в ИЕ. Но в остальном, все работает.
#145 #383547
>>383413

А что не так? Давай разберемся.

>>383449

Сделать флаг «сгенерировано ли поле» а в openCell поставить условие:

если (поле не сгенерировано) { сначала сгенерировать поле }

> Качал с modern.ie, так у меня ничего не вышло, только куча ошибок, однозначного ответа на которые в гугле нет.


Ты виндоуз не смог установить что ли? Печалька.

> Сам virtualbox после запуска либо зависает, либо закрывается.


Может у тебя версия просто кривая? Ты с официального сайта качал? Сколько памяти выделил виртуалке? Я ставлю 384 Мб для XP и 512 МБ для семерки (на то чтобы открыть 1 страницу в браузере этого хватает).

Там еще могут быть проблемы с 32- и 64-битными ОС, если пытаться из-под одной запускать другую.

Ну если у тебя не идет виртуалбокс (что странно), там есть образы например для VMWare player или microsoft virtual PC.

> Меня смущает, что Game только создает Field и больше ничего не делает.


Точно! Как я не заметил! gameOver и winGame (и showPopup) естественно должны быть в классе Game, а не Field. Только вот как это сделать, ведь Game не получает события кликов. Надо либо слушатели событий переместить в Game, либо ликвидировать его совсем.

> dom.toggleClass(document.getElementById('pop-up'), 'inactive');


тут логичнее сделать addClass.

> dom.addEvent(document.getElementById('pop-up'),


А почему ты не хочешь сразу на кнопку повесить событие?

Вообще, код нормальный. Конечно, в openCell и clickListener как-то многовато кода, но это мелочи.

Насчет ИЕ8 — там не работает темный оверлей при выигрыше/проигрыше (так как в нем нет opacity — правда есть фильтр Opacity, но возможно он с подвохами аналогично градиенту). Я бы там еще добавил бордер для попапа, а то светлый попап выводится на светлом фоне. Можно использовать CSS-хак чтобы бордер добавился только в ИЕ. Но в остальном, все работает.
#146 #383548
>>383529
Я про то, что он не может решить простейшую задачу и даже не понимает куда копать, а представленное "решение" - полный абзац. Собственно потому я работодателю и сочувствую, если он в итоге его наймет. Задача тут ни при чем.
#147 #383555
>>383548

Ну не беда, это только потому, что он не изучал нормально ООП и аналогичные библиотеки, изучал бы — с легкостью бы написал.
#148 #383557
>>383458
Чо насели? Задание реально мутное, чо должны эти методы делать?
#149 #383562
Оп, хочу сделать игру в веб, ну хоть того же дурака. Как я понимаю, с php тут не по пути, и вообще нужно мутить отдельный сервис, который будет принимать подключение от клиентов, даром, что из браузера через ajax?
#150 #383563
>>383562
толстовато
#151 #383566
>>383563
В каком месте? Игра понятно между живыми человеками, корованы грабить нельзя.
На php мне видится это только в виде сохранения каждого действия за столом в дб и дрочением php каждую, скажем, секунду. Не тру.
#152 #383568
>>383566
иди читай про веб сокеты или лучше почитай просто пых, сдается мне счетчик прочитанных страниц у тебя маленький
!ОП #153 #383573
>>383562

Это можно сделать на PHP, но не очень эффективно на каждый ход перезагружать страницу. Лучше конечно делать на JS + аякс/вебсокеты + PHP, но если цель именно изучение PHP то можно и чисто на нем делать.
!ОП #154 #383574
>>383562

> принимать подключение от клиентов, даром, что из браузера через ajax?


А в чем проблема аякс-запросы на PHP обрабатывать-то? Ну будет игрок каждую секунду допустим слать запрос «что нового», ты ему будешь отвечать «пока ничего». Если нужно более оперативное обновление то есть вебсокеты, и штуки вроде http://dklab.ru/lib/dklab_realplexor/
#155 #383576
>>383566

> сохранения каждого действия за столом в дб


Сохранять все равно надо иначе перезагрузка сервера/падение программы убьет все игровые сеансы.
#156 #383578
>>383566

>сохранения каждого действия за столом в дб и


Тут кстати монга подошла бы, можно в нее писать лог игры.
#157 #383581
>>383578
А чо не просто sql?
#158 #383585
>>383581

Он тоже подходит, но говорят что монга умеет быстро вставлять данные (ценой снижения надежности) и шардиться, а при большом числе игроков там будет много вставок. Там наверно надо сделать каждое событие в игре отдельной записью (записи объединяются по id игрового сеанса и сортируются по номеру или временной метке).
#159 #383600
http://ideone.com/QcLu9R
Не пойму, почему на Петра скрипт не работает, а на все остальные имена работает. Вроде я поставил ё в регулярное выражение.
#160 #383605
>>383600
другие имена с ё проверял?
#161 #383606
>>383605
Да, вроде все с ё не работают.
#162 #383612
>>383606
чо с кодировкой? какая стоит?
#163 #383613
>>383612
Там же в начале стоит
mb_internal_encoding('utf-8');
#164 #383614
>>383613
а если ё убрать? класс а-я и так имеет ё
#165 #383615
>>383614
Там её изначально и не было. Да и оп говорил, что ё не входит в промежуток а-я.
#166 #383616
Делаю уроки из ОП поста. Раньше писал хэлловолрды на питоне.
Поясните пожалуйста:
1) Почему не рекомендовано использовать подчёркивание в переменных? Почему для переменных вырвиглазный mixedCase, вместо легко читаемого lower_case_with_underscores?
2) В чём профит скобкодроча и ;дроча, если всё равно рекомендовано форматировать код отступами?
3) Есть ли аналог команды pass?
#167 #383618
Начал делать задание 4.

http://jsbin.com/cuwah/2/edit?js,console

Отладчиком уже прошелся, регулярки правильно работают, все как надо. Почему возвращается undefined? И почему console.log(possibleTags) игнорируется на 52й строке? Условие с dom.hasClass выполняется.
#168 #383620
ОП, ответь пожалуйста.
Пробуюсь устроиться на работку. В тестовом задании прислали файл dump.sql в котором описано создание двух таблиц и из этого файла я должен буду брать данные.
Я правильно понимаю, что мне нужно в phpmyadmin создать БД и импортировать в нее этот файл?
#169 #383621
>>383618
Оп, извини, все понял. В последнее время совершаю глупые ошибки.
#170 #383629
>>383620

Ага. Можешь и через консоль импортнуть (лучше сразу привыкай). Например, в Postgres это будет так: `createdb mydb && psql mydb -f <file.sql>`.
#171 #383634
Оп, я тут написал пару вариантов:
div.class
div.class div.class2
div .class
.class div
.class .class
.class
.class.class
.class.class .class.class
.class#id div.class
#id
div#id

Так вот. Если есть один пробел, то у нас в селекторе два тега, если два, то 3 тега, при этом, если нет знаков ['>', '+', '~', ','].

Я себе это представляю так: ищем сначала тег до первого пробела, после первого пробела ищем тег в уже найденом первом с помощью рекурсии и т.д.? Но если на пути встречаем /пробел ['>', '+', '~', ','] пробел/ или просто ['>', '+', '~', ','] без пробелов (ведь можно записать ul > li, а можно - ul>li), то включаем другой алгоритм. Допустим с этим понятно. Но правильно ли я придумал?

Теперь есть варианты .class.class, div.class. Я не понял из твоего задания, разве кто-то пишет .parent#some-id? Ведь id один на всю страницу и писать нужно просто #id.

Распиши, как примерно должно быть.
#172 #383683
>>383557

Тебе же написали выше ответ, что должны делать. Должны запись в лог доавлять с соответствующим уровнем важности.

>>383600

$reg='/[а-яА-Яё]+\s/';

Ты забыл флаг u (utf-8) в конце, без него регулярка будет поддерживать только латинницу. Всегда ставь этот флаг. Алсо, буква ё в юникоде идет не после «е», а отдельно, посмотри сам: http://unicode-table.com/ru/#cyrillic и потому надо писать a-яА-ЯёЁ

Также, советую пропустить код через phpformatter.com, у тебя отступы все куда-то уехали.

> if($week<=40){


> $normal=$week+$normal;


Это можно заменить на функцию min() — будет короче и удобнее.

Алсо, getOvertimeHours можно упростить и записать ее в 1 строчку как

Все часы - нормальные часы

> while(mb_strlen($string)<$length){


> $string=$string." ";


Используй str_repeat вместо цикла.

Алсо, у тебя там куча ошибок вроде

> PHP Notice: Undefined variable: overtime in /home/KLXSSs/prog.php on line 32



Их надо исправить.
#172 #383683
>>383557

Тебе же написали выше ответ, что должны делать. Должны запись в лог доавлять с соответствующим уровнем важности.

>>383600

$reg='/[а-яА-Яё]+\s/';

Ты забыл флаг u (utf-8) в конце, без него регулярка будет поддерживать только латинницу. Всегда ставь этот флаг. Алсо, буква ё в юникоде идет не после «е», а отдельно, посмотри сам: http://unicode-table.com/ru/#cyrillic и потому надо писать a-яА-ЯёЁ

Также, советую пропустить код через phpformatter.com, у тебя отступы все куда-то уехали.

> if($week<=40){


> $normal=$week+$normal;


Это можно заменить на функцию min() — будет короче и удобнее.

Алсо, getOvertimeHours можно упростить и записать ее в 1 строчку как

Все часы - нормальные часы

> while(mb_strlen($string)<$length){


> $string=$string." ";


Используй str_repeat вместо цикла.

Алсо, у тебя там куча ошибок вроде

> PHP Notice: Undefined variable: overtime in /home/KLXSSs/prog.php on line 32



Их надо исправить.
!ОП #173 #383685
>>383614

В юникоде буква ё стоит отдельно, смотри сам: http://unicode-table.com/ru/#cyrillic

>>383616

> Почему не рекомендовано использовать подчёркивание в переменных? Почему для переменных вырвиглазный mixedCase


Вырвиглазный — это дело привычки и вопрос времени. Со временем привыкаешь, я сам когда-то писал по-другому. Мне кемелкейс теперь больше нравится. Почему, точно не знаю (влияние java может быть?), но в стандарте PSR-1 написано:

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md

> Class names MUST be declared in StudlyCaps.


> Method names MUST be declared in camelCase.



Там в PSR2 есть ниже обзор существовавших ранее крупных фреймворков и CMS, какие стили они предпочитают: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#appendix-a-survey

Подавляющее большинство (21 из 22) поддерживает именно такой подход. Раз так, то и мы поддерживаем. У вас в Питоне есть стандарт оформления кода — у нас тоже есть.

Мне лично не нравятся подчеркивания, лишний визуальный мусор (имхо).

> В чём профит скобкодроча и ;дроча, если всё равно рекомендовано форматировать код отступами?


В PHP, в отличие от Питона, отступы и новые строки игнорируются при компиляции программы. Потому на них полагаться нельзя и надо ставить скобки и точки с запятой явно, такие правила языка. Есть еще конструкции с двоеточием, они ( http://php.net/manual/ru/control-structures.alternative-syntax.php ) используются в шаблонах ради читабельности, так как скобки там банально теряются в куче других символов:

<?php foreach (...): ?>
<p><?= $text ?></p>
<?php endforeach ?>

Если ты возьмешь питоновский дзиндзя — внезапно — там такой же синтаксис, с endfor/endif: http://jinja.pocoo.org/docs/dev/templates/#for

Двоеточие (и скобка) нужно, чтобы отметить что это начало блока кода (а не одна инструкция). Дело в том что PHP наследовал синтаксис от Си, а там можно писать единичную инструкцию без скобок:

if (...) одна_инструкция;
if (...) { много; инструкций; }

Не использование скобок оказалось крайне дурной идеей (так как часто приводит к ошибкам) и от него отказались, но синтаксис остался.

> Есть ли аналог команды pass?


Она не нужна (ха-ха, хоть в чем-то у нас синтаксис лучше). В PHP, в отличие от Питона не обязательно ставить инструкцию после if/for, точка с запятой вполне сойдет:

if (условие); // if без тела
for (...);
foreach (...);
function test() {} // пустая функция
class A {}

У нас в таких случаях так пишут.
!ОП #173 #383685
>>383614

В юникоде буква ё стоит отдельно, смотри сам: http://unicode-table.com/ru/#cyrillic

>>383616

> Почему не рекомендовано использовать подчёркивание в переменных? Почему для переменных вырвиглазный mixedCase


Вырвиглазный — это дело привычки и вопрос времени. Со временем привыкаешь, я сам когда-то писал по-другому. Мне кемелкейс теперь больше нравится. Почему, точно не знаю (влияние java может быть?), но в стандарте PSR-1 написано:

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md

> Class names MUST be declared in StudlyCaps.


> Method names MUST be declared in camelCase.



Там в PSR2 есть ниже обзор существовавших ранее крупных фреймворков и CMS, какие стили они предпочитают: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#appendix-a-survey

Подавляющее большинство (21 из 22) поддерживает именно такой подход. Раз так, то и мы поддерживаем. У вас в Питоне есть стандарт оформления кода — у нас тоже есть.

Мне лично не нравятся подчеркивания, лишний визуальный мусор (имхо).

> В чём профит скобкодроча и ;дроча, если всё равно рекомендовано форматировать код отступами?


В PHP, в отличие от Питона, отступы и новые строки игнорируются при компиляции программы. Потому на них полагаться нельзя и надо ставить скобки и точки с запятой явно, такие правила языка. Есть еще конструкции с двоеточием, они ( http://php.net/manual/ru/control-structures.alternative-syntax.php ) используются в шаблонах ради читабельности, так как скобки там банально теряются в куче других символов:

<?php foreach (...): ?>
<p><?= $text ?></p>
<?php endforeach ?>

Если ты возьмешь питоновский дзиндзя — внезапно — там такой же синтаксис, с endfor/endif: http://jinja.pocoo.org/docs/dev/templates/#for

Двоеточие (и скобка) нужно, чтобы отметить что это начало блока кода (а не одна инструкция). Дело в том что PHP наследовал синтаксис от Си, а там можно писать единичную инструкцию без скобок:

if (...) одна_инструкция;
if (...) { много; инструкций; }

Не использование скобок оказалось крайне дурной идеей (так как часто приводит к ошибкам) и от него отказались, но синтаксис остался.

> Есть ли аналог команды pass?


Она не нужна (ха-ха, хоть в чем-то у нас синтаксис лучше). В PHP, в отличие от Питона не обязательно ставить инструкцию после if/for, точка с запятой вполне сойдет:

if (условие); // if без тела
for (...);
foreach (...);
function test() {} // пустая функция
class A {}

У нас в таких случаях так пишут.
!ОП #174 #383686
>>383634

Ты знаешь регулярные выражения? Тут удобнее их использовать. Сначала разбиваем строку по пробельным символам на массив, затем проходим по нему и анализируем регуляркой.

> Если есть один пробел, то у нас в селекторе два тега,


Почему? Может у нас там 10 пробелов между именами 2 тегов. И с краев еще пару.

> ищем сначала тег до первого пробела,


Обходить строку посимвольно крайне неэффективно и усложняет код. Тут надо использовать регулярные выражения. Если ты их не знаешь, я могу нагуглить ссылку/ что-то подсказать.

И даже когда надо парсить строку посимвольно (например чтобы разобрать математическое выражение, код программы, или любой другой язык), обычно используют другой подход. Делают так:

- сначала по строке проходится токенайзер и разбивает ее на массив токенов (один класс или символ = токен или лексема), например:

"div .class#id div > li" -> ['div', '_', '.', 'class', '#', 'class', '>', 'li' ]

Я обозначил пробел подчеркиванием для наглядности. Это называется лексический анализ. В массиве токенов нет пробелов, комментариев, того, что не имеет значения.

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

[
{ tag: 'div' },
{ classes: ['class'], id: 'id', prev: ANCESTOR },
{ tag: 'li', prev: CHILD },
]

Вот пример такого кода: http://habrahabr.ru/post/122397/ (там Ява, но суть-то та же). Если тебе будет интересна эта тема, разбор выражений, я могу подкинуть задачку вроде калькулятора со скобками или разбора текста программы в дерево.

Но в этой задаче такие сложности ни к чему, тут регулярками проще разбрать. Сначала по пробелу, потом по символам точки/хеша. А остальное поддерживать не требуется.
!ОП #174 #383686
>>383634

Ты знаешь регулярные выражения? Тут удобнее их использовать. Сначала разбиваем строку по пробельным символам на массив, затем проходим по нему и анализируем регуляркой.

> Если есть один пробел, то у нас в селекторе два тега,


Почему? Может у нас там 10 пробелов между именами 2 тегов. И с краев еще пару.

> ищем сначала тег до первого пробела,


Обходить строку посимвольно крайне неэффективно и усложняет код. Тут надо использовать регулярные выражения. Если ты их не знаешь, я могу нагуглить ссылку/ что-то подсказать.

И даже когда надо парсить строку посимвольно (например чтобы разобрать математическое выражение, код программы, или любой другой язык), обычно используют другой подход. Делают так:

- сначала по строке проходится токенайзер и разбивает ее на массив токенов (один класс или символ = токен или лексема), например:

"div .class#id div > li" -> ['div', '_', '.', 'class', '#', 'class', '>', 'li' ]

Я обозначил пробел подчеркиванием для наглядности. Это называется лексический анализ. В массиве токенов нет пробелов, комментариев, того, что не имеет значения.

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

[
{ tag: 'div' },
{ classes: ['class'], id: 'id', prev: ANCESTOR },
{ tag: 'li', prev: CHILD },
]

Вот пример такого кода: http://habrahabr.ru/post/122397/ (там Ява, но суть-то та же). Если тебе будет интересна эта тема, разбор выражений, я могу подкинуть задачку вроде калькулятора со скобками или разбора текста программы в дерево.

Но в этой задаче такие сложности ни к чему, тут регулярками проще разбрать. Сначала по пробелу, потом по символам точки/хеша. А остальное поддерживать не требуется.
#175 #383687
Есть список стран, которые мы вытащили из таблицы.
Как при выборе конкретной страны отобразить список городов, которые находятся в другой таблице?
#176 #383689
Установил себе пакет денвер. Мускул не работает, логин пароль - рут и пустые поля вводил и так и этак, в доступе отказывает. может надо мускул скачать отдельно?
#177 #383691
>>383689

А MySQL запущен? Скачивать отдельно наверно смысла нет, 2 mysql все равно нельзя одновременно запустить, надо тут разобраться, почему не работает, скорее всего пароль все-таки есть или ты еще что-то перепутал. Покажи код и какое сообщение об ошибке пишется.
#178 #383692
>>383687

Если это ты мне в почту писал, то я ответил, яваскрипт нужен.
#179 #383698
>>383691
Пишет, в доступе отказано. Ты еблан что ли? я уже написал это.
#180 #383720
>>383687
sql запрос с joinом, или два запроса, сначала получаем страну, потом по стране ищем города, связь один ко многим, матчасть хромает друг
#181 #383752
http://ideone.com/QcLu9R
Опчик, как исправить предупреждение о неопределенных переменных в методах? Определение внутри метода не помогает.
#182 #383754
Как в пхп замапить функцию gzopen на gzopen64?
А то у меня тут сторонние пхпульки, они используют везде gzopen, а в моем пхп вместо gzopen только gzopen64
В гугле кроме отчаяния от таких как я ничего не нашел
Говорят это какой-то баг из-за сконпелированного пхп с large file support, причем аж с 2009 года
Ставил пхп из убунтореп, версия 5.5.9
sage #183 #383759
>>383754
А впрочем ладно, буду gzopen64 юзать
#184 #383762
>>383752
Закрой <?php (?>), дубинушка и форматирование в порядок приведи, читать невозможно.
sage #185 #383764
>>383762
Закрывать пхп для лошков
#186 #383767
>>383762

> Закрой <?php (?>), дубинушка


Ты ебанутый что ли?
#187 #383779
>>383752
строчка какая?
#188 #383783
>>383779
Не знаю, ошибки пропали после прогона через пхпформаттер. С чего бы это вдруг?
#189 #383784
>>383752
а пока по порядку: свойства должны быть private, ибо нехуй. $normal = $normal + 40 легко заменяется на $normal += 40, $overtyime = $overtime + 0 вообще вызывает когнитивный диссонанс, $overtime у тебя строкой может быть что ли?
#190 #383786
>>383784
Овертайм может быть пустой переменной, и в таблице не отображаться. Мне нужно, чтобы там был хотя бы ноль. Ну и я делал по лекалам уроков опа, там public стоит везде.
#191 #383788
ну короче свойства все-таки нужно private делать, лучше сделать паблик метод getСвойство
#192 #383811
Кстати, в задаче про компанию Вектор, исходные данные о сотрудниках, которые можно изменять это ведь их количество в каждом департаменте? Просто у меня получается монструозная функция с 10 аргументами, которая принимает эти данные от пользователя, и я не совсем уверен, что я на правильном пути.
#193 #383812
Поясните про битрикс. Тут вакансия стажера есть без з/п на 1-2 месяца, какие подводные?
#194 #383814
>>383783
Форматтер создал тебе переменные овертайм и нормал перед циклами и присвоил им 0.
Ты не можешь писать $var = $var + 10, если переменная $var ещё не создана, тебе сначала нужно сделать $var = 0.
#195 #383816
Оп, поясни кое что за юникод. Реши использовать везде utf8 как ты и пишешь в уроках, но этот BOM уже пару раз делал BOM моей заднице в поисках "откуда эти ебучие квадратики лезут??!!?!!11" и странностями разбора json.

Из последнего. Есть php скрипт в utf8. На ней скажем if (i=1) ставлю header json и простое echo json_encode(...), по дефолту - обычный текст.
Но понадобился мне сторонний скрипт (тоже в utf8) перед выдачей json, я его подключаю в if (перед header) - и все перестает работать! Натурально, содержимое ответа в браузере НИКАК не меняется, строка верная, а json.parse ее не разбирает ни в какую.
Полдня возни, исключений и прихожу к тому, что без include все ок. В итоге ставлю формат подключаемого файла "без BOM" - и о блядские боги кодировок - все работает!

Это все к чему - решил поделится опытом и спросить - есть еще какие-нибудь идиотские проблемы на этой почве? Нервы я себе убил знатно. Тем более что кодировка основного файла была utf8 c BOM и все работало. Херня какая-то.
#196 #383818
>>383814
Форматтер ничего не создавал (да и как такое возможно, разве он может создавать переменные?), это я их там поставил, но только ошибки не пропали, пока я не отфарматировал код.
#197 #383819
>>383818
Это было нахер чудо )
#198 #383860
Полез тут в javascript и все желание программировать вообще отбило.
Как люди вообще им пользуются?
#199 #383863
ОП, а у тебя есть вышка по специальности программист? А то я 11 класс, думаю поступить в левый вуз, а в свободное время работать, к 23 годам уже будет опыт и скиллы.Норм же?
#200 #383868
>>383863
Ничего не будет. Вуз даже самый наихуевейший будет отнимать у тебя слишком много времени, так что полноценно работать ты не сможешь.
#201 #383869
>>383868
Я учусь и полноценно работаю в веб-студии по 8 часов. Все в прядке, брат жив.
#202 #383870
>>383860
Привыкнешь, я так же сначала подумал.
#203 #383892
>>383860
Просто ты дно ебаное, не способное осилить этот прекрасный язык. Уходи.
#204 #383894
http://jsbin.com/wiwopu/2/edit?js,console

Почему "#good" проходит на 54 строке? Я указал начало и конец слова. В \w не входит #.
#205 #383896
Нормально решил задачу на палиндром?
http://ideone.com/JoUZoa
#206 #383898
>>383892
сам дно, мудила, могу поспорить, что ты до замыкание даже не дочитал
#207 #383899
>>383896
На ошибки посмотри.

Undefined variable: halfLenght, потому что у тебя $halflenght

И break; тут не нужен. Оно и так завершится.

У тебя если не палиндром, то все равно пишет палиндром.

Пруф http://ideone.com/9Wokhh
63 Кб, 858x760
#208 #383911
>>383898

>кок-кок-кок замыкания пок


Ебать дибил. Их только даун осилить не сможет.

>даже не дочитал


Забавно заходить в ваш тред и проигрывать над потугами бедных обезьянок не могущих даже написать простенький роутер на пыхоговне. Фублядь.
Объясняй сука, что код на пике делает, иначе дно ебаное.
Ах да, оп - хуй.
!ОП #209 #383913
>>383911

> пишет черным по темно-серому


> пришел самоутверждаться в тред для начинающих


> принес какую-то простыню с быдлокодом под ноду

#210 #383914
>>383911
Ты в самом деле кодишь с такой подсветкой или ты специально аргументы функций черным покрасил чтобы никто ничего не понял? Быдлокод под ноду обрабатывает запросы и отдает какие-то файлы с учетом поддерживаемого сжатия (accept-encoding)

мимо
sage #211 #383915
>>383911

>говнокод


>разберись


это удел таких имбецилов как ты
111 Кб, 600x600
#212 #383916
>>383913

>в тред для начинающих


Ну не плачь, макак, ты сможешь еще набыдлокодить кучу говна, я знаю.
>>383913>>383914

>быдлокод


Так и скажите, что не осилили. Зачем ругаться?

>Ты в самом деле кодишь с такой подсветкой или ты специально аргументы функций черным покрасил чтобы никто ничего не понял?


Да, использую черную подсветку, ибо отчетливо видны аргументы. Рекомендую.

>обрабатывает запросы и отдает какие-то файлы с учетом поддерживаемого сжатия


Смотрите-ка, а это макака не так безнадежна.
#213 #383919
>>383916

Чтобы понять что это быдлокод, не обязательно даже знать ноду. Подумай на досуге, почему.
#214 #383920
>>383911
Что такое роутер?
#215 #383921
>>383920

Компонент,разбирающий URL запроса и определеяющий, кто (например какой контроллер и какая функция его) будет его обрабатывать.
#216 #383926
>>383911

> фолдинг


> эти цвета


> эта лапша



Бля, как будто в 8 класс вернулся

Успешный Haskell-кун
#217 #383927
исправил ошибки с палиндромом, но все равно и палиндром, и не палиндром пишет верно.
В чем дело?
http://ideone.com/vwLY6A
21 Кб, 697x436
#218 #383930
>>383916

> Зачем ругаться?


Я думал там что-то интересное\поехавшее будет типа пикрелейтед.

> Смотрите-ка, а это макака не так безнадежна.


Насмешил, содомит! Въеб\ЖС\Нода - тройной зашквар, а ты с таким кодом - эталонная въеб-макака. Хуже тебя только гвидоно-дауны. Сочувствую если тебе такое по работе писать приходится.
#219 #383931
>>383927
floor($lenght)/2 - floor округляет дробное число, поэтому floor($lenght/2)

Для for нет скобок {}

mb_strlen($text) - тебе нужна длина $stroka, а не $text

Цикл в твоем коде никакого смысла не несет, ведь у тебя сравниваются только 2 буквы в середине. После выхода из цикла.
#220 #383946
я установил слишком много мускулов и теперь база данных в пхп не реаботает. удалить их не могу. wut do?
33 Кб, 951x369
#221 #383948
Ладно-ладно, братишки, я вам поменьше быдлокода принес. То же самое, что здесь >>383911, но переписанное по моему разумению.

>>383920
У меня во дворе за такие вопросы тебя бы на ноль поделили бы, пидор.

>>383919

>это быдлокод, не обязательно даже знать ноду. Подумай на досуге, почему


Т.е., то, что ты не осилил - быдлокод? Вот это обосрышь. Иди подотрись, лалка. Я этот код за минуту понял и на вторую переписал для таких как ты лахов, не умеющих в запутанный код.

>>383926

>Бля, как будто в 8 класс вернулся


А сейчас ты уже в девятом, да, петушок? Портфель на завтра собрал?
Хаскелепетушки ничем не отличаются от пыхомакак, разве, что тем, что первые просто хуиту пишут вместо кода.

>>383930

>интересное\поехавшее будет типа пикрелейтед


Матлаб? Проблевался.
#222 #383953
>>383948

Посмотрите на этого петушка с кучей глобальных переменных, считающего верхом мастерства костыль, который у JS вместо наследования.
#223 #383954
>>382412
ОП, есть одна картинка, которую пользователь заливает в качестве аватара посредством формы. Помимо это мне нужно, чтобы он смог выбрать нужную область в картинке, которая и будет аватаром, как это сделано в вк и моеммире, например.

Использую я эту библиотеку http://odyniec.net/projects/imgareaselec/. Но не суть.
Как я понимаю, мне нужно залить оригинал картинки на сервер, затем джаваскриптом при сабмите показывать этот оригинал, потом другой формой передавать координаты и ширину выбранную пользователем в экшн, который ее обрежет. Вот код http://pastebin.com/7iQS72tp.

Но тут возникает подводный камень, я не могу не использовать event.preventDefault(), потому что картинка понятное дело исчезнет, но и использовать не могу.

Как быть, может есть более удобный способ?
#225 #383956
>>383954
http://jsfiddle.net/ea5ssnc9/
Пастебину явно не нравится мой код.
#226 #383958
>>383954

зачем делать 10 форм? Клади координаты в скрытые инпуты и пусть они субмитятся вместе с формой.

Алсо, код отстойный, моим глазам было больно на него смотреть.
42 Кб, 625x500
#227 #383989
Анон, я пока на "Вы" с ООП, но тут дали задание привести код в соответствиями с принципами ООП, чтобы можно было использовать в настоящем проекте типо.
Help wanted (PHP).
http://ideone.com/LZ6bUk
#228 #383991
>>383989
Я нихуя не понял, но зачем тебе тут ООП и прочее?
http://ideone.com/TPc4uT
#229 #383999
>>383953

>с кучей глобальных переменных


> мастерства костыль, который

183 Кб, 1500x912
8 Кб, 494x254
#230 #384000
>>383953

>с кучей глобальных переменных


>nodejs


Пик рилейтед.

>считающего верхом мастерства костыль, который у JS вместо наследования.


Что макак, удивлена, что можно программировать без черезжопного наследования в говно-пхп? Мои соболезнования.
#231 #384018
>>383948

> Матлаб? Проблевался.


Матлаб с Lua (аналог JS, кстати) перепутать - это надо уметь.

>>384000

> говно-пхп


Каким бы говном ни был пых, JS - червь пидор от мира ООП.

> черезжопного наследования


То-то жс-обезьяны уже 20+ либ реализующих модули\классы через хитро закрученные жопки понаписали, кол-во аналогичных велосипедов вообще исчислению не поддается. Прототипы - паллиативное ООП для нищих от мира динамико-дрисни, в котором так-то ни классов, ни интерфейсов, ни типов, ни черта одним словом.
221 Кб, 1920x1080
#232 #384032
>>384018

>Lua


Нинужно.

>JS - червь пидор от мира ООП


Успешной реализующий С++ - парадигму ООП в полной мере. Если обезьянка не может написать класс даже на жс - то это блядь просто пиздец.

>же 20+ либ реализующих модули\классы понаписали


Нинужно. Экзотика для любителей пхп-лапши. О таких либах в обыденности помышляют только обезьянки перешедшие с говноязыков на божественный JS с удивлением обнаружившие, что НАСЛЕДОВАТЬ нельзя, затем бегущие в гугл искать +20 либ для реализации наследования., Смекаешь?
#233 #384034
ОП, что в задаче про сотрудников Вектора подразумевается под

>Программа должна быть сделана так, чтобы исходные данные о сотрудниках можно было легко поменять.


Вот так http://ideone.com/ueUz0b достаточно легко?
sage #234 #384035
>>384032

>на божественный JS


Господи, ты настолько долбоеб что мне даже обоссать тебя лень.
#235 #384037

> Успешной реализующий С++ - парадигму ООП в полной мере


С++ парадигма - это обобщённое метапрограммирование на полутипизированных макросах. Да и даже если бы не это, всё равно непонятно, как можно соотносить все эти виртуальные деструкторы с прототипным петушением.
223 Кб, 1083x873
#236 #384042
>>384035
Еще один неосилятор порвался. Иди питоноговна накати, питух.

>>384037

>все эти виртуальные деструкторы с прототипным петушением.


Я конечно осознаю, что для узкого мозга обезьянок в купе с байтопидорами слишком трудно понять концепцию прототипирования, особенно после всевозможного наследования где надо и не надо, но с другой стороны - наследование в жс - не особо нужно. Я бы сказал - нинужно. В крайних случая жжения подойдет и прототип. Смекаешь?
#237 #384046
>>384032
Какая-то неотдебаженная хуета у тебя на пике.
В одном случае sad() должна возвращать строго булево значение, а в другом - уже объект.

Переполнения стека тебе желаю!

var Ololo = function(){
return new Ololo;
}
sage #238 #384047
>>384042
Я вижу у тебя еще и детектор работает как и жс, то undefined, то неосилятор.
#239 #384048
>>384046
Картинка анрилейтед. Не знаю какой быдлокодер писал код на ней, но ты не первый кто заметил пиздец в функции.

>Переполнения стека тебе желаю!


И я тебе!
#240 #384052
>>384048

> Картинка анрилейтед. Не знаю какой быдлокодер писал код на ней, но ты не первый кто заметил пиздец в функции.


Просто в этом глубинный смысл. Перестать грустить не получится никогда.
324 Кб, 600x909
#241 #384053
>>384032

> Нинужно. Экзотика для любителей пхп-лапши.


Лапши? Рор! Интересно как ты свой быдлокод с >>383948 и >>383911 ласково называешь?

> О таких либах в обыденности помышляют только обезьянки


То-то они даже в ноде есть: https://github.com/joyent/node/blob/master/lib/module.js

>>384042

> слишком трудно понять концепцию прототипирования


Ковыряние в хеш-таблицах (не нашел в объекте - посмотри в прототипе) - по-твоему сложно понять? Не смеши.

> наследование в жс - не особо нужно. Я бы сказал - нинужно.


Сначала "Успешной реализующий С++ - парадигму ООП в полной мере", теперь - пикрелейтед. Что ж разрабы божественной ноды все время в прототип-то лезут, окаянные!
https://github.com/joyent/node/search?q=prototype+path%3Alib
#242 #384057

>Один из серверных языков программирования (PHP5, Java или Python)


Выходит они взаимозаменяемы? Или чем больше знаешь тем лучше?
#243 #384060
>>384057
Для серверсайда можно учить практически любой язык.
#244 #384061
>>384060
даешь node.js! пыхари пидорасы
#245 #384062
>>384061
А причем тут js? Это не сервер сайд.
#246 #384067
>>384062
Серверсайд принимает на вход строку и выдает другую. Это может сделать любой язык.
#247 #384069
>>383931
А как сравнить именно две одинаковые половины?
Никак не могу понять.
Тот же уебок с палиндромом.
#248 #384070
>>384052

>Просто в этом глубинный смысл. Перестать грустить не получится никогда.



Переходи на божественный JS и все получится
http://jsfiddle.net/pwe6uk1b/2/
#249 #384072
>>384070
return блеать один! это так сложно? объявить ебаный result и возвращать его?
#250 #384073
>>384069
У тебя там много мелких ошибок, например нету скобок в цикле и поэтому весь скрипт работает некорректно.
#251 #384074
>>384072

>return блеать один! это так сложно? объявить ебаный result и возвращать его?


Лолка, ну попробуй, объяви и возвращай (и код покажи, ололо). Пиздец, еще учит...
#252 #384077
>>384073
только мелкие ошибки? А сам алгоритм норм?
Мне же надо половины сравнить, а я лишь одну букву сравниваю, как сравнить половины?
#253 #384079
>>384077
Во первых скрипт при каждой итерации цикла будет выводить текст. Лучше изначально сделать переменную равную строке, допустим "палиндром", а в цикле, если какой-то символ не прошел проверку, то переменной будет присваиваться строка "не палиндром" и уже вне цикла мы выводим переменную и узнаем что в ней. Во вторых переменная, что проверяет символы с конца начнет проверять с 0ого символа, а потом с последнего (в твоем примере первые два значения у переменной будут "А, а") и будет отставать на 1 символ от переменной, которая проверяет с начала.
дцп-кун 2 !LzTWNzTigQ #254 #384080
>>384077
вот код умника. Что значит переменная с точкой и почему у меня она не работает
http://ideone.com/QrVm4z
9 Кб, 601x249
#255 #384082
>>384080
Читал этот урок? Переменная с точкой это почти тот же инкремент, только для строк.
#256 #384083
>>384080
И кстати, этот код любую строку считает за палиндром, так что он не корректен.
#257 #384084
>>384083
надо развивать культуру дебага, он ведь даже не попытался вставить не палиндром, сценарий дебага такой же важный сценарий любого кода как и сам код
#258 #384087
>>384083
Он их просто не переворачивает на самом деле.
#259 #384088
>>384087
ну я о том же, просто это важный аспект, который почему то все недооценивают, и вот как бы наглядный пример
63 Кб, 624x734
#260 #384089
>>384053

>быдлокод


>быдлокод


>быдлокод


Тебя заклинило там? Объясни мне чем код со второго пика плох, иначе макак-простой.

>То-то они даже в ноде есть:


Но ведь речь шла о классах, зачем ты так? Нормально же общались...(((

>по-твоему сложно понять? Не смеши.


Это сложно для пхп-макак и прочих обезьянок.

>разрабы божественной ноды все время в прототип-то лезут, окаянные!


Как что-то плохое.
#261 #384110
>>383958
>>383954

>зачем делать 10 форм?


Потому что я мудило и изначально мысли поплыли совсем не в ту сторону. Отсюда весь огород с формами и ивентами, которые мне не нужны в данном случае.
#262 #384137
>>382572
Все никак не доделаю - http://jsbin.com/nunifubuqido/1/edit. Опять ошибка. Как можно по шагам посмотреть ход программы? Чтобы понять, как вознкиает ошибка. Я правильно контекст объекта в makeAdditive записал?
#263 #384157
>>383542

>Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).


Дробное значение в пикселях?

>Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.


Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.

>Не надо сохранять тут все свойства, надо только анимируемые.


Дак я только их и храню. Тебя может комментарии ввели в заблуждение?

>вместо setInterval надо использовать requestAnimationFrame


Вот за это спасибо, не знал про такую плюшку.

Вот впилил эту плюшку http://jsfiddle.net/xcLq3d48/3/ Есть пока только св-ва в пикселях, это можно не комментировать.
#264 #384158
>>383542

>Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).


Дробное значение в пикселях?

>Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.


Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.

>Не надо сохранять тут все свойства, надо только анимируемые.


Дак я только их и храню. Тебя может комментарии ввели в заблуждение?

>вместо setInterval надо использовать requestAnimationFrame


Вот за это спасибо, не знал про такую плюшку.

Вот впилил эту плюшку http://jsfiddle.net/xcLq3d48/3/ Есть пока только св-ва в пикселях, это можно не комментировать.
#265 #384159
>>383542

>Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).


Дробное значение в пикселях?

>Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.


Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.

>Не надо сохранять тут все свойства, надо только анимируемые.


Дак я только их и храню. Тебя может комментарии ввели в заблуждение?

>вместо setInterval надо использовать requestAnimationFrame


Вот за это спасибо, не знал про такую плюшку.

Вот впилил эту плюшку http://jsfiddle.net/xcLq3d48/3/ Есть пока только св-ва в пикселях, это можно не комментировать.
#266 #384160
>>384137
дебаг использовать, я вот в нетбинсе юзаю
#267 #384162
>>384157
>>384158
>>384159
Ебать я упоролся.
#268 #384172
http://jsbin.com/wiwopu/6/edit?js,console

Оп, вроде разделяет на нужные составляющие. Но что дальше делать я пока не придумал (но попытался).

Благодаря .parent#some-id мне пришлось немного потрудиться. Я вот лично не встречал, чтобы кто-нибудь писал подобным образом. Ведь если есть id, то и уточнять классом не имеет смысла.

И да, куда ты пропал?
#269 #384173
>>384159
А что четвертое не стал делать? Полезно же.
#270 #384213
>>383720

Он наверно спрашивал как сделать чтобы при выборе значения в первом обновлялся второй селект.

>>383754

Не знаю. Лучше всего наверно переписать код либо воспользоваться runkit: http://php.net/manual/ru/function.runkit-function-redefine.php

>>383752

Я вижу, ошибка уже исправилась. Вот тогда другие советы:

> $normal = $week + $normal;


Тут можно короче написать $normal += $week;

> } else {


> $overtime = $overtime + 0;


Эта команда ничего не делает, значит весь блок else можно и нужно убрать.

> public function getOvertimeHours()



Тут можно не писать цикл, в просто вычесть из общей суммы часов нормальные часы.

> echo padRight("Сотрудник", $col1) . padLeft("Ставка", $col2)


Слишком длинная строка, я бы после каждой точки переходил на следующую строку.

> $hours = $hours + $employee->getTotalHoursWorked();


Тут тоже можно бы += написать

А так, кроме этих мелочей, все правильно, там тебя дальше ждет еще задача про ООО вектор, ее реши обязательно, она полезная. Не забудь там применить наследование и абстрактные классы. И давай в следующей задаче использовать только private/protected свойства. В этой пусть будет public, так как упор тут не на них.
#270 #384213
>>383720

Он наверно спрашивал как сделать чтобы при выборе значения в первом обновлялся второй селект.

>>383754

Не знаю. Лучше всего наверно переписать код либо воспользоваться runkit: http://php.net/manual/ru/function.runkit-function-redefine.php

>>383752

Я вижу, ошибка уже исправилась. Вот тогда другие советы:

> $normal = $week + $normal;


Тут можно короче написать $normal += $week;

> } else {


> $overtime = $overtime + 0;


Эта команда ничего не делает, значит весь блок else можно и нужно убрать.

> public function getOvertimeHours()



Тут можно не писать цикл, в просто вычесть из общей суммы часов нормальные часы.

> echo padRight("Сотрудник", $col1) . padLeft("Ставка", $col2)


Слишком длинная строка, я бы после каждой точки переходил на следующую строку.

> $hours = $hours + $employee->getTotalHoursWorked();


Тут тоже можно бы += написать

А так, кроме этих мелочей, все правильно, там тебя дальше ждет еще задача про ООО вектор, ее реши обязательно, она полезная. Не забудь там применить наследование и абстрактные классы. И давай в следующей задаче использовать только private/protected свойства. В этой пусть будет public, так как упор тут не на них.
#271 #384214
>>383786

Надо 0 присваивать в начале чтобы не был никогда пустой строкой. Если переменная может быть и строкой и числом — это бардак.

> Ну и я делал по лекалам уроков опа, там public стоит везде.


да, это верно, не слушай того анона, а в следующей задаче переходи на private/protected. Это так называемая инкапсуляция, когда прямой доступ к свойству имеет только сам класс, а не вся программа. Это делает код более надежным, а классы менее связанными друг с другом (то есть один класс не лезет внутрь другого, а лишь вызвает разрешенные методы). Инкапсуляция особенно важна когда код станет большим и там будет не 1, а сотни и тысячи классов — в таком объеме без нее никак.

>>383788

В начале мы изучаем другие вещи, вообще учим пользоваться классами, а только потом переходим к инкапсуляции.
!ОП #272 #384218
>>383811

> исходные данные о сотрудниках, которые можно изменять это ведь их количество в каждом департаменте?


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

> Просто у меня получается монструозная функция с 10 аргументами, которая принимает эти данные от пользователя, и я не совсем уверен, что я на правильном пути.


Это слишком много. Не надо ничего принимать от пользователя, если ты используешь ООП то ты можешь просто создать нужные объекты. Ну или хотя бы массив использовать.

>>383812

Работать за бесплатно

>>383816

> Реши использовать везде utf8


> о этот BOM уже пару раз делал BOM моей заднице


А зачем ты всавляешь BOM? Ты сам и виноват, многие программы не понимают BOM и соответственно не игнорируют его, и он воспринимается как ошибка. Всегда сохраняй все файлы без BOM.

Чтобы определить есть ли в файле BOM, скачай себе hex-редактор ( https://ru.wikipedia.org/wiki/Hex-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80 ) — например HxD или любой другой — он показывает все содержимое файла как есть, включая невидимые символы. Может он тебе потом еще для чего-нибудь пригодится.

> Натурально, содержимое ответа в браузере НИКАК не меняется,


Просто BOM невидим при отображении текста (но для программы, разбирающей JSON он как раз видим и воспринимается как мусор). Используй hex-редактор (например сохрани страницу из браузера и открой им) — и увидишь разницу. В твоем случае DOM стоял в начале файла до <?php и интерпретатор просто вывел его как есть (и тем самым все сломал).

> есть еще какие-нибудь идиотские проблемы на этой почве?


Нет. Единственная проблема была в том, что ты зачем-то решил вставлять в файлы этот БОМ.

А, вспомнил. Блокнот Windows зачем-то вставляет BOM при сохранении в юникоде. Не используй его, используй любой нормальный редактор.

>>383860

Жизнь боль
!ОП #272 #384218
>>383811

> исходные данные о сотрудниках, которые можно изменять это ведь их количество в каждом департаменте?


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

> Просто у меня получается монструозная функция с 10 аргументами, которая принимает эти данные от пользователя, и я не совсем уверен, что я на правильном пути.


Это слишком много. Не надо ничего принимать от пользователя, если ты используешь ООП то ты можешь просто создать нужные объекты. Ну или хотя бы массив использовать.

>>383812

Работать за бесплатно

>>383816

> Реши использовать везде utf8


> о этот BOM уже пару раз делал BOM моей заднице


А зачем ты всавляешь BOM? Ты сам и виноват, многие программы не понимают BOM и соответственно не игнорируют его, и он воспринимается как ошибка. Всегда сохраняй все файлы без BOM.

Чтобы определить есть ли в файле BOM, скачай себе hex-редактор ( https://ru.wikipedia.org/wiki/Hex-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80 ) — например HxD или любой другой — он показывает все содержимое файла как есть, включая невидимые символы. Может он тебе потом еще для чего-нибудь пригодится.

> Натурально, содержимое ответа в браузере НИКАК не меняется,


Просто BOM невидим при отображении текста (но для программы, разбирающей JSON он как раз видим и воспринимается как мусор). Используй hex-редактор (например сохрани страницу из браузера и открой им) — и увидишь разницу. В твоем случае DOM стоял в начале файла до <?php и интерпретатор просто вывел его как есть (и тем самым все сломал).

> есть еще какие-нибудь идиотские проблемы на этой почве?


Нет. Единственная проблема была в том, что ты зачем-то решил вставлять в файлы этот БОМ.

А, вспомнил. Блокнот Windows зачем-то вставляет BOM при сохранении в юникоде. Не используй его, используй любой нормальный редактор.

>>383860

Жизнь боль
#273 #384227
>>383863

Нет, я вроде бы инженер по специальности. Кстати, я сейчас подумал, нас учили не так и плохо. На том же Хабре недавно был пост от тян (а до него другие посты), про то какое плохое сейчас образование, преподы сами ничего не знают, и т.д., я сейчас сравниваю, у нас вроде не все так плохо было. Из того, что я помню:

- поставили в универе линук
- изучали Паскаль под MSDOS (я его знал, но не любил никогда, так что по-быстрому написал что требовалось и забыл как страшный сон)
- изучали ворд (в универе, да)
- изучали фотошоп, норм
- изучали флеш, надо было сделать какую-нибудь анимацию или ролик
- изучали базы данных, только не MySQL, а Access (надо было что-то создать с БД, формами и немного кода на Visual Basic). Мне понравилось то, что там можно менять оформление, шрифты, ставить любые цвета. Вообще, для своих задач Access хороший и понятный инструмент
- изучали PHP/MySQL (и наверно HTML), надо было сделать расписание, ООП и архитектуру не изучали, так что я по-быстрому накривокодил длинную простыню в стиле книг «PHP за 24 часа» и перешел к придумыванию дизайна (вроде получилось более-менее аккуратно)
- изучали старый 16-битный ассемблер под ДОС, Си, немного изучали Яву, надо было написать консольную программу с использованием сокетов, изучали сами сокеты и компьютерные сети, я помню, все мучались с расчетом маски сети, изучали SQL и реляционную алгебру (я ничего не запомнил)
- писали что-то под микроконтроллеры, не помню какой архитектуры, может быть ARM, может нет, там еще была такая плата с кнопкой, микросхемами и светодиодами и надо было чтобы она умела ими мигать.
- изучали полупроводники, электротехнику (ад какой-то, с комплексными числами и уравнениями), что-то паяли
- изучали bash и работу в командной строке
- изучали английский (а до этого в школе углубленно) довольно активно, пригодилось, теперь я например легко могу смотреть аниме или фильмы с английскими субтитрами
- ну и всякая научная заумная хрень вроде уравнения Шрединберга

То есть не самые современные технологии (системы контроля версий или IDE например мы не изучали, и ни одной модной хипстерской технологии не было), но все же лучше чем ничего. Сами преподы были тоже нормальные, в своем предмете разбирались, особенно молодые.

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

То есть в нашем ВУЗе, если ты хочешь научиться кодить, возможность кодить и задания тебе дадут, а вот учить не будут — это тебе придется делать самостоятельно. И при этом придется изучить кучу лишнего, а тот же PHP, будешь знать плохо, про software engineering тебе не расскажут, так что заходи в наш тред и мы тебя доучим.

Может конечно в других вузах по-другому. Есть еще например ВУЗ, сотрудничающий с mail.ru и организовавший совместные курсы: https://tech-mail.ru/ — это очень хороший вариант, так как там готовят непосредственно будущих разработчиков. Еще есть Школа Яндекса http://shad.yandex.ru/ и Школа HeadHunter http://school.hh.ru/ Это все Москва, в Питере вроде в ИТМО что-то есть.

Ну и вообще, по идее, ВУЗ готовит будущих научных сотрудников, инженеров, в общем людей более высокой квалификации. Тех, кто будет например строить новый коллайдер, изучать свойства наноматериалов или запускать ракеты в космос. Программирование, тем более под веб, по идее должно преподаваться в техникумах, колледжах, училищях, вечерних школах — так как это сугубо прикладные знания. ВУЗ задействовать для этого — это то же самое, что открыть там факультет подготовки кассиров для макдональдса.

В общем, научат ли тебя программировать в вузе? Не факт. Стоит ли туда идти? Конечно да.

> поступить в левый вуз


Если там нет ничего связанного с программированием (или хотя бы математикой/физикой), то это будет очень уныло и надоест тебе.
#273 #384227
>>383863

Нет, я вроде бы инженер по специальности. Кстати, я сейчас подумал, нас учили не так и плохо. На том же Хабре недавно был пост от тян (а до него другие посты), про то какое плохое сейчас образование, преподы сами ничего не знают, и т.д., я сейчас сравниваю, у нас вроде не все так плохо было. Из того, что я помню:

- поставили в универе линук
- изучали Паскаль под MSDOS (я его знал, но не любил никогда, так что по-быстрому написал что требовалось и забыл как страшный сон)
- изучали ворд (в универе, да)
- изучали фотошоп, норм
- изучали флеш, надо было сделать какую-нибудь анимацию или ролик
- изучали базы данных, только не MySQL, а Access (надо было что-то создать с БД, формами и немного кода на Visual Basic). Мне понравилось то, что там можно менять оформление, шрифты, ставить любые цвета. Вообще, для своих задач Access хороший и понятный инструмент
- изучали PHP/MySQL (и наверно HTML), надо было сделать расписание, ООП и архитектуру не изучали, так что я по-быстрому накривокодил длинную простыню в стиле книг «PHP за 24 часа» и перешел к придумыванию дизайна (вроде получилось более-менее аккуратно)
- изучали старый 16-битный ассемблер под ДОС, Си, немного изучали Яву, надо было написать консольную программу с использованием сокетов, изучали сами сокеты и компьютерные сети, я помню, все мучались с расчетом маски сети, изучали SQL и реляционную алгебру (я ничего не запомнил)
- писали что-то под микроконтроллеры, не помню какой архитектуры, может быть ARM, может нет, там еще была такая плата с кнопкой, микросхемами и светодиодами и надо было чтобы она умела ими мигать.
- изучали полупроводники, электротехнику (ад какой-то, с комплексными числами и уравнениями), что-то паяли
- изучали bash и работу в командной строке
- изучали английский (а до этого в школе углубленно) довольно активно, пригодилось, теперь я например легко могу смотреть аниме или фильмы с английскими субтитрами
- ну и всякая научная заумная хрень вроде уравнения Шрединберга

То есть не самые современные технологии (системы контроля версий или IDE например мы не изучали, и ни одной модной хипстерской технологии не было), но все же лучше чем ничего. Сами преподы были тоже нормальные, в своем предмете разбирались, особенно молодые.

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

То есть в нашем ВУЗе, если ты хочешь научиться кодить, возможность кодить и задания тебе дадут, а вот учить не будут — это тебе придется делать самостоятельно. И при этом придется изучить кучу лишнего, а тот же PHP, будешь знать плохо, про software engineering тебе не расскажут, так что заходи в наш тред и мы тебя доучим.

Может конечно в других вузах по-другому. Есть еще например ВУЗ, сотрудничающий с mail.ru и организовавший совместные курсы: https://tech-mail.ru/ — это очень хороший вариант, так как там готовят непосредственно будущих разработчиков. Еще есть Школа Яндекса http://shad.yandex.ru/ и Школа HeadHunter http://school.hh.ru/ Это все Москва, в Питере вроде в ИТМО что-то есть.

Ну и вообще, по идее, ВУЗ готовит будущих научных сотрудников, инженеров, в общем людей более высокой квалификации. Тех, кто будет например строить новый коллайдер, изучать свойства наноматериалов или запускать ракеты в космос. Программирование, тем более под веб, по идее должно преподаваться в техникумах, колледжах, училищях, вечерних школах — так как это сугубо прикладные знания. ВУЗ задействовать для этого — это то же самое, что открыть там факультет подготовки кассиров для макдональдса.

В общем, научат ли тебя программировать в вузе? Не факт. Стоит ли туда идти? Конечно да.

> поступить в левый вуз


Если там нет ничего связанного с программированием (или хотя бы математикой/физикой), то это будет очень уныло и надоест тебе.
!ОП #274 #384229
>>383894

> var space = selector.split(/\s+/);


Название переменной совсем не адекватное. Лучше parts или tokens или selectors

> new RegExp(/\./


Можно же просто /\./ наверно?

> else if (new RegExp(/\b\w+\b/i).test(space)){


Это делает все слова, в которых есть хотя одна буква, названием тега. То есть если дано #good он найдет good и подумает что это тег. Регулярка ведь ищет буквы не только в начале, а в любом месте строки. Используй ^ или $

Алсо, код все равно неверный. Лучше разбивать строку по символам . и # (не удаляя их) и анализировать получившиеся куски.

>>383896

> if ($symbol1 = $symbol2) {



= это сохранение значения в переменную
== проверка на равенство

Не путай.

> $halflenght=floor($lenght)/2;


деление на 2 надо внутри скобок ставить

> for ($i = 0; $i <= $halfLenght; $i++)


> $symbol1 = mb_substr($stroka, $i, 1);


Так как ты забыл поставить скобку { после for (а зря) то тело цикла состоит из однйо команды, идущей после for то есть $symbol1 = ... Все остальное не входит в тело цикла и выполняется после него как обычные команды, 1 раз.

> $halfLenght;


> $halflenght


Во-певрых, это разные переменные, во-вторых, не lenght а lengTH (widTH, heigHT, weigHT, lengTH, depTH).

В общем, исправляй ошибки.

>>383927

Выше написаны ошибки.

>>383946

> удалить не могу


Установка/удаление программ -> удалить. Если не работает, ищи в меню пуск пункт «удалить».

Также, ты можешь просто зайти в управление службами (пуск -> выполнить -> services.msc) и там остановить и отключить все лишние mysql'ы. Установить их можно сколько угодно, а вот запустить только один.

>>383948

- огромная глубина вложенности для первой программы. Вместо использования фолдингов надо писать аккуратный код
- неумение в декомпозицию, пишешь весь код простыней вместо вынесения в функции. Неуч пишет if (req.что-то там.match(...)), профессионал пишет if (client.accepts('gzip')) ...
- возможно ты не слышал про промизы и лепишь коллбеки на коллбеке (которые потом переписал на набор несвязанных функций)
- черный по серому
- все переменные объявлены в самой верхней скопе, далеко от места исплоьзования и доступны во всем файле, по сути как глобальные
- неумение в ООП
- избирательная венгерская нотация (у ноды наверняка есть стайл гайд, который неуч не читал)
- if typeof == object -> программист-неуч сам не понимает какого типа переменная
- функции названы бесмысленно, надо начинать имя с глагола
- не умеет правильно объявить функцию, придумывает свой синтаксис
- ищет расширение файла через indexOf (м.б. не умеет в регулярки, может не знает про http://nodejs.org/api/path.html#path_path_extname_p )

Я думаю, для начала этого хватит. Разговаривать с невоспитанными людьми я не собираюсь, так что если у тебя есть желание научиться писать нормально, то поменяй манеру разговора и притворись другим аноном (ну и не пость код картинкой). Другому, воспитанному анону, я бы и подсказку дал и задачку придумал.
!ОП #274 #384229
>>383894

> var space = selector.split(/\s+/);


Название переменной совсем не адекватное. Лучше parts или tokens или selectors

> new RegExp(/\./


Можно же просто /\./ наверно?

> else if (new RegExp(/\b\w+\b/i).test(space)){


Это делает все слова, в которых есть хотя одна буква, названием тега. То есть если дано #good он найдет good и подумает что это тег. Регулярка ведь ищет буквы не только в начале, а в любом месте строки. Используй ^ или $

Алсо, код все равно неверный. Лучше разбивать строку по символам . и # (не удаляя их) и анализировать получившиеся куски.

>>383896

> if ($symbol1 = $symbol2) {



= это сохранение значения в переменную
== проверка на равенство

Не путай.

> $halflenght=floor($lenght)/2;


деление на 2 надо внутри скобок ставить

> for ($i = 0; $i <= $halfLenght; $i++)


> $symbol1 = mb_substr($stroka, $i, 1);


Так как ты забыл поставить скобку { после for (а зря) то тело цикла состоит из однйо команды, идущей после for то есть $symbol1 = ... Все остальное не входит в тело цикла и выполняется после него как обычные команды, 1 раз.

> $halfLenght;


> $halflenght


Во-певрых, это разные переменные, во-вторых, не lenght а lengTH (widTH, heigHT, weigHT, lengTH, depTH).

В общем, исправляй ошибки.

>>383927

Выше написаны ошибки.

>>383946

> удалить не могу


Установка/удаление программ -> удалить. Если не работает, ищи в меню пуск пункт «удалить».

Также, ты можешь просто зайти в управление службами (пуск -> выполнить -> services.msc) и там остановить и отключить все лишние mysql'ы. Установить их можно сколько угодно, а вот запустить только один.

>>383948

- огромная глубина вложенности для первой программы. Вместо использования фолдингов надо писать аккуратный код
- неумение в декомпозицию, пишешь весь код простыней вместо вынесения в функции. Неуч пишет if (req.что-то там.match(...)), профессионал пишет if (client.accepts('gzip')) ...
- возможно ты не слышал про промизы и лепишь коллбеки на коллбеке (которые потом переписал на набор несвязанных функций)
- черный по серому
- все переменные объявлены в самой верхней скопе, далеко от места исплоьзования и доступны во всем файле, по сути как глобальные
- неумение в ООП
- избирательная венгерская нотация (у ноды наверняка есть стайл гайд, который неуч не читал)
- if typeof == object -> программист-неуч сам не понимает какого типа переменная
- функции названы бесмысленно, надо начинать имя с глагола
- не умеет правильно объявить функцию, придумывает свой синтаксис
- ищет расширение файла через indexOf (м.б. не умеет в регулярки, может не знает про http://nodejs.org/api/path.html#path_path_extname_p )

Я думаю, для начала этого хватит. Разговаривать с невоспитанными людьми я не собираюсь, так что если у тебя есть желание научиться писать нормально, то поменяй манеру разговора и притворись другим аноном (ну и не пость код картинкой). Другому, воспитанному анону, я бы и подсказку дал и задачку придумал.
#275 #384233
>>383955

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

>>383989

Имена переменных надо писать как helloWorld а не hello_1. Имена функция пишутся с маленькой буквы. Имена должны быть содержательными и осмысленными.

Если тебе надо найти значения в массиве, которые уникальны, то это можно написать в одну строчку через array_diff/array_intersect/array_merge (упс, анон >>383991 написал). Плюс, ты называешь переменные в такой манере что код невозможно понять (сидеть расшифровывать что они значат мне некогда).

Не знаю, зачем тут ООП ради 2 строчек, по моему над тобой шутят. Спроси, а можно ли лучше с применением функциональных метапарадигм и теории категорий сделать на Хаскелле. Если надо ООП, можешь сделать класс Util с одним статическим методом.

Если хочешь понять ООП, пройди мой урок по ООП — у других анонов это получается.

>>384000

Твои переменные по сути равносильны глобальным, они плохи потому что доступны в слишком большой области кода, больше чем требуется.

>>384032

>Успешной реализующий С++ - парадигму ООП в полной мере.


На костылях

>>384042

Школьник, уходи, ты скучный. ООП применяют с 80-х годов, и Майкрософт, и Эппл, и Яндекс, и Гугл, а ты гений с новыми парадигмами? По моему мнению и судя по манере письма ты просто школьник пересидевший в /pr

>>384034

Надо чтобы можно было менять число и состав сотрудников. добавлять новые профессии, менять правила расчета зарплат для каждой из них.

Твой код не верен. Смотри, в ООП задачах надо вначале опеделить:

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

Исходя из этого ты пишешь классы. А потом уже использующий их код. Так что начни с ответа на эти вопросы.

В твоем коде все слишком сложно: Департамент есть, а класса Сотрудник нет. Ты представляешь, какой у тебя будет сложный код расчета зрплаты? Если нет то попробуй напиши его.
#275 #384233
>>383955

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

>>383989

Имена переменных надо писать как helloWorld а не hello_1. Имена функция пишутся с маленькой буквы. Имена должны быть содержательными и осмысленными.

Если тебе надо найти значения в массиве, которые уникальны, то это можно написать в одну строчку через array_diff/array_intersect/array_merge (упс, анон >>383991 написал). Плюс, ты называешь переменные в такой манере что код невозможно понять (сидеть расшифровывать что они значат мне некогда).

Не знаю, зачем тут ООП ради 2 строчек, по моему над тобой шутят. Спроси, а можно ли лучше с применением функциональных метапарадигм и теории категорий сделать на Хаскелле. Если надо ООП, можешь сделать класс Util с одним статическим методом.

Если хочешь понять ООП, пройди мой урок по ООП — у других анонов это получается.

>>384000

Твои переменные по сути равносильны глобальным, они плохи потому что доступны в слишком большой области кода, больше чем требуется.

>>384032

>Успешной реализующий С++ - парадигму ООП в полной мере.


На костылях

>>384042

Школьник, уходи, ты скучный. ООП применяют с 80-х годов, и Майкрософт, и Эппл, и Яндекс, и Гугл, а ты гений с новыми парадигмами? По моему мнению и судя по манере письма ты просто школьник пересидевший в /pr

>>384034

Надо чтобы можно было менять число и состав сотрудников. добавлять новые профессии, менять правила расчета зарплат для каждой из них.

Твой код не верен. Смотри, в ООП задачах надо вначале опеделить:

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

Исходя из этого ты пишешь классы. А потом уже использующий их код. Так что начни с ответа на эти вопросы.

В твоем коде все слишком сложно: Департамент есть, а класса Сотрудник нет. Ты представляешь, какой у тебя будет сложный код расчета зрплаты? Если нет то попробуй напиши его.
#276 #384234
>>384042

> не нужно


не осилил

>>384057

Да, но у них разные особенности. Например, на Яве писать дольше зато код надежнее и серьезнее. Питон неплох, но не так распространен.

>>384069

Исправь мелкие ошибки. Проверять так: берем по одной букве с краев, сравниваем, если не равны — не палиндром. Затем следующие 2 буквы. И так пока не дойдем до середины.

>>384070

Там по идее должно быть не if (isSad()) а while (isSad() && age < lifespan) ...

>>384077

Чтобы делать повторяющиеся действия (сравнивать буквы не один, а несколько раз) придуман цикл. Цикл for вполне подойдет.

> а я лишь одну букву сравниваю, как сравнить половины?


По одной букве, первую и последнюю, вторую и предпоследнюю и так далее.

>>384080

$a .= $b равносильно $a = $a . $b то есть к строке в конец приклеиваем другую строку и сохраняем назад в переменную.

>>384088

Не сценарий дебага (дебаггинг = поиск и исправление ошибок), а тестирование/QA. Проверка работоспособности это тестирование.

>>384110

Для неопытного программиста нормально. Для того и существуют сенпаи миддлы и сеньоры, чтобы в нужный момент в правильную сторону направить.
#276 #384234
>>384042

> не нужно


не осилил

>>384057

Да, но у них разные особенности. Например, на Яве писать дольше зато код надежнее и серьезнее. Питон неплох, но не так распространен.

>>384069

Исправь мелкие ошибки. Проверять так: берем по одной букве с краев, сравниваем, если не равны — не палиндром. Затем следующие 2 буквы. И так пока не дойдем до середины.

>>384070

Там по идее должно быть не if (isSad()) а while (isSad() && age < lifespan) ...

>>384077

Чтобы делать повторяющиеся действия (сравнивать буквы не один, а несколько раз) придуман цикл. Цикл for вполне подойдет.

> а я лишь одну букву сравниваю, как сравнить половины?


По одной букве, первую и последнюю, вторую и предпоследнюю и так далее.

>>384080

$a .= $b равносильно $a = $a . $b то есть к строке в конец приклеиваем другую строку и сохраняем назад в переменную.

>>384088

Не сценарий дебага (дебаггинг = поиск и исправление ошибок), а тестирование/QA. Проверка работоспособности это тестирование.

>>384110

Для неопытного программиста нормально. Для того и существуют сенпаи миддлы и сеньоры, чтобы в нужный момент в правильную сторону направить.
#277 #384235
>>384137

Посмотреть код по шагам (и значения всех переменных в этот момент) можно отладчиком. Более того, когда код остановлен можно даже простые выражения писать в консольке и менять значения переменных.

Отладчик встроен в Хром,ФФ, Сафари, ИЕ, Оперу. Вызывается через Ctrl + Shift+ I либо F12.

Для того чтобы остановить программу. открой ее в режиме просмотра http://jsbin.com/nunifubuqido/1 по такой ссылке, открой отладчик, перейди на вкладку Script, найди нужный скрипт с твоим кодом, найди нужную строку и щелкни по ее номеру. Там появится значок точки останова (брейкпойнта). Когда выполнение кода дойдет до этой строки, он остановится и можно будет выполнять его по шагам и смотреть переменные.

Значения переменных можно смотреть в Хроме наведением мышки, в ФФ добавив из в панель Watch (туда можно писать и целые выражения).

В панели Stack можно видеть функции, из которых вызвана текущая (стектрейс) и переходить в них для просмотра их переменных.

Выполнять можно по шагам, с перепрыгиванием функций либо с заходом в них.

Можно зайти в консоль и там писать и выполнять код.

Брейкпойнт надо ставить не на строку с объявлением функции и словом function а на первую строчку ее тела.

Можно кнопкой заставить отладчик автоматически останавливаться при любой ошибке.

Обязательно изучи это, отладчиком должен уметь пользоваться любйо уважающий себя программист.

http://learn.javascript.ru/debugging-chrome
http://frontender.info/chrome-developer-tools/
http://popel-studio.com/blog/article/otladka-javascript-v-chrome-developer-tools-chast-1-konsol.html
http://popel-studio.com/blog/article/otladka-javascript-v-chrome-dev-tools-chast-2-tochki-ostanovki.html

Обязательно изучи все это.
#277 #384235
>>384137

Посмотреть код по шагам (и значения всех переменных в этот момент) можно отладчиком. Более того, когда код остановлен можно даже простые выражения писать в консольке и менять значения переменных.

Отладчик встроен в Хром,ФФ, Сафари, ИЕ, Оперу. Вызывается через Ctrl + Shift+ I либо F12.

Для того чтобы остановить программу. открой ее в режиме просмотра http://jsbin.com/nunifubuqido/1 по такой ссылке, открой отладчик, перейди на вкладку Script, найди нужный скрипт с твоим кодом, найди нужную строку и щелкни по ее номеру. Там появится значок точки останова (брейкпойнта). Когда выполнение кода дойдет до этой строки, он остановится и можно будет выполнять его по шагам и смотреть переменные.

Значения переменных можно смотреть в Хроме наведением мышки, в ФФ добавив из в панель Watch (туда можно писать и целые выражения).

В панели Stack можно видеть функции, из которых вызвана текущая (стектрейс) и переходить в них для просмотра их переменных.

Выполнять можно по шагам, с перепрыгиванием функций либо с заходом в них.

Можно зайти в консоль и там писать и выполнять код.

Брейкпойнт надо ставить не на строку с объявлением функции и словом function а на первую строчку ее тела.

Можно кнопкой заставить отладчик автоматически останавливаться при любой ошибке.

Обязательно изучи это, отладчиком должен уметь пользоваться любйо уважающий себя программист.

http://learn.javascript.ru/debugging-chrome
http://frontender.info/chrome-developer-tools/
http://popel-studio.com/blog/article/otladka-javascript-v-chrome-developer-tools-chast-1-konsol.html
http://popel-studio.com/blog/article/otladka-javascript-v-chrome-dev-tools-chast-2-tochki-ostanovki.html

Обязательно изучи все это.
#278 #384237
>>384157

CSS не запрещает. Браузер все равно его округлит.

Для некоторых свойств, вроде 2d- и 3d-трансформаций ( http://habrahabr.ru/post/135816/ ), дробные значения работают без округления, то есть вполне реально сдвинуть элемент на полпикселя (при этом например вертикальная линия в 1px размажется на 2 соседних столбца, только более бледным цветом). Это происходит потому, что эти трансформации пересчитывают значения каждого пикселя по хитрым формулам. Ну и не забывай, что есть ретина экраны, а в них 1 CSS-пикселю соответсвует 2x2 реальных. На них вполне возможно будет видна разница между сдвигом объекта через margin-left (попиксельно, скачками) и 2d-трансформацию (плавно).

> Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.


Ладно пусть будет

> Дак я только их и храню. Тебя может комментарии ввели в заблуждение?


Точно.

> (window.reqestAnimationFrame != undefined);


Можно просто !!window.reqestAnimationFrame (!! приводит все к true/false, falsy (лживенькие?) значения к false и truthy значения к true. falsy значений всего 6 и ты их должен помнить наизусть).

> if (this.isAnimationFraim) {


> var animation = this.animatedNewWay();


Не, не надо это лепить внутрь функции, надо просто сделать свою кроссбраузерную функцию, например queueTick которая будет вызывать либо requestAnimationFrame во всех его ипостасях, либо setTimeout. Алсо, у тебя там опечатка в названии.

Алсо, там еще надо сделать поддержку CSS транзишенов и умную группировку/замену анимаций. Я не уверен, но может быть стоит сделать не один объект анимации на узел DOM, а один объект на 1 анимируемое свойство — может так их группировать будет проще. Ну это сам смотри.

>>384172

> Ведь если есть id, то и уточнять классом не имеет смысла.


Имеет, чтобы проверить есть ли у элемента класс, например #button.enabled

Код разбора надо вынести в функцию parseSelector (можно в несколько). Старайся делать декомпозицию, то есть для одной задачи — одна функция (но без фанатизма). Функции на 1-3 строчки — это нормально, если они делают что-то отдельное.

> var space =


Название не годится

> cases


> space


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

Вместо сложного условия лучше разбивать по символам . и #, не удаляя их: div.a.b.c#d -> div, .a, .b, .c, #d и работать с этим массивом.
#278 #384237
>>384157

CSS не запрещает. Браузер все равно его округлит.

Для некоторых свойств, вроде 2d- и 3d-трансформаций ( http://habrahabr.ru/post/135816/ ), дробные значения работают без округления, то есть вполне реально сдвинуть элемент на полпикселя (при этом например вертикальная линия в 1px размажется на 2 соседних столбца, только более бледным цветом). Это происходит потому, что эти трансформации пересчитывают значения каждого пикселя по хитрым формулам. Ну и не забывай, что есть ретина экраны, а в них 1 CSS-пикселю соответсвует 2x2 реальных. На них вполне возможно будет видна разница между сдвигом объекта через margin-left (попиксельно, скачками) и 2d-трансформацию (плавно).

> Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.


Ладно пусть будет

> Дак я только их и храню. Тебя может комментарии ввели в заблуждение?


Точно.

> (window.reqestAnimationFrame != undefined);


Можно просто !!window.reqestAnimationFrame (!! приводит все к true/false, falsy (лживенькие?) значения к false и truthy значения к true. falsy значений всего 6 и ты их должен помнить наизусть).

> if (this.isAnimationFraim) {


> var animation = this.animatedNewWay();


Не, не надо это лепить внутрь функции, надо просто сделать свою кроссбраузерную функцию, например queueTick которая будет вызывать либо requestAnimationFrame во всех его ипостасях, либо setTimeout. Алсо, у тебя там опечатка в названии.

Алсо, там еще надо сделать поддержку CSS транзишенов и умную группировку/замену анимаций. Я не уверен, но может быть стоит сделать не один объект анимации на узел DOM, а один объект на 1 анимируемое свойство — может так их группировать будет проще. Ну это сам смотри.

>>384172

> Ведь если есть id, то и уточнять классом не имеет смысла.


Имеет, чтобы проверить есть ли у элемента класс, например #button.enabled

Код разбора надо вынести в функцию parseSelector (можно в несколько). Старайся делать декомпозицию, то есть для одной задачи — одна функция (но без фанатизма). Функции на 1-3 строчки — это нормально, если они делают что-то отдельное.

> var space =


Название не годится

> cases


> space


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

Вместо сложного условия лучше разбивать по символам . и #, не удаляя их: div.a.b.c#d -> div, .a, .b, .c, #d и работать с этим массивом.
!ОП #279 #384243
>>384137

> this.additives !== {}


Это бессмысленная проверка. Объекты (включая массивы, функции, и другие объекты) сравниваются по идентичности, то есть тому, что это ссылка на один и тот же объект.

{} — это создание нового пустого объекта потому всегда {} === {} дает false. Также как и function () {} === function () {} и [] === []

> for (var nameAddi in this.additives) {


Почему объект? Я же вроде советовал, что для списков логичнее всего использовать массив. Список добавок — это массив.

> Я правильно контекст объекта в makeAdditive записал?


Лучше сделать checkAdditive обычным методом то есть объявит как H.prototype.checkAdditive = ... и значение this передастся само собой.
#280 #384252
>>384237
Не удаляя .# еще проще получится, но когда-то все равно придется от них избавляться? Вообще на самом деле это просто набросок. Я после написания всего кода меняю его структуру.
#281 #384255
>>384229

>Можно же просто /\./ наверно?



new RegExp нужен в динамике, как тут например. Разве нет? В интернетах так пишут.

А регулярка /smth/ юзается, когда ты присваиваешь ее чему-либо и она еще будет нужна. Как например я пишу match(/[a-zA-Z]+/), то регулярка становится аргументом, и она еще будет нужна внутри функции match.

Я тут вычитал http://javascript.ru/RegExp

> Обе записи эквивалентны. Первый вариант (new RegExp) может понадобится, если вам придется генерировать регулярное выражение динамически.



Я ошибаюсь?
#282 #384258
>>384237
http://jsbin.com/wiwopu/9/edit?js,console

Теперь лучше?

Но как же дальше делать? Почему мы оставили #. ? dom.hasClass понимает класс только без точки. GetElementById понимает айдишник только без решетки.

Меня жутко беспокоит то, что такие вещи, как

var tag = new RegExp(/^[^\#\.][a-zA-Z\-\_]+(\.|\#)/).exec(selector);
if (tag != null) {
return tag[0].match(/[a-zA-Z]+/)[0];
}

можно записать короче?
#283 #384284
>>384252

Избавиться можно через substr() в одну строчку.
#284 #384285
>>384255

> если вам придется генерировать регулярное выражение динамически.


Это значит что ты напимер в регулярку хочешь вставить что-то из переменной − тогда надо new RegExp
#285 #384286
>>384284
Это слишком просто, настоящие ценители извращений пользуются только регулярками
#286 #384309
Оп, банальный до банальности вопрос. Я получаю где-то id элемента, хочу найти его jquery, пишу $('#' + id) и чувствую себя недоумком с кривым кодом. Как это обыграть красивше?
#287 #384311
>>384309
может у тебя и кривой код, но как ты тут описал, так и надо делать, что тебе не нравится?
#288 #384314
>>384309
document.getElementById(id)
Не то, чтобы красивше, но меньше лишнего. Хотя некоторые это и считают красотой.
#289 #384316
>>384314
ему объект jq надо, он же написал
#290 #384318
И еще вопрос сразу. Есть один объект, мне нужно насоздавать динамически ему методов с функцией, где код будет отличаться на id обрабатываемого элемента, примерно так

obj.func1 = function () { alert ( '1' ); }
obj.func2 = function () { alert ( '2' ); }
...
#291 #384319
>>384318
obj['func'+id] так можно, но канонично ли, хз
#292 #384321
>>384319
Нет, речь о том, как добавить собственно эту '1' внутрь создаваямого метода, ведь если я сделаю цикл
for (var i=0;i<10;i++) {
obj.['func'+id] = function () { alert (i); }
}

я почувствую всю мощь замыканий и получу кучу alert (10) , не?
#293 #384322
>>384321
obj.['func'+id] = function (i) { alert (i); }
obj.['func'+id](i);
#294 #384323

>>384322
блеать, точку убери ток, я не посмотрел
#295 #384325
>>384316
Он имел в виду, что "хочет найти его (при помощи) jquery", или что "хочет найти его jquery (обьект)". Первое как-то более вероятнее. Во втором случае можно сделать $(document.getElementById(id)).
>>384321
Это в большинстве вводных туториалов по жс есть. Можешь через with, а можешь
for (var i=0;i<10;i++) {
(function (i){obj.['func'+id] = function () { alert (i); }})(i);
}
#296 #384326

>>384325
$(document.getElementById(id)) такая хуита разве быстрее работает $('#'+id) ?
#297 #384327
>>384326
Уверен, что да, но, думаю, ненамного. Во втором случае конкатенация и диспатч внутри jq по строке-селектору, который в конечном итоге приведёт к вызову того же document.getElementById, а в первом внутри jq сразу увидит, что передана не строка, а элемент, и сразу обернёт враппером.
#298 #384330
>>384326
посоны, я просто хотел уточнить, все так делают или можно там не знаю, решетку опустить, как то еще извернуться, без объединения строк. ок, норм так норм.

>>384325
там где я читал js - with предлагали засунуть туда же, где eval.
А вот размыкания замыкания я там пропустил как то. Что мы делаем в твоем коде? Как я понимаю весь цимес в (...)(i). В упор не помню, что это делает, в той каше из двух книжек по php и js за последнюю неделю.
#299 #384331
>>384330
его код 10 раз вызывает функцию с параметром i, которая создает obj свойство 'func'+id в котором находится функция, которая через замыкание получает i и вызывает alert
#300 #384334
>>384331
И все равно не пойму. Так же мой
function () { alert (i);
все равно будет замкнут, но уже не на var i, a na параметр функции?
#301 #384336
>>384331
Я имел ввиду что делает (...)(i)
#302 #384338
>>384336
var a = function(){alert(1);}
a();
тоже самое, только функция безымянная
#303 #384340
>>384334
у него там замыкание идет от внешней функции, а не от цикла, сюда иди http://javascript.ru/basic/closure, в конце там написано почему это
#304 #384341
>>384338
"Точно, узнаю брата Колю!"
Вспомнил, было такое у Флэнагана. Благодарствую.
#305 #384352
>>384309

Ты правильно чувствуешь.

Надо не передавать в функцию id, а передавать сразу $('#abc') или хотя бы '#abc' — тогда и писать уродливое + id не придется. Если никак, то сделать функцию byId(id) и вызывать ее.

>>384318

Тебе это не надо. ты неправильно что-то делаешь. Функции никто не создает динамически, они всегда заранее известны и их число фиксированно.

В твоем случае можно сделать одну функцию func (number)

>>384325

Вы не в ту сторону мыслите. Не надо в цикле создавать методы с номерами (и переменные тоже).

>>384325

> Можешь через with


Как это поможет? Никак. Плюс, with вроде запрещен в строгом режиме, ибо открывает слишком много возможностей для быдлокодинга.
sage #306 #384361
>>384352

> не передавать в функцию id, а передавать сразу $('#abc') или хотя бы '#abc'


> Функции никто не создает динамически, они всегда заранее известны и их число фиксированно.


Ясно.
#307 #384362

>>384352

>Вы не в ту сторону мыслите.


Как он спросил, так мы и ответили. Хозяин - барин
#308 #384364
>>384352
Похоже, ты никогда ничего серьёзного не писал на жс. Замыкания в качестве колбеков на события нужны повсеместно.
#309 #384366
>>384364
ты не по делу ляпнул, никто и не говорил что замыкания не нужны, в том числе, конечно же, колбэкам
#310 #384367
>>384366
Вот же:

> Не надо в цикле создавать методы с номерами (и переменные тоже).


"С номерами" - это, видимо, про замыкания на счётчик цикла, "с переменными" - на всё остальное. В случае, если связывания, на которые происходит замыкание, не являются семантически подмножеством состояния обьекта, к которому эти методы цепляются, то очень даже нужны. В иных случаях можно заменить вхождения таких переменных x внутри тела функции на this.x, а нужные штуки вбросить в сам обьект понятным образом. Кстати, озвученное предложение вместо замыкания вынести связывания на уровень параметров функции - это вообще полная лажа. Не существует ситуаций, где эта штука могла бы каким-то осмысленным образом заменить замыкание.
#311 #384368
Ну хотя чёрт его знает, если тот хуй и правда хотел буквально генерировать методы под разные значения параметра i, и потом, в зависимости от известного i, их вытаскивать и вызывать, то тогда, конечно, но я сомневаюсь, что такие люди существуют. Скорее всего, он просто привёл очень утрированный пример, а реально он делает какую-то йобу, которая в цикле вбрасывает набор методов, замыкая их на какие-то метаданные и т.д.
#312 #384369
>>384368
я своим скудной херотой вместо мозга не могу даже представить, когда это может понадобиться, больше похоже на безумный костыль с диким дублированием кода
#313 #384373
>>384369
Методы, замкнутые на что-нибудь? Например, ты пишешь очередное ёба-ооп поверх жс, и твой defclass делает так, чтоб после defclass('com.yoba.Yoba', { foo: function(...) {...}}), можно было вешать before/after хуйни на методы типа defbefore('com.yoba.Yoba', { foo: function (...) {...}}), как в CLOS и AOP (http://en.wikipedia.org/wiki/Aspect-oriented_programming). Будет что-то вроде
function defclass(name, decl) {
var cls = function () {}
for (var k in decl) {
(function (meth) {
decl[k] = function () {
var args = arguments;
$registry.beforeHooks[name].forEach(function (fn) { fn.apply(args); })
meth.apply(args);
$registry.afterHooks[name].forEach(function (fn) { fn.apply(args); })
}
}})(decl[k]);
...
}
#314 #384381
>>384367

Если тебе надо повесить событие на все элементы списка, то не надо лепить циклы, достаточно повесить один обработчик на сам список, так как события всплывают. Если тебе надо еще что-то сделать, достаточно сделать один метод и передавать ему разные аргументы.

>>384373

Скорее он изобретает велосипед от недостатка знаний и опыта. Так же как не знающие про массивы люди лепят переменные var1, var2 и так далее.

Алсо, твоя эта «возможность вешать after/before» по моему, лучше всего подходит разве что для запутывания кода. Тем более что у тебя делается не создание нового прокси-класса наследника, а замена наживую — чистое наркоманство.

>>384367

Да, я все правильно написал нет смысла делать 10 однотипных методов когда можно сделать один, и нет смысла делать 10 однотипных переменных когда есть массивы.
#315 #384395
>>384284
Ты не понял о чем я говорил. С помощью substr я уже все, что нужно сделал. Оп хочет, чтобы я не обрезал #.
#316 #384412
палиндром. Что не так?
http://ideone.com/A2DcpL
#317 #384416
>>384258
Оп, что скажешь?
142 Кб, 1280x800
sage #318 #384426
>>384233

>Твои переменные глобальны


>nodejs


Тут-то ты и обосралась, манька:

>Variables local to the module will be private, as though the module was wrapped in a function.


http://nodejs.org/api/modules.html#modules_modules

Глобально объявить переменную можно только в объекте global:
http://nodejs.org/api/globals.html#globals_global

Бампаны, фиксируйте обосрышь этого ОП-петуха.

>На костылях


Ниасилил?(((

>а ты гений с новыми парадигмами?


Быстро и решительно ссылку на пост, где я базарил за новые парадигмы, иначе ты обезьян простой.
#319 #384430
>>384412
Сделай, чтобы цикл при каждой итерации выводил значение обоих переменных $symbol которых ты сравниваешь между собой, и увидишь в чем дело.
#320 #384451
>>384430
получит он разрыв шаблона
#321 #384567
>>384368
Хуй Валерьевич, я вас попрошу.
А вообще я динамически генерировал контекстное меню для элемента по данным из дб, и для колбэков созданых пунктов нужно было создавать методы, которые естественно должны содержать некий id пункта меню. Можно было конечно в метод засунуть ссылку на внешнюю функцию, но зачем? Потом в нее еще this передавать, а так нагенерировал методов и ок.
#322 #384568
>>384567
Пиздец, ты делаешь даже более стрёмную хуйню, чем наши самые смелые предположения. Во-первых, что уже было сказано, для всех однотипных элементов внутри контейнеров (строки в таблице, ноды в дереве, пункты в меню) одно событие нужно обрабатывать одним обработчиком для всех элементов, а не набором по обработчику на элемент, во-вторых, нахера для колбеков создавать методы? Надо было повесить один хендлер на само меню, и внутри идентифицировать конкретный кликнутый (или что там) элемень, вытаскивая нужную информацию через this.
#323 #384584
Допиливаю Grammar nazi задачу, хочу добавить исправление ошибок, но не понимаю как мне это сделать
http://ideone.com/FUQGtH
#324 #384585
>>384584
>>384584
http://ru2.php.net/manual/ru/function.preg-replace.php
2 ой пример с массивом. Я так делал. Правда пунктуационные ошибки я не знаю как исправить.
#325 #384589
>>384584
Вообще странный регэксп, зачем писать [а-я]жы[а-я], когда можно просто написать (жи). Тем более что в твоем варианте он находит ошибку только в середине слова, но не в начале.
3 Кб, 521x51
#326 #384599
>>384584
Я худею с твоей регулярки.
http://ideone.com/ygKC3w
#327 #384607

>>>>384589


Я делал на основе другой задачи, там нужно было вывести слово, при поиске жы соответственно возвращало это самое жы, и да, он найдёт не только в середине, там ещё звёздочка стоит.
154 Кб, 1024x688
#328 #384635
>>382412
Анончики, нам с другом нужно в PHP научиться за джва года два месяца. Сам - верстальщик, друган имеет некие познания в С#.
Левел, которого нужно достичь - чтоб можно было минимальные заказы на фрилансах.
#329 #384637
>>384635
можно задрочить за 2 месяца, если в день заниматься по 7-8 часов.Сам за 2.5 месяца освоил,занимаясь 4-5 часов в день. Все реально, главное практики больше - книжек меньше!
#330 #384645
>>384426
Напоминаю всем итт про эпичный обосрышь ОП-петуха.
#331 #384646
>>384635

>чтоб можно было минимальные заказы на фрилансах


Тут-то я и проиграл.
25 Кб, 500x375
#332 #384651
>>384646

>Тут-то я и проиграл.


Обоснуй, че не так? С нулевым уровнем коммерческой практики там самое и место.

>>384637

>практики больше - книжек меньше!


А как это сделать-то? Книжки все равно же нужно прочесть какие-нибудь? Google Driven Development?
#333 #384691
>>384567

Либо: <li onclick="handleMenuClick(<?= $id ?>)">Пункт меню</li>

Либо: <li data-id="12345">Пункт меню</li> и вешаем один обработчик на ul

ОП
#334 #384723
>>384258

О, я вижу ты разбил код на функции. Так гораздо лучше читается.

> new RegExp(/\.|\#/)


Почему не /[.#]/ ? Так же короче. Зачем ты всюду пишешь этот new RegExp? Тем более вокруг литерала регулярки. По моему, это какая-то ошибка.

Код функции parseSelector по моему не совсем оптимально написан. Я не очень понимаю, зачем там 2 ветки if, мне кажется он не нужен. Мне кажется, можно обрабатывать все виды селекторов единообразно.

Твой вариант, с 3 отдельными функциями, годится, хотя я бы сделал проще: разбиваем токен на части:

div.a.b.c#d#e -> 'div', '.a', '.b', '.c', '#d', '#e'

Проходимся по ним циклом и по первому символу определяем чем она является.

> var tag = new RegExp(/^[^\#\.][a-zA-Z\-\_]+(\.|\#)/).exec(selector);


> if (tag != null) {


> return tag[0].match(/[a-zA-Z]+/)[0];


Второй match здесь не нужен. Достаточно поставить скобки в регулярке и ими захватывать нужную часть.

Также, у тебя очень странная функция findTag: она ищет имя тега только если за ним идет точка или решетка. Как-то неуниверсально, я бы написал

(\.|#|$)

$ тут значит «конец строки». Решетку экранировать не надо, так как это не спецсимвол.

Нехорошо, что в findTagName нет return в конце функции. Лучше явно возвращать undefined.

Ошибки никак не проверяются. У тебя можно дать неправильное выражение — и ничего не будет. Нехорошо. Если дано 2 id в одном селекторе, можно бы сразу возвращать пустое множество.

Насчет точек и решеток, да, в массиве с результатом разбора их сохранять не надо.
#334 #384723
>>384258

О, я вижу ты разбил код на функции. Так гораздо лучше читается.

> new RegExp(/\.|\#/)


Почему не /[.#]/ ? Так же короче. Зачем ты всюду пишешь этот new RegExp? Тем более вокруг литерала регулярки. По моему, это какая-то ошибка.

Код функции parseSelector по моему не совсем оптимально написан. Я не очень понимаю, зачем там 2 ветки if, мне кажется он не нужен. Мне кажется, можно обрабатывать все виды селекторов единообразно.

Твой вариант, с 3 отдельными функциями, годится, хотя я бы сделал проще: разбиваем токен на части:

div.a.b.c#d#e -> 'div', '.a', '.b', '.c', '#d', '#e'

Проходимся по ним циклом и по первому символу определяем чем она является.

> var tag = new RegExp(/^[^\#\.][a-zA-Z\-\_]+(\.|\#)/).exec(selector);


> if (tag != null) {


> return tag[0].match(/[a-zA-Z]+/)[0];


Второй match здесь не нужен. Достаточно поставить скобки в регулярке и ими захватывать нужную часть.

Также, у тебя очень странная функция findTag: она ищет имя тега только если за ним идет точка или решетка. Как-то неуниверсально, я бы написал

(\.|#|$)

$ тут значит «конец строки». Решетку экранировать не надо, так как это не спецсимвол.

Нехорошо, что в findTagName нет return в конце функции. Лучше явно возвращать undefined.

Ошибки никак не проверяются. У тебя можно дать неправильное выражение — и ничего не будет. Нехорошо. Если дано 2 id в одном селекторе, можно бы сразу возвращать пустое множество.

Насчет точек и решеток, да, в массиве с результатом разбора их сохранять не надо.
#335 #384724
Оп, ты же работаешь в Sublime Text? Подскажи куда смотреть. Можно ли в макрос забить открытие файла, построчное копирование и вставка в соседний открытый файл кода или замена его?

Если файлов тысяча, но мне нужна автоматизация.

Ну или нет, вот как лучше: открыты все эти тысячи файлов .html. Нажимаю на забинденую комбинацию и запускаю файл с помощью run_macro_file, а там уже происходит поиск по регуляркам и замена нужных строк во всех файлах. Так реально?

Или лучше не извращаться, а заюзать что-нибудь более подходящее? Что подойдет для автоматизации? Запись шагов и их повторное выполнение.

Очень надо. Вручную просто утомляет.
#336 #384725
>>384395

Нет, нет, ОП хочет чтобы обрезал. Видимо,я что-то плохо объяснил. Решетка не нужна так как из названия поля «id» или «classes» очевидно, что там хранится.

>>384412

Код надо пропустить через phpformatter.com ибо его тяжело читать. Пропусти и посмотри как все изменится, и станет аккуратнее. Напрмиер, вокруг «=» и математических операций принято ставить пробелы.

Выравнивание у тебя все сбито. А ведь исправить это займет 10 секунд. Пожалуйста, в следующий раз показывай отформатированный текст. Алсо, форматирование встроено в многие IDE, целый пост про это написал: >>382414

> $stroka


Лучше писать $string

Код, увы, неверный. Посмотри внимательно:

> for ($i = 0; $i <= $halflenght; $i++) {


> $symbol1 = mb_substr($stroka, $i, 1);


> $symbol2 = mb_substr($stroka, $i, -1);}


>


> if ($symbol1 == $symbol2) {


Мы в цикле много раз берем разные буквы, кладем из в $symbol1 и $symbol2 и ничего с ними не делаем. Затем цикл заканчивается, мы доходим до строчки с if и там сравниваем значения переменных, то есть те 2 буквы, которые попали туда в последнем шаге цикла. Очевидно, что для проверки на палиндром сравнить 1 раз две буквы недостаточно.

> mb_substr($stroka, $i, -1


Эта команда берет подстроку начиная с символа $i и до предпоследней (-1) буквы. В мануале по mb_substr http://php.net/manual/ru/function.mb-substr.php это не описано, но зато описано в мануале по substr: http://php.net/manual/ru/function.substr.php — почитай.

Если что, substr это аналог mb_substr, но он не поддерживает utf-8 и русские буквы, но в плане использования там все аналогично.

Ну и не сдавайся, продолжай решать задачу дальше — рано или поздно все получится.
#336 #384725
>>384395

Нет, нет, ОП хочет чтобы обрезал. Видимо,я что-то плохо объяснил. Решетка не нужна так как из названия поля «id» или «classes» очевидно, что там хранится.

>>384412

Код надо пропустить через phpformatter.com ибо его тяжело читать. Пропусти и посмотри как все изменится, и станет аккуратнее. Напрмиер, вокруг «=» и математических операций принято ставить пробелы.

Выравнивание у тебя все сбито. А ведь исправить это займет 10 секунд. Пожалуйста, в следующий раз показывай отформатированный текст. Алсо, форматирование встроено в многие IDE, целый пост про это написал: >>382414

> $stroka


Лучше писать $string

Код, увы, неверный. Посмотри внимательно:

> for ($i = 0; $i <= $halflenght; $i++) {


> $symbol1 = mb_substr($stroka, $i, 1);


> $symbol2 = mb_substr($stroka, $i, -1);}


>


> if ($symbol1 == $symbol2) {


Мы в цикле много раз берем разные буквы, кладем из в $symbol1 и $symbol2 и ничего с ними не делаем. Затем цикл заканчивается, мы доходим до строчки с if и там сравниваем значения переменных, то есть те 2 буквы, которые попали туда в последнем шаге цикла. Очевидно, что для проверки на палиндром сравнить 1 раз две буквы недостаточно.

> mb_substr($stroka, $i, -1


Эта команда берет подстроку начиная с символа $i и до предпоследней (-1) буквы. В мануале по mb_substr http://php.net/manual/ru/function.mb-substr.php это не описано, но зато описано в мануале по substr: http://php.net/manual/ru/function.substr.php — почитай.

Если что, substr это аналог mb_substr, но он не поддерживает utf-8 и русские буквы, но в плане использования там все аналогично.

Ну и не сдавайся, продолжай решать задачу дальше — рано или поздно все получится.
!ОП #337 #384731
>>384584

Кстати, тестировать регулярку удобно на сайтах вроде http://regex101.com/ — только помни что там бекслеш не удваивается и пишется один раз. То есть в Php ты пишешь

$re = "/\\.\\\\/"; (ищет точку, за ней бекслеш)

А там просто \.\\

Исправление ошибок обычно делают через preg_replace, то есть например заменяем жы|шы на жи|ши.

Запятая, точка с запятой, двоеточие, воскл. знак - не спецсимволы, их не обязательно экранировать. Полный список спецсимволов вроде бы был в уроке.

> [а-я]


Буква ё в юникоде идет отдельно от остальных (посмотри сам: http://unicode-table.com/ru/#cyrillic ) потому ее надо указывать дополнительно: [а-яё] . Ну и я бы добавил еще латинницу, вдруг там встретится английское слово.

Правда, это не решает проблемы, а что если в тексте встретится арабское или грузинское слово? Если такая задача есть, то можно использовать специальную комбинацию, которая значит «любая буква любого языка»: \\pL

Подробнее: http://php.net/manual/ru/regexp.reference.unicode.php (в этой задаче это не обязательно, так что можешь просто глянуть чтобы знать что такая возможность есть).

> ([а-я]\\,)|([а-я]\\;)|([а-я]\\!)


Вместо того, чтобы копипастить, можно написать:

[а-яё][,;!]

> ([а-я]жы[а-я])|([а-я]шы[а-я])


> (зделал)|(зделаю)|(зделан)


То же самое, можно сгруппировать вместе повторяющееся

Ну и надо улучшить вывод ошибок. Сейчас трудно понять, где именно и какая ошибка. Надо либо выводить списком:

- неприавльно: жизнь
- неприавльно: ...

Либо подсвечивать в тексте:

(Жы)знь боль( но) в ней намек
!ОП #337 #384731
>>384584

Кстати, тестировать регулярку удобно на сайтах вроде http://regex101.com/ — только помни что там бекслеш не удваивается и пишется один раз. То есть в Php ты пишешь

$re = "/\\.\\\\/"; (ищет точку, за ней бекслеш)

А там просто \.\\

Исправление ошибок обычно делают через preg_replace, то есть например заменяем жы|шы на жи|ши.

Запятая, точка с запятой, двоеточие, воскл. знак - не спецсимволы, их не обязательно экранировать. Полный список спецсимволов вроде бы был в уроке.

> [а-я]


Буква ё в юникоде идет отдельно от остальных (посмотри сам: http://unicode-table.com/ru/#cyrillic ) потому ее надо указывать дополнительно: [а-яё] . Ну и я бы добавил еще латинницу, вдруг там встретится английское слово.

Правда, это не решает проблемы, а что если в тексте встретится арабское или грузинское слово? Если такая задача есть, то можно использовать специальную комбинацию, которая значит «любая буква любого языка»: \\pL

Подробнее: http://php.net/manual/ru/regexp.reference.unicode.php (в этой задаче это не обязательно, так что можешь просто глянуть чтобы знать что такая возможность есть).

> ([а-я]\\,)|([а-я]\\;)|([а-я]\\!)


Вместо того, чтобы копипастить, можно написать:

[а-яё][,;!]

> ([а-я]жы[а-я])|([а-я]шы[а-я])


> (зделал)|(зделаю)|(зделан)


То же самое, можно сгруппировать вместе повторяющееся

Ну и надо улучшить вывод ошибок. Сейчас трудно понять, где именно и какая ошибка. Надо либо выводить списком:

- неприавльно: жизнь
- неприавльно: ...

Либо подсвечивать в тексте:

(Жы)знь боль( но) в ней намек
7 Кб, 806x108
#338 #384737
Зачем эти переменные стоят в фигурных скобках?
#339 #384738
ОП, знаешь ли еще какие нибудь языки, кроме пхп и жс? И почему, кстати, трип перестал использовать? Все ведь точно так же работает, как на старом движке.
#340 #384740
>>384585

> Правда пунктуационные ошибки я не знаю как исправить.


Заменяем

(а|но) слово

на

(а|но), слово

Алсо, прочти в мануале этот пункт:

> replacement может содержать ссылки вида \\n, либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней.



И далее.

>>384599

> (?<!, )


Тут заложен ровно один пробел, лучше бы любое число.

«зделаем вместе» не найдет

Не найдет отстутвие пробела после точки.

Но вообще, неплохо.

>>384635

За 2 месяца аноны только основы языка и какие-то простые вещи осваивают, но они правда и не целыми днями изучают. Насчет фриланса, вам тогда лучше в строну CMS вроде Wordpress, Drupal, Джумла, интернет-магазины смотреть, поставить эти CMS, выучить популярные плагины к ним, попробовать сделать тему или плагин.

В прицнипе, реально, но сложно.

И имей в виду, заказы на фрилансе - дело не очень веселое, долго их ищешь, долго все обсуждаешь, делаешь, потом внезапно оказывается что в о чем-то еще не догаваривались. Заказчики бывают всякие. Искать постоянную удаленную работу или оффлайновую работы по моему проще.

Что насчет моего учебника? Он хорош тем что рассчитан на людей с нулевыми знаниями и все объясняет с самого начала. Пройдешь — смогу дать более сложное задание, сделать файлообменник например, хотя в случае ориентации на фриланс лучше будет наверно задание разобраться с какой-нибудь CMS, это мы тоже можем придумать, сделаешь блог на вордпрессе какой-нибудь.

>>384651

Google Driven Development рождает быдлокодеров, имей в виду.

>>384724

Для тысяч файлов я бы смотрел не в сторону макросов, а написал бы скрипт например на том же PHP.

Если надо в тысяче файлов сделать поиск/замену по регулярке - это в саблайме есть (Find in Files), и довольно удобно.

> Что подойдет для автоматизации? Запись шагов и их повторное выполнение.


Скрипт, запусакаемый из командной строки.
#340 #384740
>>384585

> Правда пунктуационные ошибки я не знаю как исправить.


Заменяем

(а|но) слово

на

(а|но), слово

Алсо, прочти в мануале этот пункт:

> replacement может содержать ссылки вида \\n, либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней.



И далее.

>>384599

> (?<!, )


Тут заложен ровно один пробел, лучше бы любое число.

«зделаем вместе» не найдет

Не найдет отстутвие пробела после точки.

Но вообще, неплохо.

>>384635

За 2 месяца аноны только основы языка и какие-то простые вещи осваивают, но они правда и не целыми днями изучают. Насчет фриланса, вам тогда лучше в строну CMS вроде Wordpress, Drupal, Джумла, интернет-магазины смотреть, поставить эти CMS, выучить популярные плагины к ним, попробовать сделать тему или плагин.

В прицнипе, реально, но сложно.

И имей в виду, заказы на фрилансе - дело не очень веселое, долго их ищешь, долго все обсуждаешь, делаешь, потом внезапно оказывается что в о чем-то еще не догаваривались. Заказчики бывают всякие. Искать постоянную удаленную работу или оффлайновую работы по моему проще.

Что насчет моего учебника? Он хорош тем что рассчитан на людей с нулевыми знаниями и все объясняет с самого начала. Пройдешь — смогу дать более сложное задание, сделать файлообменник например, хотя в случае ориентации на фриланс лучше будет наверно задание разобраться с какой-нибудь CMS, это мы тоже можем придумать, сделаешь блог на вордпрессе какой-нибудь.

>>384651

Google Driven Development рождает быдлокодеров, имей в виду.

>>384724

Для тысяч файлов я бы смотрел не в сторону макросов, а написал бы скрипт например на том же PHP.

Если надо в тысяче файлов сделать поиск/замену по регулярке - это в саблайме есть (Find in Files), и довольно удобно.

> Что подойдет для автоматизации? Запись шагов и их повторное выполнение.


Скрипт, запусакаемый из командной строки.
#341 #384741
>>384737
для красоты
#342 #384742
#343 #384743
>>384737

Фигурные скобки не обязательны, они используются чтобы вставить сложное выражение или отделить переменную от слова: {$x}kg

Мануал: http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

>>384738

Знаю, но поверхностно, Яву, Си++, немного понимаю Руби/Питон и может еще что-то. на bash умею скрипты писать.

> И почему, кстати, трип перестал использовать?


Глючное тут все какое-то.
#344 #384744

>>384635
Ага, а потом легенды ходят о криворукости веб макак
#345 #384745
>>384740
Как это на практике делается?

Есть куча файлов .html, есть html шаблон. Из этого шаблона берется первая строчка и вставляется в нужное место в тысячи .html файлов, потом вторая и т.д. Я прошел все уроки по пхп у тебя кроме кошек-мышек (не доделал). Но на работе нужна автоматизация. Давай я решу эту проблему, как твое задание, а ты проконтролируешь. А пока я не знаю с чего начать.

С чего же начать?

Каков принцип работы примерно, а я дальше подумаю и погуглю?
12 Кб, 587x200
#346 #384757
>>384740

> Тут заложен ровно один пробел, лучше бы любое число.


> «зделаем вместе» не найдет


> Не найдет отстутвие пробела после точки.


Задание-то перечитай или ты на ходу правила выдумываешь?
10 Кб, 838x208
#347 #384777
Поцаны, где моя ошибка?
#348 #384778
>>384777
$1 и $6 замени на 1, 6 без $. Зачем он?
!ОП #349 #384782
Это у меня одного такое, если переключаться альт-табом, то потом при вводе текста появляется и закрывается окно ответа и пытается отправиться форма? Ну что вы делаете, инвалиды, вы бы сначала мои задания по JS решили а потом брались двачи переделывать.

>>384745

> Давай я решу эту проблему, как твое задание, а ты проконтролируешь.


Давай.

Тогда объясни подробнее, так как я все равно плохо понимаю, например, какой вид имеет «шаблон» (хотя по моему в твоем случае шаблоны — это как раз тысяча файлов, а это файл с исходными данными). Но раз ты прошел мой учебник, то почти все знания у тебя есть (кроме разве что работы с файлами, но это очень просто).

Принцип работы такой:

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

Вот функции для работы с файлами, которые тебе пригодятся (описание смотри в мануале):

— прочесть файл с диска в переменную как строку — file_get_contents
— записать строку из переменной в файл — file_put_contents
— получить список файлов в каталоге — scandir
— проверить существует ли файл — file_exists
— является ли что-то папкой — is_dir
— получить из пути имя файла — basename
— получить из пути только путь к файлу, без имени — dirname
— разобрать путь к файлу на составляюще — pathinfo

Если надо рекурсивно обойти папку и все папки и файлы внутри нее, можно и нужно использовать RecursiveDirectoryIterator: http://php.net/manual/ru/class.recursivedirectoryiterator.php

Если что, итератором называют объект, который позволяет перебирать элементы в списке. В данном случае — файлы на диске.

Скрипт надо запускать не через браузер и веб-сервер, а из командной строки (так удобнее). Если ты не умеешь ей пользоваться, вот гайд: https://gist.github.com/codedokode/10539568 (если там что=то плохо объяснено, пиши). В твоем случае скорее всего команда будет иметь вид вроде

"c:\php5\php.exe" myscript.php

>>384757

Ладно, раз нет так нет. Надо будет потом исправить текст задания.
!ОП #349 #384782
Это у меня одного такое, если переключаться альт-табом, то потом при вводе текста появляется и закрывается окно ответа и пытается отправиться форма? Ну что вы делаете, инвалиды, вы бы сначала мои задания по JS решили а потом брались двачи переделывать.

>>384745

> Давай я решу эту проблему, как твое задание, а ты проконтролируешь.


Давай.

Тогда объясни подробнее, так как я все равно плохо понимаю, например, какой вид имеет «шаблон» (хотя по моему в твоем случае шаблоны — это как раз тысяча файлов, а это файл с исходными данными). Но раз ты прошел мой учебник, то почти все знания у тебя есть (кроме разве что работы с файлами, но это очень просто).

Принцип работы такой:

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

Вот функции для работы с файлами, которые тебе пригодятся (описание смотри в мануале):

— прочесть файл с диска в переменную как строку — file_get_contents
— записать строку из переменной в файл — file_put_contents
— получить список файлов в каталоге — scandir
— проверить существует ли файл — file_exists
— является ли что-то папкой — is_dir
— получить из пути имя файла — basename
— получить из пути только путь к файлу, без имени — dirname
— разобрать путь к файлу на составляюще — pathinfo

Если надо рекурсивно обойти папку и все папки и файлы внутри нее, можно и нужно использовать RecursiveDirectoryIterator: http://php.net/manual/ru/class.recursivedirectoryiterator.php

Если что, итератором называют объект, который позволяет перебирать элементы в списке. В данном случае — файлы на диске.

Скрипт надо запускать не через браузер и веб-сервер, а из командной строки (так удобнее). Если ты не умеешь ей пользоваться, вот гайд: https://gist.github.com/codedokode/10539568 (если там что=то плохо объяснено, пиши). В твоем случае скорее всего команда будет иметь вид вроде

"c:\php5\php.exe" myscript.php

>>384757

Ладно, раз нет так нет. Надо будет потом исправить текст задания.
14 Кб, 819x397
#350 #384784
>>384778
Все равно ошибка.
#351 #384785
>>384782

>Это у меня одного такое, если переключаться альт-табом, то потом при вводе текста появляется и закрывается окно ответа и пытается отправиться форма?


У меня тоже самое
#352 #384786
>>384784
mt_rand это функция, а не переменная. Не нужно везде пихать $.
14 Кб, 847x392
#353 #384787
>>384786
Вот убрал. Ошибка.
#354 #384788
>>384757

Вот тогда другая ошибка: http://ideone.com/IJdDTu

>>384777

Нельзя писать $1, $ пишется перед переменными, а числа пишутся как есть.

Нельзя писать mt_rand = . Знак равно использую когда ты хочешь что=-то сохранить в переменную:

$x = 1;

mt_rand — это не переменная. Это функция, то есть штука которая принимает какие-то данные на вход (в скобках) и возвращает что-то в ответ, в данном случае случайное число. И для вызова функции просто пиши mt_rand(1, 6);

При этом если ты просто ее вызовешь, то ничего не произойдет — число сгенерируется и будет выкинуто. Его надо либо сохранить в переменную:

$x = mt_rand....

Либо вывести на экран:

echo mt_rand....
#355 #384789
>>384787
Ты только внутри строки убрал, а перед этим нет.
15 Кб, 912x416
#356 #384790
>>384789
Хуйня снова какая-то. Просто скинь как правильно. По идее должно быть число от 1 до 6.
#357 #384791
>>384790
mt_rand внутри скобок это просто слово. Нужно перед этим присвоить значение возвращаемое функцией какой-нибудь переменной, а уже затем выводить её через эхо:
$var=mt_rand(1,6);
echo $var;
Либо выводить сразу значение возвращаемой функции
echo mt_rand(1,6);
#358 #384793
>>384790

Ты вызвал функцию и сгенерировал случайное число, но ничего с ним не сделал, а просто выкинул. Надо сохранять в переменную через = или сразу выводить через echo. Перечитай мой пост выше.
#359 #384794
>>384791
На этот раз получилось.
Бля, какой-то хреновый сайт, я думал лучше будет.
Могли бы там хоть ссылку написать, по которому можно было перейти на решение.
#360 #384795
>>384794

Перейти на решение нельзя. Все задачи ты должен решить сам, иначе это не имеет никакого смысла. Проверить решение, можно вкинув ссылку в наш тред.
#361 #384796
>>384782
Ну хорошо файл-шаблон содержит, например (цифры - строки):

1.<div class="tovtable"></div>

2.<tr>
3. <td><strong>some text</strong></td>
4.</tr>

Тысячи файлов с одинаковой разметкой table>tr>td, но с разным количеством строк и ячеек.

Так вот, перед table мне нужно например вставить <div class="tovtable"> в конец засунуть </div> соответственно. tr, которые идут в начале пометить как в 2-4 строчках, и т.д.

Это пример и все на самом деле сложнее.
#362 #384798
>>384795
Просто я сейчас убрал в /n в конце.
Зачем оно было в условии задачи?
#363 #384800
>>384796

А ты сам можешь внятно сформулировать правила замены и написать их в виде кода? Программа же думать не умеет, она делает ровно то, что написано.

Насчет обработки HTML-кода, есть 2 варианта, похуже (регулярки) и получше (DOM + Xpath).

Например, в случае с регулярками, ты можешь написать регулярку, которая будет заменять

<table...</table>

на

(то что написано в первой строке) + <table....</table>

Ты же изучал preg_replace и задачу про исправление ошибок в тексте? Тут аналогично.

Соответственно, с <tr> аналогично, ищем регуляркой все <tr>....</tr> и заменяем.

То, что ты привел в примере, вполне реально сделать только на регулярках. Но для более сложных вещей может их мощи и не хватит, нужен будет DOM.

Для тысячи файлов скрипт написать скорее всего будет быстрее, чем руками сделать.

Вообще, конечно парсить HTML регулярками дурная идея и надо бы использовать ДОМ + XPath, но ведь ты его не изучал (зря кстати) и наверно времени на это уже нет? Изучи тогда потом когда будет время, пригодится наверняка.
#364 #384801
>>384798

Не помню.
#365 #384802
>>383948

> не умеющих в запутанный код



Звучит примерно как «не умеющих ковыряться по помойкам».

>Хаскелепетушки ничем не отличаются от пыхомакак, разве, что тем, что первые просто хуиту пишут вместо кода.



Слова пыхомакаки.
#366 #384803
>>384800
Буду на работе подробнее опишу, что нужно.

Там еще просто нужно искать товар по марке телефона в яндекс-маркете, парсить часть кода от туда и приводить в нужный вид.

А как делается умный парсинг? Который ищет в поисковике информацию, оценивает ее и выбирает то, что нужно. Далее парсит уже. Я знаю, что такое есть.
#367 #384804
>>384801
Ладно, спасибо.
#368 #384807
>>384803

> Там еще просто нужно искать товар по марке телефона в яндекс-маркете, парсить часть кода от туда и приводить в нужный вид.



Это будет сложно написать, тем более что яндекс банит ботов. А «парсить часть кода и приводить в нужный вид» - вполне реально. Тут опять же, надо использовать DOm/XPath, но если ты их не знаешь, придется костыли на регулярках делать.

> А как делается умный парсинг? Который ищет в поисковике информацию, оценивает ее и выбирает то, что нужно. Далее парсит уже.


Отправляется HTTP- запрос, аналогичный тому что браузер отправляет при заполнении формы, получается ответ в HTML или JSON и разбирается. Плюс, наверно всякие прокси используют чтобы не получить бан.
#369 #384809
Посоны, кто в Yii использовал модуль User ?
Очень популярный модуль, но почему-то о нем нет документации, как быть?
#370 #384814
>>384809

- либо гуглить, может документация все же есть
- либо читать исходники
#371 #384818
>>384814
гуглил много, ничего нет. исхоный код уже читаю, но там запутано. не понятно, ведь очень популярный модуль
!ОП #372 #384822
>>384818

Если он популярный, он должен быть описан в блогах и статьях.

Я вижу это например:

http://www.yiiframework.com/extension/yii-user/
http://code.google.com/p/yii-user/wiki/API
http://code.google.com/p/yii-user/wiki/Installation
http://www.delay-delo.com/content/yii-avtorizaciya-ispolzovanie-modulya-yii-user

Скудненько, но остальное наверняка очевидно из исходников. Их там не так и много.
#373 #384827
>>384822
Спасибо, все это прочел. Там к сожалению только о том, как устанавливать. А как его под себя настраивать и менять ничего, только исходники остается читать и задавать вопросы на стаковерфлоу.
#374 #384830
>>384800

DOM я знаю отчасти, я же делал аналог TinyDOM, который не доделал. Первое, что мне надо - спарсить код с определенных страниц яндекс-маркета, мной уже найденных.

Попробую с помощью XPath. Что почитать? Пошел гуглить.
!ОП #375 #384833
>>384830

Ну если знаешь то отлично. Загружаешь страницу в DOM c помощью loadHtml() и выбираешь нужные данные Xpath-запросами.

Xpath — язык запросов для поиска элементов в дереве DOM. Например, им можно написать «найти все элементы img, родителем которых является div у которого класс = x»:

//div[@class='x']/img

Он чем-то напоминает запись пути к файлу, через слеши.

Вот про XPAth: http://zvon.org/xxl/XPathTutorial/General_rus/examples.html

http://www.w3schools.com/xpath/xpath_nodes.asp (на английском, удобно использовать как справочник)

Вот мануал: http://php.net/manual/ru/class.domxpath.php

Вот статья: http://habrahabr.ru/post/114772/ (там используется расширение к браузеру для автоматической генерации Xpath, но имей в виду, вручную надежнее. Однако расширение удобно использовать для отладки запросов).

Если будут вопросы, задавай.
#376 #384836
>>384833

Заметь, что там есть 2 синтаксиса: полный и сокращенный. Например, запись

//AAA/BBB[@id='t']

является сокращенной записью

/ancestor:AAA/child:BBB[attribute::id='t']

Но они абсолютно равноценны, это просто 2 способа написать одно и то же. Так что не удивляйся, увидев например список осей в мануале и сложные выражения через ::
#377 #384838
>>384830

B имей в виду, автоматизация поиска и получения данных из маркета может занять время, это не так просто, в частности из-за ограничений самого маркета. Может проще как-то разделить задачу, например поиск информации вручную, а вставка в HTML автоматизированна?
#378 #384842
>>384838
Но я в принципе понял, что найти я могу и сам. Я вбиваю в пхп уже готовый список ссылок откуда надо парсить код и форматировать.

Или парсить со страницы яндекс маркета тоже будет не просто?
#379 #384854
>>384842

Если яндекс не забанит, то несложно. Достаточно один раз разработать Xpath запросы для поиска нужных полей и ими искать.

Там есть какое-то расширение к фаерфоксу, в котором можно писать и тестировать эти запросы прямо на текущей странице.
#380 #384872
http://ideone.com/JJVjMi

Что-то я упустил? Я думал будет проще.
#381 #384882
>>384842
Если не обезьянничать с XPath и регулярными выражениями, а найти и прочесть документацию по API нужного тебе сервиса - http://api.yandex.ru/market/content/doc/dg/concepts/about.xml то задача стремительно упростится.
#382 #384898
>>384882

API это хорошо, но:

http://api.yandex.ru/market/content/doc/dg/concepts/authorization.xml

> Для получения авторизационного ключа необходимо отправить запрос на предоставление доступа к API, используя форму обратной связи. В запросе подробно опишите проект, для которого потребуется API, а также какие именно данные вы собираетесь использовать. Не забудьте оставить контактную информацию.



Яндекс вряд ли даст ключ с целью «тырить данные для наполнения сайта».
#383 #384899
>>384882

А Xpath точно также можно использовать для извлечения данных из XML-овтета (да, там есть JSON, но для него нету же JSONPath, надо писать лапшу для разбора или свой велосипед).
#384 #384903
>>384898
http://api.yandex.ru/market/

>Используйте контентный API Яндекс.Маркета, чтобы:


>создавать собственные сервисы выбора товаров и >магазинов, используя информацию из Яндекс.Маркета;


Стоило бы научится читать документацию до конца.
>>384899

>(да, там есть JSON, но для него нету же JSONPath, >надо писать лапшу для разбора или свой велосипед).


Lol. Если тебе принципиально то таки есть JSONPath https://github.com/Peekmo/JsonPath, только у тебя в нем нет нужды т.к. есть:
http://php.net/manual/ru/function.json-decode.php
Что позволит тебе без лишних телодвижений десериализовать JSON.
!ОП #385 #384909
>>384903

> Стоило бы научится читать документацию до конца.


Разумеется, API лучше чем парсить сайт, тут даже спорить не о чем. Я буду рад если анону дадут доступ, но не факт что дадут и неизвестно через сколько времени. Опять же судя по описанию, там предлагается стать витриной маркета, а не делать свой магазин со своими товарами.

> только у тебя в нем нет нужды т.к. есть json_decode


Ты зря лезешь в спор, не разобравшись. json_decode не даст тебе на выходе «список категорий товара». Он тебе даст массив-свалку, где все свалено в кучу. Это аналог не Xpath, а DOM::loadXml. Чтобы извлечь нужные данные, нужно либо:

- писать рутинный код выделения нужных данных (мартышкина работа)
- использовать или придумать язык извлечения данных. В XML для этого есть мощный XPath. В JSON сделали его аналог (с не самым удачным синтаксисом имхо). Хабрадурачки и школьники любят кричать «XML не нужен, есть JSON», но мозгов понять что кроме формата хранения данных есть еще и инструменты работы с ними и инфраструктура (с которыми у JSON все хуже), нету.

То, что ты не понимаешь, зачем нужен аналог Xpath, говорит о том, что ты скорее всего предпочитаешь разбирать JSON-данные мартышкиным способом или никогда этим не занимался.
#386 #384912
оп, разбираюсь с MVC на примере http://habrahabr.ru/post/150267/

Возникла пара вопросов.
Пытаюсь перекрутить свой старый сайт статистики на лапше switch. У меня там 2 раздела - таблицы и графики. Соответственно 5 штук страниц отображения таблиц, 5 штук страниц отображения графиков. Данные в основе каждого типа таблиц и графиков одинаковые, просто разница отображения.
Допустим, я определился, что контроллером у меня будет тип - table или chart. Получается action - это тип отчета?
Предположим, в дальнейшем у меня будет расширяться система, и отчеты будут только частью системы. Тогда контроллером будет report, action - table или chart, а тип отчета? subaction или как?

Далее, неразумно делать для графиков и для таблиц разные model. Получается, нужно все таки делать их разными представлениями одного контроллера?

Вообщем в голове каша, не понятно как действовать в случае с достаточной вложенностью параметров скажем (например, site.ru/report/chart/report1 - что контроллер, что действие?);
как быть в случае с запросом данных через ajax (как я понимаю, в контроллере проверять абстрактную переменную isAjax);
где лучше всего сохранить $_GET (сейчас сделал в виде статической переменной Route, в дальнейшем думаю у него же реализовать метод getParam() для получения из него параметров с проверкой) - так логически правильно?
15 Кб, 587x200
#387 #384925
>>384788

> Вот тогда другая ошибка: http://ideone.com/IJdDTu


В каком месте?

> > в тексте есть слова "а" или "но" без запятой перед ними


> Нету. А


> есть. Но


"а" - check, "но" - check, запятая перед ними - ?
#388 #384931
>>384909

> Он тебе даст массив-свалку, где все свалено в кучу.



У тебя в голове все свалено в кучу.

>использовать или придумать язык извлечения данных.



JSON не требует извлечения из него данных.
Он десериализуется в структуры данных твоего языка. После чего ты работаешь со структурами данных твоего языка, в данным случае со структурами данных PHP.

>инструменты работы с ними и инфраструктура



В них нет нужды. JSON описывает объекты и массивы. Которые превращаются в объекты и массивы PHP соответственно.

Вот тебе пример:
http://ideone.com/FBrByo
В примере кода разбирается пример ответа отсюда:
http://api.yandex.ru/market/content/doc/dg/reference/category-id-model.xml
#389 #384937
>>384882
Он возвращает не то, что нужно.

Мне нужно парсить все, что начинается с <table xmlns:lego="https://lego.yandex-team.ru"> и заканчивается "Перед покупкой уточняйте технические характеристики и комплектацию у продавца</p>". Именно со всеми тегами, что в исходном коде и их классами.
228 Кб, 1920x1080
#390 #384938
>>384235
>>384243
http://jsbin.com/xabijeredaqe/1/edit . Опять ошибка. Алсо, я не могу сделать так, чтобы при новом вызове makeAdditive не обнулялся массив с добавками. В отладчике не смог найти своего скрипта, облазил все. Смотри пикрелейтед.
#391 #384939
>>384938
Чтобы заюзать отладчик используй такую ссылку http://jsbin.com/xabijeredaqe/1/

То есть без edit и прочего.
#392 #384942
>>384872
Яндекс заподозрил, что запросы автоматические.

Далее он пишет: "В вашем браузере отключены файлы cookies. Яндекс не сможет запомнить вас и правильно идентифицировать в дальнейшем.". Короче парсится у меня страница с вводом капчи. Объясни, что можно сделать с куками, чтобы меня яндекс запомнил? Как это делается?
#393 #384943
>>384942
разрешить )
#394 #384946
>>384939
Разобрался. Спасибо.

>>384938
>>384243
http://jsbin.com/migujisejajo/1/edit . Но массив добавок все также обнуляется.
#395 #384951
ОП, начал делать задачу по ООП, которую ты давал - http://pastebin.com/SG0SjGAV . Возник вопрос: у класса Компания метод посчитатьОбщуюВыработку тоже самое, что у класса Работник посчитатьЧислоЧасов?
#396 #384953
>>384942
ideone.com/aFIWbl

В заголовке 302 Found. Редирект на страницу с капчей. Но я уже погуглил, даже если прикрутить распознавателя капчи, то после ввода капчи снова происходит редирект. То есть нужно учитывать абсолютно все, как я понял. Интересно даже стало, как вызов.

Оп, куда дальше смотреть?
#397 #384955
>>384953
специально для таких мастеров и поставили систему эту, откуда будешь брать распознавалку капчи?
#398 #384957
>>384942
Да, как вариант создать несколько сеансов curl и выставить опции CURLOPT_COOKIESESSION в тру?
#399 #384958
>>384957
и вообще жесть, ты хоть парсить file_get_content ом, а ну давай за curl садись, из рогатки по бомбардировщикам палишь
#400 #384959
>>384955

Не знаю, antigate платный вроде, других не знаю.

>>384957
С куками я вообще не работал. Надо с чего-то начинать.

Set-Cookie: spravka=и тут набор букв - что это? Это из заголовка.
#401 #384960
>>384959
http://ru.php.net/manual/en/function.curl-setopt.php#95027

Погуглил, пишут, что нужно доработать функцию выше по ссылке и будет норм. Но понять бы ее еще.
#402 #384961
183 Кб, 896x653
#403 #384990
Что я делаю не так? Вставил отмеченное красным, а оно прекратило платежи.
#404 #384993
>>384990
break наверное останавливает цикл, так и задумано?
162 Кб, 703x307
#405 #384995
>>384993
Без break вот что происходит.
#406 #384996
ОП, как тебе такой подход к обучению? Я для себя выделил уровни. 1 лвл - пройти твою книжку, 2лвл - написать калькулятор, 3лвл - написать гостевую книгу, 4 лвл - написать регистрацию на сайте + освоить php mailer, 5 лвл - изучить ООП, 6 лвл фреймворки/CMS, 7 лвл - сделать свой сайт на cms со своими плагинами 8 лвл сделать свою cms. План расчитан на полгода. Сейчас я на 5 лвл потратил 2 недели.
#407 #384997
>>384996
калькулятор уже включен в первый лвл. Самый простой и без приоритета действий, правда.
#408 #385000
>>384995
ну да, суть вопроса то в чем?
#409 #385006
https://github.com/fxsloker/Parser

Идея такая. Все, что с классом b-properties__title нужно заменить на <td height="40" colspan="2"><strong>.

Все, что b-properties__label заменить на <td style="border-bottom: 2px dotted #033f1d" width="280px">.

В конце все все классы удалить.

А потом обернуть в <div class="tovtable">.
#410 #385010
>>385000
Почему он не выплачивает остаток в 4138 с копейками?
#411 #385011
поясните за профессиональное пхп
есть год опыта, хочу обмазаться по хардкору
что должен знать пхп-макак чтобы называть себя профессионалом пхп

нагуглил книгу, но она 2006 года и устарела
либо посоветуйте книг либо так скажите
#412 #385013
>>385010
понял, ты $monthlyPayment, приравниваешь $creditBalance, но потом, если убираешь верхний break, у тебя $creditBalance умножается на 1.03 плюс еще оплата сервиса, но ты то приравнял просто остаток
#413 #385015
>>385013
предел блеать не сходится
226 Кб, 898x712
#414 #385030
>>385013
Почему он продолжает 1000 выплачивать-то?
#415 #385045
>>385030
поставь в условие в конце <=
#416 #385051
http://ideone.com/BCFqRh

Номера написанные правильно решил приводить к одному виду через функцию, и вот в первой же операции соснул.
При попытке заменять '+7' на '8' у меня фейл. Алсо пишет ошибку в этой строчке:
$adduced = preg_replace('/^+\s?7/', '8', $number);

Что в ней не так? Голову сломал уже перечитывая http://archive-ipq-co.narod.ru/l1/regexp.html
#417 #385052
>>385051

>^+


Что это такое? Плюс в регулярках значит "предыдущий знак может встретиться от одного до нескольких раз". Если ты хочешь символ плюса, тебе нужно экранировать его двумя слешами.
#418 #385053
>>385045
Добра, няша.
#419 #385068
>>385052

>такое? Плюс в регулярках значит "предыдущий знак может встретиться от одного до нескольких раз". Если ты хочешь символ плюса, тебе нужно экранировать


Спасибо тебе болшое.
#420 #385074
>>385011
почему мне никто не отвечает?
#421 #385075
>>385074

Ответим вечером.
#422 #385076
>>385075
нихуя не понял

>21:54:13


скор уже мамка спать погонит же
#423 #385077
>>385076
Очевидно, что у ОПа другое время. У меня тоже уже скоро ко сну время подходит.
#424 #385080
>>385077
я прост не понимаю почему ни одного ответа
задал и в прикреплённом треде и тут

неужели вопрос настолько тупой?
неужели ни одной пхп макаки в тредах?
неужели даже унизить никто не хочет?

что за хуйня происходит вообще?
#425 #385081
>>384938

Там скрипт как-то хитро подгружается через ифреймы и фаербаг его либо не видит либо обзывает по другому.

Открой страницу в режиме просмотра (ссылка вида jsbin.com/lalala без слова edit) и на ней будет в списке скриптов HTML-файл с твоим кодом.
#426 #385082
>>385080
У тебя есть год опыта на пхп? А ты знаешь как обойти капчу у яндекса при парсинге?
#427 #385083
>>385082

>А ты знаешь как обойти капчу у яндекса при парсинге?


нет, не знаю
!ОП #429 #385103
>>384872

> html/body/div[2]/table/tbody/tr/td[2]/table


Это плохой запрос. Стоит на странице появиться одному лишнему диву или еще чему-нибудь и все отвалится. Надо искать по:

- id
- классам
- текстовому содержимому (например по слову «модель», «цена» и тд)

Твой запрос скорее всего будет выдавать не то на разных страницах.

>>384912

Смотри, action группируют в контроллеры обычно по тому, что они работают с одним видом сущности. например, действия «удалить новость», «добавить новость», «редактировать новость» логично объединить в контроллер «УправлениеНовостями».

В твоем случае, можно сделать 1 контроллер (Отчет) с 2 действиями — таблица и график. В нем должно быть совсем немного кода, строк 50-100 максимум.

> Соответственно 5 штук страниц отображения таблиц, 5 штук страниц отображения графиков.


Это явно копипаста и неправильное проектирование. Для отображения любых таблиц достаточно одной функции, просто ей передается разная модель например или разные аргументы. И вьюшки по идее достаточно одной, универсальной. В идеале колонки таблицы автоматически определяются из модели.

> неразумно делать для графиков и для таблиц разные model.


Модель представляет не график или таблицу, а данные и логику работы с ними. К примеру, если ты хочешь строить таблицы и графики продаж, тебе хватит 1 модели — модели данных по продажам, просто делать разные выборки и сортировки.

Обычно 1 модель соответствует 1 таблице или сущности в базе данных.

> не понятно как действовать в случае с достаточной вложенностью параметров скажем (например, site.ru/report/chart/report1 - что контроллер, что действие?);


report = контроллер
chart = action
report1 = параметр type = report1

Ты не обязан делать соответствие 1 к 1 между URL и controller/action/params. Ты например можешь сделать что URL /bestsellers соответствует контроллеру statistic, действию showTable с параметром type = bestsellers. То есть вид URL определяется требованиями заказчика или сеошников, какие URL они хотят видеть, и не обязан быть сделан по формуле контроллер/действие. Хотя, когда все URL сделаны по общей схеме, код получается проще.

> как быть в случае с запросом данных через ajax


А чем аякс-запрос отличается от обычного? Точно так же и делать.

> где лучше всего сохранить $_GET


Обычно делают объект Request например:

http://symfony.com/doc/current/components/http_foundation/introduction.html (англ)
http://framework.zend.com/manual/1.12/en/zend.controller.request.html (англ)

То есть в самом начале создается объект Request из глобальных переменных, и он передается в контроллер и доступен там через $this->request, $this->getRequest() или как аргумент для action

Если потом покажешь переделанный код, я может еще что посоветовать смогу.
!ОП #429 #385103
>>384872

> html/body/div[2]/table/tbody/tr/td[2]/table


Это плохой запрос. Стоит на странице появиться одному лишнему диву или еще чему-нибудь и все отвалится. Надо искать по:

- id
- классам
- текстовому содержимому (например по слову «модель», «цена» и тд)

Твой запрос скорее всего будет выдавать не то на разных страницах.

>>384912

Смотри, action группируют в контроллеры обычно по тому, что они работают с одним видом сущности. например, действия «удалить новость», «добавить новость», «редактировать новость» логично объединить в контроллер «УправлениеНовостями».

В твоем случае, можно сделать 1 контроллер (Отчет) с 2 действиями — таблица и график. В нем должно быть совсем немного кода, строк 50-100 максимум.

> Соответственно 5 штук страниц отображения таблиц, 5 штук страниц отображения графиков.


Это явно копипаста и неправильное проектирование. Для отображения любых таблиц достаточно одной функции, просто ей передается разная модель например или разные аргументы. И вьюшки по идее достаточно одной, универсальной. В идеале колонки таблицы автоматически определяются из модели.

> неразумно делать для графиков и для таблиц разные model.


Модель представляет не график или таблицу, а данные и логику работы с ними. К примеру, если ты хочешь строить таблицы и графики продаж, тебе хватит 1 модели — модели данных по продажам, просто делать разные выборки и сортировки.

Обычно 1 модель соответствует 1 таблице или сущности в базе данных.

> не понятно как действовать в случае с достаточной вложенностью параметров скажем (например, site.ru/report/chart/report1 - что контроллер, что действие?);


report = контроллер
chart = action
report1 = параметр type = report1

Ты не обязан делать соответствие 1 к 1 между URL и controller/action/params. Ты например можешь сделать что URL /bestsellers соответствует контроллеру statistic, действию showTable с параметром type = bestsellers. То есть вид URL определяется требованиями заказчика или сеошников, какие URL они хотят видеть, и не обязан быть сделан по формуле контроллер/действие. Хотя, когда все URL сделаны по общей схеме, код получается проще.

> как быть в случае с запросом данных через ajax


А чем аякс-запрос отличается от обычного? Точно так же и делать.

> где лучше всего сохранить $_GET


Обычно делают объект Request например:

http://symfony.com/doc/current/components/http_foundation/introduction.html (англ)
http://framework.zend.com/manual/1.12/en/zend.controller.request.html (англ)

То есть в самом начале создается объект Request из глобальных переменных, и он передается в контроллер и доступен там через $this->request, $this->getRequest() или как аргумент для action

Если потом покажешь переделанный код, я может еще что посоветовать смогу.
!ОП #430 #385104

>>384925

Верно, в условии задания это не написано. Но это я исправлять не буду. Ведь задача рассчитана на людей, у которых есть интеллект, и которые понимают, что «А» в начале предложения — не ошибка, а не на роботов, которые все понимают формально. Более того, я подозреваю, что для решения идеально сформулированной задачи человек вообще не нужен.

>>384931

> JSON не требует извлечения из него данных.


Неверно. Вот пример JSON: http://geocode-maps.yandex.ru/1.x/?geocode=%D0%B8%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%BE&format=json Это именно что свалка информации, и без написания кода я не могу получить ответ на вопрос «получить все регионы, где есть населенный пункт Иваново (то есть имеющий kind=locality)». В Xpath (и JSONPath наверно) это делается 1 запросом.

> После чего ты работаешь со структурами данных твоего языка, в данным случае со структурами данных PHP.


Я не хочу работать с массивами 10-кратной вложенности

> JSON описывает объекты и массивы. Которые превращаются в объекты и массивы PHP соответственно.


Неверно. Они превращаются в массивы и массивы. stdObject только формально объект, по сути это ассоциативный массив. У него нет ни одного метода ни отдельного имени класса. В JSON не кодируется информация о классе, потому получить из него объекты без какого-то внешнего маппера (например с использованием аннотаций к существующим классам) нельзя. Ты по моему толком не понимаешь что такое объект.

Вот в C# есть полноценный маппинг JSON на объекты: http://stackoverflow.com/a/9988494 благодаря наличию типизации. С json_decode это не сравнить.

> foreach ($my_obj->models->items as $item){


> echo "{$item->prices->avg} {$item->prices->curName}\n";


Писать такой код и есть мартышкина работа. Особенно когда структуры данных становятся сложнее. Ты ничего не знаешь ни про XPath, ни про сериализацию через аннотации, но рассказываешь тут, что они не нужны. Если ты писал наколеночные скриптики и тебе хватало json_encode, это не значит что другим его хватит.

Подумай на досуге, как бы ты на месте Яндекса формировал JSON по той ссылке. Я не знаю точный ответ, но уверен, что они используют какой-то маппинг от моделей, а не пишут код создания массива руками (просто сериализовать модели нельзя, там обычно есть много служебных данных которые не должны быть видны через АПИ). Тем более что при таком подходе можно и схему и описание АПИ генерировать автоматически.

>>384942

Яндекс не хочет обслуживать ботов. От того, что ты включишь куки, твой бот в человека не превратится. Тебя бы не устроил вариант например искать руками, а страницу куда-нибудь сохранять для автоматического парсинга?

Куки можно включить, задав опцию COOKIE_JAR или как-то так, посмотри список тут: http://php.net/manual/ru/function.curl-setopt.php

>>384946

Ну так посмотри на свой код:

> Hamburger.prototype.makeAdditive = function(additive) { /Добавка/


> this.additives = [];


Что по твоему делает эта строчка?

>>384951

> Возник вопрос: у класса Компания метод посчитатьОбщуюВыработку тоже самое, что у класса Работник посчитатьЧислоЧасов?


Ну не совсем то же, у работника метод считает только его часы, а у Компании — всех работников.

>>384959

Скорее всего у Яндекса более хитрая система, чем проверка кук — так как умников, которые создают бесполезную нагрузку своим парсингом, довольно много и Яндекс не первый год с ними борется.
!ОП #430 #385104

>>384925

Верно, в условии задания это не написано. Но это я исправлять не буду. Ведь задача рассчитана на людей, у которых есть интеллект, и которые понимают, что «А» в начале предложения — не ошибка, а не на роботов, которые все понимают формально. Более того, я подозреваю, что для решения идеально сформулированной задачи человек вообще не нужен.

>>384931

> JSON не требует извлечения из него данных.


Неверно. Вот пример JSON: http://geocode-maps.yandex.ru/1.x/?geocode=%D0%B8%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%BE&format=json Это именно что свалка информации, и без написания кода я не могу получить ответ на вопрос «получить все регионы, где есть населенный пункт Иваново (то есть имеющий kind=locality)». В Xpath (и JSONPath наверно) это делается 1 запросом.

> После чего ты работаешь со структурами данных твоего языка, в данным случае со структурами данных PHP.


Я не хочу работать с массивами 10-кратной вложенности

> JSON описывает объекты и массивы. Которые превращаются в объекты и массивы PHP соответственно.


Неверно. Они превращаются в массивы и массивы. stdObject только формально объект, по сути это ассоциативный массив. У него нет ни одного метода ни отдельного имени класса. В JSON не кодируется информация о классе, потому получить из него объекты без какого-то внешнего маппера (например с использованием аннотаций к существующим классам) нельзя. Ты по моему толком не понимаешь что такое объект.

Вот в C# есть полноценный маппинг JSON на объекты: http://stackoverflow.com/a/9988494 благодаря наличию типизации. С json_decode это не сравнить.

> foreach ($my_obj->models->items as $item){


> echo "{$item->prices->avg} {$item->prices->curName}\n";


Писать такой код и есть мартышкина работа. Особенно когда структуры данных становятся сложнее. Ты ничего не знаешь ни про XPath, ни про сериализацию через аннотации, но рассказываешь тут, что они не нужны. Если ты писал наколеночные скриптики и тебе хватало json_encode, это не значит что другим его хватит.

Подумай на досуге, как бы ты на месте Яндекса формировал JSON по той ссылке. Я не знаю точный ответ, но уверен, что они используют какой-то маппинг от моделей, а не пишут код создания массива руками (просто сериализовать модели нельзя, там обычно есть много служебных данных которые не должны быть видны через АПИ). Тем более что при таком подходе можно и схему и описание АПИ генерировать автоматически.

>>384942

Яндекс не хочет обслуживать ботов. От того, что ты включишь куки, твой бот в человека не превратится. Тебя бы не устроил вариант например искать руками, а страницу куда-нибудь сохранять для автоматического парсинга?

Куки можно включить, задав опцию COOKIE_JAR или как-то так, посмотри список тут: http://php.net/manual/ru/function.curl-setopt.php

>>384946

Ну так посмотри на свой код:

> Hamburger.prototype.makeAdditive = function(additive) { /Добавка/


> this.additives = [];


Что по твоему делает эта строчка?

>>384951

> Возник вопрос: у класса Компания метод посчитатьОбщуюВыработку тоже самое, что у класса Работник посчитатьЧислоЧасов?


Ну не совсем то же, у работника метод считает только его часы, а у Компании — всех работников.

>>384959

Скорее всего у Яндекса более хитрая система, чем проверка кук — так как умников, которые создают бесполезную нагрузку своим парсингом, довольно много и Яндекс не первый год с ними борется.
!ОП #431 #385105
>>384990

break выходит из цикла

>>384996

> 3лвл - написать гостевую книгу, 4 лвл - написать регистрацию на сайте + освоить php mailer,


Да ну их. Давай лучше после моего учебника (там как раз в последней главе ООП) тогда перейдем к изучению баз данных и мини-фреймворка Slim и написанию файлообменника: https://gist.github.com/codedokode/9424217 — а после, можно будет либо более сложный сайт сделать, либо перейти к изучению яваскрипта, верстки и прочих клайентсайд премудростей.

Насчет CMS, не думаю, что стоит писать свою, если хочется с ними познакомиться, можем придумать какую-нибудь задачу на Вордпресс например, но фреймворки по уровню выше чем CMS. CMS больше рассчитаны на редактирование сайта кнопочками в админке и иногда небольшие правки кода. Там ничего сверхсложного нет, научишься под вордпресс темы/плагины писать, и под другие сможешь.

То есть:

Мой учебник -> файлообменник -> Вордпресс либо сайт на Yii либо яваскрипт

> освоить php mailer


Это же 1-2 дня максимум. Тем более сейчас более популярен SwiftMailer, он в плане архитектуры лучше.

>>385006

Как тебе вариант вручную искать нужные страницы в маркете и сохранять в HTML-файл из браузера (сохранять можно даже не открывая ссылку: правый клик по ссылке -> сохранить содержимое по ссылке как...), а дальше уже скормить их скрипту? Это просто проще чем пытаться обойти защиту от ботов.

Ну или если хочешь попробовать обойти защиту, надо как минимум включить поддержку кук, поставить юзер-агент правильный и другие заголовки похожие на ревальный браузер (что такое: https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP#.D0.97.D0.B0.D0.B3.D0.BE.D0.BB.D0.BE.D0.B2.D0.BA.D0.B8_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.B0 ), снизить частоту запросов, может использовать прокси чтобы не слать их с одного IP. Это заморочно и не гарантирует что ты обойдешь защиту.

> Все, что с классом b-properties__title нужно заменить на <td height="40" colspan="2"><strong>.


Это легко, находишь узлы DOM с таким классом через XPath и заменяешь содержимое, например, через удаление всех детей и вставку новых.

> В конце все все классы удалить.


Это тоже, проходишься по узлу и всем его детям и удаляешь аттрибут class.

> А потом обернуть в <div class="tovtable">.


Это тоже несложно.
!ОП #431 #385105
>>384990

break выходит из цикла

>>384996

> 3лвл - написать гостевую книгу, 4 лвл - написать регистрацию на сайте + освоить php mailer,


Да ну их. Давай лучше после моего учебника (там как раз в последней главе ООП) тогда перейдем к изучению баз данных и мини-фреймворка Slim и написанию файлообменника: https://gist.github.com/codedokode/9424217 — а после, можно будет либо более сложный сайт сделать, либо перейти к изучению яваскрипта, верстки и прочих клайентсайд премудростей.

Насчет CMS, не думаю, что стоит писать свою, если хочется с ними познакомиться, можем придумать какую-нибудь задачу на Вордпресс например, но фреймворки по уровню выше чем CMS. CMS больше рассчитаны на редактирование сайта кнопочками в админке и иногда небольшие правки кода. Там ничего сверхсложного нет, научишься под вордпресс темы/плагины писать, и под другие сможешь.

То есть:

Мой учебник -> файлообменник -> Вордпресс либо сайт на Yii либо яваскрипт

> освоить php mailer


Это же 1-2 дня максимум. Тем более сейчас более популярен SwiftMailer, он в плане архитектуры лучше.

>>385006

Как тебе вариант вручную искать нужные страницы в маркете и сохранять в HTML-файл из браузера (сохранять можно даже не открывая ссылку: правый клик по ссылке -> сохранить содержимое по ссылке как...), а дальше уже скормить их скрипту? Это просто проще чем пытаться обойти защиту от ботов.

Ну или если хочешь попробовать обойти защиту, надо как минимум включить поддержку кук, поставить юзер-агент правильный и другие заголовки похожие на ревальный браузер (что такое: https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP#.D0.97.D0.B0.D0.B3.D0.BE.D0.BB.D0.BE.D0.B2.D0.BA.D0.B8_.D0.B7.D0.B0.D0.BF.D1.80.D0.BE.D1.81.D0.B0 ), снизить частоту запросов, может использовать прокси чтобы не слать их с одного IP. Это заморочно и не гарантирует что ты обойдешь защиту.

> Все, что с классом b-properties__title нужно заменить на <td height="40" colspan="2"><strong>.


Это легко, находишь узлы DOM с таким классом через XPath и заменяешь содержимое, например, через удаление всех детей и вставку новых.

> В конце все все классы удалить.


Это тоже, проходишься по узлу и всем его детям и удаляешь аттрибут class.

> А потом обернуть в <div class="tovtable">.


Это тоже несложно.
!ОП #432 #385106
>>385011

2 неплохих книги есть в ОП-посте (Мэтт Зандстра и Шлосснейгл). Там есть некоторые не очень актуальные главы (например, про PEAR), но остальное хорошо бы знать. Также, есть сайт phptherightway (главное преимущество что он актуален и современен). Для начала все это знать

Надо знать:

- регулярки на хорошем уровне (assertinsons, unicode properties — все есть в официальном мануале)
- оформление кода по PSR-1 и 2
- ООП (включая abstract, final, static, волшебные методы), исключения, неймспейсы, MVC
- автозагрузка по PSR-0 и 4
- PDO и плейсхолдеры
- кодировки, mbstring, какие функции
- БД на хорошем уровне: индексы, внешние ключи, транзакции и уровни изоляций, оптимизация запросов и EXPLAIN, способы хранения древовидных данных
- кеширование: APC, MemCache
- NoSQL хранилища: Redis, MongoDB
- поиск: Sphinx (у меня есть маленький урок по нему)
- умение пользоваться командной строкой в линуксе (есть маленькая паста на тему)
- DOM/XPAth/XML
- управление пакетами: composer/packgist
- шаблонизаторы например Twig
- фреймворки например Yii, Symfony 2 ( начать можно с http://symfony.in.ua/symfony2-jobeet-tutorial.html )
- роутинг например Symfony Router
- ORM например Doctrine 2 из Симфони
- тестирование: phpunit либо CodeCeption. Если еще Selenium осилишь, вообще славно.

Думаю, такой список произведет хорошее впечатление.
!ОП #432 #385106
>>385011

2 неплохих книги есть в ОП-посте (Мэтт Зандстра и Шлосснейгл). Там есть некоторые не очень актуальные главы (например, про PEAR), но остальное хорошо бы знать. Также, есть сайт phptherightway (главное преимущество что он актуален и современен). Для начала все это знать

Надо знать:

- регулярки на хорошем уровне (assertinsons, unicode properties — все есть в официальном мануале)
- оформление кода по PSR-1 и 2
- ООП (включая abstract, final, static, волшебные методы), исключения, неймспейсы, MVC
- автозагрузка по PSR-0 и 4
- PDO и плейсхолдеры
- кодировки, mbstring, какие функции
- БД на хорошем уровне: индексы, внешние ключи, транзакции и уровни изоляций, оптимизация запросов и EXPLAIN, способы хранения древовидных данных
- кеширование: APC, MemCache
- NoSQL хранилища: Redis, MongoDB
- поиск: Sphinx (у меня есть маленький урок по нему)
- умение пользоваться командной строкой в линуксе (есть маленькая паста на тему)
- DOM/XPAth/XML
- управление пакетами: composer/packgist
- шаблонизаторы например Twig
- фреймворки например Yii, Symfony 2 ( начать можно с http://symfony.in.ua/symfony2-jobeet-tutorial.html )
- роутинг например Symfony Router
- ORM например Doctrine 2 из Симфони
- тестирование: phpunit либо CodeCeption. Если еще Selenium осилишь, вообще славно.

Думаю, такой список произведет хорошее впечатление.
!ОП #433 #385107
>>385030

Там ответ должен быть около 61270 если что.

Алсо выражения для расчета процентов вроде $percent $sum + $comission + $servicePayment - $monthlyPayment не должны быть скопипастены и встречаться больше одного раза.

>>385080

Привыкай. Я отвечаю всем, но я не могут тут сидеть круглосуточно и захожу раз в день в среднем.

>>385087

Вот сложил в один массив номера ты зря. Ведь чтобы проверить, правильно ли работает программа, надо глазами просмотреть 100500 номеров и проверить. А если бы разложил по 2 разным массивам — программа сама бы могла себя проверять и громко кричать если гжеде-то неправильно что-то определилось. Это и есть автоматизированное тестирование, что ты сразу видишь где ошибка без ручных проверок. В следующий раз делай чтобы программа сама себя тестировала.

Я советую вместо \s? писать \s
чтобы проходило и 2 и 3 пробела вместо одного. Неопытные пользователи легко могут их ввести.

> \s?-?\s?[(]?\s?\d\s?[)]?\s?-?\s?


Ого, как хитро. Я бы сделал проще: цифра + любое число пробелов, минусов, скобок. Так хоть выражение будет короче и понятне.

> $adduced = preg_split('/\\D/', $adduced, 0, PREG_SPLIT_NO_EMPTY);


> $adduced = implode("",$adduced);


Используй лучше вместо этого preg_replace (его кстати можно объединить с тем, что заменяет +7 на 8).

В общем, программа работает верно, но можно еще чуть улучшить код.
#434 #385140
>>382412

> четвертый пик


ОП, тебе по ебалу настучать, может, или просто обоссать?
60 Кб, 460x693
#435 #385157
Пыханы, помогите. Использую Open Server. Создал домен mysite.local - ни хуя не работает. А localhost работает, как часы. Как запилить работающий свой домен?
#436 #385166
>>385105
СПасибо ОП, сейчас начну файлообменник делать!
#437 #385172
>>385103
ОП, посмотри на реализацию модуля report.
Я перекрутил изначальный движок, то бы файлы были не 3 папки model view controller, где куча реализаций код каждый контроллер, а по папкам - модулям, где уже 3 файла. Я этим на какую-нибудь логичность и структуры MVC не покусился?

И собственно жду замечаний по комментам и в целом.

http://ideone.com/wM2c9I
#438 #385189
>>385172
if(file_exists($action_path))
{
include "application/module/report/".$action_file;
}
мне такая конструкция дико не нравится
#439 #385193
>>385189
хотя бы include_once давай
681 Кб, 1314x2141
40 Кб, 720x540
113 Кб, 1280x932
115 Кб, 1024x585
#441 #385257
>>385106

>- умение пользоваться командной строкой в линуксе (есть маленькая паста на тему)



Прошу ссылку на эту пасту.

Алсо вот перед сном быстро накиданный скрипт на автозамену.

http://ideone.com/LbciTj
#442 #385263
>>385105
Вручную тоже хороший вариант.

Попробую на примере 2-х файлов. Мне нужно занести шаблон в переменную $template, а файл-подопытный например в $tel. Как это сделать? Чтобы легче было все лежит в одной директории и сам файл index.php тоже.

Дальше как я буду использовать XPath, если у меня нет ни тегов html, ни body, а просто фрагмент кода. Фрагмент кода и в $template и в $tel. Можешь тут удостовериться https://github.com/fxsloker/Parser В template.html Вообще нет тегов оберток, только один идет за другим. Xpath сможет найти тег вот так .//div?

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

С кодировкой проблема, ведь она указывается в теге head, а у меня фрагмент кода, поэтому вылазят иероглифы.
#443 #385265
>>385263
Забыл спросить. А если сделать так, чтобы капча мне показывалась и я вручную бы ее вводил, получится? Это реально?
#444 #385266
Что не так?
http://codepad.org/Wl9epfMe
#445 #385268
>>385266
Ой , не та ссылка. Вот правильная.
http://codepad.org/hG0wpfSY
#446 #385278
>>385268
А все разобрался.
!ОП #447 #385300
>>385172

Структура файлов странная. Не понимаю, зачем разбивать на модули. Ведь один контроллер например может использовать несколько моделей.

> Route::$param_array['isAjax']


тут должен быть вызов обычного не статического метода.

> echo json_encode($data); die;


Content-Type не выставлен правильный для JSON

> $this->model = new Model_Report();


Не понимаю, в чем смысл строки если для разных отчетов нужно загружать разные модели.

> include "application/module/report/".$action_file;


Тут вполне может быть уязвимость, позволяющая запустить произвольный PHP-скрипт. Никакой защиты нет. Читай: http://www.abc-it.lv/index.php/id/609

> if(file_exists($action_path))


>include "application/module/report/".$action_file;


Кошмар. Для этого нужно использовать наследование. Все эти инклюды не должны быть в модели. Вынеси их например в фабрику моделей которая загружает нужную.

Насчет get_data лучше бы возвращать не тупой массив, а объект с методами вроде получитьСписокКолонок(), получитьЧислоСтрок() и так далее.

> ниже код тот что был из фреймворка, мне рисовать свою таблицу таким же образом?


Используй шаблонизатор встроенный в PHP (или любой другой) вместо этой лапши: http://www.phpinfo.su/articles/practice/shablony_v_php.html

> $action = new $action_name();


> return $action->run();


Это какая-то вторая система контроллеров. Не нужна, выпиливай ее.

Алсо, почему ты изобретаешь свой стиль написания имен в функций? В PHP используется camelCase, это закреплено в одном из PSR по оформелнию кода.

Что касается имен файлов, тут тоже есть 2 варианта, PSR-0 (с подчеркиваниями) и PSR-4 (c неймспейсами). Не изобретай велосипедов.
!ОП #447 #385300
>>385172

Структура файлов странная. Не понимаю, зачем разбивать на модули. Ведь один контроллер например может использовать несколько моделей.

> Route::$param_array['isAjax']


тут должен быть вызов обычного не статического метода.

> echo json_encode($data); die;


Content-Type не выставлен правильный для JSON

> $this->model = new Model_Report();


Не понимаю, в чем смысл строки если для разных отчетов нужно загружать разные модели.

> include "application/module/report/".$action_file;


Тут вполне может быть уязвимость, позволяющая запустить произвольный PHP-скрипт. Никакой защиты нет. Читай: http://www.abc-it.lv/index.php/id/609

> if(file_exists($action_path))


>include "application/module/report/".$action_file;


Кошмар. Для этого нужно использовать наследование. Все эти инклюды не должны быть в модели. Вынеси их например в фабрику моделей которая загружает нужную.

Насчет get_data лучше бы возвращать не тупой массив, а объект с методами вроде получитьСписокКолонок(), получитьЧислоСтрок() и так далее.

> ниже код тот что был из фреймворка, мне рисовать свою таблицу таким же образом?


Используй шаблонизатор встроенный в PHP (или любой другой) вместо этой лапши: http://www.phpinfo.su/articles/practice/shablony_v_php.html

> $action = new $action_name();


> return $action->run();


Это какая-то вторая система контроллеров. Не нужна, выпиливай ее.

Алсо, почему ты изобретаешь свой стиль написания имен в функций? В PHP используется camelCase, это закреплено в одном из PSR по оформелнию кода.

Что касается имен файлов, тут тоже есть 2 варианта, PSR-0 (с подчеркиваниями) и PSR-4 (c неймспейсами). Не изобретай велосипедов.
#448 #385305
>>385157

В hosts свой домен прописал?

>>385257

https://gist.github.com/codedokode/10539568

>>385263

> Мне нужно занести шаблон в переменную $template,


file_get_contents же

> альше как я буду использовать XPath, если у меня нет ни тегов html, ни body, а просто фрагмент кода.


Кусок html из tel.html мне кажется загружается в DOM без прблем, ну нет body ну и фиг с ним. Если дом добавит теги html/body — удалишь ручками.

> как мне извлечь сначала первую строку, обработать код, далее вторую и т.д.?


Разбей файл на массив строк explode или используй функцию file()

>>385265

Не знаю. Может быть, если куки и заголовки достоверно подделать под браузер то да.

Остальное проверю завтра.
#448 #385305
>>385157

В hosts свой домен прописал?

>>385257

https://gist.github.com/codedokode/10539568

>>385263

> Мне нужно занести шаблон в переменную $template,


file_get_contents же

> альше как я буду использовать XPath, если у меня нет ни тегов html, ни body, а просто фрагмент кода.


Кусок html из tel.html мне кажется загружается в DOM без прблем, ну нет body ну и фиг с ним. Если дом добавит теги html/body — удалишь ручками.

> как мне извлечь сначала первую строку, обработать код, далее вторую и т.д.?


Разбей файл на массив строк explode или используй функцию file()

>>385265

Не знаю. Может быть, если куки и заголовки достоверно подделать под браузер то да.

Остальное проверю завтра.
#449 #385307
>>385263

Еще есть такая фишка как инъекция JS в страниу. Есть расширения к ФФ Greasemonkey, Scriptish — они позволяют в страницу и загрузке вставлять и запускать твой яваскрипт, который может например парсить отттуда нужные данные и выводить в готовом виде в консоль. То есть ты можешь в своем баузере вставить свой яваскипт в страницу и им что-то делать. Может это можно тут использовать.
#450 #385321
>>385307
Попробовал, заманчивая идея оказалась. Но ничего не вышло:

// ==UserScript==
// @name parser
// @namespace parser
// @description The good parser
// @include http://market.yandex.ru/model-spec.xml?modelid=6175532&hid=91491
// @version 1
// @grant none
// ==/UserScript==

var tel = document.evaluate(".//td[@class='l-page__left']", document, null,
XPathResult.ANY_UNORDERED_NODE_TYPE, null
);

console.log(tel);

Возвращает undefined. В FirePath проверял, все находит. Хотя использование XPath в javascript для меня ново.
#451 #385322
>>385321
Это у меня косяк какой-то, точно. Я думаю, реально спарсить нужный код, изменить его, и сохранить в файл.

По поводу сохранения в файл с помощью javascript что-то мало информации, ну вот есть BlobBuilder, текст в который можно добавить через append и сгенерировать ссылку, перейдя по которой скачается нужный файл, знаешь что-нибудь про это?

Еще можно через ActiveXObject.

Оп, надо уже определиться, что лучше сделать и начать что-то писать. Скажи как правильно, я так и сделаю.
#452 #385324
>>385157
У меня из-за антивиря только localhost был доступен. Я добавил openserver в доверенные программы.
#453 #385326
>>385324
https://github.com/fxsloker/Parser

Ну и вот пока начал делать. Не хочет оборачивать. Понятно, что здесь регулярки зло, но как по другому?
#455 #385337
>>385231
ахуенная вещь, спасибо
#458 #385343
ITT HHVM боги унижают Рубепетухов/Бедоновыродков
#459 #385346
>>382414

> function bakeCookies(...)


> {


фублядьфунахуй
sage #460 #385349
>>385341
Мда, надо было поддержку utf8 поставить. Прощелкал.
#461 #385353
>>385104
http://jsbin.com/migujisejajo/2/edit . лол, я уже больше месяца делаю эту задачу. Местный рекордсмен.
#462 #385360
>>383274

> Пиздец же, как вы на этом говне пишете


Петушок, а что ты вообще хочешь получить, эхая массив?!
#463 #385362
Делаю http://pastebin.com/SG0SjGAV . Там написано, что у класса Компания должно быть свойство списокРаботников, т.е Company.listEmployees = []; ? И еще у класса Работник свойства - стаж, ставка и отработанные часы, но если я пишу, например, Employee.baseRate = baseRate; , то у меня оно каждый раз перезаписывается. Может я не так понял и надо this.baseRate; ? Вот код - http://jsbin.com/merogifiyipi/1/edit
#464 #385363
>>385360
да это очередной ебантяй проходивший мими, хуйли ты ему отвечаешь? пошел дальше
#465 #385378
Какие юзать тулзы, чтобы дебажить похапэ?
!ОП #466 #385390
>>385321

Может скрипт запускается до полной загрузки страницы. Поставль там ожидание события https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded

Алсо, этот код не очень надежен

> @class='l-page__left'


Так как там могут быть добавлены еще классы. По идее класс надо искать функцией contains, примерно так

contains(normalize-space(класс) с пробелами с краев, @class c пробелами)

Алсо, в браузере можно исползовать querySelector/querySelectorAll

> ну вот есть BlobBuilder, текст в который можно добавить через append и сгенерировать ссылку, перейдя по которой скачается нужный файл, знаешь что-нибудь про это?


Там есть АПИ для работы с файлами в специальной файловой системе-песочнице, но судя по http://caniuse.com/#search=filesystem поддерживается только Хромом

Вот статья на англ. http://www.html5rocks.com/en/tutorials/file/filesystem/

Думаю, это тут не нужно.

Вот пример, как без этого сохранить файл через ссслыку и data URL: http://paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/

Вот инфа по data URL https://ru.wikipedia.org/wiki/Data:_URL

Еще есть https://github.com/eligrey/FileSaver.js но мне кажется тебе хватит Data URL
!ОП #466 #385390
>>385321

Может скрипт запускается до полной загрузки страницы. Поставль там ожидание события https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded

Алсо, этот код не очень надежен

> @class='l-page__left'


Так как там могут быть добавлены еще классы. По идее класс надо искать функцией contains, примерно так

contains(normalize-space(класс) с пробелами с краев, @class c пробелами)

Алсо, в браузере можно исползовать querySelector/querySelectorAll

> ну вот есть BlobBuilder, текст в который можно добавить через append и сгенерировать ссылку, перейдя по которой скачается нужный файл, знаешь что-нибудь про это?


Там есть АПИ для работы с файлами в специальной файловой системе-песочнице, но судя по http://caniuse.com/#search=filesystem поддерживается только Хромом

Вот статья на англ. http://www.html5rocks.com/en/tutorials/file/filesystem/

Думаю, это тут не нужно.

Вот пример, как без этого сохранить файл через ссслыку и data URL: http://paxcel.net/blog/savedownload-file-using-html5-javascript-the-download-attribute-2/

Вот инфа по data URL https://ru.wikipedia.org/wiki/Data:_URL

Еще есть https://github.com/eligrey/FileSaver.js но мне кажется тебе хватит Data URL
#467 #385393
>>385378

IDE c поддержкой дебага (PhpStorm и другие), а в PHP надо установить расширение xDebug. Погугли. Отдельных отладчиков вроде нет.

>>385322

> Оп, надо уже определиться


Ну так определись. Сравни разные варианты и выбери тот, который реалистично реализовать. Ты же лучше меня представляешь что надо сделать.

> Еще можно через ActiveXObject.


Он только в иЕ старых

>>385326

> Понятно, что здесь регулярки зло, но как по другому?


Если через DOM то через срздение нод (createElement) и вставку/перенос через appendChild и insertBefore.

Чтобы обернуть что-то, вставляешь новую ноду и то, что оборачиваешь через appendChild переносишь в нее.

> .


Точка по умолчанию не ищет перевод строки, ты в курсе? Почитай в мануале про флаг m (multiline)

Алсо, регулярку можешь тестировать тут http://regex101.com/ только не забудь что там бекслеш надо писать 1 раз а не 2. То есть \s а не \\s
#467 #385393
>>385378

IDE c поддержкой дебага (PhpStorm и другие), а в PHP надо установить расширение xDebug. Погугли. Отдельных отладчиков вроде нет.

>>385322

> Оп, надо уже определиться


Ну так определись. Сравни разные варианты и выбери тот, который реалистично реализовать. Ты же лучше меня представляешь что надо сделать.

> Еще можно через ActiveXObject.


Он только в иЕ старых

>>385326

> Понятно, что здесь регулярки зло, но как по другому?


Если через DOM то через срздение нод (createElement) и вставку/перенос через appendChild и insertBefore.

Чтобы обернуть что-то, вставляешь новую ноду и то, что оборачиваешь через appendChild переносишь в нее.

> .


Точка по умолчанию не ищет перевод строки, ты в курсе? Почитай в мануале про флаг m (multiline)

Алсо, регулярку можешь тестировать тут http://regex101.com/ только не забудь что там бекслеш надо писать 1 раз а не 2. То есть \s а не \\s
#468 #385394
Почему инженер компании "Вектор" получает самую маленькую зарплату?
Почему цифры кол-ва сотрудников в таблице не сходятся с цифрами состава департаментов?
#469 #385395
>>385353

Не сдавайся.

> if (!this.additives) {


> this.additives = [];


> }


Это ты опять изобрел велосипед. Для задания начальных значений надо использовать конструктор, просто напиши в нем:

this.additives = [];

В calcPrice/calcCalor надо поставить проверку что заданы size и filling, если нет — исключение. Или, можно задавать size и filling прямо через конструктор, тогда проверка не нужна.

А так, в остальном все хорошо.
#470 #385397
>>385393
По ИДЕ тоже вопрос, какие из бесплатных хорошие? Поставил NetBeans.
#471 #385398
>>385362

> Company.listEmployees = [];


Этим ты создаешь свойство у объекта Company (в JS функции — это объекты). Это не то, тебе надо задавать свойство у создаваемых через new объектов через this. Делай это в конструкторе.

В JS запись вида

Company.property = 1
Company.doSomething = function () ...

это аналог статических свойств и методов в других языках программирования. Статические свойства/методы — это те, которые есть ровно в одном экземпляре и доступны на классе, а не на объекте.

> Может я не так понял и надо this.baseRate;


Да. У каждого работника ведь своя зарплата, а не одна на всех.
415 Кб, 900x918
#472 #385469
>>384229

>Вместо использования фолдингов надо писать аккуратный код


>Вместо использования фолдингов


>аккуратный код


Что ты несешь, долбоеб? Приведи мне пример "аккуратного кода".

>Неуч


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

>Неуч пишет if (req.что-то там.match(...))


>req.что-то там.match


Лол, это как раз таки должен знать каждый профи, а не писать свои костыли.

>промизы


>лепишь коллбеки на коллбеке


>потом переписал на набор несвязанных функций


>запощена только часть кода


Ты просто мастерски себя обосрал.

>черный по серому


О вкусах... Ну ты понел.

>все переменные объявлены..


Бессмысленное замечание.

>неумение в ООП


Лол, т.е. ты не знаешь про приватные сво-ва/методы и каков "ООП" в js ? Мои соболезнования.

>избирательная венгерская нотация


Именно так и нужно, ибо лишь часть переменных может быть иметь непонятный тип. В остальном - элементарно.

>у ноды наверняка есть стайл гайд, который неуч не читал


В век рефакторинга-то, ебана. Приблизительно соблюдать можно, но зачем? Сообразительный программист и сам поймет.

>if typeof == object -> программист-неуч сам не понимает какого типа переменная


Мань, ну зачем ты строишь из себя вангу? Ты даже не понимаешь для чего нужна эта "подпрограмма", а уже кукарекаешь, что-то.

>функции названы бесмысленно, надо начинать имя с глагола


Разве, что в твоем манямирке.

Ну что же, итог такой: мелочные придирки (цвет, фолдинги, имена легкочитаемых функций/переменных, Венгерская нотация), полное отсутствие понимания кода, что-то там про "профессионализм"; что кстати, очень в стиле ОП-макаки. Продолжаем.

>Разговаривать с невоспитанными людьми


Читается как

>пок пок я обосрался, но ты просто невоспитанный, я ухажу(((


Ты даже не понимашь, насколько несущественны твои замечания, мань.

>писать нормально


Пости сюда свой "нормальный" код, тогда мы разберем его "нормальность", иначе пиздабол простой.

>задачку придумал.


Вот уебан. У тебя там что, нарциссизм на почве манямирка развился? Иди на хуй отсюда. И говнозадчки свои забери блядь, долбоеб.

Карочи ждем от тебя "нормального" примера ТВОЕГО кода, маня. Поехали.
415 Кб, 900x918
#472 #385469
>>384229

>Вместо использования фолдингов надо писать аккуратный код


>Вместо использования фолдингов


>аккуратный код


Что ты несешь, долбоеб? Приведи мне пример "аккуратного кода".

>Неуч


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

>Неуч пишет if (req.что-то там.match(...))


>req.что-то там.match


Лол, это как раз таки должен знать каждый профи, а не писать свои костыли.

>промизы


>лепишь коллбеки на коллбеке


>потом переписал на набор несвязанных функций


>запощена только часть кода


Ты просто мастерски себя обосрал.

>черный по серому


О вкусах... Ну ты понел.

>все переменные объявлены..


Бессмысленное замечание.

>неумение в ООП


Лол, т.е. ты не знаешь про приватные сво-ва/методы и каков "ООП" в js ? Мои соболезнования.

>избирательная венгерская нотация


Именно так и нужно, ибо лишь часть переменных может быть иметь непонятный тип. В остальном - элементарно.

>у ноды наверняка есть стайл гайд, который неуч не читал


В век рефакторинга-то, ебана. Приблизительно соблюдать можно, но зачем? Сообразительный программист и сам поймет.

>if typeof == object -> программист-неуч сам не понимает какого типа переменная


Мань, ну зачем ты строишь из себя вангу? Ты даже не понимаешь для чего нужна эта "подпрограмма", а уже кукарекаешь, что-то.

>функции названы бесмысленно, надо начинать имя с глагола


Разве, что в твоем манямирке.

Ну что же, итог такой: мелочные придирки (цвет, фолдинги, имена легкочитаемых функций/переменных, Венгерская нотация), полное отсутствие понимания кода, что-то там про "профессионализм"; что кстати, очень в стиле ОП-макаки. Продолжаем.

>Разговаривать с невоспитанными людьми


Читается как

>пок пок я обосрался, но ты просто невоспитанный, я ухажу(((


Ты даже не понимашь, насколько несущественны твои замечания, мань.

>писать нормально


Пости сюда свой "нормальный" код, тогда мы разберем его "нормальность", иначе пиздабол простой.

>задачку придумал.


Вот уебан. У тебя там что, нарциссизм на почве манямирка развился? Иди на хуй отсюда. И говнозадчки свои забери блядь, долбоеб.

Карочи ждем от тебя "нормального" примера ТВОЕГО кода, маня. Поехали.
8 Кб, 759x179
#474 #385505
НЯНЯ Я У НИХ ПОЕЛ
На моей пекарне в дизигнере без подключения ЮТФ работает как надо, с подключением - не работает как надо. Ideone без подключения кодировки кириллицу вообще не видит в этом случае, отсылает пустую строку. С латиницей всё норм везде всегда.
Я уже с этими кодировками заебался. Что с ними делать?
#475 #385506
>>385505
utf-8 попробуй прямо указать, mb_strtoupper($value[0], 'UTF-8')
#476 #385507
>>385505
Причем это в идеоне
mb_internal_encoding('utf-8');
echo mb_strtoupper("хуй");
работает, мой предыдущий пикрелейтед - нет.
#477 #385508
>>385507
если бы хуй можно было так легко поднять, Шнур бы не снимался в рекламе
69 Кб, 451x750
#478 #385509
>>385506
Не, так тоже не хочет.
#479 #385515
>>385509
я тут подумал, так нет нахуй слов на ы, а вдруг в utf-8 вообще нет Ы?
#480 #385517
>>385515
>>385509
а нет, блеать, есть. Посмотри внимательно, хуита у тебя там какая-нить очевидная забралась, как таракан в жопу
#481 #385521
>>385509
просто вбей mb_strtoupper(), посмотрим норм ли у тебя кодировка выставляется
#482 #385522
>>385521
в смысле mb_internal_encoding()
#483 #385525
>>385522
Всмысле
echo mb_strtoupper("хуй");?
У меня работает. Да ладно моя параша, но как нормально хотя бы на том же Ideone заставить работать.
sage #484 #385526
>>385525
echo strtoupper("ыыыы");
mb_internal_encoding('utf-8');
Такой вариант тоже работает.
#485 #385537
>>385157
запускай от администратора. если запускать просто двойным кликом - у программы не будет прав на изменения файла хостс и, возможно, каких еще плюшек.
#486 #385539

>>>>385469


>у ноды наверняка есть стайл гайд


>В век рефакторинга-то, ебана


Поддвачну. Сейчас любая IDE моет зарефакторить быдлокод и привести его в читаемый вид.
#487 #385559
http://ideone.com/r3uqKW
ОП, я в правильном направлении двигаюсь?
#488 #385572
>>382412
няш, ты наверное уже отвечал, но не листать же столько дохуя. вот открл я страничку с переменными - там кэмэл кейс. в пыхе разве не андерскоры? справедливости ради скажу что сам люблю верблюжью нотацию больше, но куда ни смотрел - везде был андерскор для пхп.
#489 #385589
>>385559
Чел, что такое конструктор, а?
#490 #385599
>>385589
У Опа же написано. Метод класса, который принимает аргументы при объявлении объекта, если их ему не дать, он выдаст ошибку.
#491 #385623
// ==UserScript==
// @include http://market.yandex.ru/model-spec.xml?modelid=6175532&hid=91491&ncrnd=6062
// @grant none
// ==/UserScript==

function saveAs(str) {
var mydoc = window.open( "data:application/download;charset=utf-8;base64," + btoa(str));
}

var tel = document.querySelector('.l-page__left').innerHTML;

saveAs(tel);

Не работает. Если просто текст написать, то сохраняет все отлично. А тут ошибка Error: String contains an invalid character. Неверные символы, и какие это могут быть?

В этой строчке:
window.open( "data:application/download;charset=utf-8;base64," + btoa(str));
я ничего не понимаю. Я так и не разобрался с data: URL, не смог понять. Оп, ты объясни.

Есть предположение, что btoa не понимает некоторые символы. Или это глупость.

Я почти доделал, уже и сохраняет, и открывается в текстовом редакторе. Теперь проблема с одной строчкой.

Когда с этим разберусь, следующее, что нужно будет сделать, это с помощью js отредактировать код. Еще бы сделать, чтобы при сохранении сразу же декодировалось из base64. А то приходится два лишних телодвижения делать (два клика (просто открыть, и далее выбор открыть чем)).
#492 #385631
>>385599
Это ответ был с подковыркой.
$manager=new Employee("Менеджер");
$manager->salary=500;
$manager->cofee=20;
$manager->pages=200;
вот так делать не надо, передай как параметр массив еще и занеси все в конструктор
7 Кб, 1049x74
#493 #385640
Привет, pr. Я на пути написания самого крутого сайта в моей жизни вчера начал, ага. позавчера шарагу кончил
Есть таблица в mysql. Музыкальные группы. У группы может быть много жанров сразу роцк, репчик. В данной таблице хранятся id этих жанров. Соответственно в данной таблице ячейка genres может содержать любое количество чисел любого значения integer.
Вопрос: какого типа сделать столбец genres? Есть ли в mysql, что то типа массива, а не enum, где все возможные значения нужно самому перечислять?
#494 #385641
>>385640
Обычно в таких случаях в таблице жанров делают несколько записей вида:
рэп| ид Sunn O
рок| ид Sunn O

Почитай про связь один ко многим, да и про все остальные:
http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html
#495 #385649
>>385641
Элементарно, Ватсон! Читать не буду, это всё знаю. Но как я мог об этом забыть? Всего 3 месяца не программировал, сижу как нуб всё вспоминаю

%сделаю таблицу, где будут храниться соответствия band id и genre id. А так же таблицу с genre id и genre name. А из таблицы групп вообще удалью genres id за ненадобностью%
#496 #385653
>>385640
PostgreSQL.
!ОП #497 #385692
>>385640

Вообще-то в MySQL есть SET — это как ENUM, но можно указать несколько значений. Но жанр наверно все же тянет на отдельную сущность с отдельной таблицей.

Кстати, во имя Великой Нормализации years_activity стоит разбить на два поля. И сделать их типа DATE или YEAR. То, что у тебя - отстой.

Ну и вместо полей с числами через зяпятую я советую сделять связь многие-ко-многим и настроить внешние ключи обязательно: http://denis.in.ua/foreign-keys-in-mysql.htm

Статус мембера лучше проставлять в таблице связи band_members. Тут стоит учесть, что возможны сложные ситуации, например какой-то перец пришел в группу, через полгода ушел, потом снова вернулся. Если такое надо учиытвать, то придется чуть усложнять таблиу связи, добавив туда даты и тип записи (пришел, но потом ушел | ушел, но вернулся | ушел и не вернулся | пришел и остался).
!ОП #498 #385694
>>385623

Есть несколько видов base64 кодирования (точнее, 2): обычное (использует = + /) и кодирование с испльлзованием альтернативных символов (использует = - _ так как + и / имеют специальное значение в URL). Тут упомянуто: https://ru.wikipedia.org/wiki/Base64#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B2_.D0.B2.D0.B5.D0.B1-.D0.BF.D1.80.D0.B8.D0.BB.D0.BE.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F.D1.85

Но проблема видимо не в этом.

Проблема в btoa: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64.btoa?redirectlocale=en-US&redirectslug=DOM%2Fwindow.btoa#Unicode_Strings — видишь, там написано что оно не работает с юникодными символами (русские буквы, например). Она поддерживает только ASCII.

Ты можешь использовать либо это адское решение: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_.232_.E2.80.93_rewriting_atob()_and_btoa()_using_TypedArrays_and_UTF-8

Либо же, что проще, использовать для Data-URI вместо base64 URL-кодирование. Почитай: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs — там можно спецсимволы кодировать через проценты (в JS для этого есть функция encodeURIComponent).

Также, тебе не нужен window.open. Просто создай элемент <a> через createElement, поставь ему в href нужный URL, добавь аттрибут download ( https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#Attributes ) и вызови метод click() на нем. Я не знаю, надо ли добавлять ссылку в документ чтобы кликнуть по ней, так что выясни экспериментально.
#499 #385697
Что-то ideone скатывается вниз — уже начал окна с видеорекламой (иногда) показывать. Печально.

>>385653

Интересно, все фанатики PostgresSQL такие же больные, как ты, что не способы даже понять суть вопроса?

>>385257

> скрипт на автозамену.



О, отличный текст, только вот я бы вместо \s? поставил там звездочку — вдруг пробелов несколько.

>>385263

> С кодировкой проблема, ведь она указывается в теге head, а у меня фрагмент кода, поэтому вылазят иероглифы.


Если ты парсишь код в другой кодировке, сконвертируй в utf-8 с помощью iconv. Если ты сам генерируешь код то можешь приписать туда meta charset в начало.

> В template.html Вообще нет тегов оберток, только один идет за другим.


Этот файл ты будешь не парсить, а читать построчно, как я понимаю. И соответственно в нем ничего искать через Xpath не надо — искать надо в tel.html

> Можно прямо в коде как-то указывать из какой строки брать кусок?


Разбей файл на массив непустых строк, и бери из массива по номеру.
#499 #385697
Что-то ideone скатывается вниз — уже начал окна с видеорекламой (иногда) показывать. Печально.

>>385653

Интересно, все фанатики PostgresSQL такие же больные, как ты, что не способы даже понять суть вопроса?

>>385257

> скрипт на автозамену.



О, отличный текст, только вот я бы вместо \s? поставил там звездочку — вдруг пробелов несколько.

>>385263

> С кодировкой проблема, ведь она указывается в теге head, а у меня фрагмент кода, поэтому вылазят иероглифы.


Если ты парсишь код в другой кодировке, сконвертируй в utf-8 с помощью iconv. Если ты сам генерируешь код то можешь приписать туда meta charset в начало.

> В template.html Вообще нет тегов оберток, только один идет за другим.


Этот файл ты будешь не парсить, а читать построчно, как я понимаю. И соответственно в нем ничего искать через Xpath не надо — искать надо в tel.html

> Можно прямо в коде как-то указывать из какой строки брать кусок?


Разбей файл на массив непустых строк, и бери из массива по номеру.
#500 #385698
>>385268

> for (($yo = 17) && ($year = 1); $mony == 1000000; ($yo++) && ($year++)) {



&& используется в if и обозначает «и» (если оба условия выполняются). В for его можно применить во второй части:

for (первая часть ; вторая часть — тут можно использовать && ; третья часть) ...

Но в первой и третьей, чтобы записать несколько действий, используй запятую:

for ($yo = 17, $year = 1; $mony == 1000000; $yo++, $year++)) {

Дело в том, что если у && слева получается ноль, то правое выражение не вычисляется (так как его нет смысла вычислять). Потому твой код будет глючить.

В общем, запомни: в первой и третьей части — выражения пишутся через запятую, в условии во второй части — через && или ||
#501 #385699
>>385332

Неплохо, но нужно более тщательно все проверить.

Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек! Давай-ка научимся основам автоматического тестирования и заставим железяку проверять саму себя.

Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 2 списка номеров (правильные и нет), добавь их в программу и напиши цикл, который их по очереди прогоняет через регулярку и проверяет что они определяются как надо (если нет — надо вывести какой именно номер не распознается правильно).

Вот список номеров:

Правильные: array('84951234567', '+74951234567', '8-495-1-234-567', ' 8 (8122) 56-56-56', '8-911-1234567', '8 (911) 12 345 67', '8-911 12 345 67', '8 (911) - 123 - 45 - 67', '+ 7 999 123 4567', '8 ( 999 ) 1234567', '8 999 123 4567');

Неправильные: array('02', '84951234567 позвать люсю', '849512345', '849512345678',
'8 (409) 123-123-123', '7900123467', '5005005001', '8888-8888-88',
'84951a234567', '8495123456a',
'+1 234 5678901', // неверный код страны
'+8 234 5678901', // либо 8 либо +7
'7 234 5678901' // нет +
);
#502 #385701
>>385332

> preg_match($regular,$text,$mistakes);


> print_r($mistakes);


Так не очень правильно писать. preg_match может найти, а может и не найти соответствие — потому лучше писать через if:

if (preg_match(...)) {
echo "Ошибка: ....";
}

Наконец, сам preg_match тут не подходит, так как ищет только первое совпадение, а нам надо искать все ошибки. Подойдет preg_match_all.

В регулярке не надо писать

(точка) (звездочка)

в начале и конце, так как в этом случае она захватывает всю строку целиком.

Вывод ошибок надо бы сделать не через print_r, а нормально, например:

Ошибка: жызнь

Или так:

[Жы]знь — непростая штука.
#502 #385701
>>385332

> preg_match($regular,$text,$mistakes);


> print_r($mistakes);


Так не очень правильно писать. preg_match может найти, а может и не найти соответствие — потому лучше писать через if:

if (preg_match(...)) {
echo "Ошибка: ....";
}

Наконец, сам preg_match тут не подходит, так как ищет только первое совпадение, а нам надо искать все ошибки. Подойдет preg_match_all.

В регулярке не надо писать

(точка) (звездочка)

в начале и конце, так как в этом случае она захватывает всю строку целиком.

Вывод ошибок надо бы сделать не через print_r, а нормально, например:

Ошибка: жызнь

Или так:

[Жы]знь — непростая штука.
#503 #385702
>>385338

Тут то же самое, надо бы проверить на большом списке номеров.

> $regular='/-|_|\)|\(| | /';


Проще написать «заменить все не-цифры» чем перечислять возможные символы. Там даже есть конструкция \\D для этого.

>>385341

> //флаги u и i почему-то не работают(у меня, тут работают), кириллица воспринимается интерпретатором нормально и так


А вот и нет. Без флага u регулярка может ломать строку и получатся битые символы. Это потому, что в utf-8 русская буква состоит из 2 байт и без флага u решялрка воспринимает ее как 2 отдельных символа. То есть все начинает работать неправильно — иногда может сработать, а может и не сработать.

Также, конструкции вроде \w начинают вести себя непредсказуемо и могут разломать букву из 2 байт на половинки.

И ты замучаешься искать и исправлять такие ошибки. Потому лучше всегда ставит этот флаг чем пытаться угадать, сработает или нет.

Флаг i ставить не обязательно, это по желанию.

Выражение для «не починит» предусматривает ровно один пробел между «не» и «починит» — лучше ставить там плюс. так как пробелов может быть несколько.

В остальном, правильно.

> Задача на email



> [a-zA-Z-_.\+]


Знак «-» в квадратных скобках имеет специальное значение. Если ты хочешь просто сказать «ищи знак минус», он должен стоять либо в самом конце, либо, что лучше, экранироваться бекслешем. А вот + можно не экранировать (в квадратных скобках экранируются только: [ ] ^ - \ и ограничитель регулярки (в твоем случае / )).

В остальном, верно.
#503 #385702
>>385338

Тут то же самое, надо бы проверить на большом списке номеров.

> $regular='/-|_|\)|\(| | /';


Проще написать «заменить все не-цифры» чем перечислять возможные символы. Там даже есть конструкция \\D для этого.

>>385341

> //флаги u и i почему-то не работают(у меня, тут работают), кириллица воспринимается интерпретатором нормально и так


А вот и нет. Без флага u регулярка может ломать строку и получатся битые символы. Это потому, что в utf-8 русская буква состоит из 2 байт и без флага u решялрка воспринимает ее как 2 отдельных символа. То есть все начинает работать неправильно — иногда может сработать, а может и не сработать.

Также, конструкции вроде \w начинают вести себя непредсказуемо и могут разломать букву из 2 байт на половинки.

И ты замучаешься искать и исправлять такие ошибки. Потому лучше всегда ставит этот флаг чем пытаться угадать, сработает или нет.

Флаг i ставить не обязательно, это по желанию.

Выражение для «не починит» предусматривает ровно один пробел между «не» и «починит» — лучше ставить там плюс. так как пробелов может быть несколько.

В остальном, правильно.

> Задача на email



> [a-zA-Z-_.\+]


Знак «-» в квадратных скобках имеет специальное значение. Если ты хочешь просто сказать «ищи знак минус», он должен стоять либо в самом конце, либо, что лучше, экранироваться бекслешем. А вот + можно не экранировать (в квадратных скобках экранируются только: [ ] ^ - \ и ограничитель регулярки (в твоем случае / )).

В остальном, верно.
#504 #385705
>>385362

> Там написано, что у класса Компания должно быть свойство списокРаботников, т.е Company.listEmployees = []; ?



Не

у класса Компания должен быть список ....

А

У объекта класса Компания должен быть список ...

Так как по идее компаний может быть несколько, и у каждой свой список работников. Потому не Company.list, а this.list.

>>385394

> Почему инженер компании "Вектор" получает самую маленькую зарплату?


Потому, что он не занимается планированием перспектив, определением видения и стратегии развития Компании, развитием партнерских отношений и реализацией ее Миссии, а весь день ковыряется в каких-то чертежах и схемах. В общем, только бумагу зря расходует.

> Почему цифры кол-ва сотрудников в таблице не сходятся с цифрами состава департаментов?


Это просто пример как должно выглядеть, цифры от балды.

>>385397

Не знаю.

>>385505

>На моей пекарне в дизигнере без подключения ЮТФ работает как надо,


На ideone то, что выводит код, воспринимается как plain text (обычный текст) в кодировке utf-8. Все переносы строк и пробелы работают корректно. Если кодировка другая или символы битые - ideone отказывается показывать результат.

У себя ты просматриваешь результат в браузере, который воспринимает его не как текст,а как HTML-код. Причем этот браузер по умолчанию настроен на другую кодировку. И что хуже, твой исходный код тоже скорее всего сохранен в какой-нибудь windows-1251 вместо utf-8 (пересохрани в правильную кодировку).

Чтобы это исправить, надо в начале программы поставить

header("Content-Type: text/plain; charset=utf-8");

Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и задаст его кодировку.

Ну и сохрани свой код в utf-8. Иначе все будет работать неверно.

Ты можешь спросить, почему utf-8 а не win-1251? Потому что в win-1251 всего 256 символов, а в utf-8 кодируются любые языки мира. Старые 8-битные кодировки давно пора отправить на свалку.
#504 #385705
>>385362

> Там написано, что у класса Компания должно быть свойство списокРаботников, т.е Company.listEmployees = []; ?



Не

у класса Компания должен быть список ....

А

У объекта класса Компания должен быть список ...

Так как по идее компаний может быть несколько, и у каждой свой список работников. Потому не Company.list, а this.list.

>>385394

> Почему инженер компании "Вектор" получает самую маленькую зарплату?


Потому, что он не занимается планированием перспектив, определением видения и стратегии развития Компании, развитием партнерских отношений и реализацией ее Миссии, а весь день ковыряется в каких-то чертежах и схемах. В общем, только бумагу зря расходует.

> Почему цифры кол-ва сотрудников в таблице не сходятся с цифрами состава департаментов?


Это просто пример как должно выглядеть, цифры от балды.

>>385397

Не знаю.

>>385505

>На моей пекарне в дизигнере без подключения ЮТФ работает как надо,


На ideone то, что выводит код, воспринимается как plain text (обычный текст) в кодировке utf-8. Все переносы строк и пробелы работают корректно. Если кодировка другая или символы битые - ideone отказывается показывать результат.

У себя ты просматриваешь результат в браузере, который воспринимает его не как текст,а как HTML-код. Причем этот браузер по умолчанию настроен на другую кодировку. И что хуже, твой исходный код тоже скорее всего сохранен в какой-нибудь windows-1251 вместо utf-8 (пересохрани в правильную кодировку).

Чтобы это исправить, надо в начале программы поставить

header("Content-Type: text/plain; charset=utf-8");

Это заставит браузер воспринимать то, что выводит твоя программа, как обычный текст, а не HTML, и задаст его кодировку.

Ну и сохрани свой код в utf-8. Иначе все будет работать неверно.

Ты можешь спросить, почему utf-8 а не win-1251? Потому что в win-1251 всего 256 символов, а в utf-8 кодируются любые языки мира. Старые 8-битные кодировки давно пора отправить на свалку.
!ОП #505 #385706
>>385505

У тебя исходник скорее всего сохранен в win-1251 и значит все строки в программе тоже в этой кодировке. При попытке работать с ними как с utf-8 ничего не получится. Потому тебе надо либо писать:

mb_internal_encoding('windows-1251')

либо сохранить в utf-8 что я и советую.

И еще. utf-8 — многобайтовая кодировка и там буква кодируется несколькими байтами (латинница = 1 байт, русская = 2 байта) (в отличие от win-1251 где 1 символ = 1 байт). С utf-8 строками нельзя применять такую штуку:

$string[0]

так как она отрезает первый байт, а не первую букву. Используй mb_substr. Также, с utf-8 не работают:

substr
strlen

И подобные функции.

Ох, я чувствую, надо собраться с силами и написать урок про байты и кодировки строк.
#506 #385707
>>385505

mb_internal_encoding ничего не перелючает. Он просто говорит mb_strlen, и другим mb_ функциям, в какой кодировке закодированы строки (чтобы они знали какой код какой букве соответствует). Соответственно, если ты там пишешь неправильное значение то эти функции перестают работать правильно.

>>385515

Все есть: http://unicode-table.com/ru/#cyrillic

>>385539

Ну так используйте эти возможности.

>>385559

Код надо пропустить через phpformatter.com

У Департамента нет свойства «ранг» или «кофе», это свойство работника. У Департамента всего лишь есть список его работников и все.

> function getSalary(){


> $multiply=1;


> switch($this->rank){


> case 2:


Вычисление зарплаты Работника должно быть в его классе сделано, а не в департаменте.

Также, тут лучше сделать для каждой профессии свой класс, и унаследовать их от класса Работник. Наследование — это когда класс создается не с нуля, а на основе существующего класса: http://php.net/manual/ru/language.oop5.inheritance.php

Подробнее про наследование можно прочесть в книге Мэтта Зандстры или в интернете.

Базовый класс Работник (от которого наследуются работники конкретной профессии) надо будет объявить абстрактным. Абстрактный класс — это класс, объекты которого нельзя создавать. Мануал: http://php.net/manual/ru/language.oop5.abstract.php
#506 #385707
>>385505

mb_internal_encoding ничего не перелючает. Он просто говорит mb_strlen, и другим mb_ функциям, в какой кодировке закодированы строки (чтобы они знали какой код какой букве соответствует). Соответственно, если ты там пишешь неправильное значение то эти функции перестают работать правильно.

>>385515

Все есть: http://unicode-table.com/ru/#cyrillic

>>385539

Ну так используйте эти возможности.

>>385559

Код надо пропустить через phpformatter.com

У Департамента нет свойства «ранг» или «кофе», это свойство работника. У Департамента всего лишь есть список его работников и все.

> function getSalary(){


> $multiply=1;


> switch($this->rank){


> case 2:


Вычисление зарплаты Работника должно быть в его классе сделано, а не в департаменте.

Также, тут лучше сделать для каждой профессии свой класс, и унаследовать их от класса Работник. Наследование — это когда класс создается не с нуля, а на основе существующего класса: http://php.net/manual/ru/language.oop5.inheritance.php

Подробнее про наследование можно прочесть в книге Мэтта Зандстры или в интернете.

Базовый класс Работник (от которого наследуются работники конкретной профессии) надо будет объявить абстрактным. Абстрактный класс — это класс, объекты которого нельзя создавать. Мануал: http://php.net/manual/ru/language.oop5.abstract.php
#507 #385708
>>385572

Кемелкейс: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#11-example

>>385599

Конструктор — это метод, который вызвается при создании объекта. Соответственно, код, написанный в нем, гарантированно (в PHP есть несколько случаев когда конструктор не вызывается — но это ошибка разработчиков PHP, такого быть не должно. При создании через new все работает нормально) выполняется до вызова других методов и может задавать какие-то начальные значения свойств.

>>385623

>data:application/download;charset=utf-8;base64," + btoa(str));


Там пишется тип, например text/html или application/octet-stream. charset писать не надо. То есть

data:application/octet-stream;base64, ...

> Еще бы сделать, чтобы при сохранении сразу же декодировалось из base64.


base64 используется только для вставки спецсимволов в Data URL. Когда ты сохранишь файл на диск, он будет в нормальном незакодированном виде.

>>385631

Там лучше сделать класс Менеджер и ему прописать это по умолчанию.
#508 #385711
>>385708

>Там лучше сделать класс Менеджер и ему прописать это по умолчанию.


Еще лучше идея
#509 #385718
>>385694

> поставь ему в href нужный URL



Не понял, какой урл я могу поставить? Мне же не всю страницу надо скачивать, а часть отформатированного кода, который будет лежать в переменной. Так зачем мне href?
#510 #385724
>>385718

попробуй примерно так
http://ideone.com/lV03PP
#511 #385759
>>385692
Не стоит так вникать в мою талицу. Это слишком черновой вариант. Я всегда делаю сначала, как можно проще главное, чтоб заработало, а потом потихоньку усложняю

> Статус мембера лучше проставлять в таблице...


Эта идея крута, но думаю не стоит. Представь, на сайте 3000 групп из всего мира, постоянно кто-то уходит приходит, кто это учитывать будет? Да они сами не вспомнят в какой день ушли. Такое нужно, если база сотрудников или учеников etc
#512 #385772
Нужна ваша помощь. Есть простая страничка и скрипт. Нужно сделать так, чтобы введенные данные записывались в БД. Таблица успешно создается, а данные не записываются. Что не так?
Скрипт: http://ideone.com/OrkXeX
#514 #385802
>>385106
У меня появилось желание писать несложные %в будущем возможно и сложные% сайты. Пытаюсь осваивать php, начал с задачек Опа, попутно разбираюсь с HTML, и планирую обмазаться CSS. Я в верном направлении? Что посоветуете помимо того что я написал?
#515 #385815
>>385398
this.list сделать массивом или объектом? Если массив, то мне придется каждый раз оббегать его для удаления сотрудника.
#516 #385877
Пожалуйста поманите с заданием "Циклы и айфон в кредит"
#517 #385880
Оп, запостил на ideone http://ideone.com/RTTkBO Спам-лист не проходит не пойми из-за какого слова. Посмотри.
87 Кб, 941x305
39 Кб, 420x304
25 Кб, 637x205
#518 #385897
Продолжаю делать великий сайт. Оцените схему БД. Насколько всё по уму, что улучшить? А так же правильно ли я делаю что ставлю Auto increment на первичные ключи, как на 3-ем скрине?
!ОП #519 #385933
Аноны, скоро переедем в новый тред.

>>385772

Ты на каждого пользователя таблицу создаешь? Ты ничего не понял в базах данных.

Смотри, делают не так. Таблица Пользователи делается 1 раз, задается какие в ней будут колонки. А потом в нее вставляется сколько угодно строчек — пользователей с помощью INSERT.

Ну и если ошибка выводится, то напиши какая именно ошибка.

Алсо, Хватит исплоьзовать mysql

Имей в виду, что этот код устарел. Лет так на 10. Сейчас для работы с БД используют расширение PDO: http://habrahabr.ru/post/137664/ — советую почитать.

>>385799

> if (Hamburger.additive[additive] === undefined) {


Для того, чтобы проверить есть ли элемент с определенным ключом в объекте (словаре), есть оператор in. Он тут уместнее и короче выйдет:

if (x in dict) ...

> if (this.additives.length > 0) {


Это можно и не писать было, все равно бы сработало.

Но это мелочи. Теперь программа решена верно.
!ОП #519 #385933
Аноны, скоро переедем в новый тред.

>>385772

Ты на каждого пользователя таблицу создаешь? Ты ничего не понял в базах данных.

Смотри, делают не так. Таблица Пользователи делается 1 раз, задается какие в ней будут колонки. А потом в нее вставляется сколько угодно строчек — пользователей с помощью INSERT.

Ну и если ошибка выводится, то напиши какая именно ошибка.

Алсо, Хватит исплоьзовать mysql

Имей в виду, что этот код устарел. Лет так на 10. Сейчас для работы с БД используют расширение PDO: http://habrahabr.ru/post/137664/ — советую почитать.

>>385799

> if (Hamburger.additive[additive] === undefined) {


Для того, чтобы проверить есть ли элемент с определенным ключом в объекте (словаре), есть оператор in. Он тут уместнее и короче выйдет:

if (x in dict) ...

> if (this.additives.length > 0) {


Это можно и не писать было, все равно бы сработало.

Но это мелочи. Теперь программа решена верно.
!ОП #520 #385940
>>385880

> А пока я получаю все тот же закодированный код.


Ты получаешь такой код потому что такой передаешь: encodeURIComponent(tel)
Это неправильно.

Вот правильная фунгкция кодирования utf-8 текста в base64: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_.232_.E2.80.93_rewriting_atob()_and_btoa()_using_TypedArrays_and_UTF-8

Но можно не использовать ее, а просто убрать base64 и кодирование и передавать файл как есть.

> А можно сделать, чтобы после скачивания автоматически запускался php скрипт? В итоге получится одно телодвижение.


Можно дать файлу нестандартное расширение, напрмиер .something. А в винде повесить на это расширение твой скрипт, чтобы при открытии файла или двойном клике запускался твой скрипт. Вот такая команда:

"c:\php\php.exe" "c:\tmp\my.php" "%1"

Вместо %1 винда подставит имя файла и твой скрипт увидит его в $argv[1] (что такое argv и argc? Очевидно ответ в мануале: http://php.net/manual/ru/reserved.variables.argv.php )

Как в винде назначить команду на открытие файла? панель управления -> свойства папки -> типы файлов. Там создаем новое расширение, затем жмем дополнительно и редактируем (или добавляем если нет) действие open. В поле «приложение обрабатывающее что-то там» вписывем указанную выше команду. Заметь, можно добавить и другие действия кроме open — они будут доступны в контекстном меню при клике по файлу.
!ОП #521 #385941

>>385802

Ты все правильно делашь. Только показывай иногда нам решения для проверки. После прохождения учебника можо попросить дополнительые продвинтые задания.

Кроме PHP тебе будет нужен SQL (язык запросов к базе данных, несложный) и фреймворки или CMS (у нас есть задачка на их изучение).

По поводу верстки, у нас есть десяток очень простых задач, хорошо проверяющих понимание таких концепций как позиционирование. Они в низу этой страницы: http://archive-ipq-co.narod.ru/l1/reading-list.html

Ну и после того как изучишь HTML/CSS можешь попросить макет на верстку, у нас есть макет который мы всем предлагаем верстать.

>>385815

Можно массивом, можно словарем, как хочешь.

>>385877

Я с удовольствием дам подсказку или даже несколько, но запости свой код и на каком месте остановился, что именно не знаешь как делать. Это задача непростая, некоторые ее по 3-4 дня мучали.
!ОП #522 #385942
>>385897

Не называй поля через пробел или знак плюс — намучаешься потом - используй подчеркивание.

У тебя кстати не учтен вариант когда трек сделан совместно несколькими группами, например Би-2 и Brainstorm — Иномарки, хотя ради такого наверно излишне будет усложнять систему. Также, для каверов можно предусмотреть ссылку на оригинал.

Насчет связи bands_to_countries — а не логичнее ли сделать связь members_to_countries? Хотя тогда запросы на выборку конечно будут сложнее, так как чтобы определить страну группы, надо перебрать всех участников. Но зато будет каноничнее. То же и к жанрам — по идее, жанр относится к треку, а не альбому.

members.name/lastname специально сделаны с возможностью ставить NULL?

Вообще, база выглядит хорошо спроектированной. FOREIGN KEY REFERENCES прописал? Кодировку utf-8 везде поставил?

Насчет auto_increment — конечно, так и надо делать.
#523 #385959
>>385940
http://ideone.com/QmLBnf

Ну все начало положено. Теперь нужен пхп скрипт, который будет редактировать код. Я подумал, что мне незачем файл-шаблон, я в самом скрипте в массив занесу нужные строчки.
#524 #385962
>>385959
// @include /http://market\.yandex\.ru/model-spec\.xml\?modelid=\d+&hid=\d+/

Поправил, теперь на любых товарах работает.
#525 #386029
>>385942

> Не называй поля через пробел или знак плюс — намучаешься потом - используй подчеркивание.


Принял к сведению

> У тебя кстати не учтен вариант когда трек сделан совместно несколькими группами, например Би-2 и Brainstorm — Иномарки


В таблице songs есть поле comments, вот туда и прописывается информация типа (cover Pink Floyd) или (feat. Дима Билан). Хотя если например в твоём случае этот трек есть и на альбоме Би-2 и на каком то альбоме Brainstorm, то информация дублируется. Но такие случаи настолько редки, что это не критично, по-моему

> Также, для каверов можно предусмотреть ссылку на оригинал.


Идея

> а не логичнее ли сделать связь members_to_countries


Нахуй. Кстати, нужно будет сделать countries не обязательным параметром, ибо всякие тру анонимные музыканты могут не указывать не то, что страну, но и проекту название не давать

> members.name/lastname специально сделаны с возможностью ставить NULL?


Да, потому что некоторые пользуются только псевдонимами. Или говорят только своё имя

> FOREIGN KEY REFERENCES прописал


где это прописывать?
#526 #386033
Аноны, поясните этот пример:
// при совместном использовании ++ и + результат будет неопределенным
$a = 1;
echo ++$a + $a++; // может вывести 4 или 5
#527 #386068
Оп прохожу HTML и CSS из твоего учебника. Проверь.

Алсо подскажи, что означает <em data-ref="1">. Ну <em> вроде как акцентирование текста. Остальное не нагуглил.

И как вывести цифры за поле.

http://jsbin.com/rumofibumuxi/1/edit
#528 #386138
ОП, раскажи про git, как его вообще юзать?
Поставил гит + черепаху под винду, пробовал создать репозиторий, с которого потом буду делать ветки. Куча непонятных окон, ошибки, пустая папка.
Тупо вот - как сделать репозиторий проекта и получить его копию для изменений? Где отслеживать ветки? Как сливать изменения?
Вообще, где про это внятно почитать?
#529 #386153
>>385933
Спасибо, понял. Все получилось.
#530 #386160
>>386138

Для начала изучи гит в командной строке и пойми как он работает. Есть замечательный учебник: http://git-scm.com/book/ru (на русском)

TortoiseGit — годится только для просмотра репозитория, в остальном он глючный, я бы не советовал особо им пользоваться.

> Где отслеживать ветки? Как сливать изменения?


Вообще, где про это внятно почитать?
В git-book. Просматривать можно тортойзом или любым другим клиентом: http://git-scm.com/downloads/guis

> Тупо вот - как сделать репозиторий проекта и получить его копию для изменений?


git init (создание пустого репозитория) либо git clone (копирование к себе существующего).

Если есть еще какие-то вопросы, задавай, я помогу разобарться.
86 Кб, 1207x688
#531 #386180
Снова я. Тут есть аноны с утановленным MySQL Workbench? Оцените мою БД. Нет ли ошибок, всё ли по уму, что исправить?
http://rghost.ru/57983001
!ОП #532 #386198

>>386029

> где это прописывать?


Это пишется в SQL коде, в твоем случае в коде который генерирует Workbench, надо посмотреть, есть там эти FOREIGN KEY или нет.

>> 386033


Поясняю. Такой код писать нельзя, так как никому не нужен код который непонятно как работает.

>>386068

data- аттрибуты — это аттрибуты, в которых можно хранить любые свои данные. В данном случае я использовал аттрибут data-ref чтобы указать цифру которая выводится слева от em

> И как вывести цифры за поле.


Float либо position absolute

Я тебе советую показать еще и решения других задач. Там в каждой из них есть небольшие подвохи, которые проверяют понимание CSS.

По коду:

> width: 290px;


Это не будет работать если картинка будет другой ширины.

Также, картинка должна уменьшаться при уменьшении ширины окна (убери width 400px чтобы увидеть).

> font-weight: 500;


Что за странное значение? У Times вроде только 400 (normal) и 700 (bold) есть.

В черной плашке слишком большие паддинги и расстояние ежду строчками — надо сделать как на картинке.

> display: block;


> bottom:0px;


Bottom применяется только при использовании позиционирования.

> vertical-align: bottom;


Это свойство тут тоже не работает. Ты явно не знаешь, что оно делает.

> font: 16px;


> font-size:14px;


Зачем 2 раза?

> bottom:5px;


Почему именно 5? По логике должно же быть 0? Почитай-ка http://www.xiper.net/collect/html-and-css-tricks/content/img-in-the-block

Если ты где-то ставишь font-size всегда рядом задавай line-height (иначе унаследуется от родителя).
!ОП #532 #386198

>>386029

> где это прописывать?


Это пишется в SQL коде, в твоем случае в коде который генерирует Workbench, надо посмотреть, есть там эти FOREIGN KEY или нет.

>> 386033


Поясняю. Такой код писать нельзя, так как никому не нужен код который непонятно как работает.

>>386068

data- аттрибуты — это аттрибуты, в которых можно хранить любые свои данные. В данном случае я использовал аттрибут data-ref чтобы указать цифру которая выводится слева от em

> И как вывести цифры за поле.


Float либо position absolute

Я тебе советую показать еще и решения других задач. Там в каждой из них есть небольшие подвохи, которые проверяют понимание CSS.

По коду:

> width: 290px;


Это не будет работать если картинка будет другой ширины.

Также, картинка должна уменьшаться при уменьшении ширины окна (убери width 400px чтобы увидеть).

> font-weight: 500;


Что за странное значение? У Times вроде только 400 (normal) и 700 (bold) есть.

В черной плашке слишком большие паддинги и расстояние ежду строчками — надо сделать как на картинке.

> display: block;


> bottom:0px;


Bottom применяется только при использовании позиционирования.

> vertical-align: bottom;


Это свойство тут тоже не работает. Ты явно не знаешь, что оно делает.

> font: 16px;


> font-size:14px;


Зачем 2 раза?

> bottom:5px;


Почему именно 5? По логике должно же быть 0? Почитай-ка http://www.xiper.net/collect/html-and-css-tricks/content/img-in-the-block

Если ты где-то ставишь font-size всегда рядом задавай line-height (иначе унаследуется от родителя).
!ОП #533 #386200
>>386180

Кстати, пока не забыл, там еще надо будет потом индексы правильно расставить, а то запросы будут медленно выполняться. Но это не срочно, так что можешь не спеша изучать эту тему (mysql, индексы и команда EXPLAIN), а когда изучишь тогда и проставишь.

Также, для тех полей, которые должны быть уникальны (например users.mail) можно прописать уникальный ключ (UNIQUE KEY) - тогда MySQL не даст вставить 2 одинаковых записи.

А почему связь users_counries многие-ко-многим? Пользователь может выбрать несколько стран?

Зачем хранить пароль пользователя? Обычно хранять только соленый хеш + соль, с которой он создан. А сам пароль никогда не хранят в открытом виде - это небезопасно. Прочти про хеши: https://gist.github.com/codedokode/9576319

Телефон не хранят в INT так как это не число, а строка, используй VARCHAR. Алсо, я думаю нет смысла хранить телефон по частям — зачем? Храни одной строкой.

Еще, если ты делаешь поле типа TIMESTAMP то можно сделать чтобы оно проставлялось само при вставке новой записи. Почитай про разницу TIMESTAMP и DATETIME.

Зачем связывать жанр с пользователем? Не очень понял. Если это «кто добавил жанр» то логичнее назвать поле added_by_user_id. И что за связь band -> user? Это тот, кто добавил информацию о группе или что?
#534 #386217
>>386160
Ок, беру папку своего проекта, кладу в D:\git\remote
Делаю на ней git init,вроде без ошибок.
Создаю рядом папку D:\git\local
делаю на ней git clone /d/git/remote
Получаю предупреждение про пустой репозиторий, в папке local появляется пустая папка remote.
Что я делаю не так? Ожидал получить в local копию всех файлов проекта для изменения.
#535 #386221
>>386217

> Получаю предупреждение про пустой репозиторий, в папке local появляется пустая папка remote.


ну логично, init создает пустой репозиторий (папку .git) но видимо ничего в него не додавляет — надо сделать коммит.

После того как закоммитишь, можно будет сделать git pull в копии.
#536 #386222
>>386217

Чтобы папка remote не копировалась, надо было сделать

git clone source .

то есть добавить точку
#537 #386228
>>386222
Отлично, создал копию, отредактировал ее. Как теперь применить изменения к remote? Как при необходимости просмотреть изменения и откатить их? Как создать ветку от уже отредактированной по отношению к remote копии? Когда удаленная копия узнает о сущетвовании моей отредактированной версии?
#538 #386243
>>386200

> UNIQUE KEY


Check

> А почему связь users_counries многие-ко-многим?


Спасибо, исправлю

>


Зачем хранить пароль пользователя?...
Я подразумевал хранить там md5(md5($pass)). Или всё таки хеш+соль надёжней?

> Телефон не хранят в INT так как это не число, а строка, используй VARCHAR. Алсо, я думаю нет смысла хранить телефон по частям — зачем? Храни одной строкой.


И как я не додумался? Спасибо

> Зачем связывать жанр с пользователем? Не очень понял. Если это «кто добавил жанр» то логичнее назвать поле added_by_user_id. И что за связь band -> user? Это тот, кто добавил информацию о группе или что?


Да, всё так. Наверное исправлю названия на creator
#539 #386244
Ни черта не понимаю, почему нулевой элемент массива внутри функции пропускается? на него каким-то образом срабатывает условие if($key=='name)
#541 #386249
Что теперь скажешь, ОП?
http://ideone.com/de6mSX
#542 #386277
>>386228

Читай git-book. Там есть git pull, push и fetch.

> Как при необходимости просмотреть изменения?


Просмотреть проще всего GUI клиентом, Tortoise или любым другим (другие вроде лучше)

> и откатить их


В git-book вроде написано

> Как создать ветку от уже отредактированной по отношению к remote копии?


checkout вроде бы, читай git-book

> Когда удаленная копия узнает о сущетвовании моей отредактированной версии?


Она о ней не знает, но когда ты делаешь push, изменения в нее закачиваются. Читай git-book
#543 #386281
>>386243

Тогда зачем поле hash? Без соли абсолютно ненадежно, прочти пасту по ссылку из моего поста: https://gist.github.com/codedokode/9576319

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

>>386245

Тут очень интересная особенность PHP что 0 == 'name'. Почему? Потому что при сравнении числа с чем-то еще Php приводит это что-то к числу, 'name' -> 0 и получается 0 == 0

Надо использовать === тут

Почитай: http://php.net/manual/ru/language.operators.comparison.php
http://php.net/manual/ru/types.comparisons.php

Оператор === отличается от == тем, что чтобы он сработал надо чтобы типы переменных и их значения совпадали. Он не делает никаких преобразвоаний.
#544 #386283
>>386245

> $getPages = $this->quantity $this->pages;


> return $getPages;


Во-первых, переменную надо называть просто $pages, во-вторых тут можно обойтись без нее, сразу писать return

> new Manager(9, 1),


Это в принципе не очень хороший подход. Лучше сделать 1 объект = 1 сотруднику, так как иначе мы не сможем например вести учет кто сколько отработал. То есть, в твоем случае лучше создать 9 объектов-менеджеров, так правильнее будет с точки зрения ООП.

>>386249

> department->workers = $department->workers + $data[$key]->quantity;


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

Надо сделать все это методами.

Хранить свойство totalPages нет смысла, так как если мы меняем ранг сотрудника, оно по идее должно пересчитываться, и ты замучаешься это делать. проще не хранить эти данные, а каждый раз вычислять заново с помощью метода. Тогда они всегда будут актуальны.
#545 #386284
>>386249

Ну и таблицу еще приделай нормальную, как в задаче требуется. И департаментов побольше создай.
#546 #386287
>>386283

>учше создать 9 объектов-менеджеров, так правильнее будет с точки зрения ООП


Но это же чертовски не удобно, проще вообще без ООП обойтись.

>Это непраивльно. Департамент должен уметь в любой момент дать ответ на вопрос, сколько в нем сотрудников а в твоем случае у тебя туда записывается какое-то левое число


А что там должно быть?

>Хранить свойство totalPages нет смысла, так как если мы меняем ранг сотрудника, оно по идее должно пересчитываться


Но страницы ведь не зависят от ранга сотрудника, и в методах тоже ничего связанного с рангом нет.
!ОП #547 #386295
>>386287

Это удобно, когда тебе понадобится что-то менять и расширять в коде. Например, когда у работников может быть разная зарплата, когда им могут выдавать премии, когда они отработали разное число дней.

А как ты будешь такое реализовывать со своим подходом?

И ничего сложного там нет, достаточно 1 функцию добавить.

> проще вообще без ООП обойтись.


Будет каша.

> А что там должно быть?


Очевидно не должно быть свойства totalPages у департамента.

> Но страницы ведь не зависят от ранга сотрудника, и в методах тоже ничего связанного с рангом нет.


Это пока не зависят. Плюс, ты должен будешь пересчитывать все эти цифры при увольнении и добавлении сотрудников. у тебя написан для этого код?

Ну и страницы может и не зависят, а зарплата зависит от ранга.

Более того, почему расчет числа произведенных страниц ты делаешь не в классе Департамент, а вне его? Зачем размазывать логику по всей программе? Расчет общего числа страниц, общей зарплаты может быть тут только в одном месте — в классе Департамент.

Смотри, одна из идей ООП в том, что мы разбиваем программу на слабосвязанные независимые части. Работник считает свою зарплату, Департамент считает общую зарплату работающих в нем. А у тебя пока логика размазывается по программе и код получается спутанным. Нельзя вынуть класс Департамент и где-то использовать в другой программе, так как сам он ничего считать не умеет.
#548 #386297
>>386287

И еще. Удобно было бы сделать у Департамента метод добавитьСотрудников — чтобы их можно было добавлять постепенно и не требовалось передавать их в конструктор.
#549 #386304
>>386295
Если я буду создавать объект под каждого сотрудника, тогда свойство quantity придется убирать из класса сотрудника, и методы, которые считает зарплаты, кофе и страницы нужно будет переносить в департамент. Итого мы получим тоже самое, что я уже делал до этого http://ideone.com/r3uqKW
!ОП #550 #386307
>>386304

Нет. Ты делаешь у сотрудника методы посчитатьСвоюЗарплату, Кофе, бумагу и прочее, а у Департамента — посчитать общие затраты по зарплате , кофе, бумаге. Ошибка в http://ideone.com/r3uqKW именно в том, что ты то что относится к Сотруднику, поместил в Департамент.
!ОП #551 #386308
>>386304

Более того, подумай логически. Базовая ставка или потребление кофе, или ранг, или имя — это свойство сотрудника, согласен. А «количество человек» никак не может быть свойством отдельного сотрудника. Это нелогично же.
#552 #386311
Как мне без копипасты создавать объект под каждого сотрудника? Придумал вот такой код:

[CODE]$department1=array_fill(0, 9, new Manager(1));
$department1[]=array_fill(count($department1)-1, 3, new Manager(2));
$department1[]=array_fill(count($department1)-1, 2, new Manager(3));
$department1[]=array_fill(count($department1)-1, 2, new Market(1));[/CODE]

но он создаёт подмассивы, а нужно без них.
#553 #386334
http://ideone.com/VfKaKf Теперь правильно? Знаю, объекты работников создал топорно, надо поменять будет, но классы в целом верны?
#554 #386346
>>386198
Сел на пару часиков задачки порешать, а времени высосало немерено. Всё такое в CSS не очевидное ну или я торможу. Пока теряюсь во всем этом и по 5 раз перечитываю что уже прочитал.

ОП, глянь чего я наляпал.

кошка
http://jsbin.com/ligidoqutaxa/1/edit

1
http://jsbin.com/viqerojikeho/1/edit

2
http://jsbin.com/jabelazaxivo/1/edit

3
http://jsbin.com/qahilelapude/1/edit

4
http://jsbin.com/gavevuvabobe/1/edit

5
http://jsbin.com/ribagilukite/1/edit

6
http://jsbin.com/xuwihisadizi/1/edit

7
http://jsbin.com/hemociteneso/1/edit

остальное завтра попробую.
#554 #386346
>>386198
Сел на пару часиков задачки порешать, а времени высосало немерено. Всё такое в CSS не очевидное ну или я торможу. Пока теряюсь во всем этом и по 5 раз перечитываю что уже прочитал.

ОП, глянь чего я наляпал.

кошка
http://jsbin.com/ligidoqutaxa/1/edit

1
http://jsbin.com/viqerojikeho/1/edit

2
http://jsbin.com/jabelazaxivo/1/edit

3
http://jsbin.com/qahilelapude/1/edit

4
http://jsbin.com/gavevuvabobe/1/edit

5
http://jsbin.com/ribagilukite/1/edit

6
http://jsbin.com/xuwihisadizi/1/edit

7
http://jsbin.com/hemociteneso/1/edit

остальное завтра попробую.
#555 #386348
>>386311

Функцию написать например

> но он создаёт подмассивы, а нужно без них.


Напиши так чтобы не создавал

>>386334

data не надо передавать, надо сделать список сотрудников работающих в департаменте и функцию их добавления.

Функции начинаются с глагола например getCoffeeConsumption (а переменные нет).

Ты на правильном пути.
#556 #386349
>>386334

Я имею в виду функции типа посчитать сколько всего кофе выпито не должны иметь вообще аргументов, то есть data в них передавать не надо.
#557 #386404
>>385470

Но я пишу не для себя.

Успешный Haskell-кун
#558 #386410
http://ideone.com/1cjc01

Оп, смотри уже почти доделал. Посмотри на код, что поправить?

Теперь нужно каждый th, у которого нет соседа td, заменить на <td height="40" colspan="2"><strong></strong></td>. Как это реализовать?

Остальные th заменить на <td style="border-bottom: 2px dotted #033f1d" width="280px">
</td>
#559 #386433
ОП, я оперирую некими "заявками". По запросу с клиентсайда получаю штук 20 подходящих под выборку из БД и отдаю в клиентсайд. Возникает вопрос - делать 1 класс Requests где указываю сколько заявок нужно получить, читать их данные в массив и отдавать на view этот массив данных; или создавать при чтении из ДБ отдельные экземпляры под каждую заявку? Кажется бесполезной тратой ресурсов...
!ОП #560 #386438
>>386410

> Теперь нужно каждый th, у которого нет соседа td,


Если ты изчал Xpath и его оси (их всего 12), то это там легко делается.

Поиск соседа легко делается через оси following-sibling (которая возвращает всех следующих за элементом братьев) и previous-sibling:

http://zvon.org/xxl/XPathTutorial/Output_rus/example15.html
http://internetka.in.ua/xpath-start-part2/

Поиск соседа с определенным именем делается за счет фильтрации:

...../following-sibling::[1][name() = 'td']

[1] нужен чтобы проверять только ближайшего брата, а не всех. name() нужен чтобы проверить что это именно td. То есть мы ищем элемент который имеет имя td и является первым по счету братом.

Заметь что если написать ...../following-sibling::td[1] то мы найдем первый элемент td, который является братом, но не обязательно является соседом нашего.

Теперь используем это (наличие или отсутствие соседа) как условие для отсеивания элементов th:

../th[count(following-sibling::
[0][name() = 'td']) = 0]

или же можно обойтись без count:

../th[not(following-sibling::[0][name() = 'td'])]

Думаю, дальше ты легко допишешь сам.

Не забудь, что к условиям в XPAth можно применять функию not а также операторы and, or:

div[@id = 'id1' or @id='id2']
a[not(contains(@href, 'example.com')] — ищет ссылки, у которых нет аттрибута href либо он есть но не содержит example.com

Как видишь, Xpath — очень мощный язык (почему я и советую его изучать — ты можешь одной строчкой заменить целый кусок рутинного кода для поиска).

После того, как ты найдешь нужные элементы, замену легко сделать манипуляциями через создание и вставку нового элемента. Более того, в ДОМЕ для этого есть метод replaceChild, не знаю, есть ли он в PHP, в браузерном ДОМе есть точно.
!ОП #560 #386438
>>386410

> Теперь нужно каждый th, у которого нет соседа td,


Если ты изчал Xpath и его оси (их всего 12), то это там легко делается.

Поиск соседа легко делается через оси following-sibling (которая возвращает всех следующих за элементом братьев) и previous-sibling:

http://zvon.org/xxl/XPathTutorial/Output_rus/example15.html
http://internetka.in.ua/xpath-start-part2/

Поиск соседа с определенным именем делается за счет фильтрации:

...../following-sibling::[1][name() = 'td']

[1] нужен чтобы проверять только ближайшего брата, а не всех. name() нужен чтобы проверить что это именно td. То есть мы ищем элемент который имеет имя td и является первым по счету братом.

Заметь что если написать ...../following-sibling::td[1] то мы найдем первый элемент td, который является братом, но не обязательно является соседом нашего.

Теперь используем это (наличие или отсутствие соседа) как условие для отсеивания элементов th:

../th[count(following-sibling::
[0][name() = 'td']) = 0]

или же можно обойтись без count:

../th[not(following-sibling::[0][name() = 'td'])]

Думаю, дальше ты легко допишешь сам.

Не забудь, что к условиям в XPAth можно применять функию not а также операторы and, or:

div[@id = 'id1' or @id='id2']
a[not(contains(@href, 'example.com')] — ищет ссылки, у которых нет аттрибута href либо он есть но не содержит example.com

Как видишь, Xpath — очень мощный язык (почему я и советую его изучать — ты можешь одной строчкой заменить целый кусок рутинного кода для поиска).

После того, как ты найдешь нужные элементы, замену легко сделать манипуляциями через создание и вставку нового элемента. Более того, в ДОМЕ для этого есть метод replaceChild, не знаю, есть ли он в PHP, в браузерном ДОМе есть точно.
#561 #386439
>>386410

Там в моем посте звездочка потерялась после following-sibling:: — но это ты думаю и сам уже догадался.
!ОП #562 #386442
>>386346

Кошка

надпись A cute cat выполнена шрифтом обычного веса, не жирным. Он выделяется только размером и цветом. Верстальщик должен учиться видеть такие вещи.

> width: 96%;


> padding-left: 4%;


Ну не, сделай тут по другому. Паддинг = 10px а ширина пусть определяется автоматически. Если ты изучал абсолютное поз. то должен знать что при заданных right/left ширина может вычисляться автоматически.

> z-index: 1;


Если ты используешь z-index (хотя он тут не нужен, так как позиционированные элементы располагаются выше непозиционированных), то должен поставить z-index и на родительском элементе, иначе возможен неожиданный результат. Обязательно почитай про stack context и порядок отрисовки:

http://css-tricks.ru/articles/Details/zIndex
http://resources.webknowledge.ru/digests/css/property/z-index/
http://habrahabr.ru/post/166435/

Я согласен, это не очень простая тема, и объяснения там так себе, но попробуй разобраться.

Порядок отрисовки элемента по моему примерно такой:

- тени элемента (располагается ниже всего)
- фон элемента
- бордер элемента
- потомки (не только дети) элемента с отрицательным z-index
- обычные потомки и текстовое содержимое
- флоаты и позиционированные потомки
- потомки с положительным z-index (располагается выше всего)

Если 2 элемента имеют одинаковый приоритет (например одинаковый z-index) то они рисуются в том порядке, в котором идет в HTML коде.

> font-size: 26px;


Когда задаешь font-size всегда задавай line-height

> float: right;


> position: relative;


> right: 102%;


Ну не, это какой-то очень странный код. Смотри, ты сдвигаешь элемент вправо (где он может например оттолкнуть другой блок), а затем просишь браузер нарисовать его слева. Попробуй заменить data-ref="1" чтобы там была не цифра, а много цифр — справа в тексте появляется дырка. Это неправильно. Более того, длинный текст еще и уезжает за левый край окна и становится невидим.

Я думаю, тут надо либо сразу использовать float left либо position absolute.

Вообще, у меня ощущение что ты пока не очень хорошо понимаешь CSS и во многих случаях просто начинаешь перебирать свойства, пока не заработает. Это не очень хороший подход, старайся разобраться почему тот или иной код так отображается.
!ОП #562 #386442
>>386346

Кошка

надпись A cute cat выполнена шрифтом обычного веса, не жирным. Он выделяется только размером и цветом. Верстальщик должен учиться видеть такие вещи.

> width: 96%;


> padding-left: 4%;


Ну не, сделай тут по другому. Паддинг = 10px а ширина пусть определяется автоматически. Если ты изучал абсолютное поз. то должен знать что при заданных right/left ширина может вычисляться автоматически.

> z-index: 1;


Если ты используешь z-index (хотя он тут не нужен, так как позиционированные элементы располагаются выше непозиционированных), то должен поставить z-index и на родительском элементе, иначе возможен неожиданный результат. Обязательно почитай про stack context и порядок отрисовки:

http://css-tricks.ru/articles/Details/zIndex
http://resources.webknowledge.ru/digests/css/property/z-index/
http://habrahabr.ru/post/166435/

Я согласен, это не очень простая тема, и объяснения там так себе, но попробуй разобраться.

Порядок отрисовки элемента по моему примерно такой:

- тени элемента (располагается ниже всего)
- фон элемента
- бордер элемента
- потомки (не только дети) элемента с отрицательным z-index
- обычные потомки и текстовое содержимое
- флоаты и позиционированные потомки
- потомки с положительным z-index (располагается выше всего)

Если 2 элемента имеют одинаковый приоритет (например одинаковый z-index) то они рисуются в том порядке, в котором идет в HTML коде.

> font-size: 26px;


Когда задаешь font-size всегда задавай line-height

> float: right;


> position: relative;


> right: 102%;


Ну не, это какой-то очень странный код. Смотри, ты сдвигаешь элемент вправо (где он может например оттолкнуть другой блок), а затем просишь браузер нарисовать его слева. Попробуй заменить data-ref="1" чтобы там была не цифра, а много цифр — справа в тексте появляется дырка. Это неправильно. Более того, длинный текст еще и уезжает за левый край окна и становится невидим.

Я думаю, тут надо либо сразу использовать float left либо position absolute.

Вообще, у меня ощущение что ты пока не очень хорошо понимаешь CSS и во многих случаях просто начинаешь перебирать свойства, пока не заработает. Это не очень хороший подход, старайся разобраться почему тот или иной код так отображается.
!ОП #563 #386443
>>386346

1

Все верно, тут действительно удобно использовать выравнивание за счет маргинов.

2

> Текст размером 14px выполнен влево.


Он не выровнен влево в твоей верстке. И он там не-жирный и без засечек должен быть.

И если ты хочешь выделить жирным весь текст (а не пару слов), используй CSS а не HTML-теги. Тег strong предназначен для выделения части текста.

И вообще, ты по моему тут CSS код от первой задачи приложил по ошибке.

3

Молодец, что догадался использовать vertical-align и инлайн-блоки. Но вот расстояние по горизонтали между блоками не равно 10px у тебя. Иди почитай: http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html

(сомнительные решения с font-size: 0 не рекомендую использовать)

Ну и тег p я бы не стал тут ставить. Тут нечего разбивать на абзацы, значит p не нужен.

4

Если указываешь font-size всегда указывай line-height. Почти верно сделано, но не хватает паддингов на цветных полосках, посмотри внимательно на картинку в задаче, они там есть.

5

Между пунктами меню должно быть больше пространства, у тебя они слишком тесно прижаты, смотри картинку.

> div{


>font-family: sans-serif;


Это неправильно, так как ты пытаешься зачем-то задать шрифт для всех дивов на странице (зачем? а для p или span будет другой шрифт что ли? где тут логика?).

Если ты хочешь задать шрифт по умолчанию, то его надо просто задавать на html — он по умолчанию унаследуется на всю страницу.

> <div id="title">


> <p>ООО "Агросервис"</p>


Это называется h1. Изучи-ка список элементов HTML: http://www.puzzleweb.ru/html/all_tags.php

Обрати внимание, что в HTML есть даже теги для пометки времени (time), переменных в коде (var), определений терминов в учебниках (dfn) и упоминания названий фильмов и книг (cite). Естественно, ты не обязан их использовать, но если уж тебе надо пометить что-то как заголовок — используй предусмотренный для этого тег.

> p{


>padding: 0; margin: 0;


Это непраивльно. Если мы захотим сделать описание компании на несколько абзацев, они слипнутся друг с другом.

> li{


>margin: 0; padding:0;


Это непраивльно. Если мы захотим добавить список в описание компании, в нем все слипнется. Ты должен сбрасывать стили только для меню, а не для всех списков страницы.

Твоя верстка ненадежная. Попробуй заменить текст в описании на «Мы являемся» — и меню исчезнет со страницы. Сделай нормально и более надежно, чтобы от убирания одного блока второй не улетал за край экрана.
!ОП #563 #386443
>>386346

1

Все верно, тут действительно удобно использовать выравнивание за счет маргинов.

2

> Текст размером 14px выполнен влево.


Он не выровнен влево в твоей верстке. И он там не-жирный и без засечек должен быть.

И если ты хочешь выделить жирным весь текст (а не пару слов), используй CSS а не HTML-теги. Тег strong предназначен для выделения части текста.

И вообще, ты по моему тут CSS код от первой задачи приложил по ошибке.

3

Молодец, что догадался использовать vertical-align и инлайн-блоки. Но вот расстояние по горизонтали между блоками не равно 10px у тебя. Иди почитай: http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html

(сомнительные решения с font-size: 0 не рекомендую использовать)

Ну и тег p я бы не стал тут ставить. Тут нечего разбивать на абзацы, значит p не нужен.

4

Если указываешь font-size всегда указывай line-height. Почти верно сделано, но не хватает паддингов на цветных полосках, посмотри внимательно на картинку в задаче, они там есть.

5

Между пунктами меню должно быть больше пространства, у тебя они слишком тесно прижаты, смотри картинку.

> div{


>font-family: sans-serif;


Это неправильно, так как ты пытаешься зачем-то задать шрифт для всех дивов на странице (зачем? а для p или span будет другой шрифт что ли? где тут логика?).

Если ты хочешь задать шрифт по умолчанию, то его надо просто задавать на html — он по умолчанию унаследуется на всю страницу.

> <div id="title">


> <p>ООО "Агросервис"</p>


Это называется h1. Изучи-ка список элементов HTML: http://www.puzzleweb.ru/html/all_tags.php

Обрати внимание, что в HTML есть даже теги для пометки времени (time), переменных в коде (var), определений терминов в учебниках (dfn) и упоминания названий фильмов и книг (cite). Естественно, ты не обязан их использовать, но если уж тебе надо пометить что-то как заголовок — используй предусмотренный для этого тег.

> p{


>padding: 0; margin: 0;


Это непраивльно. Если мы захотим сделать описание компании на несколько абзацев, они слипнутся друг с другом.

> li{


>margin: 0; padding:0;


Это непраивльно. Если мы захотим добавить список в описание компании, в нем все слипнется. Ты должен сбрасывать стили только для меню, а не для всех списков страницы.

Твоя верстка ненадежная. Попробуй заменить текст в описании на «Мы являемся» — и меню исчезнет со страницы. Сделай нормально и более надежно, чтобы от убирания одного блока второй не улетал за край экрана.
!ОП #564 #386444
>>386346

6

В данной задаче надо сделать элементам вид как на рисунке (то есть явно задать фон и бордер). Также, инпут и кнопка имеют разную высоту. Ты думаешь, если ты написал им 30px то она у них одинаковая? У кнопок задается внешняя ширина, у инпутов — внутренняя. Почитай про box-sizing: http://habrahabr.ru/post/149441/

У кнопок он равен border-box, у инпутов content-box. И так было всегда, даже когда свойства box-sizing не было в природе.

> <p>Найти</p>


Не нужно тут ставить p. Это абзац текста, а какие абзацы могут быть внутри кнопки?

Расстояние между кнопкой и инпутом должно быть 10px. Не забудь кстати, что по умолчанию браузер добавляет кнопкам и инпутам 1-2 пикселя маргина (можно проверить инспектором, Ctrl +Shift + I в браузере — если ты им не умеешь пользоваться, срочно изучай).

7

Примечание надо опустить ниже. посмотри как он выровнено относительно текста на картинке и у тебя.

В HTML коде слишком много тегов. Я предлагаю (то есть это обязательно) сделать так:

<p>абзац 1</p>
<div class="note">...</div>
<p>абзац 2</p>

Этого достаточно. Также, надо чтобы можно было добавить любое число абзацев и убирать/добавлять примечания и ничего не ломалось.

> p {


>margin: 0; padding: 0;


не делай так.

> div{


>margin: 0px;


не применяй правила ко всем дивам, используй тут класс
!ОП #564 #386444
>>386346

6

В данной задаче надо сделать элементам вид как на рисунке (то есть явно задать фон и бордер). Также, инпут и кнопка имеют разную высоту. Ты думаешь, если ты написал им 30px то она у них одинаковая? У кнопок задается внешняя ширина, у инпутов — внутренняя. Почитай про box-sizing: http://habrahabr.ru/post/149441/

У кнопок он равен border-box, у инпутов content-box. И так было всегда, даже когда свойства box-sizing не было в природе.

> <p>Найти</p>


Не нужно тут ставить p. Это абзац текста, а какие абзацы могут быть внутри кнопки?

Расстояние между кнопкой и инпутом должно быть 10px. Не забудь кстати, что по умолчанию браузер добавляет кнопкам и инпутам 1-2 пикселя маргина (можно проверить инспектором, Ctrl +Shift + I в браузере — если ты им не умеешь пользоваться, срочно изучай).

7

Примечание надо опустить ниже. посмотри как он выровнено относительно текста на картинке и у тебя.

В HTML коде слишком много тегов. Я предлагаю (то есть это обязательно) сделать так:

<p>абзац 1</p>
<div class="note">...</div>
<p>абзац 2</p>

Этого достаточно. Также, надо чтобы можно было добавить любое число абзацев и убирать/добавлять примечания и ничего не ломалось.

> p {


>margin: 0; padding: 0;


не делай так.

> div{


>margin: 0px;


не применяй правила ко всем дивам, используй тут класс
#565 #386445
>>386433

> Ошибка постинга: В сообщений присутствует слово из спам листа.


Вот ответ: http://ideone.com/BeLgbd
!ОП #566 #386446
Не разбегайтесь, скоро перекатимся в новый тред.
#567 #386476
Давно сюда не заходил, я смотрю здесь помимо Опа еще один умный анон появился (!ОП)? У нас теперь джва учителя или это оп перестал трипкод юзать? Почему тред не на нулевой, я еле откопал же, что за дела?
#569 #386481
>>386476
Это ОП, просто он трипкод не юзает.(грил, что из-за обновлений на сосаче)

>Почему тред не на нулевой, я еле откопал же, что за дела?


>>386476
#570 #386482
>>386481
Быстрофикс.

>Почему тред не на нулевой, я еле откопал же, что за дела?


>>386446
#571 #386483
>>386476
Тред не на нулевой, потому что он уже 70 постов как в бамплимите.
!ОП #572 #386533
>>386476

Скоро перекатимся в новый тред, подожди. От того, что мы полдня повисим на второй или третьей странице, ничего не случится.

ОПа пора бы уже узнавать не по трипкоду, а по тексту.

>>386479

О, вообще неплохо сделано. Кажется, ты начал понимать ООП. Можешь после этой задачи переходить к задаче про энергосеть.

> Company.prototype.alreadyAddEmployee


Имя функции начинается с глагола, сделайЧтоТо. В данном случае можно checkIsNewEmployee

> for (var i = 0; i < this.listEmployees.length; i++) {


> if (this.listEmployees == employee) {


Код поиска скопипастен. Надо вынести его в отдельную функцию. Назвать можно findEmployee. Пусть возвращает индекс, а если не найден то -1. Кстати, в новых браузерах с поддержкой ES5 у массива есть метод indexOf который как раз это делает, знаешь?
#574 #386594
Что-то странно, никто не пишет сегодня. Может проблемы с постингом, у меня днем не получалось отправить пост.
#575 #386597
>>386438
Ну ок, понемногу разбираюсь, но xpath в js для меня темный лес, и насколько ты помнишь у меня ничего вышло с помощью метода document.evaluate(). Я все таки решил доделать дело на javascript, смысл пропускать это дело через пхп, когда начал js.
#576 #386598
>>386594
Выходной же. Я вот с пятницы только сегодня отошел с синевы лол
!ОП #577 #386599
>>386593

Теперь все верно.

>>386597

Ну ты попробуй сделать чтобы простое выражение вроде //td заработало тогда, может ты какой параметр передать забыл или что-то не так написал. Ну если не получится XPath, можно конечно и через querySelectorAll искать.
!ОП #578 #386604
Новый, 32-й тред: >>386602
Тред утонул или удален.
Это копия, сохраненная 5 октября 2014 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски