// soustavy.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include #include #include static HANDLE s_console; #define COLOR_TEXT 0b0111 #define COLOR_ZERO 0b1000 #define COLOR_PIVOT_OK 0b1010 #define COLOR_PIVOT_BAD 0b1100 #define COLOR_OTHER 0b1111 #define COLOR_BVEC 0b0111 void Color(WORD color) { SetConsoleTextAttribute(s_console, color); } class Matrix { size_t m_m; size_t m_n; std::vector m_data; public: Matrix(size_t m, size_t n) : m_m(m), m_n(n), m_data(m* n) {} float& At(size_t i, size_t j) { return m_data[i * m_n + j]; } void Print(const char* format) { size_t min_pivot = 0; for (size_t i = 0; i < m_m; ++i) { size_t pivot = 0; for (size_t j = 0; j < m_n; ++j) { auto val = At(i, j); WORD color = COLOR_OTHER; if (j == m_n - 1) { color = COLOR_BVEC; } else if (std::abs(val) < 0.00001f) { if (pivot == j) ++pivot; color = COLOR_ZERO; } else if (pivot == j) { color = pivot >= min_pivot ? COLOR_PIVOT_OK : COLOR_PIVOT_BAD; min_pivot = pivot + 1; } if (j == m_n - 1) { Color(COLOR_TEXT); printf(" |"); } Color(color); printf(format, val); } printf("\n"); } Color(COLOR_TEXT); } }; template T Input(const char* prompt) { std::cout << prompt << " = "; T a; std::cin >> a; return a; } int main() { s_console = GetStdHandle(STD_OUTPUT_HANDLE); Color(COLOR_TEXT); auto m = Input("m"); auto n = Input("n"); std::vector history; { Matrix mat(m, n); for (size_t i = 0; i < m; ++i) { for (size_t j = 0; j < n; ++j) { //mat.At(i, j) = 0.0f; std::cin >> mat.At(i, j); } } history.push_back(mat); } printf("\nupravy:\n s ....... prohodit radky i1 a i2\n m ......... vynasobit radek i konstantou k\n a ... pricist k-nasobek i1 k i2\n f ........ zmenit format vystupu\n u ................. undo\n"); std::string fmt("%4.0f"); while (true) { history.push_back(history.back()); auto& mat = history.back(); printf("\n"); mat.Print(fmt.c_str()); printf("\n? "); char op; size_t i1, i2; float k, temp; std::cin >> op; switch (op) { case 's': { std::cin >> i1 >> i2; --i1; --i2; for (size_t j = 0; j < n; ++j) { temp = mat.At(i1, j); mat.At(i1, j) = mat.At(i2, j); mat.At(i2, j) = temp; } break; } case 'm': { std::cin >> i1 >> k; --i1; for (size_t j = 0; j < n; ++j) mat.At(i1, j) *= k; break; } case 'a': { std::cin >> k >> i1 >> i2; --i1; --i2; for (size_t j = 0; j < n; ++j) mat.At(i2, j) += mat.At(i1, j) * k; break; } case 'f': std::cin >> fmt; break; case 'u': if (history.size() > 2) { history.pop_back(); history.pop_back(); } break; default: break; } } //printf("m(%u) n(%u)\n", m, n); std::cout << "Hello World!\n"; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file