Change History (8)

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

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

Решение не собирается:

{lab_04}[2340]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/sabirova.milyausha/lab_04
Updating '.':
At revision 1327.
{lab_04}[2341]$ make
cc -c -Wall -Wextra -Werror -Iinclude -fsanitize=address   -c -o src/main.o src/main.c
src/main.c:3:1: error: unknown type name ‘using’
    3 | using namespace std;
      | ^~~~~
src/main.c:3:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘std’
    3 | using namespace std;
      |                 ^~~
<builtin>: recipe for target 'src/main.o' failed
make: *** [src/main.o] Error 1

comment:2 Changed 5 years ago by Milyausha Sabirova

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

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

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

Не работает сортировка строк из условия:

{lab_04}[2114]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/sabirova.milyausha/lab_04
Updating '.':
At revision 1629.
{lab_04}[2115]$ make
mkdir obj
gcc -c -Wall -Wextra -Werror -Iinclude -fsanitize=address src/mergesort.c -o obj/mergesort.o
gcc -c -Wall -Wextra -Werror -Iinclude -fsanitize=address src/main.c -o obj/main.o
gcc obj/mergesort.o obj/main.o  -o lab_04 -fsanitize=address
{lab_04}[2116]$ ./lab_04 str foo bar bazooka baz
foo bar bazooka baz 

За другие пройденные тесты +2.

По коду: реализация mergesort с точностью до скобок, имен переменных и вынесения функции merge совпадает с решением #281.

Раз так получилось, что решения совпали и в реализации есть недочеты, а ваше решение я проверяю позже, вы должны будете исправить перечисленные замечания для получения полного балла:

  • main.c - храните данные для сортировки в динамической памяти, а не в массиве переменной длины (array) (+2 балла);
  • mergesort.c - реализуйте mergesort, используя один вызов функции malloc в реализации, и добавьте аварийное завершение работы программы (assert), если память выделить не удалось (+2 балла);
  • mergesort.c - реализуйте mergesort, используя единственный цикл (сейчас их три) (+2 балла).

Таким образом, если не исправлять недочеты, описанные выше, максимальный балл будет 10 - 2*3 = 4, при условии, что исправленная программа пройдет все тесты.

При посылке новой версии, напишите, пожалуйста, какие из замечаний выше были исправлены.

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

comment:4 Changed 4 years ago by Milyausha Sabirova

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

1) Исправила компаратор для строк, теперь для них сортировка работает.
2) Сделала в main.c хранение данных в динамической памяти, а не массиве
3) В mergesort.c после выделения динамической памяти добавила аварийное завершение работы программы, если память не выделилась.

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

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

Все еще есть ошибки при работе с памятью:

{lab_04}[2050]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/sabirova.milyausha/lab_04
Updating '.':
At revision 1712.
M       Makefile
{lab_04}[2051]$ svn diff Makefile 
Index: Makefile
===================================================================
--- Makefile	(revision 1712)
+++ Makefile	(working copy)
@@ -1,11 +1,11 @@
 CC = gcc
 
-CFLAGS=-c -Wall -Wextra -Werror -Iinclude -fsanitize=address
+CFLAGS=-c -Wall -Wextra -Werror -Iinclude
 
 all: lab_04
 
 lab_04: obj/mergesort.o obj/main.o
-	$(CC) obj/mergesort.o obj/main.o  -o lab_04 -fsanitize=address
+	$(CC) obj/mergesort.o obj/main.o  -o lab_04
 
 obj:
 	mkdir obj
{lab_04}[2052]$ make
mkdir obj
gcc -c -Wall -Wextra -Werror -Iinclude src/mergesort.c -o obj/mergesort.o
gcc -c -Wall -Wextra -Werror -Iinclude src/main.c -o obj/main.o
gcc obj/mergesort.o obj/main.o  -o lab_04
{lab_04}[2053]$ valgrind ./lab_04 char a a
==5072== Memcheck, a memory error detector
==5072== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==5072== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==5072== Command: ./lab_04 char a a
==5072== 
==5072== Invalid read of size 1
==5072==    at 0x4C31FB4: strcmp (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5072==    by 0x400FAF: comparator.3108 (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==    by 0x400925: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==    by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==  Address 0x5204091 is 0 bytes after a block of size 1 alloc'd
==5072==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5072==    by 0x4007FF: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==    by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072== 
==5072== Invalid read of size 1
==5072==    at 0x4C31FB7: strcmp (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5072==    by 0x400FAF: comparator.3108 (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==    by 0x400925: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==    by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==  Address 0x52040e1 is 0 bytes after a block of size 1 alloc'd
==5072==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5072==    by 0x400834: mergesort (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072==    by 0x400DAB: main (in /home/hfx/dvl/cpp19/sabirova.milyausha/lab_04/lab_04)
==5072== 
a a ==5072== 
==5072== HEAP SUMMARY:
==5072==     in use at exit: 0 bytes in 0 blocks
==5072==   total heap usage: 4 allocs, 4 frees, 1,028 bytes allocated
==5072== 
==5072== All heap blocks were freed -- no leaks are possible
==5072== 
==5072== For counts of detected and suppressed errors, rerun with: -v
==5072== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)

main.c - храните данные для сортировки в динамической памяти, а не в массиве переменной длины (array) (+2 балла);

Сделала в main.c хранение данных в динамической памяти, а не массиве

Ok, +2

mergesort.c - реализуйте mergesort, используя один вызов функции malloc в реализации, и добавьте аварийное завершение работы программы (assert), если память выделить не удалось (+2 балла);

В mergesort.c после выделения динамической памяти добавила аварийное завершение работы программы, если память не выделилась.

+0.5

mergesort.c - реализуйте mergesort, используя единственный цикл (сейчас их три) (+2 балла).

Не сделано.

Кроме того, удалите лишние пустые строки из исходников (e.g. main.c:73)

Итог: 4.5, доделывайте.

comment:6 Changed 4 years ago by Milyausha Sabirova

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

1) Исправила ту ошибку при работе с памятью.
2) в mergesort сделала 1 цикл вместо 3.
3) убрала лишние строки.

comment:7 Changed 4 years ago by Milyausha Sabirova

Version: 1.02.0

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

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

Не собирается решение -> -1:

{lab_04}[2135]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/sabirova.milyausha/lab_04
Updating '.':
At revision 1802.
{lab_04}[2136]$ make
mkdir obj
gcc -c -Wall -Wextra -Werror -Iinclude -fsanitaze=address src/mergesort.c -o obj/mergesort.o
gcc: error: unrecognized command line option ‘-fsanitaze=address’; did you mean ‘-fsanitize=address’?
Makefile:14: recipe for target 'obj/mergesort.o' failed
make: *** [obj/mergesort.o] Error 1

1) Исправила ту ошибку при работе с памятью.

Ok, +2 за корректность.

2) в mergesort сделала 1 цикл вместо 3.

+2

3) убрала лишние строки.

Не совсем: main.c:72.

Замечания:

  • в mergesort.h заголовочные файлы подключаются до include guard, а должны внутри него;
  • в функции mergesort все переменные объявляются в начале функции (а-ля Pascal). В C/C++ зачастую переменные объявляются в месте первого использования.

--
Итог: 7.5

Note: See TracTickets for help on using tickets.