Это копия, сохраненная 5 октября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Это тред для начинающих. Не написал за свою жизнь ни одной программы? Ты наш человек.
Требуемые знания: умение читать. Устанавливать пока что ничего не требуется, разве что редактор кода вроде 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 дня слушаешь от заказчика что он о тебе думает, есть удаленная работа — продаешься в рабство, и занимаешься только программированием, задачи тебе будут подкидывать наготово. Ищется по слову «удаленно» на перечисленных сайтах. Зарплата на удаленной работе может быть меньше чем в офисе в столице, но больше чем в твоей деревне. На одеске зарабатывают больше, чем на русском фрилансе.
В общем, давайте начинать уже!
Как и чем отформатировать код
Важно писать код не как попало, а аккуратно, как принято. Почему? Ну потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Ты же не хочешь, чтобы тебя называли быдлокодером?
Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт 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/
Как и чем отформатировать код
Важно писать код не как попало, а аккуратно, как принято. Почему? Ну потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Ты же не хочешь, чтобы тебя называли быдлокодером?
Не бойся, сделать код аккуратным совсем не сложно. Самый универсальный способ — вставить его на сайт 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/
>название функции начинается с глагола, в стиле «сделайЧтоТо»
Почему? Это же неудобно? Удобней же когда наоборот, ЧтоТо и действия, TableCreate(),TableRepair(), TablePaint(), например.
>мы используем для отступов 4 пробела
Почему? Пробелы же говно - шифт таб не работает сразу для нескольких строк и нужно по 4 раза на backspace нажимать.
Так принято
> шифт таб не работает сразу для нескольких строк
Неправда, работает. По крайней мере в Sublime Text которым я пользуюсь.
Табы использовать в принципе нельзя так как код с ними разваливается, на вид таб от пробела никак не отличить (как убедиться что правильно их расставил? как исправить?), а правила где что ставить придумывали какие-то аутисты.
И назови хоть одну выгоду от табов? Недостатки я перечислил. «Можно настраивать отступ» - это не выгода, ты и с пробелами можешь настраивать величину отступа, если редактор умный.
> TableCreate()
В каком языке или стандарте ты это видел? В Java, JS используется сделайЧтоТо (в PHP — не всегда, это по историческим причинам. В новых библиотеках, например PDO, все праивльно: fetchAll, bindValue).
> TableCreate(),TableRepair(),
Для этого надо использовать возможности ООП:
$table->create();
$table->repair();
Ты не назвал ни одного недостатка.
>>382420
Это у тебя частный случай, когда есть переменная с названием table. А если у тебя есть просто список какой-нибудь, то не сразу станет понятно, с каким классом работаешь. А если класс наследуется и в родителе есть метод с таким же названием, то перегружать придется.
> то не сразу станет понятно, с каким классом работаешь.
Значит надо писать понятно, например с помощью phpDoc указать что возвращает тот или иной метод
> А если класс наследуется и в родителе есть метод с таким же названием, то перегружать придется.
Я не очень понял как это, но видимо это ошибка в проектировании. Методы переопределяют, когда надо поменять поведение наследника.
> Ты не назвал ни одного недостатка.
Ты прочел мой пост?
Они выглядят одинаково и это усложняет жизнь. Предеставь, что в твоем коде кто-то поменял часть латинских букв на русские. Или сделал например 2 функции с одинаковыми именами, в одной латинская буква,в другой на ее месте русская. Смешивать табы и пробелы — то же самое — занятие для аутистов, а не для тех кто хочет решать задачи.
А представь обычный редактор и тебе надо выровнять код? Затрахаешь пробел до невозможного.
Я советую отказаться от click и использовать только mousedown.
Как раз недавно вычитал, что mousedown работает быстрее, чем click.
К примеру я залил на сайт этот сапер, уже дописанный. Реально написать программу, которая будет встраиваться в код, делать клики за меня, рассчитывать правильные ходы и приводить меня к выигрышу?
Ну то есть я знаю, что это реально. Я встречал программы, которые делают что-то за юзера. Там как-то рассчитываются координаты сапера на странице и координаты ячеек? Я просто не имею представления, как это делается. Или сторонний js как-то впихивают? А клик как реализуется?
Нельзя. Поле генерится после первого клика.
p.s. Задачи уровня "сделать сапера" - это насколько милиметров выше полного дна в программировании?
Респект и Уважуха стартеру, красивы скрины... старается человек не на свое благо.
только все таки одиночные кавычки быстрей и намного )
А, работают. Надо куда-нибудь console.log() тогда вставить, чтобы ошибку выводило? Там потом выскакивает ошибка jsbin'a. Так и должно быть? http://jsbin.com/lubewuqa/9/edit?js,console - попытался сделать проверку на повторную добавку, не получается. Не могу разобраться с возникающей ошибкой. Алсо, как мне постоянно пополнять объект с добавками, не обнуляя его? Через замыкание?
он не быстрее, он просто раньше срабатывает (click срабатывает только после отпускания кнопки)
Не хочу учить пхп, решил взяться за ноду, но тяжело дается она.
Я смотрел, там у меня что-то с переменной не так.
Что почитать годного что виртуозно владеть php+mysql?(сейчас читаю о работе с mysql via pdo)
Что правильного посоветуете на эту тему? Спасибо
1. Где найти задания по php разбитые на уровни по сложности и с примерами решений? Интересуют именно реальные задания, с которыми регулярно сталкиваются php программисты.
2. Вот сверстал я макет, как мне натянуть его на wordpress, вообще не понимаю. Зашел в папку с wp, открыл первый попавшийся файл с расширением .php, 1000 строк кода, нихуя не понятно, в ужасе закрыл.
Круто было бы если дали ссылку, где весь процесс описывается и разжевывается для полных новичков. Я погуглил, из того что нашел все равно не понятно.
> Интересуют именно реальные задания, с которыми регулярно сталкиваются 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 чтобы сделать тему для вордпресса. А в исходники сразу лезть смысла нету.
Можешь почитать для начала
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), лучше смотреть обе.
Можешь почитать для начала
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), лучше смотреть обе.
Спасибо. Еще пара вопросов.
Я прошел курс php из этого треда. Потом начальный курс на php.net. Сейчас просто гуглю всякие конструкции и пытаюсь разобраться, что они делают в коде.
Скачал книгу "Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования", полистал, она мне показалась не для новичка.
Эту "Никсон Р. - Создаем динамические веб-сайты с помощью PHP", не стал скачивать из-за плохих отзывов в оп-посте. На rutracker глянул, там книги по php очень старые (6-10+) лет назад написаны, одолевают сомнения.
Так вот, может кто посоветует книгу с которой начинал и смог в php. Прошлый тред пролистал, но не нашел чего-то конкретного или я слепой
И самое важное. Нужен проект, который бы писался в процессе изучения php. Не слишком сложный, такой что бы можно было написать в одиночку, но и который бы заставлял думать в процессе реализации. Например написать борду, соц.сеть, какой-нибудь твиттер, но такое наверное пишет толпа разработчиков и надо что-нибудь полегче.
Кто что делал и подобного в процессе обучения? Может посоветуете.
>апример написать борду, соц.сеть
У Никсона в последней главе показывается как делать соц сеть.
Что касается ошибки
> "TypeError: this.additives is undefined (line 62)"
То тут все просто. У тебя есть строка:
> if (this.additives.additive
В функции Hamburger.checkAdditive ты не можешь обращаться к this (точнее можешь но this указывает на Hamburger, а не на объект который тебе нужен).
Только там приведен адский быдлокод, которому учить нельзя. То ли автор не силен в ООП и архитекутре, то ли поленился.
>>382568
>она мне показалась не для новичка.
Если ты прошел наш учебник (и решил все сложные задачи в нем), то у тебя должен быть как раз подходящий уровень чтобы ее читать. Разве что про веб-серверы, HTTP и HTML у нас не рассказано.
> там книги по php очень стары
Это верно. много старья и много книг от авторов, которые сами плохо знают язык и не могут в ООП например.
> Например написать борду, соц.сеть, какой-нибудь твиттер
У меня есть задачка сделать файлообменник: https://gist.github.com/codedokode/9424217
\
И задача сделать борду, верстка готова: https://github.com/codedokode/board-markup
Кидай ссылку на гитхаб. А тебе нужны критические комментарии и замечания по поводу кода?
>>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
Используй нормальный редактор кода, а не блокнот, для таких вещей.
Кидай ссылку на гитхаб. А тебе нужны критические комментарии и замечания по поводу кода?
>>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
Используй нормальный редактор кода, а не блокнот, для таких вещей.
Спасибо тебе, ОП, ты няша.
>>Знание PHP и ООП необходимо.
>>основы HTML/CSS
>>основы MySQL
Их есть у меня. Но вот среди прочих приблуд запутался. Значит начну со слима.
Алсо посоветуй какую смс поковырять, чтобы не сложно, но актуальненько. Начал смотреть битрикс, но охуел и в ужосе бежал оттуда.
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
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
Кнопка громкости в плееере не выровнена по вертикали с полосой вопроизведения. Ну ты же верстальщик, ты должен обращать внимание на такие вещи.
> 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
http://ideone.com/9Kgn03
Решал часа 3-4, привыкал к синтаксису, тяжковато к переменным добавлять доллар,в конце выражений ставить точку с запятой. BTW, спасибо ОП за проделанную работу!
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
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
программирования имеется (питон).
Бонусные — это ок, но я советую еще решить задачи на регулярки (теорию опытным программистам можно не читать).
>>382681
Посмотри на свой код:
> cell.drawEmptyCell();
> ...
> if (!cell.isOpened) {
как часто, по твоему, срабатывает этот if? (ответ: чуть реже чем никогда). drawEmptyCell ставит флаг isOpened.
Программа ворует деньги и выдает меньше чем положено: 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.
Программа ворует деньги и выдает меньше чем положено: 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.
> Ведь код после try catch и так будет выполняться.
Catch выполняется только если в try произошла ошибка. Finally выполняется всегда.
>>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;
Можно писать через -=
>>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;
Можно писать через -=
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Программа ворует деньги и выдает меньше чем положено: 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";
Программа ворует деньги и выдает меньше чем положено: 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";
>>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 "Выдача возможна, число купюр:";
>>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 "Выдача возможна, число купюр:";
>>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";
>>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";
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Функции приянто называть в стиле сделайЧТоТо, то есть начинать с глагола:
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";
Программа ворует деньги и выдает меньше чем положено: 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";
Программа ворует деньги и выдает меньше чем положено: 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";
Оп, посмотри. Как тебе? Укажи на косяки, что исправить. Хочу до совершенства довести.
[CODE]function createQuestions()
{
$questions = array();
$q = new Question;
$q->text = ...
...
// Кладем вопрос в массив
$questions[] = $q;
$q = new Question;
...
return $questions;
}[/CODE]
Ей ничего не передается. Или я должен её сам дописать? Просто там так написано, будто она уже готовая.
Чтобы избежать копипасты. Без 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
Чтобы избежать копипасты. Без 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
Неплохо, с оформлением стало гораздо лучше. Советы по оформлению:
- белый попап смотрится на сером фоне гораздо лучше, чем серый
- я бы еще сделал попап чуть шире, добавиви поля, так как-то привычнее
- фон дляо ткрытой клеточки я бы сделал посветлее
- для клекток ты выставил фон через 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 и искать по нему
А, еще. В настоящем сапере, чтобы не проиграть первым ходом, мины генерируются после первого клика, открывающего клетку. Если у тебя в программе правильная архитектура, то сделать это не составит труда, я так думаю?
Неплохо, с оформлением стало гораздо лучше. Советы по оформлению:
- белый попап смотрится на сером фоне гораздо лучше, чем серый
- я бы еще сделал попап чуть шире, добавиви поля, так как-то привычнее
- фон дляо ткрытой клеточки я бы сделал посветлее
- для клекток ты выставил фон через 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 и искать по нему
А, еще. В настоящем сапере, чтобы не проиграть первым ходом, мины генерируются после первого клика, открывающего клетку. Если у тебя в программе правильная архитектура, то сделать это не составит труда, я так думаю?
Ей ничего не передается, потому что эта функция сама создает и возвращает массив объектов-вопросов и аргументы ей не нужны.
> будто она уже готовая.
Так и есть
>>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 скоро вымрет, но пока иногда приходится под него править верстку.
Ей ничего не передается, потому что эта функция сама создает и возвращает массив объектов-вопросов и аргументы ей не нужны.
> будто она уже готовая.
Так и есть
>>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 скоро вымрет, но пока иногда приходится под него править верстку.
А остальное все понятно пока.
А, что-то я не подумал. Тогда можно сначала снять свойство display: none (например убрав класс hidden), а только потом поменять отвечающий за анимацию класс (возможно «потом» придется делать через setTimeout 0).
В твоем случае, если ты будешь вставлять попап в ДОМ, возможно придется сначала вставить невидимый попап, а потом использовать setTimeout для анимации.
<?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";
}
?>
>if ($c=1)
if($c) нужно писать, это во первых, во вторых у тебя один знак равенства - ты присваиваешь единицу к С, а не сравниваешь.
Потому что в твоём примере $c равняется false, и в блоке else нету команды echo, чтобы вывести строку.
спасибо
= значит присвоить значение переменной
== значит проверить, равны ли значения
Не путай.
> 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' // нет +
);
Если что-то еще непонятно, спрашивай.
= значит присвоить значение переменной
== значит проверить, равны ли значения
Не путай.
> 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' // нет +
);
Если что-то еще непонятно, спрашивай.
http://jsbin.com/xugik/13/edit?js,output
getElementById в gameOver не хочет работать. Даже если this.table написать, все равно не работает.
Градиент я всегда хаком для ie добавляю. Это плохо?
Правый клик не воспринимается. Я отладчиком изучал, но он почему-то не показывает, что возвращает dom.isRegionButton(e, 'right').
Смотри, как надо поступать (и учись пользоваться отладчиком). Открываем страницу 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 кстати?)
Смотри, как надо поступать (и учись пользоваться отладчиком). Открываем страницу 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 кстати?)
Я кстати не могу никак полноценно проверить в IE8. У меня 11й стоит. Только через различные сайты, которые скриншоты делают.
Я пасту давал вроде выше по поводу ИЕ. К сожалению, единственный нормальный способ тестировать код в ИЕ — виртуальные машины (да, для каждой версии ИЕ нужна отдельная). Но поверь, раньше было еще хуже, так как сейчас в ходу 10, 9, 11, и немного 8, а раньше были 6 и 7 (и отладчика в них не было), так что можно легко было целый день потратить на исправления багов.
А так, можешь ссылку скидывать, я могу проверить. В ИЕ9 кстати linear-gradient тоже не работает, а фильтры надо подключать через -ms-filter
И еще такой вопросец: есть тут те кто начиная с курса ОПа начал через какое-то время заниматься фрилансом и зарабатывать? Какие еще знания пришлось подтянуть? Какие проекты берете на одексе?
Там вроде уровень очень базовый, скорее для ознакомления подходит.
> есть тут те кто начиная с курса ОПа начал через какое-то время заниматься фрилансом и зарабатывать? Какие еще знания пришлось подтянуть?
Были аноны (несколько), которые писали что смогли устроиться на работу (не на фриланс) после сидения в нашем треде.
Нет. Мы тут практикуем само программирование и сопутствующие техники ради повышения скиллов, а не каких-то других целей. Этакие теоретики.
Вообще да, но когда я вижу что за пиздец в /web/ я понимаю что даже такому пиздецу как этот тред еще рано туда перекатываться.
Лол.
Это единственный тред в /пр, где реально занимаются программированием, а не кидаются друг в друга говном. Если его выпиливать, то вместе с ним можно выпилить и /пр.
http://jsbin.com/lezipu/4/
Анимация не удалась. С помощью setTimeout сделать?
Mousedown и в правом и в левом клике воспринимаются одинаково. С этим проблема большая.
http://jsbin.com/lezipu/6/
С событиями вроде все наладилось. Если клик происходит между ячейками, то ошибка вылазит.
С анимацией все в силе.
Также generateMines пробовал засунуть в rightClickListener не помогает почему-то даже если вызов происходит после self.openCell.
Наверное у меня архитектура кривая и чтобы переставить одну строчку нужно переписывать весь код, или делать много проверок.
Тебе надо было поймать отладчиком координаты всех мин. Просто я уже раз 100й тестирую, такого у меня не было. Где попадалась 4-ка было все верно.
Куда вводишь? В командной строке нужно писать путь к файлу, например C:\Programm Files\Mysql\Mysql Server 5.5\bin\mysql.exe -u -p
Да все, спасибо, разорбрался.
http://jsbin.com/gadiqu/3/
Последний вариант. Не дождался ответа сделал анимацию через setTimeout. Все работает кроме winGame.
Посмотри в IE вроде при нажатии там фон не меняется? Я скачал IE tester, но он багнутый какой-то.
http://ideone.com/laAlb6
А первая бонусная задача, это разновидность "задачи о рюкзаке"?
Есть список слов. Нужно определить слова, в которых повторяется 1-я и 3-я, 2-я и 4-я буква: koko, kaka, mimi.
Не уверен, что такое возможно с помощью регулярных выражений, а вот обычным циклом - вполне.
k([a-z])k\1
Насколько я понял обратный слеш с номером позволяет обратиться к предыдущему захваченному скобками подвыражению.
Тебе нужны 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 выложила уже готовые (лицензионные) образы.
Осатанеть.
error_reporting(-1);
mb_internal_encoding('utf-8');
$text = "ну что. не смотрел еще black mesa.я собирался скачать ,но все как-то некогда было.";
$r=explode(" ",$text);
echo "$r";
?>
Выдает ошибку Array to string conversion in. В чем причина?
Малаца!
http://jsbin.com/suqiji/4/
Оп, хочу подробно рассказать по поводу метода getNumberOpenCells. Я включил отладчик, поставил метку на методе openCells, хотел посмотреть, что возвращает getNumberOpenCells, но оно не показывало. И вообще странно как-то, он практически мимо условия (this.getNumberOpenCells == lostCells) проходит.
Поставил метку на методе getNumberOpenCells, так отладчик совсем там не останавливает по клику. Ну и еще один пруф был console.log(openCells) тоже не сработало.
Оп, рассуди. Ну и generateMines некуда засунуть.
http://codepad.org/bXUKN6Dv
Не пойму, в чем причина. Хелп ми плз!
// Функция, создающая массив с вопросами:
function createQuestions()
{
$questions = array();
$q = new Question;
$q->text = ...
...
// Кладем вопрос в массив
$questions[] = $q;
$q = new Question;
...
return $questions;
}
В переменную $q надо что-то дописывать или нет?
помогли уже, оказалось что нет return при вызове в ветке else! Вообщем вот окончательный вариант:
http://codepad.org/PwiBZQFI
Не работает клик по клетке с флажком. Или это специально?
> .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',...
Можно обработчики объединить в одну функцию.
Не работает клик по клетке с флажком. Или это специально?
> .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',...
Можно обработчики объединить в одну функцию.
> В чем причина?
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)
> В чем причина?
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)
В 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 то да. Если без то нет.
В 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 то да. Если без то нет.
> хотел посмотреть, что возвращает getNumberOpenCells, но оно не показывало.
Отладчик показывает только значения переменных (Хром при наведении мыши, фаерфокс в правой панели). Чтобы увидеть что возвращает метод, перейди в консоль во время останова и набери там любой код. Либо сохраняй результат вызова в переменную.
Либо же (что может быть удобнее) добавь этот метод в панель Watch expressions - там можно писать любые выражения и он сам будет их пересчитывать при изменении. Впиши туда например this.getNumberAroundMines(cell) и он будет вызывать эту функцию и отображать ее значение после каждого шага.
В фаефоксе кстати отладчик подсвечивает изменившиеся после шага переменные, удобно.
Ты должен уметь полноценно использовать отладчик. Он может сэкономить много времени при правиьном использовании. Если что-то еще непонятно, спрашивай, я подскажу.
В Хроме например есть «условные точки останова» — можно указать условие и точка сработает только если оно выполняется, они ставятся правой кнопкой мыши. Можно делать шаг с заходом в функцию (Step In), а можно перепрыгнуть (Step Over).
> И вообще странно как-то, он практически мимо условия (this.getNumberOpenCells == lostCells) проходит.
Может оно не выполняется?
> Поставил метку на методе getNumberOpenCells, так отладчик совсем там не останавливает по клику
надо ставить не на определении функции, а на первой строке кода то есть
function x() {
> Массив нельзя вывести с помощью echo (и нельзя вставить внутрь строки), echo выводит только строки и числа. Чтобы вывести массив пиши var_dump($r); или print_r($r);
Пиздец же, как вы на этом говне пишете?
мимо проходил
Спасибо. Надо все внимательно прочитать все-таки, и забывать про питон, когда кодираю на пхп и наоборот.
> В первой задаче на классы не работает этот код.
Как это не работает? выдает ошибку? Возващает не то что надо? Пиши чуть больше подробностей.
> В переменную $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 вместо цикла.
>здец же, как вы на этом говне пишет
А в каком языке массив можно подставить прямо в строку через подстановку переменных? Да в половине языков вообще нет интерполяции строк
Ты наркоман наверно
Никаких.
Хм. Заметил крупный косяк со временем исполнения анимации - она почему намнооого дольше чем нужно.
У меня идеи как ее решать есть, но боюсь что идеи не совсем верные , хочу у тебя совета спросить .
Вот собственно задачка:
написать класс логера
должно быть 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);
}
} - ну и т.д.
Оп, вроде все твои замечания учел. Только generateMines я не могу понять куда правильней засунуть.
Решился уже вчера поставить винду с ie8 на virtualbox. Качал с modern.ie, так у меня ничего не вышло, только куча ошибок, однозначного ответа на которые в гугле нет. Сам virtualbox после запуска либо зависает, либо закрывается. Понял, что не судьба.
Посмотри на код. На архитектуру. Меня смущает, что Game только создает Field и больше ничего не делает. Код хорошо читается?
> задачку тестовую
Сочувствую твоему работодателю если по результатам выполнения этой задачи тебя берут на работу\фриланс etc.
Тестовое задание должно проверяет твои, а не наши знания. Не забывай. В данном случае, видимо проверяют знание ООП.
> П.с. Не могу понять в чем разница между 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 метода, какой хочешь такой и вызывыаешь.
Задача унылая, но знания ООП проверяет — я вижу кучу ошибок например. И чем тебе не нравятся тестовые задания? Это практически единственный способ проверить джуниора. На словах-то все Львы Толстые, такого в резюме напишут что Керни и Ричиган отдыхают в сторонке.
> 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 (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).
(progressPercent / 100)) | 0;> currentAnimated[prop] = (this.animatedValue[prop]
Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.
Алсо, что это за | 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 свойств отдельный класс, а перенес бы эту функцию внутрь основного объекта. Соответственно и код вызова анимации проще получится.
> 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 (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).
(progressPercent / 100)) | 0;> currentAnimated[prop] = (this.animatedValue[prop]
Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.
Алсо, что это за | 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 свойств отдельный класс, а перенес бы эту функцию внутрь основного объекта. Соответственно и код вызова анимации проще получится.
А что не так? Давай разберемся.
>>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-хак чтобы бордер добавился только в ИЕ. Но в остальном, все работает.
А что не так? Давай разберемся.
>>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-хак чтобы бордер добавился только в ИЕ. Но в остальном, все работает.
Я про то, что он не может решить простейшую задачу и даже не понимает куда копать, а представленное "решение" - полный абзац. Собственно потому я работодателю и сочувствую, если он в итоге его наймет. Задача тут ни при чем.
Ну не беда, это только потому, что он не изучал нормально ООП и аналогичные библиотеки, изучал бы — с легкостью бы написал.
В каком месте? Игра понятно между живыми человеками, корованы грабить нельзя.
На php мне видится это только в виде сохранения каждого действия за столом в дб и дрочением php каждую, скажем, секунду. Не тру.
иди читай про веб сокеты или лучше почитай просто пых, сдается мне счетчик прочитанных страниц у тебя маленький
Это можно сделать на PHP, но не очень эффективно на каждый ход перезагружать страницу. Лучше конечно делать на JS + аякс/вебсокеты + PHP, но если цель именно изучение PHP то можно и чисто на нем делать.
> принимать подключение от клиентов, даром, что из браузера через ajax?
А в чем проблема аякс-запросы на PHP обрабатывать-то? Ну будет игрок каждую секунду допустим слать запрос «что нового», ты ему будешь отвечать «пока ничего». Если нужно более оперативное обновление то есть вебсокеты, и штуки вроде http://dklab.ru/lib/dklab_realplexor/
> сохранения каждого действия за столом в дб
Сохранять все равно надо иначе перезагрузка сервера/падение программы убьет все игровые сеансы.
>сохранения каждого действия за столом в дб и
Тут кстати монга подошла бы, можно в нее писать лог игры.
Он тоже подходит, но говорят что монга умеет быстро вставлять данные (ценой снижения надежности) и шардиться, а при большом числе игроков там будет много вставок. Там наверно надо сделать каждое событие в игре отдельной записью (записи объединяются по id игрового сеанса и сортируются по номеру или временной метке).
Не пойму, почему на Петра скрипт не работает, а на все остальные имена работает. Вроде я поставил ё в регулярное выражение.
Там её изначально и не было. Да и оп говорил, что ё не входит в промежуток а-я.
Поясните пожалуйста:
1) Почему не рекомендовано использовать подчёркивание в переменных? Почему для переменных вырвиглазный mixedCase, вместо легко читаемого lower_case_with_underscores?
2) В чём профит скобкодроча и ;дроча, если всё равно рекомендовано форматировать код отступами?
3) Есть ли аналог команды pass?
http://jsbin.com/cuwah/2/edit?js,console
Отладчиком уже прошелся, регулярки правильно работают, все как надо. Почему возвращается undefined? И почему console.log(possibleTags) игнорируется на 52й строке? Условие с dom.hasClass выполняется.
Пробуюсь устроиться на работку. В тестовом задании прислали файл dump.sql в котором описано создание двух таблиц и из этого файла я должен буду брать данные.
Я правильно понимаю, что мне нужно в phpmyadmin создать БД и импортировать в нее этот файл?
Оп, извини, все понял. В последнее время совершаю глупые ошибки.
Ага. Можешь и через консоль импортнуть (лучше сразу привыкай). Например, в Postgres это будет так: `createdb mydb && psql mydb -f <file.sql>`.
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.
Распиши, как примерно должно быть.
Тебе же написали выше ответ, что должны делать. Должны запись в лог доавлять с соответствующим уровнем важности.
>>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
Их надо исправить.
Тебе же написали выше ответ, что должны делать. Должны запись в лог доавлять с соответствующим уровнем важности.
>>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
Их надо исправить.
В юникоде буква ё стоит отдельно, смотри сам: 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 {}
У нас в таких случаях так пишут.
В юникоде буква ё стоит отдельно, смотри сам: 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 {}
У нас в таких случаях так пишут.
Ты знаешь регулярные выражения? Тут удобнее их использовать. Сначала разбиваем строку по пробельным символам на массив, затем проходим по нему и анализируем регуляркой.
> Если есть один пробел, то у нас в селекторе два тега,
Почему? Может у нас там 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/ (там Ява, но суть-то та же). Если тебе будет интересна эта тема, разбор выражений, я могу подкинуть задачку вроде калькулятора со скобками или разбора текста программы в дерево.
Но в этой задаче такие сложности ни к чему, тут регулярками проще разбрать. Сначала по пробелу, потом по символам точки/хеша. А остальное поддерживать не требуется.
Ты знаешь регулярные выражения? Тут удобнее их использовать. Сначала разбиваем строку по пробельным символам на массив, затем проходим по нему и анализируем регуляркой.
> Если есть один пробел, то у нас в селекторе два тега,
Почему? Может у нас там 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/ (там Ява, но суть-то та же). Если тебе будет интересна эта тема, разбор выражений, я могу подкинуть задачку вроде калькулятора со скобками или разбора текста программы в дерево.
Но в этой задаче такие сложности ни к чему, тут регулярками проще разбрать. Сначала по пробелу, потом по символам точки/хеша. А остальное поддерживать не требуется.
Как при выборе конкретной страны отобразить список городов, которые находятся в другой таблице?
А MySQL запущен? Скачивать отдельно наверно смысла нет, 2 mysql все равно нельзя одновременно запустить, надо тут разобраться, почему не работает, скорее всего пароль все-таки есть или ты еще что-то перепутал. Покажи код и какое сообщение об ошибке пишется.
Пишет, в доступе отказано. Ты еблан что ли? я уже написал это.
sql запрос с joinом, или два запроса, сначала получаем страну, потом по стране ищем города, связь один ко многим, матчасть хромает друг
Опчик, как исправить предупреждение о неопределенных переменных в методах? Определение внутри метода не помогает.
А то у меня тут сторонние пхпульки, они используют везде gzopen, а в моем пхп вместо gzopen только gzopen64
В гугле кроме отчаяния от таких как я ничего не нашел
Говорят это какой-то баг из-за сконпелированного пхп с large file support, причем аж с 2009 года
Ставил пхп из убунтореп, версия 5.5.9
А впрочем ладно, буду gzopen64 юзать
Закрой <?php (?>), дубинушка и форматирование в порядок приведи, читать невозможно.
Закрывать пхп для лошков
Не знаю, ошибки пропали после прогона через пхпформаттер. С чего бы это вдруг?
а пока по порядку: свойства должны быть private, ибо нехуй. $normal = $normal + 40 легко заменяется на $normal += 40, $overtyime = $overtime + 0 вообще вызывает когнитивный диссонанс, $overtime у тебя строкой может быть что ли?
Овертайм может быть пустой переменной, и в таблице не отображаться. Мне нужно, чтобы там был хотя бы ноль. Ну и я делал по лекалам уроков опа, там public стоит везде.
Форматтер создал тебе переменные овертайм и нормал перед циклами и присвоил им 0.
Ты не можешь писать $var = $var + 10, если переменная $var ещё не создана, тебе сначала нужно сделать $var = 0.
Из последнего. Есть php скрипт в utf8. На ней скажем if (i=1) ставлю header json и простое echo json_encode(...), по дефолту - обычный текст.
Но понадобился мне сторонний скрипт (тоже в utf8) перед выдачей json, я его подключаю в if (перед header) - и все перестает работать! Натурально, содержимое ответа в браузере НИКАК не меняется, строка верная, а json.parse ее не разбирает ни в какую.
Полдня возни, исключений и прихожу к тому, что без include все ок. В итоге ставлю формат подключаемого файла "без BOM" - и о блядские боги кодировок - все работает!
Это все к чему - решил поделится опытом и спросить - есть еще какие-нибудь идиотские проблемы на этой почве? Нервы я себе убил знатно. Тем более что кодировка основного файла была utf8 c BOM и все работало. Херня какая-то.
Форматтер ничего не создавал (да и как такое возможно, разве он может создавать переменные?), это я их там поставил, но только ошибки не пропали, пока я не отфарматировал код.
Это было нахер чудо )
Как люди вообще им пользуются?
Ничего не будет. Вуз даже самый наихуевейший будет отнимать у тебя слишком много времени, так что полноценно работать ты не сможешь.
Я учусь и полноценно работаю в веб-студии по 8 часов. Все в прядке, брат жив.
Привыкнешь, я так же сначала подумал.
Почему "#good" проходит на 54 строке? Я указал начало и конец слова. В \w не входит #.
http://ideone.com/JoUZoa
На ошибки посмотри.
Undefined variable: halfLenght, потому что у тебя $halflenght
И break; тут не нужен. Оно и так завершится.
У тебя если не палиндром, то все равно пишет палиндром.
Пруф http://ideone.com/9Wokhh
>кок-кок-кок замыкания пок
Ебать дибил. Их только даун осилить не сможет.
>даже не дочитал
Забавно заходить в ваш тред и проигрывать над потугами бедных обезьянок не могущих даже написать простенький роутер на пыхоговне. Фублядь.
Объясняй сука, что код на пике делает, иначе дно ебаное.
Ах да, оп - хуй.
> пишет черным по темно-серому
> пришел самоутверждаться в тред для начинающих
> принес какую-то простыню с быдлокодом под ноду
Ты в самом деле кодишь с такой подсветкой или ты специально аргументы функций черным покрасил чтобы никто ничего не понял? Быдлокод под ноду обрабатывает запросы и отдает какие-то файлы с учетом поддерживаемого сжатия (accept-encoding)
мимо
>в тред для начинающих
Ну не плачь, макак, ты сможешь еще набыдлокодить кучу говна, я знаю.
>>383913>>383914
>быдлокод
Так и скажите, что не осилили. Зачем ругаться?
>Ты в самом деле кодишь с такой подсветкой или ты специально аргументы функций черным покрасил чтобы никто ничего не понял?
Да, использую черную подсветку, ибо отчетливо видны аргументы. Рекомендую.
>обрабатывает запросы и отдает какие-то файлы с учетом поддерживаемого сжатия
Смотрите-ка, а это макака не так безнадежна.
Компонент,разбирающий URL запроса и определеяющий, кто (например какой контроллер и какая функция его) будет его обрабатывать.
В чем дело?
http://ideone.com/vwLY6A
> Зачем ругаться?
Я думал там что-то интересное\поехавшее будет типа пикрелейтед.
> Смотрите-ка, а это макака не так безнадежна.
Насмешил, содомит! Въеб\ЖС\Нода - тройной зашквар, а ты с таким кодом - эталонная въеб-макака. Хуже тебя только гвидоно-дауны. Сочувствую если тебе такое по работе писать приходится.
floor($lenght)/2 - floor округляет дробное число, поэтому floor($lenght/2)
Для for нет скобок {}
mb_strlen($text) - тебе нужна длина $stroka, а не $text
Цикл в твоем коде никакого смысла не несет, ведь у тебя сравниваются только 2 буквы в середине. После выхода из цикла.
>>383920
У меня во дворе за такие вопросы тебя бы на ноль поделили бы, пидор.
>>383919
>это быдлокод, не обязательно даже знать ноду. Подумай на досуге, почему
Т.е., то, что ты не осилил - быдлокод? Вот это обосрышь. Иди подотрись, лалка. Я этот код за минуту понял и на вторую переписал для таких как ты лахов, не умеющих в запутанный код.
>>383926
>Бля, как будто в 8 класс вернулся
А сейчас ты уже в девятом, да, петушок? Портфель на завтра собрал?
Хаскелепетушки ничем не отличаются от пыхомакак, разве, что тем, что первые просто хуиту пишут вместо кода.
>>383930
>интересное\поехавшее будет типа пикрелейтед
Матлаб? Проблевался.
Посмотрите на этого петушка с кучей глобальных переменных, считающего верхом мастерства костыль, который у JS вместо наследования.
ОП, есть одна картинка, которую пользователь заливает в качестве аватара посредством формы. Помимо это мне нужно, чтобы он смог выбрать нужную область в картинке, которая и будет аватаром, как это сделано в вк и моеммире, например.
Использую я эту библиотеку http://odyniec.net/projects/imgareaselec/. Но не суть.
Как я понимаю, мне нужно залить оригинал картинки на сервер, затем джаваскриптом при сабмите показывать этот оригинал, потом другой формой передавать координаты и ширину выбранную пользователем в экшн, который ее обрежет. Вот код http://pastebin.com/7iQS72tp.
Но тут возникает подводный камень, я не могу не использовать event.preventDefault(), потому что картинка понятное дело исчезнет, но и использовать не могу.
Как быть, может есть более удобный способ?
зачем делать 10 форм? Клади координаты в скрытые инпуты и пусть они субмитятся вместе с формой.
Алсо, код отстойный, моим глазам было больно на него смотреть.
Help wanted (PHP).
http://ideone.com/LZ6bUk
>с кучей глобальных переменных
>nodejs
Пик рилейтед.
>считающего верхом мастерства костыль, который у JS вместо наследования.
Что макак, удивлена, что можно программировать без черезжопного наследования в говно-пхп? Мои соболезнования.
> Матлаб? Проблевался.
Матлаб с Lua (аналог JS, кстати) перепутать - это надо уметь.
>>384000
> говно-пхп
Каким бы говном ни был пых, JS - червь пидор от мира ООП.
> черезжопного наследования
То-то жс-обезьяны уже 20+ либ реализующих модули\классы через хитро закрученные жопки понаписали, кол-во аналогичных велосипедов вообще исчислению не поддается. Прототипы - паллиативное ООП для нищих от мира динамико-дрисни, в котором так-то ни классов, ни интерфейсов, ни типов, ни черта одним словом.
>Lua
Нинужно.
>JS - червь пидор от мира ООП
Успешной реализующий С++ - парадигму ООП в полной мере. Если обезьянка не может написать класс даже на жс - то это блядь просто пиздец.
>же 20+ либ реализующих модули\классы понаписали
Нинужно. Экзотика для любителей пхп-лапши. О таких либах в обыденности помышляют только обезьянки перешедшие с говноязыков на божественный JS с удивлением обнаружившие, что НАСЛЕДОВАТЬ нельзя, затем бегущие в гугл искать +20 либ для реализации наследования., Смекаешь?
>Программа должна быть сделана так, чтобы исходные данные о сотрудниках можно было легко поменять.
Вот так http://ideone.com/ueUz0b достаточно легко?
> Успешной реализующий С++ - парадигму ООП в полной мере
С++ парадигма - это обобщённое метапрограммирование на полутипизированных макросах. Да и даже если бы не это, всё равно непонятно, как можно соотносить все эти виртуальные деструкторы с прототипным петушением.
Еще один неосилятор порвался. Иди питоноговна накати, питух.
>>384037
>все эти виртуальные деструкторы с прототипным петушением.
Я конечно осознаю, что для узкого мозга обезьянок в купе с байтопидорами слишком трудно понять концепцию прототипирования, особенно после всевозможного наследования где надо и не надо, но с другой стороны - наследование в жс - не особо нужно. Я бы сказал - нинужно. В крайних случая жжения подойдет и прототип. Смекаешь?
Какая-то неотдебаженная хуета у тебя на пике.
В одном случае sad() должна возвращать строго булево значение, а в другом - уже объект.
Переполнения стека тебе желаю!
var Ololo = function(){
return new Ololo;
}
Я вижу у тебя еще и детектор работает как и жс, то undefined, то неосилятор.
Картинка анрилейтед. Не знаю какой быдлокодер писал код на ней, но ты не первый кто заметил пиздец в функции.
>Переполнения стека тебе желаю!
И я тебе!
> Картинка анрилейтед. Не знаю какой быдлокодер писал код на ней, но ты не первый кто заметил пиздец в функции.
Просто в этом глубинный смысл. Перестать грустить не получится никогда.
> Нинужно. Экзотика для любителей пхп-лапши.
Лапши? Рор! Интересно как ты свой быдлокод с >>383948 и >>383911 ласково называешь?
> О таких либах в обыденности помышляют только обезьянки
То-то они даже в ноде есть: https://github.com/joyent/node/blob/master/lib/module.js
>>384042
> слишком трудно понять концепцию прототипирования
Ковыряние в хеш-таблицах (не нашел в объекте - посмотри в прототипе) - по-твоему сложно понять? Не смеши.
> наследование в жс - не особо нужно. Я бы сказал - нинужно.
Сначала "Успешной реализующий С++ - парадигму ООП в полной мере", теперь - пикрелейтед. Что ж разрабы божественной ноды все время в прототип-то лезут, окаянные!
https://github.com/joyent/node/search?q=prototype+path%3Alib
>Один из серверных языков программирования (PHP5, Java или Python)
Выходит они взаимозаменяемы? Или чем больше знаешь тем лучше?
Серверсайд принимает на вход строку и выдает другую. Это может сделать любой язык.
А как сравнить именно две одинаковые половины?
Никак не могу понять.
Тот же уебок с палиндромом.
>Просто в этом глубинный смысл. Перестать грустить не получится никогда.
Переходи на божественный JS и все получится
http://jsfiddle.net/pwe6uk1b/2/
У тебя там много мелких ошибок, например нету скобок в цикле и поэтому весь скрипт работает некорректно.
>return блеать один! это так сложно? объявить ебаный result и возвращать его?
Лолка, ну попробуй, объяви и возвращай (и код покажи, ололо). Пиздец, еще учит...
только мелкие ошибки? А сам алгоритм норм?
Мне же надо половины сравнить, а я лишь одну букву сравниваю, как сравнить половины?
Во первых скрипт при каждой итерации цикла будет выводить текст. Лучше изначально сделать переменную равную строке, допустим "палиндром", а в цикле, если какой-то символ не прошел проверку, то переменной будет присваиваться строка "не палиндром" и уже вне цикла мы выводим переменную и узнаем что в ней. Во вторых переменная, что проверяет символы с конца начнет проверять с 0ого символа, а потом с последнего (в твоем примере первые два значения у переменной будут "А, а") и будет отставать на 1 символ от переменной, которая проверяет с начала.
вот код умника. Что значит переменная с точкой и почему у меня она не работает
http://ideone.com/QrVm4z
Читал этот урок? Переменная с точкой это почти тот же инкремент, только для строк.
И кстати, этот код любую строку считает за палиндром, так что он не корректен.
надо развивать культуру дебага, он ведь даже не попытался вставить не палиндром, сценарий дебага такой же важный сценарий любого кода как и сам код
ну я о том же, просто это важный аспект, который почему то все недооценивают, и вот как бы наглядный пример
>быдлокод
>быдлокод
>быдлокод
Тебя заклинило там? Объясни мне чем код со второго пика плох, иначе макак-простой.
>То-то они даже в ноде есть:
Но ведь речь шла о классах, зачем ты так? Нормально же общались...(((
>по-твоему сложно понять? Не смеши.
Это сложно для пхп-макак и прочих обезьянок.
>разрабы божественной ноды все время в прототип-то лезут, окаянные!
Как что-то плохое.
Все никак не доделаю - http://jsbin.com/nunifubuqido/1/edit. Опять ошибка. Как можно по шагам посмотреть ход программы? Чтобы понять, как вознкиает ошибка. Я правильно контекст объекта в makeAdditive записал?
>Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).
Дробное значение в пикселях?
>Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.
Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.
>Не надо сохранять тут все свойства, надо только анимируемые.
Дак я только их и храню. Тебя может комментарии ввели в заблуждение?
>вместо setInterval надо использовать requestAnimationFrame
Вот за это спасибо, не знал про такую плюшку.
Вот впилил эту плюшку http://jsfiddle.net/xcLq3d48/3/ Есть пока только св-ва в пикселях, это можно не комментировать.
>Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).
Дробное значение в пикселях?
>Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.
Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.
>Не надо сохранять тут все свойства, надо только анимируемые.
Дак я только их и храню. Тебя может комментарии ввели в заблуждение?
>вместо setInterval надо использовать requestAnimationFrame
Вот за это спасибо, не знал про такую плюшку.
Вот впилил эту плюшку http://jsfiddle.net/xcLq3d48/3/ Есть пока только св-ва в пикселях, это можно не комментировать.
>Округлять нужно перед записью в CSS (и то, если подумать, браузеры поддерживают дробные значения, может и не надо вообще округлять).
Дробное значение в пикселях?
>Я думаю, лучше явно хранить начальное и конечное значение − и вычислять промежуточное между ними — а то труднее становится понять логику кода.
Я храню начальное и разницу между начальным и конечным значениями. Ведь от разницы легко получить процент, не нужно каждый раз ее высчитывать.
>Не надо сохранять тут все свойства, надо только анимируемые.
Дак я только их и храню. Тебя может комментарии ввели в заблуждение?
>вместо setInterval надо использовать requestAnimationFrame
Вот за это спасибо, не знал про такую плюшку.
Вот впилил эту плюшку http://jsfiddle.net/xcLq3d48/3/ Есть пока только св-ва в пикселях, это можно не комментировать.
дебаг использовать, я вот в нетбинсе юзаю
Оп, вроде разделяет на нужные составляющие. Но что дальше делать я пока не придумал (но попытался).
Благодаря .parent#some-id мне пришлось немного потрудиться. Я вот лично не встречал, чтобы кто-нибудь писал подобным образом. Ведь если есть id, то и уточнять классом не имеет смысла.
И да, куда ты пропал?
А что четвертое не стал делать? Полезно же.
Он наверно спрашивал как сделать чтобы при выборе значения в первом обновлялся второй селект.
>>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, так как упор тут не на них.
Он наверно спрашивал как сделать чтобы при выборе значения в первом обновлялся второй селект.
>>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, так как упор тут не на них.
Надо 0 присваивать в начале чтобы не был никогда пустой строкой. Если переменная может быть и строкой и числом — это бардак.
> Ну и я делал по лекалам уроков опа, там public стоит везде.
да, это верно, не слушай того анона, а в следующей задаче переходи на private/protected. Это так называемая инкапсуляция, когда прямой доступ к свойству имеет только сам класс, а не вся программа. Это делает код более надежным, а классы менее связанными друг с другом (то есть один класс не лезет внутрь другого, а лишь вызвает разрешенные методы). Инкапсуляция особенно важна когда код станет большим и там будет не 1, а сотни и тысячи классов — в таком объеме без нее никак.
>>383788
В начале мы изучаем другие вещи, вообще учим пользоваться классами, а только потом переходим к инкапсуляции.
> исходные данные о сотрудниках, которые можно изменять это ведь их количество в каждом департаменте?
Ну да, их число и тип. Но не только это. Надо, чтобы например можно было легко добавить новые типы сотрудников или скажем для менеджеров поменять формулу по которой рассчитывается зарплата (это еще называется бизнес-логика, и без правильного подхода программа со сложной бизнес-логикой быстро превращается в лапшу из вложенных 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
Жизнь боль
> исходные данные о сотрудниках, которые можно изменять это ведь их количество в каждом департаменте?
Ну да, их число и тип. Но не только это. Надо, чтобы например можно было легко добавить новые типы сотрудников или скажем для менеджеров поменять формулу по которой рассчитывается зарплата (это еще называется бизнес-логика, и без правильного подхода программа со сложной бизнес-логикой быстро превращается в лапшу из вложенных 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
Жизнь боль
Нет, я вроде бы инженер по специальности. Кстати, я сейчас подумал, нас учили не так и плохо. На том же Хабре недавно был пост от тян (а до него другие посты), про то какое плохое сейчас образование, преподы сами ничего не знают, и т.д., я сейчас сравниваю, у нас вроде не все так плохо было. Из того, что я помню:
- поставили в универе линук
- изучали Паскаль под 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/ Это все Москва, в Питере вроде в ИТМО что-то есть.
Ну и вообще, по идее, ВУЗ готовит будущих научных сотрудников, инженеров, в общем людей более высокой квалификации. Тех, кто будет например строить новый коллайдер, изучать свойства наноматериалов или запускать ракеты в космос. Программирование, тем более под веб, по идее должно преподаваться в техникумах, колледжах, училищях, вечерних школах — так как это сугубо прикладные знания. ВУЗ задействовать для этого — это то же самое, что открыть там факультет подготовки кассиров для макдональдса.
В общем, научат ли тебя программировать в вузе? Не факт. Стоит ли туда идти? Конечно да.
> поступить в левый вуз
Если там нет ничего связанного с программированием (или хотя бы математикой/физикой), то это будет очень уныло и надоест тебе.
Нет, я вроде бы инженер по специальности. Кстати, я сейчас подумал, нас учили не так и плохо. На том же Хабре недавно был пост от тян (а до него другие посты), про то какое плохое сейчас образование, преподы сами ничего не знают, и т.д., я сейчас сравниваю, у нас вроде не все так плохо было. Из того, что я помню:
- поставили в универе линук
- изучали Паскаль под 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/ Это все Москва, в Питере вроде в ИТМО что-то есть.
Ну и вообще, по идее, ВУЗ готовит будущих научных сотрудников, инженеров, в общем людей более высокой квалификации. Тех, кто будет например строить новый коллайдер, изучать свойства наноматериалов или запускать ракеты в космос. Программирование, тем более под веб, по идее должно преподаваться в техникумах, колледжах, училищях, вечерних школах — так как это сугубо прикладные знания. ВУЗ задействовать для этого — это то же самое, что открыть там факультет подготовки кассиров для макдональдса.
В общем, научат ли тебя программировать в вузе? Не факт. Стоит ли туда идти? Конечно да.
> поступить в левый вуз
Если там нет ничего связанного с программированием (или хотя бы математикой/физикой), то это будет очень уныло и надоест тебе.
> 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 )
Я думаю, для начала этого хватит. Разговаривать с невоспитанными людьми я не собираюсь, так что если у тебя есть желание научиться писать нормально, то поменяй манеру разговора и притворись другим аноном (ну и не пость код картинкой). Другому, воспитанному анону, я бы и подсказку дал и задачку придумал.
> 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 )
Я думаю, для начала этого хватит. Разговаривать с невоспитанными людьми я не собираюсь, так что если у тебя есть желание научиться писать нормально, то поменяй манеру разговора и притворись другим аноном (ну и не пость код картинкой). Другому, воспитанному анону, я бы и подсказку дал и задачку придумал.
Луноликий ради нашего же блага запрещает нам, простым верноподданным, заходить на этот опасный сайт. Пости в следующий раз код на другой пастебин, не отравленный зловредными чужеземными идеями.
>>383989
Имена переменных надо писать как helloWorld а не hello_1. Имена функция пишутся с маленькой буквы. Имена должны быть содержательными и осмысленными.
Если тебе надо найти значения в массиве, которые уникальны, то это можно написать в одну строчку через array_diff/array_intersect/array_merge (упс, анон >>383991 написал). Плюс, ты называешь переменные в такой манере что код невозможно понять (сидеть расшифровывать что они значат мне некогда).
Не знаю, зачем тут ООП ради 2 строчек, по моему над тобой шутят. Спроси, а можно ли лучше с применением функциональных метапарадигм и теории категорий сделать на Хаскелле. Если надо ООП, можешь сделать класс Util с одним статическим методом.
Если хочешь понять ООП, пройди мой урок по ООП — у других анонов это получается.
>>384000
Твои переменные по сути равносильны глобальным, они плохи потому что доступны в слишком большой области кода, больше чем требуется.
>>384032
>Успешной реализующий С++ - парадигму ООП в полной мере.
На костылях
>>384042
Школьник, уходи, ты скучный. ООП применяют с 80-х годов, и Майкрософт, и Эппл, и Яндекс, и Гугл, а ты гений с новыми парадигмами? По моему мнению и судя по манере письма ты просто школьник пересидевший в /pr
>>384034
Надо чтобы можно было менять число и состав сотрудников. добавлять новые профессии, менять правила расчета зарплат для каждой из них.
Твой код не верен. Смотри, в ООП задачах надо вначале опеделить:
- какие у нас будут сущности и какие классы их будут представлять (в этой задаче: сотрудник, департамент)
- какие у них есть свойства (у департамента название, у сотрудника ранг)
- какие у них нужны методы (нужно считать зарплату и кофе, нужны соотв. методы)
- как они связаны (сотрудник работает в департаменте)
Исходя из этого ты пишешь классы. А потом уже использующий их код. Так что начни с ответа на эти вопросы.
В твоем коде все слишком сложно: Департамент есть, а класса Сотрудник нет. Ты представляешь, какой у тебя будет сложный код расчета зрплаты? Если нет то попробуй напиши его.
Луноликий ради нашего же блага запрещает нам, простым верноподданным, заходить на этот опасный сайт. Пости в следующий раз код на другой пастебин, не отравленный зловредными чужеземными идеями.
>>383989
Имена переменных надо писать как helloWorld а не hello_1. Имена функция пишутся с маленькой буквы. Имена должны быть содержательными и осмысленными.
Если тебе надо найти значения в массиве, которые уникальны, то это можно написать в одну строчку через array_diff/array_intersect/array_merge (упс, анон >>383991 написал). Плюс, ты называешь переменные в такой манере что код невозможно понять (сидеть расшифровывать что они значат мне некогда).
Не знаю, зачем тут ООП ради 2 строчек, по моему над тобой шутят. Спроси, а можно ли лучше с применением функциональных метапарадигм и теории категорий сделать на Хаскелле. Если надо ООП, можешь сделать класс Util с одним статическим методом.
Если хочешь понять ООП, пройди мой урок по ООП — у других анонов это получается.
>>384000
Твои переменные по сути равносильны глобальным, они плохи потому что доступны в слишком большой области кода, больше чем требуется.
>>384032
>Успешной реализующий С++ - парадигму ООП в полной мере.
На костылях
>>384042
Школьник, уходи, ты скучный. ООП применяют с 80-х годов, и Майкрософт, и Эппл, и Яндекс, и Гугл, а ты гений с новыми парадигмами? По моему мнению и судя по манере письма ты просто школьник пересидевший в /pr
>>384034
Надо чтобы можно было менять число и состав сотрудников. добавлять новые профессии, менять правила расчета зарплат для каждой из них.
Твой код не верен. Смотри, в ООП задачах надо вначале опеделить:
- какие у нас будут сущности и какие классы их будут представлять (в этой задаче: сотрудник, департамент)
- какие у них есть свойства (у департамента название, у сотрудника ранг)
- какие у них нужны методы (нужно считать зарплату и кофе, нужны соотв. методы)
- как они связаны (сотрудник работает в департаменте)
Исходя из этого ты пишешь классы. А потом уже использующий их код. Так что начни с ответа на эти вопросы.
В твоем коде все слишком сложно: Департамент есть, а класса Сотрудник нет. Ты представляешь, какой у тебя будет сложный код расчета зрплаты? Если нет то попробуй напиши его.
> не нужно
не осилил
>>384057
Да, но у них разные особенности. Например, на Яве писать дольше зато код надежнее и серьезнее. Питон неплох, но не так распространен.
>>384069
Исправь мелкие ошибки. Проверять так: берем по одной букве с краев, сравниваем, если не равны — не палиндром. Затем следующие 2 буквы. И так пока не дойдем до середины.
>>384070
Там по идее должно быть не if (isSad()) а while (isSad() && age < lifespan) ...
>>384077
Чтобы делать повторяющиеся действия (сравнивать буквы не один, а несколько раз) придуман цикл. Цикл for вполне подойдет.
> а я лишь одну букву сравниваю, как сравнить половины?
По одной букве, первую и последнюю, вторую и предпоследнюю и так далее.
>>384080
$a .= $b равносильно $a = $a . $b то есть к строке в конец приклеиваем другую строку и сохраняем назад в переменную.
>>384088
Не сценарий дебага (дебаггинг = поиск и исправление ошибок), а тестирование/QA. Проверка работоспособности это тестирование.
>>384110
Для неопытного программиста нормально. Для того и существуют сенпаи миддлы и сеньоры, чтобы в нужный момент в правильную сторону направить.
> не нужно
не осилил
>>384057
Да, но у них разные особенности. Например, на Яве писать дольше зато код надежнее и серьезнее. Питон неплох, но не так распространен.
>>384069
Исправь мелкие ошибки. Проверять так: берем по одной букве с краев, сравниваем, если не равны — не палиндром. Затем следующие 2 буквы. И так пока не дойдем до середины.
>>384070
Там по идее должно быть не if (isSad()) а while (isSad() && age < lifespan) ...
>>384077
Чтобы делать повторяющиеся действия (сравнивать буквы не один, а несколько раз) придуман цикл. Цикл for вполне подойдет.
> а я лишь одну букву сравниваю, как сравнить половины?
По одной букве, первую и последнюю, вторую и предпоследнюю и так далее.
>>384080
$a .= $b равносильно $a = $a . $b то есть к строке в конец приклеиваем другую строку и сохраняем назад в переменную.
>>384088
Не сценарий дебага (дебаггинг = поиск и исправление ошибок), а тестирование/QA. Проверка работоспособности это тестирование.
>>384110
Для неопытного программиста нормально. Для того и существуют сенпаи миддлы и сеньоры, чтобы в нужный момент в правильную сторону направить.
Посмотреть код по шагам (и значения всех переменных в этот момент) можно отладчиком. Более того, когда код остановлен можно даже простые выражения писать в консольке и менять значения переменных.
Отладчик встроен в Хром,ФФ, Сафари, ИЕ, Оперу. Вызывается через 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
Обязательно изучи все это.
Посмотреть код по шагам (и значения всех переменных в этот момент) можно отладчиком. Более того, когда код остановлен можно даже простые выражения писать в консольке и менять значения переменных.
Отладчик встроен в Хром,ФФ, Сафари, ИЕ, Оперу. Вызывается через 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
Обязательно изучи все это.
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 и работать с этим массивом.
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 и работать с этим массивом.
> this.additives !== {}
Это бессмысленная проверка. Объекты (включая массивы, функции, и другие объекты) сравниваются по идентичности, то есть тому, что это ссылка на один и тот же объект.
{} — это создание нового пустого объекта потому всегда {} === {} дает false. Также как и function () {} === function () {} и [] === []
> for (var nameAddi in this.additives) {
Почему объект? Я же вроде советовал, что для списков логичнее всего использовать массив. Список добавок — это массив.
> Я правильно контекст объекта в makeAdditive записал?
Лучше сделать checkAdditive обычным методом то есть объявит как H.prototype.checkAdditive = ... и значение this передастся само собой.
Не удаляя .# еще проще получится, но когда-то все равно придется от них избавляться? Вообще на самом деле это просто набросок. Я после написания всего кода меняю его структуру.
>Можно же просто /\./ наверно?
new RegExp нужен в динамике, как тут например. Разве нет? В интернетах так пишут.
А регулярка /smth/ юзается, когда ты присваиваешь ее чему-либо и она еще будет нужна. Как например я пишу match(/[a-zA-Z]+/), то регулярка становится аргументом, и она еще будет нужна внутри функции match.
Я тут вычитал http://javascript.ru/RegExp
> Обе записи эквивалентны. Первый вариант (new RegExp) может понадобится, если вам придется генерировать регулярное выражение динамически.
Я ошибаюсь?
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];
}
можно записать короче?
> если вам придется генерировать регулярное выражение динамически.
Это значит что ты напимер в регулярку хочешь вставить что-то из переменной − тогда надо new RegExp
Это слишком просто, настоящие ценители извращений пользуются только регулярками
может у тебя и кривой код, но как ты тут описал, так и надо делать, что тебе не нравится?
document.getElementById(id)
Не то, чтобы красивше, но меньше лишнего. Хотя некоторые это и считают красотой.
obj.func1 = function () { alert ( '1' ); }
obj.func2 = function () { alert ( '2' ); }
...
Нет, речь о том, как добавить собственно эту '1' внутрь создаваямого метода, ведь если я сделаю цикл
for (var i=0;i<10;i++) {
obj.['func'+id] = function () { alert (i); }
}
я почувствую всю мощь замыканий и получу кучу alert (10) , не?
Он имел в виду, что "хочет найти его (при помощи) jquery", или что "хочет найти его jquery (обьект)". Первое как-то более вероятнее. Во втором случае можно сделать $(document.getElementById(id)).
>>384321
Это в большинстве вводных туториалов по жс есть. Можешь через with, а можешь
for (var i=0;i<10;i++) {
(function (i){obj.['func'+id] = function () { alert (i); }})(i);
}
Уверен, что да, но, думаю, ненамного. Во втором случае конкатенация и диспатч внутри jq по строке-селектору, который в конечном итоге приведёт к вызову того же document.getElementById, а в первом внутри jq сразу увидит, что передана не строка, а элемент, и сразу обернёт враппером.
посоны, я просто хотел уточнить, все так делают или можно там не знаю, решетку опустить, как то еще извернуться, без объединения строк. ок, норм так норм.
>>384325
там где я читал js - with предлагали засунуть туда же, где eval.
А вот размыкания замыкания я там пропустил как то. Что мы делаем в твоем коде? Как я понимаю весь цимес в (...)(i). В упор не помню, что это делает, в той каше из двух книжек по php и js за последнюю неделю.
его код 10 раз вызывает функцию с параметром i, которая создает obj свойство 'func'+id в котором находится функция, которая через замыкание получает i и вызывает alert
И все равно не пойму. Так же мой
function () { alert (i);
все равно будет замкнут, но уже не на var i, a na параметр функции?
у него там замыкание идет от внешней функции, а не от цикла, сюда иди http://javascript.ru/basic/closure, в конце там написано почему это
Ты правильно чувствуешь.
Надо не передавать в функцию id, а передавать сразу $('#abc') или хотя бы '#abc' — тогда и писать уродливое + id не придется. Если никак, то сделать функцию byId(id) и вызывать ее.
>>384318
Тебе это не надо. ты неправильно что-то делаешь. Функции никто не создает динамически, они всегда заранее известны и их число фиксированно.
В твоем случае можно сделать одну функцию func (number)
>>384325
Вы не в ту сторону мыслите. Не надо в цикле создавать методы с номерами (и переменные тоже).
>>384325
> Можешь через with
Как это поможет? Никак. Плюс, with вроде запрещен в строгом режиме, ибо открывает слишком много возможностей для быдлокодинга.
> не передавать в функцию id, а передавать сразу $('#abc') или хотя бы '#abc'
> Функции никто не создает динамически, они всегда заранее известны и их число фиксированно.
Ясно.
Похоже, ты никогда ничего серьёзного не писал на жс. Замыкания в качестве колбеков на события нужны повсеместно.
ты не по делу ляпнул, никто и не говорил что замыкания не нужны, в том числе, конечно же, колбэкам
Вот же:
> Не надо в цикле создавать методы с номерами (и переменные тоже).
"С номерами" - это, видимо, про замыкания на счётчик цикла, "с переменными" - на всё остальное. В случае, если связывания, на которые происходит замыкание, не являются семантически подмножеством состояния обьекта, к которому эти методы цепляются, то очень даже нужны. В иных случаях можно заменить вхождения таких переменных x внутри тела функции на this.x, а нужные штуки вбросить в сам обьект понятным образом. Кстати, озвученное предложение вместо замыкания вынести связывания на уровень параметров функции - это вообще полная лажа. Не существует ситуаций, где эта штука могла бы каким-то осмысленным образом заменить замыкание.
я своим скудной херотой вместо мозга не могу даже представить, когда это может понадобиться, больше похоже на безумный костыль с диким дублированием кода
Методы, замкнутые на что-нибудь? Например, ты пишешь очередное ёба-ооп поверх жс, и твой 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]);
...
}
Если тебе надо повесить событие на все элементы списка, то не надо лепить циклы, достаточно повесить один обработчик на сам список, так как события всплывают. Если тебе надо еще что-то сделать, достаточно сделать один метод и передавать ему разные аргументы.
>>384373
Скорее он изобретает велосипед от недостатка знаний и опыта. Так же как не знающие про массивы люди лепят переменные var1, var2 и так далее.
Алсо, твоя эта «возможность вешать after/before» по моему, лучше всего подходит разве что для запутывания кода. Тем более что у тебя делается не создание нового прокси-класса наследника, а замена наживую — чистое наркоманство.
>>384367
Да, я все правильно написал нет смысла делать 10 однотипных методов когда можно сделать один, и нет смысла делать 10 однотипных переменных когда есть массивы.
Ты не понял о чем я говорил. С помощью substr я уже все, что нужно сделал. Оп хочет, чтобы я не обрезал #.
http://ideone.com/A2DcpL
Оп, что скажешь?
>Твои переменные глобальны
>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
Бампаны, фиксируйте обосрышь этого ОП-петуха.
>На костылях
Ниасилил?(((
>а ты гений с новыми парадигмами?
Быстро и решительно ссылку на пост, где я базарил за новые парадигмы, иначе ты обезьян простой.
Сделай, чтобы цикл при каждой итерации выводил значение обоих переменных $symbol которых ты сравниваешь между собой, и увидишь в чем дело.
получит он разрыв шаблона
Хуй Валерьевич, я вас попрошу.
А вообще я динамически генерировал контекстное меню для элемента по данным из дб, и для колбэков созданых пунктов нужно было создавать методы, которые естественно должны содержать некий id пункта меню. Можно было конечно в метод засунуть ссылку на внешнюю функцию, но зачем? Потом в нее еще this передавать, а так нагенерировал методов и ок.
Пиздец, ты делаешь даже более стрёмную хуйню, чем наши самые смелые предположения. Во-первых, что уже было сказано, для всех однотипных элементов внутри контейнеров (строки в таблице, ноды в дереве, пункты в меню) одно событие нужно обрабатывать одним обработчиком для всех элементов, а не набором по обработчику на элемент, во-вторых, нахера для колбеков создавать методы? Надо было повесить один хендлер на само меню, и внутри идентифицировать конкретный кликнутый (или что там) элемень, вытаскивая нужную информацию через this.
http://ideone.com/FUQGtH
>>384584
http://ru2.php.net/manual/ru/function.preg-replace.php
2 ой пример с массивом. Я так делал. Правда пунктуационные ошибки я не знаю как исправить.
Вообще странный регэксп, зачем писать [а-я]жы[а-я], когда можно просто написать (жи). Тем более что в твоем варианте он находит ошибку только в середине слова, но не в начале.
>>>>384589
Я делал на основе другой задачи, там нужно было вывести слово, при поиске жы соответственно возвращало это самое жы, и да, он найдёт не только в середине, там ещё звёздочка стоит.
Анончики, нам с другом нужно в PHP научиться за джва года два месяца. Сам - верстальщик, друган имеет некие познания в С#.
Левел, которого нужно достичь - чтоб можно было минимальные заказы на фрилансах.
можно задрочить за 2 месяца, если в день заниматься по 7-8 часов.Сам за 2.5 месяца освоил,занимаясь 4-5 часов в день. Все реально, главное практики больше - книжек меньше!
Напоминаю всем итт про эпичный обосрышь ОП-петуха.
Либо: <li onclick="handleMenuClick(<?= $id ?>)">Пункт меню</li>
Либо: <li data-id="12345">Пункт меню</li> и вешаем один обработчик на ul
ОП
О, я вижу ты разбил код на функции. Так гораздо лучше читается.
> 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 в одном селекторе, можно бы сразу возвращать пустое множество.
Насчет точек и решеток, да, в массиве с результатом разбора их сохранять не надо.
О, я вижу ты разбил код на функции. Так гораздо лучше читается.
> 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 в одном селекторе, можно бы сразу возвращать пустое множество.
Насчет точек и решеток, да, в массиве с результатом разбора их сохранять не надо.
Если файлов тысяча, но мне нужна автоматизация.
Ну или нет, вот как лучше: открыты все эти тысячи файлов .html. Нажимаю на забинденую комбинацию и запускаю файл с помощью run_macro_file, а там уже происходит поиск по регуляркам и замена нужных строк во всех файлах. Так реально?
Или лучше не извращаться, а заюзать что-нибудь более подходящее? Что подойдет для автоматизации? Запись шагов и их повторное выполнение.
Очень надо. Вручную просто утомляет.
Нет, нет, ОП хочет чтобы обрезал. Видимо,я что-то плохо объяснил. Решетка не нужна так как из названия поля «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 и русские буквы, но в плане использования там все аналогично.
Ну и не сдавайся, продолжай решать задачу дальше — рано или поздно все получится.
Нет, нет, ОП хочет чтобы обрезал. Видимо,я что-то плохо объяснил. Решетка не нужна так как из названия поля «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 и русские буквы, но в плане использования там все аналогично.
Ну и не сдавайся, продолжай решать задачу дальше — рано или поздно все получится.
Кстати, тестировать регулярку удобно на сайтах вроде http://regex101.com/ — только помни что там бекслеш не удваивается и пишется один раз. То есть в Php ты пишешь
$re = "/\\.\\\\/"; (ищет точку, за ней бекслеш)
А там просто \.\\
Исправление ошибок обычно делают через preg_replace, то есть например заменяем жы|шы на жи|ши.
Запятая, точка с запятой, двоеточие, воскл. знак - не спецсимволы, их не обязательно экранировать. Полный список спецсимволов вроде бы был в уроке.
> [а-я]
Буква ё в юникоде идет отдельно от остальных (посмотри сам: http://unicode-table.com/ru/#cyrillic ) потому ее надо указывать дополнительно: [а-яё] . Ну и я бы добавил еще латинницу, вдруг там встретится английское слово.
Правда, это не решает проблемы, а что если в тексте встретится арабское или грузинское слово? Если такая задача есть, то можно использовать специальную комбинацию, которая значит «любая буква любого языка»: \\pL
Подробнее: http://php.net/manual/ru/regexp.reference.unicode.php (в этой задаче это не обязательно, так что можешь просто глянуть чтобы знать что такая возможность есть).
> ([а-я]\\,)|([а-я]\\;)|([а-я]\\!)
Вместо того, чтобы копипастить, можно написать:
[а-яё][,;!]
> ([а-я]жы[а-я])|([а-я]шы[а-я])
> (зделал)|(зделаю)|(зделан)
То же самое, можно сгруппировать вместе повторяющееся
Ну и надо улучшить вывод ошибок. Сейчас трудно понять, где именно и какая ошибка. Надо либо выводить списком:
- неприавльно: жизнь
- неприавльно: ...
Либо подсвечивать в тексте:
(Жы)знь боль( но) в ней намек
Кстати, тестировать регулярку удобно на сайтах вроде http://regex101.com/ — только помни что там бекслеш не удваивается и пишется один раз. То есть в Php ты пишешь
$re = "/\\.\\\\/"; (ищет точку, за ней бекслеш)
А там просто \.\\
Исправление ошибок обычно делают через preg_replace, то есть например заменяем жы|шы на жи|ши.
Запятая, точка с запятой, двоеточие, воскл. знак - не спецсимволы, их не обязательно экранировать. Полный список спецсимволов вроде бы был в уроке.
> [а-я]
Буква ё в юникоде идет отдельно от остальных (посмотри сам: http://unicode-table.com/ru/#cyrillic ) потому ее надо указывать дополнительно: [а-яё] . Ну и я бы добавил еще латинницу, вдруг там встретится английское слово.
Правда, это не решает проблемы, а что если в тексте встретится арабское или грузинское слово? Если такая задача есть, то можно использовать специальную комбинацию, которая значит «любая буква любого языка»: \\pL
Подробнее: http://php.net/manual/ru/regexp.reference.unicode.php (в этой задаче это не обязательно, так что можешь просто глянуть чтобы знать что такая возможность есть).
> ([а-я]\\,)|([а-я]\\;)|([а-я]\\!)
Вместо того, чтобы копипастить, можно написать:
[а-яё][,;!]
> ([а-я]жы[а-я])|([а-я]шы[а-я])
> (зделал)|(зделаю)|(зделан)
То же самое, можно сгруппировать вместе повторяющееся
Ну и надо улучшить вывод ошибок. Сейчас трудно понять, где именно и какая ошибка. Надо либо выводить списком:
- неприавльно: жизнь
- неприавльно: ...
Либо подсвечивать в тексте:
(Жы)знь боль( но) в ней намек
> Правда пунктуационные ошибки я не знаю как исправить.
Заменяем
(а|но) слово
на
(а|но), слово
Алсо, прочти в мануале этот пункт:
> replacement может содержать ссылки вида \\n, либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней.
И далее.
>>384599
> (?<!, )
Тут заложен ровно один пробел, лучше бы любое число.
«зделаем вместе» не найдет
Не найдет отстутвие пробела после точки.
Но вообще, неплохо.
>>384635
За 2 месяца аноны только основы языка и какие-то простые вещи осваивают, но они правда и не целыми днями изучают. Насчет фриланса, вам тогда лучше в строну CMS вроде Wordpress, Drupal, Джумла, интернет-магазины смотреть, поставить эти CMS, выучить популярные плагины к ним, попробовать сделать тему или плагин.
В прицнипе, реально, но сложно.
И имей в виду, заказы на фрилансе - дело не очень веселое, долго их ищешь, долго все обсуждаешь, делаешь, потом внезапно оказывается что в о чем-то еще не догаваривались. Заказчики бывают всякие. Искать постоянную удаленную работу или оффлайновую работы по моему проще.
Что насчет моего учебника? Он хорош тем что рассчитан на людей с нулевыми знаниями и все объясняет с самого начала. Пройдешь — смогу дать более сложное задание, сделать файлообменник например, хотя в случае ориентации на фриланс лучше будет наверно задание разобраться с какой-нибудь CMS, это мы тоже можем придумать, сделаешь блог на вордпрессе какой-нибудь.
>>384651
Google Driven Development рождает быдлокодеров, имей в виду.
>>384724
Для тысяч файлов я бы смотрел не в сторону макросов, а написал бы скрипт например на том же PHP.
Если надо в тысяче файлов сделать поиск/замену по регулярке - это в саблайме есть (Find in Files), и довольно удобно.
> Что подойдет для автоматизации? Запись шагов и их повторное выполнение.
Скрипт, запусакаемый из командной строки.
> Правда пунктуационные ошибки я не знаю как исправить.
Заменяем
(а|но) слово
на
(а|но), слово
Алсо, прочти в мануале этот пункт:
> replacement может содержать ссылки вида \\n, либо (начиная с PHP 4.0.4) $n, причем последний вариант предпочтительней.
И далее.
>>384599
> (?<!, )
Тут заложен ровно один пробел, лучше бы любое число.
«зделаем вместе» не найдет
Не найдет отстутвие пробела после точки.
Но вообще, неплохо.
>>384635
За 2 месяца аноны только основы языка и какие-то простые вещи осваивают, но они правда и не целыми днями изучают. Насчет фриланса, вам тогда лучше в строну CMS вроде Wordpress, Drupal, Джумла, интернет-магазины смотреть, поставить эти CMS, выучить популярные плагины к ним, попробовать сделать тему или плагин.
В прицнипе, реально, но сложно.
И имей в виду, заказы на фрилансе - дело не очень веселое, долго их ищешь, долго все обсуждаешь, делаешь, потом внезапно оказывается что в о чем-то еще не догаваривались. Заказчики бывают всякие. Искать постоянную удаленную работу или оффлайновую работы по моему проще.
Что насчет моего учебника? Он хорош тем что рассчитан на людей с нулевыми знаниями и все объясняет с самого начала. Пройдешь — смогу дать более сложное задание, сделать файлообменник например, хотя в случае ориентации на фриланс лучше будет наверно задание разобраться с какой-нибудь CMS, это мы тоже можем придумать, сделаешь блог на вордпрессе какой-нибудь.
>>384651
Google Driven Development рождает быдлокодеров, имей в виду.
>>384724
Для тысяч файлов я бы смотрел не в сторону макросов, а написал бы скрипт например на том же PHP.
Если надо в тысяче файлов сделать поиск/замену по регулярке - это в саблайме есть (Find in Files), и довольно удобно.
> Что подойдет для автоматизации? Запись шагов и их повторное выполнение.
Скрипт, запусакаемый из командной строки.
Ок
Фигурные скобки не обязательны, они используются чтобы вставить сложное выражение или отделить переменную от слова: {$x}kg
Мануал: http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
>>384738
Знаю, но поверхностно, Яву, Си++, немного понимаю Руби/Питон и может еще что-то. на bash умею скрипты писать.
> И почему, кстати, трип перестал использовать?
Глючное тут все какое-то.
Как это на практике делается?
Есть куча файлов .html, есть html шаблон. Из этого шаблона берется первая строчка и вставляется в нужное место в тысячи .html файлов, потом вторая и т.д. Я прошел все уроки по пхп у тебя кроме кошек-мышек (не доделал). Но на работе нужна автоматизация. Давай я решу эту проблему, как твое задание, а ты проконтролируешь. А пока я не знаю с чего начать.
С чего же начать?
Каков принцип работы примерно, а я дальше подумаю и погуглю?
> Тут заложен ровно один пробел, лучше бы любое число.
> «зделаем вместе» не найдет
> Не найдет отстутвие пробела после точки.
Задание-то перечитай или ты на ходу правила выдумываешь?
>>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
Ладно, раз нет так нет. Надо будет потом исправить текст задания.
>>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
Ладно, раз нет так нет. Надо будет потом исправить текст задания.
>Это у меня одного такое, если переключаться альт-табом, то потом при вводе текста появляется и закрывается окно ответа и пытается отправиться форма?
У меня тоже самое
Вот тогда другая ошибка: http://ideone.com/IJdDTu
>>384777
Нельзя писать $1, $ пишется перед переменными, а числа пишутся как есть.
Нельзя писать mt_rand = . Знак равно использую когда ты хочешь что=-то сохранить в переменную:
$x = 1;
mt_rand — это не переменная. Это функция, то есть штука которая принимает какие-то данные на вход (в скобках) и возвращает что-то в ответ, в данном случае случайное число. И для вызова функции просто пиши mt_rand(1, 6);
При этом если ты просто ее вызовешь, то ничего не произойдет — число сгенерируется и будет выкинуто. Его надо либо сохранить в переменную:
$x = mt_rand....
Либо вывести на экран:
echo mt_rand....
Хуйня снова какая-то. Просто скинь как правильно. По идее должно быть число от 1 до 6.
mt_rand внутри скобок это просто слово. Нужно перед этим присвоить значение возвращаемое функцией какой-нибудь переменной, а уже затем выводить её через эхо:
$var=mt_rand(1,6);
echo $var;
Либо выводить сразу значение возвращаемой функции
echo mt_rand(1,6);
Ты вызвал функцию и сгенерировал случайное число, но ничего с ним не сделал, а просто выкинул. Надо сохранять в переменную через = или сразу выводить через echo. Перечитай мой пост выше.
На этот раз получилось.
Бля, какой-то хреновый сайт, я думал лучше будет.
Могли бы там хоть ссылку написать, по которому можно было перейти на решение.
Перейти на решение нельзя. Все задачи ты должен решить сам, иначе это не имеет никакого смысла. Проверить решение, можно вкинув ссылку в наш тред.
Ну хорошо файл-шаблон содержит, например (цифры - строки):
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 строчках, и т.д.
Это пример и все на самом деле сложнее.
А ты сам можешь внятно сформулировать правила замены и написать их в виде кода? Программа же думать не умеет, она делает ровно то, что написано.
Насчет обработки HTML-кода, есть 2 варианта, похуже (регулярки) и получше (DOM + Xpath).
Например, в случае с регулярками, ты можешь написать регулярку, которая будет заменять
<table...</table>
на
(то что написано в первой строке) + <table....</table>
Ты же изучал preg_replace и задачу про исправление ошибок в тексте? Тут аналогично.
Соответственно, с <tr> аналогично, ищем регуляркой все <tr>....</tr> и заменяем.
То, что ты привел в примере, вполне реально сделать только на регулярках. Но для более сложных вещей может их мощи и не хватит, нужен будет DOM.
Для тысячи файлов скрипт написать скорее всего будет быстрее, чем руками сделать.
Вообще, конечно парсить HTML регулярками дурная идея и надо бы использовать ДОМ + XPath, но ведь ты его не изучал (зря кстати) и наверно времени на это уже нет? Изучи тогда потом когда будет время, пригодится наверняка.
> не умеющих в запутанный код
Звучит примерно как «не умеющих ковыряться по помойкам».
>Хаскелепетушки ничем не отличаются от пыхомакак, разве, что тем, что первые просто хуиту пишут вместо кода.
Слова пыхомакаки.
Буду на работе подробнее опишу, что нужно.
Там еще просто нужно искать товар по марке телефона в яндекс-маркете, парсить часть кода от туда и приводить в нужный вид.
А как делается умный парсинг? Который ищет в поисковике информацию, оценивает ее и выбирает то, что нужно. Далее парсит уже. Я знаю, что такое есть.
Ладно, спасибо.
> Там еще просто нужно искать товар по марке телефона в яндекс-маркете, парсить часть кода от туда и приводить в нужный вид.
Это будет сложно написать, тем более что яндекс банит ботов. А «парсить часть кода и приводить в нужный вид» - вполне реально. Тут опять же, надо использовать DOm/XPath, но если ты их не знаешь, придется костыли на регулярках делать.
> А как делается умный парсинг? Который ищет в поисковике информацию, оценивает ее и выбирает то, что нужно. Далее парсит уже.
Отправляется HTTP- запрос, аналогичный тому что браузер отправляет при заполнении формы, получается ответ в HTML или JSON и разбирается. Плюс, наверно всякие прокси используют чтобы не получить бан.
Очень популярный модуль, но почему-то о нем нет документации, как быть?
гуглил много, ничего нет. исхоный код уже читаю, но там запутано. не понятно, ведь очень популярный модуль
Если он популярный, он должен быть описан в блогах и статьях.
Я вижу это например:
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
Скудненько, но остальное наверняка очевидно из исходников. Их там не так и много.
Спасибо, все это прочел. Там к сожалению только о том, как устанавливать. А как его под себя настраивать и менять ничего, только исходники остается читать и задавать вопросы на стаковерфлоу.
DOM я знаю отчасти, я же делал аналог TinyDOM, который не доделал. Первое, что мне надо - спарсить код с определенных страниц яндекс-маркета, мной уже найденных.
Попробую с помощью XPath. Что почитать? Пошел гуглить.
Ну если знаешь то отлично. Загружаешь страницу в 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, но имей в виду, вручную надежнее. Однако расширение удобно использовать для отладки запросов).
Если будут вопросы, задавай.
Заметь, что там есть 2 синтаксиса: полный и сокращенный. Например, запись
//AAA/BBB[@id='t']
является сокращенной записью
/ancestor:AAA/child:BBB[attribute::id='t']
Но они абсолютно равноценны, это просто 2 способа написать одно и то же. Так что не удивляйся, увидев например список осей в мануале и сложные выражения через ::
B имей в виду, автоматизация поиска и получения данных из маркета может занять время, это не так просто, в частности из-за ограничений самого маркета. Может проще как-то разделить задачу, например поиск информации вручную, а вставка в HTML автоматизированна?
Но я в принципе понял, что найти я могу и сам. Я вбиваю в пхп уже готовый список ссылок откуда надо парсить код и форматировать.
Или парсить со страницы яндекс маркета тоже будет не просто?
Если яндекс не забанит, то несложно. Достаточно один раз разработать Xpath запросы для поиска нужных полей и ими искать.
Там есть какое-то расширение к фаерфоксу, в котором можно писать и тестировать эти запросы прямо на текущей странице.
Если не обезьянничать с XPath и регулярными выражениями, а найти и прочесть документацию по API нужного тебе сервиса - http://api.yandex.ru/market/content/doc/dg/concepts/about.xml то задача стремительно упростится.
API это хорошо, но:
http://api.yandex.ru/market/content/doc/dg/concepts/authorization.xml
> Для получения авторизационного ключа необходимо отправить запрос на предоставление доступа к API, используя форму обратной связи. В запросе подробно опишите проект, для которого потребуется API, а также какие именно данные вы собираетесь использовать. Не забудьте оставить контактную информацию.
Яндекс вряд ли даст ключ с целью «тырить данные для наполнения сайта».
А Xpath точно также можно использовать для извлечения данных из XML-овтета (да, там есть JSON, но для него нету же JSONPath, надо писать лапшу для разбора или свой велосипед).
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.
> Стоило бы научится читать документацию до конца.
Разумеется, API лучше чем парсить сайт, тут даже спорить не о чем. Я буду рад если анону дадут доступ, но не факт что дадут и неизвестно через сколько времени. Опять же судя по описанию, там предлагается стать витриной маркета, а не делать свой магазин со своими товарами.
> только у тебя в нем нет нужды т.к. есть json_decode
Ты зря лезешь в спор, не разобравшись. json_decode не даст тебе на выходе «список категорий товара». Он тебе даст массив-свалку, где все свалено в кучу. Это аналог не Xpath, а DOM::loadXml. Чтобы извлечь нужные данные, нужно либо:
- писать рутинный код выделения нужных данных (мартышкина работа)
- использовать или придумать язык извлечения данных. В XML для этого есть мощный XPath. В JSON сделали его аналог (с не самым удачным синтаксисом имхо). Хабрадурачки и школьники любят кричать «XML не нужен, есть JSON», но мозгов понять что кроме формата хранения данных есть еще и инструменты работы с ними и инфраструктура (с которыми у JSON все хуже), нету.
То, что ты не понимаешь, зачем нужен аналог Xpath, говорит о том, что ты скорее всего предпочитаешь разбирать JSON-данные мартышкиным способом или никогда этим не занимался.
Возникла пара вопросов.
Пытаюсь перекрутить свой старый сайт статистики на лапше switch. У меня там 2 раздела - таблицы и графики. Соответственно 5 штук страниц отображения таблиц, 5 штук страниц отображения графиков. Данные в основе каждого типа таблиц и графиков одинаковые, просто разница отображения.
Допустим, я определился, что контроллером у меня будет тип - table или chart. Получается action - это тип отчета?
Предположим, в дальнейшем у меня будет расширяться система, и отчеты будут только частью системы. Тогда контроллером будет report, action - table или chart, а тип отчета? subaction или как?
Далее, неразумно делать для графиков и для таблиц разные model. Получается, нужно все таки делать их разными представлениями одного контроллера?
Вообщем в голове каша, не понятно как действовать в случае с достаточной вложенностью параметров скажем (например, site.ru/report/chart/report1 - что контроллер, что действие?);
как быть в случае с запросом данных через ajax (как я понимаю, в контроллере проверять абстрактную переменную isAjax);
где лучше всего сохранить $_GET (сейчас сделал в виде статической переменной Route, в дальнейшем думаю у него же реализовать метод getParam() для получения из него параметров с проверкой) - так логически правильно?
> Вот тогда другая ошибка: http://ideone.com/IJdDTu
В каком месте?
> > в тексте есть слова "а" или "но" без запятой перед ними
> Нету. А
> есть. Но
"а" - check, "но" - check, запятая перед ними - ?
> Он тебе даст массив-свалку, где все свалено в кучу.
У тебя в голове все свалено в кучу.
>использовать или придумать язык извлечения данных.
JSON не требует извлечения из него данных.
Он десериализуется в структуры данных твоего языка. После чего ты работаешь со структурами данных твоего языка, в данным случае со структурами данных PHP.
>инструменты работы с ними и инфраструктура
В них нет нужды. JSON описывает объекты и массивы. Которые превращаются в объекты и массивы PHP соответственно.
Вот тебе пример:
http://ideone.com/FBrByo
В примере кода разбирается пример ответа отсюда:
http://api.yandex.ru/market/content/doc/dg/reference/category-id-model.xml
Он возвращает не то, что нужно.
Мне нужно парсить все, что начинается с <table xmlns:lego="https://lego.yandex-team.ru"> и заканчивается "Перед покупкой уточняйте технические характеристики и комплектацию у продавца</p>". Именно со всеми тегами, что в исходном коде и их классами.
>>384243
http://jsbin.com/xabijeredaqe/1/edit . Опять ошибка. Алсо, я не могу сделать так, чтобы при новом вызове makeAdditive не обнулялся массив с добавками. В отладчике не смог найти своего скрипта, облазил все. Смотри пикрелейтед.
Чтобы заюзать отладчик используй такую ссылку http://jsbin.com/xabijeredaqe/1/
То есть без edit и прочего.
Яндекс заподозрил, что запросы автоматические.
Далее он пишет: "В вашем браузере отключены файлы cookies. Яндекс не сможет запомнить вас и правильно идентифицировать в дальнейшем.". Короче парсится у меня страница с вводом капчи. Объясни, что можно сделать с куками, чтобы меня яндекс запомнил? Как это делается?
разрешить )
Разобрался. Спасибо.
>>384938
>>384243
http://jsbin.com/migujisejajo/1/edit . Но массив добавок все также обнуляется.
ideone.com/aFIWbl
В заголовке 302 Found. Редирект на страницу с капчей. Но я уже погуглил, даже если прикрутить распознавателя капчи, то после ввода капчи снова происходит редирект. То есть нужно учитывать абсолютно все, как я понял. Интересно даже стало, как вызов.
Оп, куда дальше смотреть?
специально для таких мастеров и поставили систему эту, откуда будешь брать распознавалку капчи?
Да, как вариант создать несколько сеансов curl и выставить опции CURLOPT_COOKIESESSION в тру?
и вообще жесть, ты хоть парсить file_get_content ом, а ну давай за curl садись, из рогатки по бомбардировщикам палишь
http://ru.php.net/manual/en/function.curl-setopt.php#95027
Погуглил, пишут, что нужно доработать функцию выше по ссылке и будет норм. Но понять бы ее еще.
калькулятор уже включен в первый лвл. Самый простой и без приоритета действий, правда.
Идея такая. Все, что с классом b-properties__title нужно заменить на <td height="40" colspan="2"><strong>.
Все, что b-properties__label заменить на <td style="border-bottom: 2px dotted #033f1d" width="280px">.
В конце все все классы удалить.
А потом обернуть в <div class="tovtable">.
есть год опыта, хочу обмазаться по хардкору
что должен знать пхп-макак чтобы называть себя профессионалом пхп
нагуглил книгу, но она 2006 года и устарела
либо посоветуйте книг либо так скажите
понял, ты $monthlyPayment, приравниваешь $creditBalance, но потом, если убираешь верхний break, у тебя $creditBalance умножается на 1.03 плюс еще оплата сервиса, но ты то приравнял просто остаток
предел блеать не сходится
Номера написанные правильно решил приводить к одному виду через функцию, и вот в первой же операции соснул.
При попытке заменять '+7' на '8' у меня фейл. Алсо пишет ошибку в этой строчке:
$adduced = preg_replace('/^+\s?7/', '8', $number);
Что в ней не так? Голову сломал уже перечитывая http://archive-ipq-co.narod.ru/l1/regexp.html
>^+
Что это такое? Плюс в регулярках значит "предыдущий знак может встретиться от одного до нескольких раз". Если ты хочешь символ плюса, тебе нужно экранировать его двумя слешами.
Добра, няша.
>такое? Плюс в регулярках значит "предыдущий знак может встретиться от одного до нескольких раз". Если ты хочешь символ плюса, тебе нужно экранировать
Спасибо тебе болшое.
Очевидно, что у ОПа другое время. У меня тоже уже скоро ко сну время подходит.
я прост не понимаю почему ни одного ответа
задал и в прикреплённом треде и тут
неужели вопрос настолько тупой?
неужели ни одной пхп макаки в тредах?
неужели даже унизить никто не хочет?
что за хуйня происходит вообще?
Там скрипт как-то хитро подгружается через ифреймы и фаербаг его либо не видит либо обзывает по другому.
Открой страницу в режиме просмотра (ссылка вида jsbin.com/lalala без слова edit) и на ней будет в списке скриптов HTML-файл с твоим кодом.
У тебя есть год опыта на пхп? А ты знаешь как обойти капчу у яндекса при парсинге?
> 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
Если потом покажешь переделанный код, я может еще что посоветовать смогу.
> 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
Если потом покажешь переделанный код, я может еще что посоветовать смогу.
>>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
Скорее всего у Яндекса более хитрая система, чем проверка кук — так как умников, которые создают бесполезную нагрузку своим парсингом, довольно много и Яндекс не первый год с ними борется.
>>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
Скорее всего у Яндекса более хитрая система, чем проверка кук — так как умников, которые создают бесполезную нагрузку своим парсингом, довольно много и Яндекс не первый год с ними борется.
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">.
Это тоже несложно.
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">.
Это тоже несложно.
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 осилишь, вообще славно.
Думаю, такой список произведет хорошее впечатление.
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 осилишь, вообще славно.
Думаю, такой список произведет хорошее впечатление.
Там ответ должен быть около 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).
В общем, программа работает верно, но можно еще чуть улучшить код.
СПасибо ОП, сейчас начну файлообменник делать!
ОП, посмотри на реализацию модуля report.
Я перекрутил изначальный движок, то бы файлы были не 3 папки model view controller, где куча реализаций код каждый контроллер, а по папкам - модулям, где уже 3 файла. Я этим на какую-нибудь логичность и структуры MVC не покусился?
И собственно жду замечаний по комментам и в целом.
http://ideone.com/wM2c9I
if(file_exists($action_path))
{
include "application/module/report/".$action_file;
}
мне такая конструкция дико не нравится
хотя бы include_once давай
>- умение пользоваться командной строкой в линуксе (есть маленькая паста на тему)
Прошу ссылку на эту пасту.
Алсо вот перед сном быстро накиданный скрипт на автозамену.
http://ideone.com/LbciTj
Вручную тоже хороший вариант.
Попробую на примере 2-х файлов. Мне нужно занести шаблон в переменную $template, а файл-подопытный например в $tel. Как это сделать? Чтобы легче было все лежит в одной директории и сам файл index.php тоже.
Дальше как я буду использовать XPath, если у меня нет ни тегов html, ни body, а просто фрагмент кода. Фрагмент кода и в $template и в $tel. Можешь тут удостовериться https://github.com/fxsloker/Parser В template.html Вообще нет тегов оберток, только один идет за другим. Xpath сможет найти тег вот так .//div?
Дальше как мне извлечь сначала первую строку, обработать код, далее вторую и т.д.? Можно прямо в коде как-то указывать из какой строки брать кусок?
С кодировкой проблема, ведь она указывается в теге head, а у меня фрагмент кода, поэтому вылазят иероглифы.
Забыл спросить. А если сделать так, чтобы капча мне показывалась и я вручную бы ее вводил, получится? Это реально?
http://codepad.org/Wl9epfMe
А все разобрался.
Структура файлов странная. Не понимаю, зачем разбивать на модули. Ведь один контроллер например может использовать несколько моделей.
> 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 неймспейсами). Не изобретай велосипедов.
Структура файлов странная. Не понимаю, зачем разбивать на модули. Ведь один контроллер например может использовать несколько моделей.
> 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 неймспейсами). Не изобретай велосипедов.
В 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
Не знаю. Может быть, если куки и заголовки достоверно подделать под браузер то да.
Остальное проверю завтра.
В 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
Не знаю. Может быть, если куки и заголовки достоверно подделать под браузер то да.
Остальное проверю завтра.
Еще есть такая фишка как инъекция JS в страниу. Есть расширения к ФФ Greasemonkey, Scriptish — они позволяют в страницу и загрузке вставлять и запускать твой яваскрипт, который может например парсить отттуда нужные данные и выводить в готовом виде в консоль. То есть ты можешь в своем баузере вставить свой яваскипт в страницу и им что-то делать. Может это можно тут использовать.
Попробовал, заманчивая идея оказалась. Но ничего не вышло:
// ==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 для меня ново.
Это у меня косяк какой-то, точно. Я думаю, реально спарсить нужный код, изменить его, и сохранить в файл.
По поводу сохранения в файл с помощью javascript что-то мало информации, ну вот есть BlobBuilder, текст в который можно добавить через append и сгенерировать ссылку, перейдя по которой скачается нужный файл, знаешь что-нибудь про это?
Еще можно через ActiveXObject.
Оп, надо уже определиться, что лучше сделать и начать что-то писать. Скажи как правильно, я так и сделаю.
У меня из-за антивиря только localhost был доступен. Я добавил openserver в доверенные программы.
https://github.com/fxsloker/Parser
Ну и вот пока начал делать. Не хочет оборачивать. Понятно, что здесь регулярки зло, но как по другому?
ахуенная вещь, спасибо
Мда, надо было поддержку utf8 поставить. Прощелкал.
http://jsbin.com/migujisejajo/2/edit . лол, я уже больше месяца делаю эту задачу. Местный рекордсмен.
> Пиздец же, как вы на этом говне пишете
Петушок, а что ты вообще хочешь получить, эхая массив?!
да это очередной ебантяй проходивший мими, хуйли ты ему отвечаешь? пошел дальше
Может скрипт запускается до полной загрузки страницы. Поставль там ожидание события 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
Может скрипт запускается до полной загрузки страницы. Поставль там ожидание события 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
IDE c поддержкой дебага (PhpStorm и другие), а в PHP надо установить расширение xDebug. Погугли. Отдельных отладчиков вроде нет.
>>385322
> Оп, надо уже определиться
Ну так определись. Сравни разные варианты и выбери тот, который реалистично реализовать. Ты же лучше меня представляешь что надо сделать.
> Еще можно через ActiveXObject.
Он только в иЕ старых
>>385326
> Понятно, что здесь регулярки зло, но как по другому?
Если через DOM то через срздение нод (createElement) и вставку/перенос через appendChild и insertBefore.
Чтобы обернуть что-то, вставляешь новую ноду и то, что оборачиваешь через appendChild переносишь в нее.
> .
Точка по умолчанию не ищет перевод строки, ты в курсе? Почитай в мануале про флаг m (multiline)
Алсо, регулярку можешь тестировать тут http://regex101.com/ только не забудь что там бекслеш надо писать 1 раз а не 2. То есть \s а не \\s
IDE c поддержкой дебага (PhpStorm и другие), а в PHP надо установить расширение xDebug. Погугли. Отдельных отладчиков вроде нет.
>>385322
> Оп, надо уже определиться
Ну так определись. Сравни разные варианты и выбери тот, который реалистично реализовать. Ты же лучше меня представляешь что надо сделать.
> Еще можно через ActiveXObject.
Он только в иЕ старых
>>385326
> Понятно, что здесь регулярки зло, но как по другому?
Если через DOM то через срздение нод (createElement) и вставку/перенос через appendChild и insertBefore.
Чтобы обернуть что-то, вставляешь новую ноду и то, что оборачиваешь через appendChild переносишь в нее.
> .
Точка по умолчанию не ищет перевод строки, ты в курсе? Почитай в мануале про флаг m (multiline)
Алсо, регулярку можешь тестировать тут http://regex101.com/ только не забудь что там бекслеш надо писать 1 раз а не 2. То есть \s а не \\s
Почему цифры кол-ва сотрудников в таблице не сходятся с цифрами состава департаментов?
Не сдавайся.
> if (!this.additives) {
> this.additives = [];
> }
Это ты опять изобрел велосипед. Для задания начальных значений надо использовать конструктор, просто напиши в нем:
this.additives = [];
В calcPrice/calcCalor надо поставить проверку что заданы size и filling, если нет — исключение. Или, можно задавать size и filling прямо через конструктор, тогда проверка не нужна.
А так, в остальном все хорошо.
> Company.listEmployees = [];
Этим ты создаешь свойство у объекта Company (в JS функции — это объекты). Это не то, тебе надо задавать свойство у создаваемых через new объектов через this. Делай это в конструкторе.
В JS запись вида
Company.property = 1
Company.doSomething = function () ...
это аналог статических свойств и методов в других языках программирования. Статические свойства/методы — это те, которые есть ровно в одном экземпляре и доступны на классе, а не на объекте.
> Может я не так понял и надо this.baseRate;
Да. У каждого работника ведь своя зарплата, а не одна на всех.
>Вместо использования фолдингов надо писать аккуратный код
>Вместо использования фолдингов
>аккуратный код
Что ты несешь, долбоеб? Приведи мне пример "аккуратного кода".
>Неуч
Привлеку внимание местных господ, к этому долбоебу. В конструктивной критике петушок первый порвался, потому слив можно засчитывать автоматом. Продолжаем разбор бредней макако-мирка.
>Неуч пишет if (req.что-то там.match(...))
>req.что-то там.match
Лол, это как раз таки должен знать каждый профи, а не писать свои костыли.
>промизы
>лепишь коллбеки на коллбеке
>потом переписал на набор несвязанных функций
>запощена только часть кода
Ты просто мастерски себя обосрал.
>черный по серому
О вкусах... Ну ты понел.
>все переменные объявлены..
Бессмысленное замечание.
>неумение в ООП
Лол, т.е. ты не знаешь про приватные сво-ва/методы и каков "ООП" в js ? Мои соболезнования.
>избирательная венгерская нотация
Именно так и нужно, ибо лишь часть переменных может быть иметь непонятный тип. В остальном - элементарно.
>у ноды наверняка есть стайл гайд, который неуч не читал
В век рефакторинга-то, ебана. Приблизительно соблюдать можно, но зачем? Сообразительный программист и сам поймет.
>if typeof == object -> программист-неуч сам не понимает какого типа переменная
Мань, ну зачем ты строишь из себя вангу? Ты даже не понимаешь для чего нужна эта "подпрограмма", а уже кукарекаешь, что-то.
>функции названы бесмысленно, надо начинать имя с глагола
Разве, что в твоем манямирке.
Ну что же, итог такой: мелочные придирки (цвет, фолдинги, имена легкочитаемых функций/переменных, Венгерская нотация), полное отсутствие понимания кода, что-то там про "профессионализм"; что кстати, очень в стиле ОП-макаки. Продолжаем.
>Разговаривать с невоспитанными людьми
Читается как
>пок пок я обосрался, но ты просто невоспитанный, я ухажу(((
Ты даже не понимашь, насколько несущественны твои замечания, мань.
>писать нормально
Пости сюда свой "нормальный" код, тогда мы разберем его "нормальность", иначе пиздабол простой.
>задачку придумал.
Вот уебан. У тебя там что, нарциссизм на почве манямирка развился? Иди на хуй отсюда. И говнозадчки свои забери блядь, долбоеб.
Карочи ждем от тебя "нормального" примера ТВОЕГО кода, маня. Поехали.
>Вместо использования фолдингов надо писать аккуратный код
>Вместо использования фолдингов
>аккуратный код
Что ты несешь, долбоеб? Приведи мне пример "аккуратного кода".
>Неуч
Привлеку внимание местных господ, к этому долбоебу. В конструктивной критике петушок первый порвался, потому слив можно засчитывать автоматом. Продолжаем разбор бредней макако-мирка.
>Неуч пишет if (req.что-то там.match(...))
>req.что-то там.match
Лол, это как раз таки должен знать каждый профи, а не писать свои костыли.
>промизы
>лепишь коллбеки на коллбеке
>потом переписал на набор несвязанных функций
>запощена только часть кода
Ты просто мастерски себя обосрал.
>черный по серому
О вкусах... Ну ты понел.
>все переменные объявлены..
Бессмысленное замечание.
>неумение в ООП
Лол, т.е. ты не знаешь про приватные сво-ва/методы и каков "ООП" в js ? Мои соболезнования.
>избирательная венгерская нотация
Именно так и нужно, ибо лишь часть переменных может быть иметь непонятный тип. В остальном - элементарно.
>у ноды наверняка есть стайл гайд, который неуч не читал
В век рефакторинга-то, ебана. Приблизительно соблюдать можно, но зачем? Сообразительный программист и сам поймет.
>if typeof == object -> программист-неуч сам не понимает какого типа переменная
Мань, ну зачем ты строишь из себя вангу? Ты даже не понимаешь для чего нужна эта "подпрограмма", а уже кукарекаешь, что-то.
>функции названы бесмысленно, надо начинать имя с глагола
Разве, что в твоем манямирке.
Ну что же, итог такой: мелочные придирки (цвет, фолдинги, имена легкочитаемых функций/переменных, Венгерская нотация), полное отсутствие понимания кода, что-то там про "профессионализм"; что кстати, очень в стиле ОП-макаки. Продолжаем.
>Разговаривать с невоспитанными людьми
Читается как
>пок пок я обосрался, но ты просто невоспитанный, я ухажу(((
Ты даже не понимашь, насколько несущественны твои замечания, мань.
>писать нормально
Пости сюда свой "нормальный" код, тогда мы разберем его "нормальность", иначе пиздабол простой.
>задачку придумал.
Вот уебан. У тебя там что, нарциссизм на почве манямирка развился? Иди на хуй отсюда. И говнозадчки свои забери блядь, долбоеб.
Карочи ждем от тебя "нормального" примера ТВОЕГО кода, маня. Поехали.
На моей пекарне в дизигнере без подключения ЮТФ работает как надо, с подключением - не работает как надо. Ideone без подключения кодировки кириллицу вообще не видит в этом случае, отсылает пустую строку. С латиницей всё норм везде всегда.
Я уже с этими кодировками заебался. Что с ними делать?
Причем это в идеоне
mb_internal_encoding('utf-8');
echo mb_strtoupper("хуй");
работает, мой предыдущий пикрелейтед - нет.
если бы хуй можно было так легко поднять, Шнур бы не снимался в рекламе
Всмысле
echo mb_strtoupper("хуй");?
У меня работает. Да ладно моя параша, но как нормально хотя бы на том же Ideone заставить работать.
запускай от администратора. если запускать просто двойным кликом - у программы не будет прав на изменения файла хостс и, возможно, каких еще плюшек.
>>>>385469
>у ноды наверняка есть стайл гайд
>В век рефакторинга-то, ебана
Поддвачну. Сейчас любая IDE моет зарефакторить быдлокод и привести его в читаемый вид.
ОП, я в правильном направлении двигаюсь?
няш, ты наверное уже отвечал, но не листать же столько дохуя. вот открл я страничку с переменными - там кэмэл кейс. в пыхе разве не андерскоры? справедливости ради скажу что сам люблю верблюжью нотацию больше, но куда ни смотрел - везде был андерскор для пхп.
У Опа же написано. Метод класса, который принимает аргументы при объявлении объекта, если их ему не дать, он выдаст ошибку.
// @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. А то приходится два лишних телодвижения делать (два клика (просто открыть, и далее выбор открыть чем)).
Это ответ был с подковыркой.
$manager=new Employee("Менеджер");
$manager->salary=500;
$manager->cofee=20;
$manager->pages=200;
вот так делать не надо, передай как параметр массив еще и занеси все в конструктор
Есть таблица в mysql. Музыкальные группы. У группы может быть много жанров сразу роцк, репчик. В данной таблице хранятся id этих жанров. Соответственно в данной таблице ячейка genres может содержать любое количество чисел любого значения integer.
Вопрос: какого типа сделать столбец genres? Есть ли в mysql, что то типа массива, а не enum, где все возможные значения нужно самому перечислять?
Обычно в таких случаях в таблице жанров делают несколько записей вида:
рэп| ид Sunn O
рок| ид Sunn O
Почитай про связь один ко многим, да и про все остальные:
http://jtest.ru/bazyi-dannyix/sql-dlya-nachinayushhix-chast-3.html
Элементарно, Ватсон! Читать не буду, это всё знаю. Но как я мог об этом забыть? Всего 3 месяца не программировал, сижу как нуб всё вспоминаю
%сделаю таблицу, где будут храниться соответствия band id и genre id. А так же таблицу с genre id и genre name. А из таблицы групп вообще удалью genres id за ненадобностью%
Вообще-то в MySQL есть SET — это как ENUM, но можно указать несколько значений. Но жанр наверно все же тянет на отдельную сущность с отдельной таблицей.
Кстати, во имя Великой Нормализации years_activity стоит разбить на два поля. И сделать их типа DATE или YEAR. То, что у тебя - отстой.
Ну и вместо полей с числами через зяпятую я советую сделять связь многие-ко-многим и настроить внешние ключи обязательно: http://denis.in.ua/foreign-keys-in-mysql.htm
Статус мембера лучше проставлять в таблице связи band_members. Тут стоит учесть, что возможны сложные ситуации, например какой-то перец пришел в группу, через полгода ушел, потом снова вернулся. Если такое надо учиытвать, то придется чуть усложнять таблиу связи, добавив туда даты и тип записи (пришел, но потом ушел | ушел, но вернулся | ушел и не вернулся | пришел и остался).
Есть несколько видов 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() на нем. Я не знаю, надо ли добавлять ссылку в документ чтобы кликнуть по ней, так что выясни экспериментально.
>>385653
Интересно, все фанатики PostgresSQL такие же больные, как ты, что не способы даже понять суть вопроса?
>>385257
> скрипт на автозамену.
О, отличный текст, только вот я бы вместо \s? поставил там звездочку — вдруг пробелов несколько.
>>385263
> С кодировкой проблема, ведь она указывается в теге head, а у меня фрагмент кода, поэтому вылазят иероглифы.
Если ты парсишь код в другой кодировке, сконвертируй в utf-8 с помощью iconv. Если ты сам генерируешь код то можешь приписать туда meta charset в начало.
> В template.html Вообще нет тегов оберток, только один идет за другим.
Этот файл ты будешь не парсить, а читать построчно, как я понимаю. И соответственно в нем ничего искать через Xpath не надо — искать надо в tel.html
> Можно прямо в коде как-то указывать из какой строки брать кусок?
Разбей файл на массив непустых строк, и бери из массива по номеру.
>>385653
Интересно, все фанатики PostgresSQL такие же больные, как ты, что не способы даже понять суть вопроса?
>>385257
> скрипт на автозамену.
О, отличный текст, только вот я бы вместо \s? поставил там звездочку — вдруг пробелов несколько.
>>385263
> С кодировкой проблема, ведь она указывается в теге head, а у меня фрагмент кода, поэтому вылазят иероглифы.
Если ты парсишь код в другой кодировке, сконвертируй в utf-8 с помощью iconv. Если ты сам генерируешь код то можешь приписать туда meta charset в начало.
> В template.html Вообще нет тегов оберток, только один идет за другим.
Этот файл ты будешь не парсить, а читать построчно, как я понимаю. И соответственно в нем ничего искать через Xpath не надо — искать надо в tel.html
> Можно прямо в коде как-то указывать из какой строки брать кусок?
Разбей файл на массив непустых строк, и бери из массива по номеру.
> for (($yo = 17) && ($year = 1); $mony == 1000000; ($yo++) && ($year++)) {
&& используется в if и обозначает «и» (если оба условия выполняются). В for его можно применить во второй части:
for (первая часть ; вторая часть — тут можно использовать && ; третья часть) ...
Но в первой и третьей, чтобы записать несколько действий, используй запятую:
for ($yo = 17, $year = 1; $mony == 1000000; $yo++, $year++)) {
Дело в том, что если у && слева получается ноль, то правое выражение не вычисляется (так как его нет смысла вычислять). Потому твой код будет глючить.
В общем, запомни: в первой и третьей части — выражения пишутся через запятую, в условии во второй части — через && или ||
Неплохо, но нужно более тщательно все проверить.
Задачу про номера телефонов надо проверить на большом числе телефонов, чтобы убедиться что твой код правильный. Но руками подставлять номера — долго и скучно. Пусть работает робот, а не человек! Давай-ка научимся основам автоматического тестирования и заставим железяку проверять саму себя.
Для этого давай добавим в программу тесты, чтобы сразу было видно, верно все работает или нет. Сделай 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' // нет +
);
> preg_match($regular,$text,$mistakes);
> print_r($mistakes);
Так не очень правильно писать. preg_match может найти, а может и не найти соответствие — потому лучше писать через if:
if (preg_match(...)) {
echo "Ошибка: ....";
}
Наконец, сам preg_match тут не подходит, так как ищет только первое совпадение, а нам надо искать все ошибки. Подойдет preg_match_all.
В регулярке не надо писать
(точка) (звездочка)
в начале и конце, так как в этом случае она захватывает всю строку целиком.
Вывод ошибок надо бы сделать не через print_r, а нормально, например:
Ошибка: жызнь
Или так:
[Жы]знь — непростая штука.
> preg_match($regular,$text,$mistakes);
> print_r($mistakes);
Так не очень правильно писать. preg_match может найти, а может и не найти соответствие — потому лучше писать через if:
if (preg_match(...)) {
echo "Ошибка: ....";
}
Наконец, сам preg_match тут не подходит, так как ищет только первое совпадение, а нам надо искать все ошибки. Подойдет preg_match_all.
В регулярке не надо писать
(точка) (звездочка)
в начале и конце, так как в этом случае она захватывает всю строку целиком.
Вывод ошибок надо бы сделать не через print_r, а нормально, например:
Ошибка: жызнь
Или так:
[Жы]знь — непростая штука.
Тут то же самое, надо бы проверить на большом списке номеров.
> $regular='/-|_|\)|\(| | /';
Проще написать «заменить все не-цифры» чем перечислять возможные символы. Там даже есть конструкция \\D для этого.
>>385341
> //флаги u и i почему-то не работают(у меня, тут работают), кириллица воспринимается интерпретатором нормально и так
А вот и нет. Без флага u регулярка может ломать строку и получатся битые символы. Это потому, что в utf-8 русская буква состоит из 2 байт и без флага u решялрка воспринимает ее как 2 отдельных символа. То есть все начинает работать неправильно — иногда может сработать, а может и не сработать.
Также, конструкции вроде \w начинают вести себя непредсказуемо и могут разломать букву из 2 байт на половинки.
И ты замучаешься искать и исправлять такие ошибки. Потому лучше всегда ставит этот флаг чем пытаться угадать, сработает или нет.
Флаг i ставить не обязательно, это по желанию.
Выражение для «не починит» предусматривает ровно один пробел между «не» и «починит» — лучше ставить там плюс. так как пробелов может быть несколько.
В остальном, правильно.
> Задача на email
> [a-zA-Z-_.\+]
Знак «-» в квадратных скобках имеет специальное значение. Если ты хочешь просто сказать «ищи знак минус», он должен стоять либо в самом конце, либо, что лучше, экранироваться бекслешем. А вот + можно не экранировать (в квадратных скобках экранируются только: [ ] ^ - \ и ограничитель регулярки (в твоем случае / )).
В остальном, верно.
Тут то же самое, надо бы проверить на большом списке номеров.
> $regular='/-|_|\)|\(| | /';
Проще написать «заменить все не-цифры» чем перечислять возможные символы. Там даже есть конструкция \\D для этого.
>>385341
> //флаги u и i почему-то не работают(у меня, тут работают), кириллица воспринимается интерпретатором нормально и так
А вот и нет. Без флага u регулярка может ломать строку и получатся битые символы. Это потому, что в utf-8 русская буква состоит из 2 байт и без флага u решялрка воспринимает ее как 2 отдельных символа. То есть все начинает работать неправильно — иногда может сработать, а может и не сработать.
Также, конструкции вроде \w начинают вести себя непредсказуемо и могут разломать букву из 2 байт на половинки.
И ты замучаешься искать и исправлять такие ошибки. Потому лучше всегда ставит этот флаг чем пытаться угадать, сработает или нет.
Флаг i ставить не обязательно, это по желанию.
Выражение для «не починит» предусматривает ровно один пробел между «не» и «починит» — лучше ставить там плюс. так как пробелов может быть несколько.
В остальном, правильно.
> Задача на email
> [a-zA-Z-_.\+]
Знак «-» в квадратных скобках имеет специальное значение. Если ты хочешь просто сказать «ищи знак минус», он должен стоять либо в самом конце, либо, что лучше, экранироваться бекслешем. А вот + можно не экранировать (в квадратных скобках экранируются только: [ ] ^ - \ и ограничитель регулярки (в твоем случае / )).
В остальном, верно.
> Там написано, что у класса Компания должно быть свойство списокРаботников, т.е 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-битные кодировки давно пора отправить на свалку.
> Там написано, что у класса Компания должно быть свойство списокРаботников, т.е 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-битные кодировки давно пора отправить на свалку.
У тебя исходник скорее всего сохранен в 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
И подобные функции.
Ох, я чувствую, надо собраться с силами и написать урок про байты и кодировки строк.
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
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
Кемелкейс: 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
Там лучше сделать класс Менеджер и ему прописать это по умолчанию.
> поставь ему в href нужный URL
Не понял, какой урл я могу поставить? Мне же не всю страницу надо скачивать, а часть отформатированного кода, который будет лежать в переменной. Так зачем мне href?
Не стоит так вникать в мою талицу. Это слишком черновой вариант. Я всегда делаю сначала, как можно проще главное, чтоб заработало, а потом потихоньку усложняю
> Статус мембера лучше проставлять в таблице...
Эта идея крута, но думаю не стоит. Представь, на сайте 3000 групп из всего мира, постоянно кто-то уходит приходит, кто это учитывать будет? Да они сами не вспомнят в какой день ушли. Такое нужно, если база сотрудников или учеников etc
Скрипт: http://ideone.com/OrkXeX
У меня появилось желание писать несложные %в будущем возможно и сложные% сайты. Пытаюсь осваивать php, начал с задачек Опа, попутно разбираюсь с HTML, и планирую обмазаться CSS. Я в верном направлении? Что посоветуете помимо того что я написал?
this.list сделать массивом или объектом? Если массив, то мне придется каждый раз оббегать его для удаления сотрудника.
>>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) {
Это можно и не писать было, все равно бы сработало.
Но это мелочи. Теперь программа решена верно.
>>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) {
Это можно и не писать было, все равно бы сработало.
Но это мелочи. Теперь программа решена верно.
> А пока я получаю все тот же закодированный код.
Ты получаешь такой код потому что такой передаешь: 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 — они будут доступны в контекстном меню при клике по файлу.
>>385802
Ты все правильно делашь. Только показывай иногда нам решения для проверки. После прохождения учебника можо попросить дополнительые продвинтые задания.
Кроме PHP тебе будет нужен SQL (язык запросов к базе данных, несложный) и фреймворки или CMS (у нас есть задачка на их изучение).
По поводу верстки, у нас есть десяток очень простых задач, хорошо проверяющих понимание таких концепций как позиционирование. Они в низу этой страницы: http://archive-ipq-co.narod.ru/l1/reading-list.html
Ну и после того как изучишь HTML/CSS можешь попросить макет на верстку, у нас есть макет который мы всем предлагаем верстать.
>>385815
Можно массивом, можно словарем, как хочешь.
>>385877
Я с удовольствием дам подсказку или даже несколько, но запости свой код и на каком месте остановился, что именно не знаешь как делать. Это задача непростая, некоторые ее по 3-4 дня мучали.
Не называй поля через пробел или знак плюс — намучаешься потом - используй подчеркивание.
У тебя кстати не учтен вариант когда трек сделан совместно несколькими группами, например Би-2 и Brainstorm — Иномарки, хотя ради такого наверно излишне будет усложнять систему. Также, для каверов можно предусмотреть ссылку на оригинал.
Насчет связи bands_to_countries — а не логичнее ли сделать связь members_to_countries? Хотя тогда запросы на выборку конечно будут сложнее, так как чтобы определить страну группы, надо перебрать всех участников. Но зато будет каноничнее. То же и к жанрам — по идее, жанр относится к треку, а не альбому.
members.name/lastname специально сделаны с возможностью ставить NULL?
Вообще, база выглядит хорошо спроектированной. FOREIGN KEY REFERENCES прописал? Кодировку utf-8 везде поставил?
Насчет auto_increment — конечно, так и надо делать.
http://ideone.com/QmLBnf
Ну все начало положено. Теперь нужен пхп скрипт, который будет редактировать код. Я подумал, что мне незачем файл-шаблон, я в самом скрипте в массив занесу нужные строчки.
// @include /http://market\.yandex\.ru/model-spec\.xml\?modelid=\d+&hid=\d+/
Поправил, теперь на любых товарах работает.
> Не называй поля через пробел или знак плюс — намучаешься потом - используй подчеркивание.
Принял к сведению
> У тебя кстати не учтен вариант когда трек сделан совместно несколькими группами, например Би-2 и Brainstorm — Иномарки
В таблице songs есть поле comments, вот туда и прописывается информация типа (cover Pink Floyd) или (feat. Дима Билан). Хотя если например в твоём случае этот трек есть и на альбоме Би-2 и на каком то альбоме Brainstorm, то информация дублируется. Но такие случаи настолько редки, что это не критично, по-моему
> Также, для каверов можно предусмотреть ссылку на оригинал.
Идея
> а не логичнее ли сделать связь members_to_countries
Нахуй. Кстати, нужно будет сделать countries не обязательным параметром, ибо всякие тру анонимные музыканты могут не указывать не то, что страну, но и проекту название не давать
> members.name/lastname специально сделаны с возможностью ставить NULL?
Да, потому что некоторые пользуются только псевдонимами. Или говорят только своё имя
> FOREIGN KEY REFERENCES прописал
где это прописывать?
// при совместном использовании ++ и + результат будет неопределенным
$a = 1;
echo ++$a + $a++; // может вывести 4 или 5
Алсо подскажи, что означает <em data-ref="1">. Ну <em> вроде как акцентирование текста. Остальное не нагуглил.
И как вывести цифры за поле.
http://jsbin.com/rumofibumuxi/1/edit
Поставил гит + черепаху под винду, пробовал создать репозиторий, с которого потом буду делать ветки. Куча непонятных окон, ошибки, пустая папка.
Тупо вот - как сделать репозиторий проекта и получить его копию для изменений? Где отслеживать ветки? Как сливать изменения?
Вообще, где про это внятно почитать?
Спасибо, понял. Все получилось.
Для начала изучи гит в командной строке и пойми как он работает. Есть замечательный учебник: http://git-scm.com/book/ru (на русском)
TortoiseGit — годится только для просмотра репозитория, в остальном он глючный, я бы не советовал особо им пользоваться.
> Где отслеживать ветки? Как сливать изменения?
Вообще, где про это внятно почитать?
В git-book. Просматривать можно тортойзом или любым другим клиентом: http://git-scm.com/downloads/guis
> Тупо вот - как сделать репозиторий проекта и получить его копию для изменений?
git init (создание пустого репозитория) либо git clone (копирование к себе существующего).
Если есть еще какие-то вопросы, задавай, я помогу разобарться.
http://rghost.ru/57983001
>>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 (иначе унаследуется от родителя).
>>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 (иначе унаследуется от родителя).
Кстати, пока не забыл, там еще надо будет потом индексы правильно расставить, а то запросы будут медленно выполняться. Но это не срочно, так что можешь не спеша изучать эту тему (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? Это тот, кто добавил информацию о группе или что?
Ок, беру папку своего проекта, кладу в D:\git\remote
Делаю на ней git init,вроде без ошибок.
Создаю рядом папку D:\git\local
делаю на ней git clone /d/git/remote
Получаю предупреждение про пустой репозиторий, в папке local появляется пустая папка remote.
Что я делаю не так? Ожидал получить в local копию всех файлов проекта для изменения.
> Получаю предупреждение про пустой репозиторий, в папке local появляется пустая папка remote.
ну логично, init создает пустой репозиторий (папку .git) но видимо ничего в него не додавляет — надо сделать коммит.
После того как закоммитишь, можно будет сделать git pull в копии.
Чтобы папка remote не копировалась, надо было сделать
git clone source .
то есть добавить точку
Отлично, создал копию, отредактировал ее. Как теперь применить изменения к remote? Как при необходимости просмотреть изменения и откатить их? Как создать ветку от уже отредактированной по отношению к remote копии? Когда удаленная копия узнает о сущетвовании моей отредактированной версии?
> UNIQUE KEY
Check
> А почему связь users_counries многие-ко-многим?
Спасибо, исправлю
>
Зачем хранить пароль пользователя?...
Я подразумевал хранить там md5(md5($pass)). Или всё таки хеш+соль надёжней?
> Телефон не хранят в INT так как это не число, а строка, используй VARCHAR. Алсо, я думаю нет смысла хранить телефон по частям — зачем? Храни одной строкой.
И как я не додумался? Спасибо
> Зачем связывать жанр с пользователем? Не очень понял. Если это «кто добавил жанр» то логичнее назвать поле added_by_user_id. И что за связь band -> user? Это тот, кто добавил информацию о группе или что?
Да, всё так. Наверное исправлю названия на creator
http://ideone.com/de6mSX
Читай git-book. Там есть git pull, push и fetch.
> Как при необходимости просмотреть изменения?
Просмотреть проще всего GUI клиентом, Tortoise или любым другим (другие вроде лучше)
> и откатить их
В git-book вроде написано
> Как создать ветку от уже отредактированной по отношению к remote копии?
checkout вроде бы, читай git-book
> Когда удаленная копия узнает о сущетвовании моей отредактированной версии?
Она о ней не знает, но когда ты делаешь push, изменения в нее закачиваются. Читай git-book
Тогда зачем поле 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
Оператор === отличается от == тем, что чтобы он сработал надо чтобы типы переменных и их значения совпадали. Он не делает никаких преобразвоаний.
> $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 нет смысла, так как если мы меняем ранг сотрудника, оно по идее должно пересчитываться, и ты замучаешься это делать. проще не хранить эти данные, а каждый раз вычислять заново с помощью метода. Тогда они всегда будут актуальны.
Ну и таблицу еще приделай нормальную, как в задаче требуется. И департаментов побольше создай.
>учше создать 9 объектов-менеджеров, так правильнее будет с точки зрения ООП
Но это же чертовски не удобно, проще вообще без ООП обойтись.
>Это непраивльно. Департамент должен уметь в любой момент дать ответ на вопрос, сколько в нем сотрудников а в твоем случае у тебя туда записывается какое-то левое число
А что там должно быть?
>Хранить свойство totalPages нет смысла, так как если мы меняем ранг сотрудника, оно по идее должно пересчитываться
Но страницы ведь не зависят от ранга сотрудника, и в методах тоже ничего связанного с рангом нет.
Это удобно, когда тебе понадобится что-то менять и расширять в коде. Например, когда у работников может быть разная зарплата, когда им могут выдавать премии, когда они отработали разное число дней.
А как ты будешь такое реализовывать со своим подходом?
И ничего сложного там нет, достаточно 1 функцию добавить.
> проще вообще без ООП обойтись.
Будет каша.
> А что там должно быть?
Очевидно не должно быть свойства totalPages у департамента.
> Но страницы ведь не зависят от ранга сотрудника, и в методах тоже ничего связанного с рангом нет.
Это пока не зависят. Плюс, ты должен будешь пересчитывать все эти цифры при увольнении и добавлении сотрудников. у тебя написан для этого код?
Ну и страницы может и не зависят, а зарплата зависит от ранга.
Более того, почему расчет числа произведенных страниц ты делаешь не в классе Департамент, а вне его? Зачем размазывать логику по всей программе? Расчет общего числа страниц, общей зарплаты может быть тут только в одном месте — в классе Департамент.
Смотри, одна из идей ООП в том, что мы разбиваем программу на слабосвязанные независимые части. Работник считает свою зарплату, Департамент считает общую зарплату работающих в нем. А у тебя пока логика размазывается по программе и код получается спутанным. Нельзя вынуть класс Департамент и где-то использовать в другой программе, так как сам он ничего считать не умеет.
И еще. Удобно было бы сделать у Департамента метод добавитьСотрудников — чтобы их можно было добавлять постепенно и не требовалось передавать их в конструктор.
Если я буду создавать объект под каждого сотрудника, тогда свойство quantity придется убирать из класса сотрудника, и методы, которые считает зарплаты, кофе и страницы нужно будет переносить в департамент. Итого мы получим тоже самое, что я уже делал до этого http://ideone.com/r3uqKW
Нет. Ты делаешь у сотрудника методы посчитатьСвоюЗарплату, Кофе, бумагу и прочее, а у Департамента — посчитать общие затраты по зарплате , кофе, бумаге. Ошибка в http://ideone.com/r3uqKW именно в том, что ты то что относится к Сотруднику, поместил в Департамент.
Более того, подумай логически. Базовая ставка или потребление кофе, или ранг, или имя — это свойство сотрудника, согласен. А «количество человек» никак не может быть свойством отдельного сотрудника. Это нелогично же.
[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]
но он создаёт подмассивы, а нужно без них.
Сел на пару часиков задачки порешать, а времени высосало немерено. Всё такое в 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
остальное завтра попробую.
Сел на пару часиков задачки порешать, а времени высосало немерено. Всё такое в 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
остальное завтра попробую.
Функцию написать например
> но он создаёт подмассивы, а нужно без них.
Напиши так чтобы не создавал
>>386334
data не надо передавать, надо сделать список сотрудников работающих в департаменте и функцию их добавления.
Функции начинаются с глагола например getCoffeeConsumption (а переменные нет).
Ты на правильном пути.
Я имею в виду функции типа посчитать сколько всего кофе выпито не должны иметь вообще аргументов, то есть data в них передавать не надо.
Оп, смотри уже почти доделал. Посмотри на код, что поправить?
Теперь нужно каждый th, у которого нет соседа td, заменить на <td height="40" colspan="2"><strong></strong></td>. Как это реализовать?
Остальные th заменить на <td style="border-bottom: 2px dotted #033f1d" width="280px">
</td>
> Теперь нужно каждый 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, в браузерном ДОМе есть точно.
> Теперь нужно каждый 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, в браузерном ДОМе есть точно.
Там в моем посте звездочка потерялась после following-sibling:: — но это ты думаю и сам уже догадался.
Кошка
надпись 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 и во многих случаях просто начинаешь перебирать свойства, пока не заработает. Это не очень хороший подход, старайся разобраться почему тот или иной код так отображается.
Кошка
надпись 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 и во многих случаях просто начинаешь перебирать свойства, пока не заработает. Это не очень хороший подход, старайся разобраться почему тот или иной код так отображается.
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;
Это непраивльно. Если мы захотим добавить список в описание компании, в нем все слипнется. Ты должен сбрасывать стили только для меню, а не для всех списков страницы.
Твоя верстка ненадежная. Попробуй заменить текст в описании на «Мы являемся» — и меню исчезнет со страницы. Сделай нормально и более надежно, чтобы от убирания одного блока второй не улетал за край экрана.
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;
Это непраивльно. Если мы захотим добавить список в описание компании, в нем все слипнется. Ты должен сбрасывать стили только для меню, а не для всех списков страницы.
Твоя верстка ненадежная. Попробуй заменить текст в описании на «Мы являемся» — и меню исчезнет со страницы. Сделай нормально и более надежно, чтобы от убирания одного блока второй не улетал за край экрана.
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;
не применяй правила ко всем дивам, используй тут класс
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;
не применяй правила ко всем дивам, используй тут класс
> Ошибка постинга: В сообщений присутствует слово из спам листа.
Вот ответ: http://ideone.com/BeLgbd
Тред не на нулевой, потому что он уже 70 постов как в бамплимите.
Скоро перекатимся в новый тред, подожди. От того, что мы полдня повисим на второй или третьей странице, ничего не случится.
ОПа пора бы уже узнавать не по трипкоду, а по тексту.
>>386479
О, вообще неплохо сделано. Кажется, ты начал понимать ООП. Можешь после этой задачи переходить к задаче про энергосеть.
> Company.prototype.alreadyAddEmployee
Имя функции начинается с глагола, сделайЧтоТо. В данном случае можно checkIsNewEmployee
> for (var i = 0; i < this.listEmployees.length; i++) {
> if (this.listEmployees == employee) {
Код поиска скопипастен. Надо вынести его в отдельную функцию. Назвать можно findEmployee. Пусть возвращает индекс, а если не найден то -1. Кстати, в новых браузерах с поддержкой ES5 у массива есть метод indexOf который как раз это делает, знаешь?
Ну ок, понемногу разбираюсь, но xpath в js для меня темный лес, и насколько ты помнишь у меня ничего вышло с помощью метода document.evaluate(). Я все таки решил доделать дело на javascript, смысл пропускать это дело через пхп, когда начал js.
Выходной же. Я вот с пятницы только сегодня отошел с синевы лол
Это копия, сохраненная 5 октября 2014 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.