Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

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

HW #2

Reported by: yakovlev.aleksandr Owned by: Артур Гулецкий (huletski)
Component: HW #2 (X0) Version: 2.0
Keywords: Cc:

Description


Change History (4)

comment:1 Changed 4 years ago by yakovlev.aleksandr

Промежуточная попытка, вроде работает, но это не точно...

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

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

Наверное работает, если собирается:

{hw_02}[2296]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/yakovlev.aleksandr/hw_02
Updating '.':
At revision 2940.
M       CMakeLists.txt
{hw_02}[2297]$ svn diff
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(revision 2940)
+++ CMakeLists.txt	(working copy)
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.10.2)
+cmake_minimum_required(VERSION 2.9)
 
 project(lab)
 
@@ -28,4 +28,4 @@
 
 add_executable(hw_02 ${SOURCE} ${HEADER})
 add_executable(test_hw_02 ${SOURCE2} ${HEADER2})
-#add_executable(sand ${SOURCE3} ${HEADER3})
\ No newline at end of file
+#add_executable(sand ${SOURCE3} ${HEADER3})
{hw_02}[2298]$ mkdir build && cd build && cmake ..
-- The C compiler identification is GNU 9.2.1
-- The CXX compiler identification is GNU 9.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/g++
-- Check for working CXX compiler: /usr/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hfx/dvl/cpp19/yakovlev.aleksandr/hw_02/build
{build}[2299]$ make
Scanning dependencies of target hw_02
[ 12%] Building CXX object CMakeFiles/hw_02.dir/src/main.cpp.o
[ 25%] Building CXX object CMakeFiles/hw_02.dir/src/Board.cpp.o
[ 37%] Building CXX object CMakeFiles/hw_02.dir/src/StdioBoardView.cpp.o
[ 50%] Linking CXX executable hw_02
[ 50%] Built target hw_02
Scanning dependencies of target test_hw_02
[ 62%] Building CXX object CMakeFiles/test_hw_02.dir/test/test.cpp.o
[ 75%] Building CXX object CMakeFiles/test_hw_02.dir/test/BoardTest.cpp.o
/home/hfx/dvl/cpp19/yakovlev.aleksandr/hw_02/test/BoardTest.cpp: In static member function ‘static bool Test::showFinalResults()’:
/home/hfx/dvl/cpp19/yakovlev.aleksandr/hw_02/test/BoardTest.cpp:17:1: error: no return statement in function returning non-void [-Werror=return-type]
   17 | }
      | ^
cc1plus: all warnings being treated as errors
CMakeFiles/test_hw_02.dir/build.make:86: recipe for target 'CMakeFiles/test_hw_02.dir/test/BoardTest.cpp.o' failed
make[2]: *** [CMakeFiles/test_hw_02.dir/test/BoardTest.cpp.o] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/test_hw_02.dir/all' failed
make[1]: *** [CMakeFiles/test_hw_02.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

В CMakeLists указывайте минимальную версию, которая будет собирать проект; добавьте Makefile, который создает build папку и собирает в ней проект.

Основные проблемы:

  • определение состояния партии, например:
    O.OX.OX...
    XX..OXXOOO
    .OXOXO..O.
    X.OO.XO..X
    X.OX.XXXO.
    OXX.X.XOOX
    .O.OXOX...
    OO..OX.X..
    .O..OX.O.X
    X.O..XXOO.
    O wins!
    
  • ввод данных должен производиться на той же строке, где напечатан prompt;
  • обработка некорректных ходов не реализована (e.g. 0k9 приводит к зависанию программы).

Стиль (по диагонали, тк код, полагаю, будет дописываться)

Board.cpp:101. Используйте тернарный оператор;
StdioBoardView?.cpp: для io должны быть использованы функции stdio, а не потоки;
StdioBoardView?.cpp:20. напрашивается вспомогательная функция state_to_msg, чтобы избежать дублирования;
main.cpp:7. if избыточен, присваивайте условие переменной сразу;

  • не хватает отдельных файлов Test.h и Test.cpp с реализацией класса Test; в BoardTest? маловато тестов, имена тестов мало говорят о проверяемых ситуациях.

Баллы

Корректность: 6;
Стиль: 3 (т.к. код еще будет дописываться)

comment:3 Changed 4 years ago by yakovlev.aleksandr

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

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

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

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

  • неточности в формате вывода: "Bad move!", а не "Bad Move!";
  • ход " 1 1 " должен считаться корректным.

Стиль

Board.h

3: константы, специфичные для класса, лучше делать static constexpr полями класса;
5: лишний include?
18: const у методов отсутствует;
24: refreshState точно нельзя сделать приватным?

Board.cpp

12: списки инициализации;
18: старайтесь называть переменные точнее (e.g. is_inside, point_is_inside);
22: дублирование циклов в методе;
130: метод с прописной буквы?
131: обычно присваивают результат применения тернарного оператора к аргументам:

cur_player = cur_player == Player::X ? Player::O : Player::X;

StdioBoardView?.h

11: std::strncpy(buffer, input.c_str(), input.size() + 1);
40: субъективно switch был бы точнее;

BoardTest?.h

6: и снова призрак iostream'a;


Баллы

Корректность: 19.25;
Стиль: 7.5

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)
Note: See TracTickets for help on using tickets.