Opened 5 years ago
Closed 4 years ago
#411 closed ожидается проверка (задача сдана)
WW #5
Reported by: | chaykova.anastasiya | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | WW_c_io | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (25)
comment:1 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:3 Changed 5 years ago by
Version: | → 1.0 |
---|
comment:5 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Точнее, давайте так: я по умолчанию жду доделок, но если хотите — переключайте тикет обратно на меня, я проверю и выставлю баллы.
comment:6 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Всё-таки проверю, чтобы у вас была информация.
comment:7 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|
comment:8 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность:
main.o
зависит ещё и отclist.h
, на самом деле. Да иpoint_list.o
тоже.- Утекает память.
clist.c
не должен никак зависеть отpoint_list.*
,print_point
должно быть реализовано вmain.c
. В крайнем случае —point_list.c
.
Баллы за корректность 2/7:
- Корректные заголовочные файлы +0.5
- Во всех исходных файлах подключены нужные заголовки и только они +0.5
- Корректно работает загрузка из текстовых файлов (в том числе отрицательные координаты) и команда print реализована при помощи apply (возможно, без параметра void *data), но есть утечки +0.5
- Формат вывода в реализованной print строго соблюдается +0.5
По стилю 2/3:
a
/b
— так себе имена для координат.- Не нужен пробел внутри строчки формата
fscanf
.
comment:9 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:10 Changed 5 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
По корректности близко, но лучше не стало: кучи UB в командах count
, print
. Запустите под Valgrind.
По стилю:
- Всё ещё актуальны старые замечания.
- У вас чтение из текстового файла повторяется четыре раза абсолютно одинаково.
- Аналогично, команды
savebin
/savetext
/print
/count
повторяются два раза абсолютно одинаково. - Никогда не делайте
freopen
наstdin
/stdout
за пределами олимпиадных задач. Используйте файловый ввод-вывод.
Я очень рекомендую сначала избавиться от дублирования (разделите ввод и вывод), а потом уже править баги. Тем более что в процессе избавления от дублирования вы наверняка либо избавитесь от багов (они у вас, вероятно, из-за копипасты и "недоисправления"), либо их найдёте и всё равно исправите.
comment:11 Changed 5 years ago by
Owner: | changed from chaykova.anastasiya to Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:12 Changed 4 years ago by
Owner: | changed from Suvorov to Egor Suvorov |
---|
comment:13 Changed 4 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|
Корректность 7/7, ура!
По стилю 1.5/3:
buff12/
buff2` - это координаты, пусть называются, как координаты.- Переменные
n
/m
не нужны. Проверяйте результатfread
сразу. И лучше не хитрое условие вwhile
, а простоbreak
. Или в условиеwhile
поставить самfread
. - Поставьте
assert
наargc
:>= минимальное_количество_аргументов
. - Не стоит создавать массив
data
на все точки сразу (стэк может переполниться), лучше записывать по одной точке. - Объявления функций
print
,count
,savetext
в начале файла не нужны.
comment:14 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:15 Changed 4 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|
comment:16 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:17 Changed 4 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность полная.
Стиль 1.5/3:
- Незачем инициализировать
x
/y
при чтении из текстового файла. - При чтении бинарного файла лучше проверяйте, что
fread == 1
. Потому что в случае EOF может вернуться именноEOF
, а он не равен нулю. while (1) { if (x) break; y; }
— этоwhile (!x) { y; }
- Несимметричные названия:
loadtext
vssavetext_file
. - Мойте тарелки перед едой: смотрю на
data
/index
. - Запись в бинарный файл лучше сделать так же, как и в текстовый — через
apply
.
comment:18 Changed 4 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:19 Changed 4 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность полная.
По стилю 2.5/3:
- Проверьте
argv[1]
вместо простой веткиelse
. Например,load_text
сейчас у вас обработается, какloadbin
, а хорошо бы получить человеческую ошибку. - Замените цепочку
if
на цепочкуelse if
, а в конце добавьтеelse assert(!"Unknown command")
, чтобы нельзя было вызвать программу с неверными аргументами и не узнать. Это надо в двух местах вmain
сделать. void *data
вsave_text
используется несимметрично по сравнению с остальными: не сохраняется в переменную с правильным типом и именем в первых строчках.
comment:20 Changed 4 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:21 Changed 4 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
По стилю стало лучше, но блокирует первый пункт, пока что 2.5/3:
- Не
char *file
точно. Тип другой. save_bin
: поставьтеpnode
иchar* file
в таком же порядке в самом начале процедуры, как и вsave_text
. Все четыре процедуры должны читаться по одинаковому шаблону: преобразовали параметр (или не используем), преобразовалиnode
(или не используем), дальше уже содержательный текст.- В
save_bin
можно просто завести массив без переменнойindex
:char buffer[] = { 0, 1, 2, 3, 4, 5 };
(с переводами строк). - Дополнительные скобочки в
while ((fread(...) == 1))
не нужны. - Добавьте пустые строчки в
main()
между логическими блоками: инициализация, чтение файла, запись файла, деинициализация.
comment:22 Changed 4 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:23 Changed 4 years ago by
Owner: | changed from Egor Suvorov to chaykova.anastasiya |
---|---|
Type: | ожидается проверка → ожидаются исправления |
2.8/3, остались совсем мелочи — пункты 2 и 3.
Например, можно везде сначала обрабатывать in_node
(либо (void)in_node
, либо point_node *p = ...
), потом второй строчкой везде обрабатывать data
(либо (void)data
, либо что-то ещё), а потом уже всё остальное.
Сейчас каждую функцию приходится отдельно читать.
comment:24 Changed 4 years ago by
Owner: | changed from chaykova.anastasiya to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:25 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Ой, плохо сформулировал один из пунктов, сорри. Давайте 3/3, итого 10/10, но подразумевалось вот это:
char buffer[] = { p->x & 0xFF, (p->x >> 8) & 0xFF, (p->x >> 16) & 0xFF, p->y & 0xFF, (p->y >> 8) & 0xFF, (p->y >> 16) & 0xFF };
Корректность до засчитывания попытки:
apply
не должен ничего выводить на экран. Он вообще ничего не знает про то, какая операция применяется.