Change History (5)

comment:1 Changed 5 years ago by Артур Гулецкий (huletski)

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

Собирается (+0.01), вывод отличается от ожидаемого:

{lab_04}[2352]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/gabitov.daniil/lab_04
Updating '.':
At revision 1327.
{lab_04}[2353]$ make
mkdir obj
gcc -c -Wall -Wextra -Werror -std=c99 -fsanitize=address -g -o obj/mergesort.o src/mergesort.c -Iinclude
gcc -c -Wall -Wextra -Werror -std=c99 -fsanitize=address -g -o obj/main.o  src/main.c -Iinclude
gcc  -fsanitize=address obj/mergesort.o obj/main.o  -o lab_04
{lab_04}[2354]$ ./lab_04 int -1 0 2 0 3
Hello world!

comment:2 Changed 5 years ago by Артур Гулецкий (huletski)

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

comment:3 Changed 5 years ago by Артур Гулецкий (huletski)

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

Не работает сортировка строк, в частности пример из задания:

{lab_04}[2046]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/gabitov.daniil/lab_04
Updating '.':
At revision 1601.
{lab_04}[2047]$ make
mkdir obj
gcc -c -Wall -Wextra -Werror -std=c99 -fsanitize=address -g -o obj/mergesort.o src/mergesort.c -Iinclude
gcc -c -Wall -Wextra -Werror -std=c99 -fsanitize=address -g -o obj/main.o  src/main.c -Iinclude
gcc  -fsanitize=address obj/mergesort.o obj/main.o  -o lab_04
{lab_04}[2048]$ ./lab_04 str foo bar bazooka baz
baz bazooka bar foo 

Тесты частично проходят -> +4.

Замечания:

  • массивы с переменным размером в общем случае лучше не использовать, так как стека может не хватить. Используйте динамическую память;
  • объявление cpy лучше убрать из mergesort.h, так как она "локальна" для mergesort.c;
  • mergesort:50. Цикл выглядит избыточным, почему не копировать из tmp_cur в array elem_sz * elem_nm байт?
  • можно ли как-то изменить сигнатуру cpy для того, чтобы можно было легче (~логичнее) запомнить копирование происходит из первого массива во второй или наоборот?

--
Итог: 4/10, доделывайте.

comment:4 Changed 5 years ago by gabitov.daniil

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

comment:5 Changed 5 years ago by Артур Гулецкий (huletski)

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

Поведение на пустом массиве:

{lab_04}[2123]$ pwd && svn up && svn status && make
/home/hfx/dvl/cpp19/gabitov.daniil/lab_04
Updating '.':
At revision 1629.
mkdir obj
gcc -c -Wall -Wextra -Werror -std=c99 -fsanitize=address -g -o obj/mergesort.o src/mergesort.c -Iinclude
gcc -c -Wall -Wextra -Werror -std=c99 -fsanitize=address -g -o obj/main.o  src/main.c -Iinclude
gcc  -fsanitize=address obj/mergesort.o obj/main.o  -o lab_04
{lab_04}[2124]$ ./lab_04 int
What am i supposed to do? Give me some data! 

Отвечая на вопрос: передали пустой массив, а он - отсортированный массив -> вывести его. Могли бы еще usage напечатать (хотя в условии было сказано, что пустой массив - корректные данные).

Замечания:

  • странный стиль расстановки пустых строк: между include-ами и cpy - ни одной, между cpy и mergesort - три;
  • порядок аргументов в cpy: дали осмысленные имена аргументам -> стало получше, но все равно недостаточно интуитивно. Семантически cpy реализует операцию присваивания содержимого блоков памяти (а-ля strcpy). Для встроенных типов присваивание записывается как a = b ~> =(a, b) (левый - приемник, правый - источник). Если перенести тот же принцип на специальное присваивание по значению, то data1 =_by_value data2 -> data1 cpy data2 -> cpy(data1, data2, <details>). Кроме того, стандартная memcpy имеет такой же порядок аргументов (приемник, источник).
  • после вызова malloc не проверяется была ли выделена память, не забывайте это делать (если выделить не удалось, можно падать по assert'у).

--
Итог: 10

Note: See TracTickets for help on using tickets.