ultimatum424 / OOP

0 stars 0 forks source link

Замечания по программе умножения матриц #2

Open alexey-malov opened 8 years ago

alexey-malov commented 8 years ago

exe не хранить в репозитории. подробности в чеклисте тестовые данные лучше не в выходной директории разместить, а внутри подкаталога проекта

alexey-malov commented 8 years ago
bool ReadFromFile(ifstream& inputFile, float  martix[DIMENSION][DIMENSION])
{
    while (!inputFile.eof())
    {
        for (size_t i = 0; i < DIMENSION; i++)
        {
            for (size_t j = 0; j < DIMENSION; j++)
            {
                string read;
                inputFile >> read;
                martix[i][j] = atof(read.c_str());
                if (((martix[i][j] == 0) && (read != "0")))
                {
                    inputFile.close();
                    return false;
                }
            }
        }
    }
    inputFile.close();
    return true;
}

Функция не должна закрывать файл, т.к. не она его открывала. Кроме того, fstream закроется деструктором данного класса Зачем atof, если можно считать сразу в double из fstream минуя строку. можно проверить результат операции (inputFile >> number). если false, то была ошибка

alexey-malov commented 8 years ago
int main(int argc, char* argv[])
{
    if (argc != 3)
    {
        cout << "wrong number of arguments" << endl << "Usage: <first matrix file> <second matrix file>" << endl;
        return 1;
    }
    else
    {
        ifstream inputFile1;
        ifstream inputFile2;
        ofstream outFile;
        inputFile1.open(argv[1]);
        inputFile2.open(argv[2]);
        if ((inputFile1.is_open()) && (inputFile2.is_open()))
        {
            float  martix1[DIMENSION][DIMENSION];
            float  martix2[DIMENSION][DIMENSION];
            float  resultMartix[DIMENSION][DIMENSION];

            if ((!ReadFromFile(inputFile1, martix1)) || (!ReadFromFile(inputFile2, martix2)))
            {
                cout << "dimension of matrix is not a 3X3";
                return 1;
            }
            MultiplicationMatrix(martix1, martix2, resultMartix);
            outFile.open("result_martix.txt");
            outFile << resultMartix[0][0] << " " << resultMartix[0][1] << " " << resultMartix[0][2] << endl;
            outFile << resultMartix[1][0] << " " << resultMartix[1][1] << " " << resultMartix[1][2] << endl;
            outFile << resultMartix[2][0] << " " << resultMartix[2][1] << " " << resultMartix[2][2] << endl;
            outFile.close();
        }
        else
        {
            cout << "Erorr: Can't open file" << endl;
            return 1;
        }
    }
    return 0;
}

слишком сложный код. так нормально:

alexey-malov commented 8 years ago
void MultiplicationMatrix(float martix1[DIMENSION][DIMENSION], float martix2[DIMENSION][DIMENSION], float resultMartix[DIMENSION][DIMENSION])
{
    resultMartix[0][0] = martix1[0][0] * martix2[0][0] + martix1[0][1] * martix2[1][0] + martix1[0][2] * martix2[2][0];
    resultMartix[0][1] = martix1[0][0] * martix2[0][1] + martix1[0][1] * martix2[1][1] + martix1[0][2] * martix2[2][1];
    resultMartix[0][2] = martix1[0][0] * martix2[0][2] + martix1[0][1] * martix2[1][2] + martix1[0][2] * martix2[2][2];

    resultMartix[1][0] = martix1[1][0] * martix2[0][0] + martix1[1][1] * martix2[1][0] + martix1[1][2] * martix2[2][0];
    resultMartix[1][1] = martix1[1][0] * martix2[0][1] + martix1[1][1] * martix2[1][1] + martix1[1][2] * martix2[2][1];
    resultMartix[1][2] = martix1[1][0] * martix2[0][2] + martix1[1][1] * martix2[1][2] + martix1[1][2] * martix2[2][2];

    resultMartix[2][0] = martix1[2][0] * martix2[0][0] + martix1[2][1] * martix2[1][0] + martix1[2][2] * martix2[2][0];
    resultMartix[2][1] = martix1[2][0] * martix2[0][1] + martix1[2][1] * martix2[1][1] + martix1[2][2] * martix2[2][1];
    resultMartix[2][2] = martix1[2][0] * martix2[0][2] + martix1[2][1] * martix2[1][2] + martix1[2][2] * martix2[2][2];
}

Исходные матрицы должны быть константными. Имена аргументов лучше укоротить: lhs и rhs (left-hand side right-hand side) mat1 и mat2

alexey-malov commented 8 years ago

K=0,7