Контрольная точка 2
Восемь задач по блоку 2: условия, ввод и ошибки, циклы, отладка. По ним видно, какие темы осели. Блок 3 — функции и тесты — строится поверх циклов и условий, поэтому незасчитанная задача показывает, что повторить до него.
Задачи
Условие — в TASK.txt папки задачи, числа у каждого стажёра свои.
| № | Папка | Что сделать | Где перечитать |
|---|---|---|---|
| 1 | kt1 |
стоимость доставки: условия и границы | день 06, стр. 3; памятка |
| 2 | kt2 |
движение остатка: цикл по строкам, счётчики, минимум | день 08, стр. 5–7 |
| 3 | kt3 |
раскладка партии: проверка ввода, поток ошибок, код 1 | день 07, стр. 3–5 |
| 4 | kt4 |
программа считает неверно, хотя пример проходит | страница 1; памятка |
| 5 | kt5 |
программа не собирается | памятка, «Ошибки компилятора» |
| 6 | kt6 |
таблица трассировки цикла | памятка, «Трассировка: правила 1–15» |
| 7 | kt7 |
значения, которых нет в выводе | день 09; памятка, «Отладка» |
| 8 | kt8 |
задача Парсонса с циклом и условием | день 04, стр. 7; день 08 |
stagiaire@lab:~$ cd ~/gocourse/day10/kt1
stagiaire@lab:~/gocourse/day10/kt1$ cat TASK.txtКак сдаётся
Всё проверяет course check 10. Отдельно сдаётся только ответ на задачу 7 — два числа через пробел вместо слова ЧИСЛА; отправить заново можно:
stagiaire@lab:~/gocourse/day10/kt7$ course answer day10.kt7 ЧИСЛАПрограммы с вводом (задачи 1–5 и 8) проверка запускает на наборе вводов. Первые случаи — примеры из TASK.txt, на них при ошибке видно и то, что было нужно. Остальные скрыты, на них видно только ввод и то, что напечатала программа:
✘ Задача 1 — стоимость доставки по весу и сумме
Условие: cat ~/gocourse/day10/kt1/TASK.txt — проверьте границы и порядок правил.
следующий уровень подсказки: course hint 10 kt1
случай 4 из 12, ввод: 1500 0
строка 1, программа напечатала: «Доставка: 430 руб.»1500 0 — две строки ввода, показанные через пробел; пустые строки выглядят как лишние пробелы. Нужный ответ решаете вы по правилам: добавьте этот ввод в свой набор и прогоните, как на странице 1. Проверка останавливается на первом неверном случае — после починки может всплыть следующий. В задаче 3 обычный вывод, поток ошибок и код сверяются отдельно, и проверка называет, что не совпало.
Починки — точечно. В kt4 — не больше трёх изменённых строк, в kt5 — не больше четырёх; строки import не считаются. Что поменяли и как вернуть оригинал:
| Команда | Что делает |
|---|---|
diff ~/.course/orig/day10/kt4/main.go ~/gocourse/day10/kt4/main.go |
показывает, что поменяли в kt4 по сравнению с оригиналом |
cp ~/.course/orig/day10/kt4/main.go ~/gocourse/day10/kt4/main.go |
возвращает оригинал kt4 |
Трассировка в kt6 сверяется целиком: одна неверная клетка — задача не засчитана, какая клетка, проверка не говорит. Новых правил точка не вводит: действуют правила 1–15 из дней 02, 06 и 08, и все пятнадцать собраны списком в памятке блока — course page 10 2, раздел «Трассировка: правила 1–15». Держите его открытым рядом с таблицей. Парсонс в kt8 — только переставлять и удалять: строку, которой не было в заготовке, проверка не примет.
Порог и пересдача
Задача засчитана целиком или не засчитана. Порог — 6 задач из 8. Итог по точке на пустом стенде:
--- контрольная точка 2 ---
Задач сдано: 0 из 8. Порог — 6. Пересдача — доделайте задачи и повторите course check 10.День закрывается при трёх условиях: сдано 10 пунктов из 13 — тренировка и задачи вместе; точка взята; сданы контрольные вопросы. Без точки день не закроется при любом числе пунктов:
Контрольная точка не взята: 5 из 8 при пороге 6.
День не закрыт: пункты контрольной обязательны.Когда пункты и точка сданы, проверка отправит к course quiz 10; после вопросов — ещё раз course check 10.
Пересдача — повторный course check 10, попыток сколько угодно. Между проверками — не меньше 15 секунд, каждая попытка пишется в ~/.course/checks. Прогон своего набора вводов быстрее паузы.
Подсказки и время
course hint 10 kt3 работает и на контрольной. Третий уровень на контрольной не даёт ни ответа, ни готового кода: он описывает способ — что трассировать, где искать, какое правило применить. Он попадает в отчёт: задача засчитается, но тему, которая не осела, уже не покажет. Застряли — по порядку: перечитать TASK.txt; набор вводов и прогон; памятка; двадцать минут отладочной печати или отладчика; только потом первый уровень подсказки.
На контрольную заложите около трёх часов. Первые десять минут прочитайте все восемь TASK.txt. Начните с задач, в которых уверены. Получас на задачу — это не норма, а сигнал: просидели над одной полчаса без движения — отложите её и берите следующую, вернётесь потом. course check 10 — после каждой решённой задачи.
Что может пойти не так
| Что видите | Что это значит | Что делать |
|---|---|---|
в kt1 нет файлов .go |
main.go не создан или в другой папке |
~/gocourse/day10/kt1/main.go |
обычный вывод (stdout):, дальше а нужно: «» |
сообщение об ошибке ушло в обычный вывод | fmt.Fprintln(os.Stderr, …) |
в kt3 на вводе с ошибкой: обычный вывод (stdout):, строка 1, программа напечатала: «Коробок: 0» |
сообщение напечатано, но программа не остановилась и посчитала дальше | os.Exit(1) сразу после сообщения |
программа завершилась с кодом 0, а нужен 1 |
выход через return или без кода |
os.Exit(1) |
программа работала дольше 5 секунд и была остановлена: ждёт ввода или зациклилась |
условие цикла не меняется | отладочная печать внутри цикла |
изменено строк: 4 (строки import не считаются), можно не больше 3 |
в починке лишнее: отладочная печать, комментарии | diff с оригиналом |
| программа собралась, но итог 0 при непустом вводе | накопитель объявлен дважды: считается во внутренний, печатается внешний | правила видимости — памятка, раздел «Циклы» |
строки нет среди исходных или она использована больше раз, чем в заготовке: «fmt.Println("отладка")» |
в Парсонсе дописана строка | убрать строку |
Строк с шагами в таблице 20, а нужно 21 |
удалена строка таблицы или у шапки пропал # |
вернуть число строк заготовки |
Материал дня закончен. Задания — course lab 10, дополнительное чтение — course extra 10