LShelagin / cpp_course

0 stars 0 forks source link

Замечания по workshop2 #6

Open sergey-shambir opened 6 years ago

sergey-shambir commented 6 years ago

Ошибка компиляции workshop2: компилятор увидел определение функции, в котором нет типа возвращаемого значения.

/home/sergey/App/Projects/Learn/SFML/PS-1/PS_11/shelagin.lev/workshop2/workshop2.6/main.cpp:62:37: error: ISO C++ forbids declaration of ‘removeDeathBalls’ with no type [-fpermissive]
 removeDeathBalls(vector<Ball> &balls)
                                     ^
workshop2.6/CMakeFiles/workshop2.6.dir/build.make:62: ошибка выполнения рецепта для цели «workshop2.6/CMakeFiles/workshop2.6.dir/main.cpp.o»
make[2]: *** [workshop2.6/CMakeFiles/workshop2.6.dir/main.cpp.o] Ошибка 1
CMakeFiles/Makefile2:360: ошибка выполнения рецепта для цели «workshop2.6/CMakeFiles/workshop2.6.dir/all»
make[1]: *** [workshop2.6/CMakeFiles/workshop2.6.dir/all] Ошибка 2
make[1]: *** Ожидание завершения заданий…
/home/sergey/App/Projects/Learn/SFML/PS-1/PS_11/shelagin.lev/workshop2/workshop2.7/main.cpp:62:37: error: ISO C++ forbids declaration of ‘removeDeathBalls’ with no type [-fpermissive]
 removeDeathBalls(vector<Ball> &balls)
                                     ^
[ 85%] Linking CXX executable workshop2.5
LShelagin commented 6 years ago

image

sergey-shambir commented 6 years ago

Ошика здесь: https://github.com/LShelagin/cpp_course/blob/master/workshop2/workshop2.6/main.cpp#L62 Аналогично в workshop2.7 и т.д. У функции не указан тип, стандарт C++ запрещает такое.

/home/sergey/App/Projects/Learn/SFML/PS-1/PS_11/shelagin.lev/workshop2/workshop2.6/main.cpp:62:37: error: ISO C++ forbids declaration of ‘removeDeathBalls’ with no type [-fpermissive]
 removeDeathBalls(vector<Ball> &balls)
sergey-shambir commented 6 years ago

1) Эффект функции createNewBall не соответствует её названию 2) Кроме того, менять цвета существующих шаров при создании нового считаю излишним

void createNewBall(vector<Ball> &balls, vector<Color> &colors, PRNG &generator)
{
    for (int i = 0; i < size(balls); ++i)
    {
        balls[i].ball.setFillColor(getRandomColor(generator, colors));
    }
}
sergey-shambir commented 6 years ago

workshop2.8 работает некорректно: 1) Функции getImpuls (почему не getImpulse?) и getEnergy одинаковы

float getImpuls(vector<Ball> &balls, const float BALL_SIZE)
{
    float impuls;
    for (int i = 1; i < size(balls); ++i)
    {
        impuls += pow(BALL_SIZE, 3) * sqrt(pow(balls[i].speed.x, 2) + pow(balls[i].speed.y, 2));
    }
    return impuls;
}

float getEnergy(vector<Ball> &balls, const float BALL_SIZE)
{
    float energy;
    for (int i = 1; i < size(balls); ++i)
    {
        energy += pow(BALL_SIZE, 3) * (pow(balls[i].speed.x, 2) + pow(balls[i].speed.y, 2));
    }
    return energy;
}

2) Закон сохранения импульса выполняется в векторной форме: т.е. надо вычислить и сложить вектора импульсов по всем шарикам, а потом можно вычислить длину полученного суммарного вектора импульса. Именно длину вектора суммарного импульса можно сравнивать до и после расчёта соударений.