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 Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Корректность до засчитывания попытки:

  1. apply не должен ничего выводить на экран. Он вообще ничего не знает про то, какая операция применяется.

comment:2 Changed 5 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:3 Changed 5 years ago by chaykova.anastasiya

Version: 1.0

comment:4 Changed 5 years ago by Egor Suvorov

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

comment:5 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Точнее, давайте так: я по умолчанию жду доделок, но если хотите — переключайте тикет обратно на меня, я проверю и выставлю баллы.

comment:6 Changed 5 years ago by Egor Suvorov

Type: ожидаются исправленияожидается проверка

Всё-таки проверю, чтобы у вас была информация.

comment:7 Changed 5 years ago by Egor Suvorov

Owner: changed from chaykova.anastasiya to Egor Suvorov

comment:8 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Корректность:

  1. main.o зависит ещё и от clist.h, на самом деле. Да и point_list.o тоже.
  2. Утекает память.
  3. 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:

  1. a/b — так себе имена для координат.
  2. Не нужен пробел внутри строчки формата fscanf.

comment:9 Changed 5 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:10 Changed 5 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

По корректности близко, но лучше не стало: кучи UB в командах count, print. Запустите под Valgrind.

По стилю:

  1. Всё ещё актуальны старые замечания.
  2. У вас чтение из текстового файла повторяется четыре раза абсолютно одинаково.
  3. Аналогично, команды savebin/savetext/print/count повторяются два раза абсолютно одинаково.
  4. Никогда не делайте freopen на stdin/stdout за пределами олимпиадных задач. Используйте файловый ввод-вывод.

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

comment:11 Changed 5 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Suvorov
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:12 Changed 4 years ago by chaykova.anastasiya

Owner: changed from Suvorov to Egor Suvorov

comment:13 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya

Корректность 7/7, ура!

По стилю 1.5/3:

  1. buff12/buff2` - это координаты, пусть называются, как координаты.
  2. Переменные n/m не нужны. Проверяйте результат fread сразу. И лучше не хитрое условие в while, а просто break. Или в условие while поставить сам fread.
  3. Поставьте assert на argc: >= минимальное_количество_аргументов.
  4. Не стоит создавать массив data на все точки сразу (стэк может переполниться), лучше записывать по одной точке.
  5. Объявления функций print, count, savetext в начале файла не нужны.

comment:14 Changed 4 years ago by Egor Suvorov

Type: ожидается проверкаожидаются исправления

comment:15 Changed 4 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov

comment:16 Changed 4 years ago by chaykova.anastasiya

Type: ожидаются исправленияожидается проверка

comment:17 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Корректность полная.

Стиль 1.5/3:

  1. Незачем инициализировать x/y при чтении из текстового файла.
  2. При чтении бинарного файла лучше проверяйте, что fread == 1. Потому что в случае EOF может вернуться именно EOF, а он не равен нулю.
  3. while (1) { if (x) break; y; } — это while (!x) { y; }
  4. Несимметричные названия: loadtext vs savetext_file.
  5. Мойте тарелки перед едой: смотрю на data/index.
  6. Запись в бинарный файл лучше сделать так же, как и в текстовый — через apply.

comment:18 Changed 4 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:19 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

Корректность полная.

По стилю 2.5/3:

  1. Проверьте argv[1] вместо простой ветки else. Например, load_text сейчас у вас обработается, как loadbin, а хорошо бы получить человеческую ошибку.
  2. Замените цепочку if на цепочку else if, а в конце добавьте else assert(!"Unknown command"), чтобы нельзя было вызвать программу с неверными аргументами и не узнать. Это надо в двух местах в main сделать.
  3. void *data в save_text используется несимметрично по сравнению с остальными: не сохраняется в переменную с правильным типом и именем в первых строчках.

comment:20 Changed 4 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:21 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to chaykova.anastasiya
Type: ожидается проверкаожидаются исправления

По стилю стало лучше, но блокирует первый пункт, пока что 2.5/3:

  1. Не char *file точно. Тип другой.
  2. save_bin: поставьте pnode и char* file в таком же порядке в самом начале процедуры, как и в save_text. Все четыре процедуры должны читаться по одинаковому шаблону: преобразовали параметр (или не используем), преобразовали node (или не используем), дальше уже содержательный текст.
  3. В save_bin можно просто завести массив без переменной index: char buffer[] = { 0, 1, 2, 3, 4, 5 }; (с переводами строк).
  4. Дополнительные скобочки в while ((fread(...) == 1)) не нужны.
  5. Добавьте пустые строчки в main() между логическими блоками: инициализация, чтение файла, запись файла, деинициализация.

comment:22 Changed 4 years ago by chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:23 Changed 4 years ago by Egor Suvorov

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 chaykova.anastasiya

Owner: changed from chaykova.anastasiya to Egor Suvorov
Type: ожидаются исправленияожидается проверка

comment:25 Changed 4 years ago by Egor Suvorov

Resolution: задача сдана
Status: assignedclosed

Ой, плохо сформулировал один из пунктов, сорри. Давайте 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
};
Note: See TracTickets for help on using tickets.