Opened 5 years ago
Closed 4 years ago
#254 closed ожидаются исправления (задача сдана)
WW #4
Reported by: | potryasaeva.anna | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW_mergesort | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (8)
comment:1 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Тесты проходит, +10. Бонусное задание, насколько я понял, вы не делали.
Замечания:
- не соблюдается единый стиль отступов (
main.c
) -> -1; - нечитаемые строки по 100+ символов в
mergesort.c
-> -0.5, надо переформатировать код так, чтобы максимальная длина каждой строки не превышала 80 либо 100 символов; - условие
mergesort.c:11
нетривиально, сохраняйте результат его вычисления в переменной с осмысленным именем и используйте ее для сравнения -> -0.5; - использование
memcpy
противоречит условию ("Все операции, связанные с копированием памяти, надо реализовать самостоятельно.") -> -2; - проверьте, чтобы все вызовы функций были написаны в одном стиле (где-тo есть пробелы перед запятой, где-то нет, например,
mergesort.c:33
).
Итог: 6/10, для получения большего числа баллов нужно исправлять замечания.
comment:4 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:5 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Изменения ничего не поломали, но по стилю все еще остаются замечания:
- победить 100+ строки не удалось (
mergesort.c:5, 12
. В первом случае поможет форматирование (также делающее сигнатуру более наглядной)void merge(void *dst, void *left, size_t left_sz, void *right, size_t right_sz, comparator)
, второй случай см. в следующем замечании -> -0.5;
- условие
mergesort.c:12
нетривиально, чтобы понять его смысл и мотивацию, надо анализировать код в ветках условия. Если вынести условие в отдельную переменную с осмысленным именем, код станет более очевидным. В вашем случае, происходит выбор источника для следующего элемента для записи в буфер, что можно артикулировать так:int left_is_src = ...; if (left_is_src) { ...} else { ...}
Код станет нагляднее, кроме того, станет совсем уж очевидно, что в ветках if-a код дублируется и можно записать его более линейно (проще для восприятия):
int use_left_as_src = ...; void src = use_left_as_src ? left + elem_sz * left_i++ : right + elem_sz * right_i++; // copy elem from src to buffer
- дублирование кода копирования элементов, надо вынести в отдельную функцию (e.g. my_memcpy) -> -1;
- mergesort.c: подключение string.h избыточно;
- mergesort.c: смущает обилие кастов (visual noise, затрудняет чтение), замена типа переменной data на char* напрашивается (как минимум).
Итог: 8.5/10.
comment:6 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:7 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Изменения ничего не поломали, по стилю все еще есть замечания:
- в
mergesort.c
все еще есть строки по 100+ символов -> -0.5; - сломался единый стиль отступов -> -0.5;
- условие не вынесено в переменную - ок, если считаете, что без этого лучше;
- подключение
string.h
вmergesort.c
избыточно; - теперь в коде выполняются арифметические операции с указателями на void (расширение GCC), это не по стандарту. Измените код так, чтобы он компилировался с
-pedantic-errors
-> -0.5.
Итог: 8.5/10.
Note: See
TracTickets for help on using
tickets.
Программа не собирается, в решении присутствуют артефакты сборки: