День 12 — задания
Практика прошла по ходу чтения — в блоках «Попробуйте сейчас». Здесь итог: всё, что сверит course check 12. Если какой-то пункт пропустили, вернитесь к странице, которая указана рядом. Список страниц:
course toc 121. Четыре предсказания — страницы 1, 2, 3, 5
Сделать: сдать ответы на четыре вопроса «что выведет».
course answer day12.q1 ОТВЕТ
course answer day12.q2 ОТВЕТ
course answer day12.q3 ОТВЕТ
course answer day12.q4 ОТВЕТВместо ОТВЕТ — то, что напечатала бы программа: q1 и q4 — два числа через пробел, q2 — одно число, q3 — число и слово через пробел. Можно отправить заново — засчитывается последний.
Готово, когда: пункты q1, q2, q3, q4 в course check 12 зелёные.
2. Два результата из одной функции — страница 1
Сделать: почините ~/gocourse/day12/fix2. Программа не собирается: функция pack объявлена с двумя результатами, а возвращает одно значение. Заголовок pack и числа в main не меняйте.
Готово, когда: go run . в ~/gocourse/day12/fix2 печатает две строки — партию и «полных коробок … россыпью …», пункт fix2 зелёный. Размер правки сверит пункт fixsmall из раздела 5.
3. Разбор строк заказа — страница 2
Сделать: ~/gocourse/day12/split/main.go читает строки вида АРТИКУЛ:КОЛИЧЕСТВО и печатает по строке на позицию и итог. Условие — в ~/gocourse/day12/split/TASK.txt; вместимость коробки там своя. В программе должна быть функция pack(qty int, size int) (int, int). Описание strings.Cut посмотрите через go doc.
Готово, когда: пункты split и t_godoc зелёные. Проверка прогонит программу на нескольких вводах; часть из них скрыта — на них вы увидите только ввод и то, что напечатала программа. Кроме вывода она смотрит, что функция с двумя результатами в программе есть и что main её вызывает: расчёт коробок и россыпи должен уехать из main.
4. Приёмка с проверкой — страницы 3 и 4
Сделать: ~/gocourse/day12/intake/main.go по условию ~/gocourse/day12/intake/TASK.txt: своя функция parseQty(s string) (int, error), сообщение об ошибке в поток ошибок и код возврата 1. Тексты ошибок — в TASK.txt дословно.
Готово, когда: пункты intake и intake_vet зелёные. Проверка сверяет обычный вывод, поток ошибок и код возврата отдельно, а до запуска смотрит, что функция с результатом error объявлена и вызывается из main.
5. Затенение — страница 5
Сделать:
- почините
~/gocourse/day12/fix1: счётчик плохих строк должен расти, а не всё время равняться единице. Правка — одна-две строки; - запустите
go vet .на программе с затенением вscratchи убедитесь, что он молчит; - сравните свою починку с оригиналом:
diff ~/.course/orig/day12/fix1/main.go main.go. Обе команды нужны пунктуt_vetdiff— он смотрит журнал.
Готово, когда: пункты fix1, t_vetdiff зелёные, а fixsmall подтвердил, что в fix1 и fix2 изменено по одной-две строки: больше двух проверка не примет (строки import не считаются).
6. Трассировка — страница 6
Сделать: заполните ~/gocourse/day12/trace/table.txt: восемь шагов, номера строк уже проставлены. Колонка trips в if — про переменную, объявленную внутри блока if. Прочерки и число строк не трогайте, program.go не меняйте.
Готово, когда: пункт trace зелёный.
7. Формат, коммиты и словарик — страницы 1 и 7
Сделать:
- отформатируйте код
splitиintake—Ctrl+Sв VS Code илиgofmt -w .в папке задания; - репозиторий в
~/gocourse/day12заводится на первой странице (git initи коммит с заготовками), дальше каждое задание кончается своим коммитом —fix2,split,intake,fix1,trace. Всего нужно не меньше трёх коммитов; историю посмотрите черезgit log --oneline; - в
~/errors.md— минимум двадцать четыре строки вида «текст ошибки — что значило». Между ошибкой и разбором — тире с пробелами вокруг.
cd ~/gocourse/day12
git log --onelineГотово, когда: пункты code_fmt, git, t_gitlog и errors зелёные.
8. Звёздочка
В зачёт не входит, course check 12 эти задания не смотрит.
- Допишите
split: кроме итога печатать, сколько всего полных коробок нужно на весь заказ. Складывать коробки по позициям или посчитать их из общего количества — это разные числа. Почему? - Сделайте в
intakeотдельную функциюparseLine(line string) (string, int, error)— три результата: артикул, количество и ошибка. Где в такой функции удобно ставить проверки? - В
scratchнапишите функцию, которая возвращает(int, error), и вызовите её так, чтобы ошибка попала в затенённую переменную. Найдите дефект печатью значений — как на странице 5.
Готово, когда: программы делают то, что вы задумали, и вы можете объяснить, чем отличается сумма коробок по позициям от коробок «на весь заказ».
Порог: 14 пунктов из 17. После зачёта — контрольные вопросы: course quiz 12.