Opened 5 years ago

Closed 5 years ago

#390 closed ожидается проверка (задача сдана)

WW #4

Reported by: kozubaev.nurmukhammad Owned by: Egor Suvorov
Component: WW_mergesort Version: 3.0
Keywords: Cc:

Description

Что то с этой лабой дела пошли не очень. Из-за контрольных и сессии не смог достаточно уделить время. Знаю что опоздал, и что баллов скорее всего не будет. Но был бы рад, если вы смогли бы помочь с решением Segmentation fault error.

Change History (5)

comment:1 Changed 5 years ago by Egor Suvorov

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

А где у вас segmentation fault? Добавить вывод ответа — и версия 1445 все наши тесты проходит даже под Valgrind. Да и код более-менее корректно выглядит.

merge так вообще очень ловко и изящно сделали на одних указателях без индексов. Прям круто, я про такое раньше не думал. Добавлю за это допбалл по стилю, если сдадите корректность.

Так что добавляйте вывод ответа (желательно пробел в конце строки не выводить, это +0.5 по корректности) и получайте свои баллы :)

Итого корректность:

  1. Не выводится ответ на экран никак.
  2. В mergesort.h надо не свой typedef делать, а подключать стандартный заголовок <stddef.h>, в котором объявлен size_t. Он не всегда равен unsigned long.
  3. memcpy — это хорошо, но в задании надо всё копирование элементов делать руками (как вы делаете в while.

По стилю:

  1. Несколько поехали пробелы: например, между for и (, пройдитесь автоформаттером.
  2. merge — лучше не вычислять тут size заново, а передать его из mergesort. Меньше кода синхронизировать => меньше шансов посадить баг.
  3. elements/size/split — названия путаются. Стоит как-то назвать так, чтобы было ясно, что это: а) названия; б) чем между собой отличаются; в) нельзя было случайно вместо одного написать другое. Одна из идей: давайте merge будет принимать p1, p2 и dest, три разных массива, и их длины. Тогда получится очень красивый merge. А mergesort уже будет выделять временную память и что-то куда-то копировать.
  4. Переменная i не используется. Для симметрии, наверное, нужна, но тут лучше напрямую сравнить p2 с концом массива. Будет чуть изящнее, мне кажется.
  5. В mergesort лучше сделать early return: не if (elements > 1) { ... }, а if (elements <= 1) return; ... }
  6. StrCmp/CompareInt — в Си принят snake_case.
  7. StrCmp уже есть в стандартной библиотеке почти с таким названием, возьмите оттуда. Тем более что вы его и так используете, а не свою реализацию.
  8. В main сделайте цепочку из else if, а в конце поставьте else assert(!"Unknown type to sort") — чтобы не заглушалась ошибка "пользователь передал не тот тип в качестве первого параметра". Если передаст — сработает ветка else, а в ней — assert, который всегда падает.

comment:2 Changed 5 years ago by kozubaev.nurmukhammad

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

Добавил вывод. Свой memcpy(добавил в mergesort.h). По стилю : исправил все, кроме 3 и 4. В 3 сделал новые более понятные имена переменных. Реализацию mergesort не менял.

comment:3 Changed 5 years ago by Egor Suvorov

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

Корректность (баллы пока не ставлю, переоткройте тикет, чтобы поставил):

  1. merge_sort --> mergesort
  2. myMemcpy нужен только в mergesort.c => не надо его объявлять в mergesort.h.
  3. Не работает на пустых массивах.

Стиль:

  1. Не объявляйте переменные в начале функции. Объявляйте их только там, где они нужны. А конкретно element_size в main вообще не нужен.
  2. myMemcpy --> my_memcpy (в Си принят snake_case).
  3. my_mem_cpy --> my_memcpy.
  4. unsigned int в my_mem_cpy --> size_t для симметрии с аргументами.
  5. cmp-t не нужен.
  6. Возьмите автоформаттер с ограничение на длину строки побольше, а то переносы строк в compare_int вообще не смотрятся.
  7. else { return; } — бесполезная конструкция в конце функции.
  8. merge_sort: number_of_elements --> elements или elements_count.
  9. size_of_subarray — не точно. Подмассивов у нас много. Лучше, например, left_size или, ещё лучше, left_elements (чтобы подчеркнуть, что это количество элементов, а не байт).
  10. Лишние пробелы между * и указателем.
  11. my_mem_cpy используется только один раз => возможно, лучше убрать. Как хотите.

comment:4 Changed 5 years ago by kozubaev.nurmukhammad

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

comment:5 Changed 5 years ago by Egor Suvorov

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

Баллы за корректность — 6/7.

Баллы за стиль — 1.5/3 плюс допбалл за изящное решение на указателях.

Итого 8.5/10.

Можете дорешать, если хотите — просто переоткройте тикет.

Note: See TracTickets for help on using tickets.