/* Program na vypocitanie rovnice o troch neznamych pomocou Sarrusovho pravidla o determinantoch... aspon myslim ze sa to tak nejako vola ;-) Spravu o chybach posielajte na moonware@inmail.sk, aj ked ja dufam ze tu ziadne nebudu, a ak aj budu, ze na ne pridem sam :-) */ // verzia 1.5.2 - zmena z signed int na float a long double // verzia 1.5.1 - pridanie volby exit; po zadani zlej hodnoty program nezacina od zaciatku // verzia 1.5 - zmena pomenovania premennych z obycajnych na array (odstranenie constructora a destructora - uz nepotrebne) // verzia 1.4 - zmena zobrazovania postupu riesenia, pridanie helpu // zmena mena z rovnice_o_troch_neznamych na ro3n kvoli zjednoduseniu; prva verzia s tymto menom je 1.4 // verzia 1.3.1 - pridane "rovnica nema riesenie", teda zabranenie spadnutiu programu, ak D0 == 0 // verzia 1.3 - #define VERSION + postup + otazka na konci (zelate si vypocitat dalsi priklad?) // verzia 1.2 - oprava chyby s deklaraciou globalnych premennych // verzia 1.1 - zmena z int na signed int + pridanie destructora (a teda aj zmena vacsiny premennych na pointerov s pouzitim new a delete) #include #include #include #define VERSION 1.5.2; using namespace std; long double a [3][4]; class cDeterminant { public: void postup (long double D0, long double D1, long double D2, long double D3) { // hlavny determinant --------------------------------------------------------------- cout << "\nPostup riesenia:\n" << endl; cout << " | " << a[0][0] << " " << a[0][1] << " " << a[0][2] << " |" << endl; cout << "D = | " << a[1][0] << " " << a[1][1] << " " << a[1][2] << " | = (" << (a[0][0] * a[1][1] * a[2][2]) << ") + (" << (a[1][0] * a[2][1] * a[0][2]) << ") + (" << (a[2][0] * a[0][1] * a[1][2]) << ") - (" << (a[2][0] * a[1][1] * a[0][2]) << ") - (" << (a[0][0] * a[2][1] * a[1][2]) << ") - (" << (a[1][0] * a[0][1] * a[2][2]) << ") = " << D0 << endl; cout << " | " << a[2][0] << " " << a[2][1] << " " << a[2][2] << " |\n" << endl; cout << "(D = " << a[0][0] << "." << a[1][1] << "." << a[2][2] << " + " << a[1][0] << "." << a[2][1] << "." << a[0][2] << " + " << a[2][0] << "." << a[0][1] << "." << a[1][2] << " - (" << a[2][0] << "." << a[1][1] << "." << a[0][2] << ") - (" << a[0][0] << "." << a[2][1] << "." << a[1][2] << ") - (" << a[1][0] << "." << a[0][1] << "." << a[2][2] << ") = " << D0 << ")\n" << endl; // determinant D1 ------------------------------------------------------------------- cout << " | " << a[0][3] << " " << a[0][1] << " " << a[0][2] << " |" << endl; cout << "D1 = | " << a[1][3] << " " << a[1][1] << " " << a[1][2] << " | = (" << (a[0][3] * a[1][1] * a[2][2]) << ") + (" << (a[1][3] * a[2][1] * a[0][2]) << ") + (" << (a[2][3] * a[0][1] * a[1][2]) << ") - (" << (a[2][3] * a[1][1] * a[0][2]) << ") - (" << (a[0][3] * a[2][1] * a[1][2]) << ") - (" << (a[1][3] * a[0][1] * a[2][2]) << ") = " << D1 << endl; cout << " | " << a[2][3] << " " << a[2][1] << " " << a[2][2] << " |\n" << endl; cout << "(D1 = " << a[0][3] << "." << a[1][1] << "." << a[2][2] << " + " << a[1][3] << "." << a[2][1] << "." << a[0][2] << " + " << a[2][3] << "." << a[0][1] << "." << a[1][2] << " - (" << a[2][3] << "." << a[1][1] << "." << a[0][2] << ") - (" << a[0][3] << "." << a[2][1] << "." << a[1][2] << ") - (" << a[1][3] << "." << a[0][1] << "." << a[2][2] << ") = " << D1 << ")\n" << endl; // determinant D2 ------------------------------------------------------------------- cout << " | " << a[0][0] << " " << a[0][3] << " " << a[0][2] << " |" << endl; cout << "D2 = | " << a[1][0] << " " << a[1][3] << " " << a[1][2] << " | = (" << (a[0][0] * a[1][3] * a[2][2]) << ") + (" << (a[1][0] * a[2][3] * a[0][2]) << ") + (" << (a[2][0] * a[0][3] * a[1][2]) << ") - (" << (a[2][0] * a[1][3] * a[0][2]) << ") - (" << (a[0][0] * a[2][3] * a[1][2]) << ") - (" << (a[1][0] * a[0][3] * a[2][2]) << ") = " << D2 << endl; cout << " | " << a[2][0] << " " << a[2][3] << " " << a[2][2] << " |\n" << endl; cout << "(D2 = " << a[0][0] << "." << a[1][3] << "." << a[2][2] << " + " << a[1][0] << "." << a[2][3] << "." << a[0][2] << " + " << a[2][0] << "." << a[0][3] << "." << a[1][2] << " - (" << a[2][0] << "." << a[1][3] << "." << a[0][2] << ") - (" << a[0][0] << "." << a[2][3] << "." << a[1][2] << ") - (" << a[1][0] << "." << a[0][3] << "." << a[2][2] << ") = " << D2 << ")\n" << endl; // determinant D3 ------------------------------------------------------------------- cout << " | " << a[0][0] << " " << a[0][1] << " " << a[0][3] << " |" << endl; cout << "D3 = | " << a[1][0] << " " << a[1][1] << " " << a[1][3] << " | = (" << (a[0][0] * a[1][1] * a[2][3]) << ") + (" << (a[1][0] * a[2][1] * a[0][3]) << ") + (" << (a[2][0] * a[0][1] * a[1][3]) << ") - (" << (a[2][0] * a[1][1] * a[0][3]) << ") - (" << (a[0][0] * a[2][1] * a[1][3]) << ") - (" << (a[1][0] * a[0][1] * a[2][3]) << ") = " << D3 << endl; cout << " | " << a[2][0] << " " << a[2][1] << " " << a[2][3] << " |\n" << endl; cout << "(D3 = " << a[0][0] << "." << a[1][1] << "." << a[2][3] << " + " << a[1][0] << "." << a[2][1] << "." << a[0][3] << " + " << a[2][0] << "." << a[0][1] << "." << a[1][3] << " - (" << a[2][0] << "." << a[1][1] << "." << a[0][3] << ") - (" << a[0][0] << "." << a[2][1] << "." << a[1][3] << ") - (" << a[1][0] << "." << a[0][1] << "." << a[2][3] << ") = " << D3 << ")\n" << endl;} long double vypocitajD () { return ((a[0][0] * a[1][1] * a[2][2]) + (a[1][0] * a[2][1] * a[0][2]) + (a[2][0] * a[0][1] * a[1][2]) - (a[2][0] * a[1][1] * a[0][2]) - (a[0][0] * a[2][1] * a[1][2]) - (a[1][0] * a[0][1] * a[2][2]));} long double vypocitajD1 () { return ((a[0][3] * a[1][1] * a[2][2]) + (a[1][3] * a[2][1] * a[0][2]) + (a[2][3] * a[0][1] * a[1][2]) - (a[2][3] * a[1][1] * a[0][2]) - (a[0][3] * a[2][1] * a[1][2]) - (a[1][3] * a[0][1] * a[2][2]));} long double vypocitajD2 () { return ((a[0][0] * a[1][3] * a[2][2]) + (a[1][0] * a[2][3] * a[0][2]) + (a[2][0] * a[0][3] * a[1][2]) - (a[2][0] * a[1][3] * a[0][2]) - (a[0][0] * a[2][3] * a[1][2]) - (a[1][0] * a[0][3] * a[2][2]));} long double vypocitajD3 () { return ((a[0][0] * a[1][1] * a[2][3]) + (a[1][0] * a[2][1] * a[0][3]) + (a[2][0] * a[0][1] * a[1][3]) - (a[2][0] * a[1][1] * a[0][3]) - (a[0][0] * a[2][1] * a[1][3]) - (a[1][0] * a[0][1] * a[2][3]));} }; void help () { cout << "\n-----------Napoveda programu ro3n-----------" << endl; cout << "Predpokladajme, ze chceme vypocitat sustavu:" << endl; cout << "5x - y + z = 4" << endl; cout << "2x + y - 3z = 8" << endl; cout << "x - 2y + 5z = -7" << endl; cout << "\n1. krok - zadanie hodnot" << endl; cout << " Postupne zadavame hodnoty premennych, kde:" << endl; cout << " a b c d" << endl; cout << " (5)x + (-1)y + (1)z = (4)" << endl; cout << " e f g h" << endl; cout << " (2)x + (1)y + (-3)z = (8)" << endl; cout << " i j k l" << endl; cout << " (1)x + (-2)y + (5)z = (-7)" << endl; cout << " teda:" << endl; cout << " a = 5; b = -1; c = 1; d = 4" << endl; cout << " e = 2; f = 1; g = -3; h = 8" << endl; cout << " i = 1; j = -2; k = 5; l = -7" << endl; cout << " Kazde zadane cislo odsuhlasime stlacenim\n klavesy enter (return)." << endl; cout << "\n2. krok - vysledok" << endl; cout << " Po zadani vsetkych potrebnych informacii\n sa zobrazi najprv postup." << endl; cout << " Su tu vypocitane vsetky styri\n determinanty." << endl; cout << " Nizsie je zobrazeny vysledok - x, y, z." << endl; cout << " Potom mame moznost program ukoncit,\n alebo vypocitat dalsi priklad." << endl; cout << " Podla vyberu napiseme A alebo N\n a stlacime klavesu enter (return).\n" << endl; } int main () { znova: cout << "\n******************************************" << endl; cout << "* ro3n verzia 1.5.2 *" << endl; cout << "* -------------------------------------- *" << endl; cout << "* Priklad rovnice: *" << endl; cout << "* ax + by + cz = d *" << endl; cout << "* ex + fy + gz = h *" << endl; cout << "* ix + jy + kz = l *" << endl; cout << "* -------------------------------------- *" << endl; cout << "* Napiste help pre viac informacii. *" << endl; cout << "* Napiste exit pre ukoncenie programu. *" << endl; cout << "******************************************" << endl; zadajte: cout << "Zadajte: " << endl; char buffer [50]; // --------------------------------------------------------------------------------------------- znova_a: cout << "a = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[0][0] = atof (buffer); if (a[0][0] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_a;}} // --------------------------------------------------------------------------------------------- znova_b: cout << "b = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[0][1] = atof (buffer); if (a[0][1] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_b;}} // --------------------------------------------------------------------------------------------- znova_c: cout << "c = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[0][2] = atof (buffer); if (a[0][2] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_c;}} // --------------------------------------------------------------------------------------------- znova_d: cout << "d = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[0][3] = atof (buffer); if (a[0][3] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_d;}} // --------------------------------------------------------------------------------------------- znova_e: cout << "e = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[1][0] = atof (buffer); if (a[1][0] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_e;}} // --------------------------------------------------------------------------------------------- znova_f: cout << "f = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[1][1] = atof (buffer); if (a[1][1] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_f;}} // --------------------------------------------------------------------------------------------- znova_g: cout << "g = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[1][2] = atof (buffer); if (a[1][2] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_g;}} // --------------------------------------------------------------------------------------------- znova_h: cout << "h = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[1][3] = atof (buffer); if (a[1][3] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_h;}} // --------------------------------------------------------------------------------------------- znova_i: cout << "i = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[2][0] = atof (buffer); if (a[2][0] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_i;}} // --------------------------------------------------------------------------------------------- znova_j: cout << "j = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[2][1] = atof (buffer); if (a[2][1] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_j;}} // --------------------------------------------------------------------------------------------- znova_k: cout << "k = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[2][2] = atof (buffer); if (a[2][2] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_k;}} // --------------------------------------------------------------------------------------------- znova_l: cout << "l = "; cin.getline (buffer, 50); if ((buffer[0] == 'h') && (buffer[1] == 'e') && (buffer[2] == 'l') && (buffer[3] == 'p')) {help (); goto zadajte;} else if ((buffer[0] == 'e') && (buffer[1] == 'x') && (buffer[2] == 'i') && (buffer[3] == 't')) {cout << "Dovidenia!" << endl; return 0;} else {a[2][3] = atof (buffer); if (a[2][3] == 0) {cout << "\nError, zadajte znovu platne cele cislo, okrem nuly" << endl; goto znova_l;}} // --------------------------------------------------------------------------------------------- cout << endl; cDeterminant determinant; long double D0 = determinant.vypocitajD (); long double D1 = determinant.vypocitajD1 (); long double D2 = determinant.vypocitajD2 (); long double D3 = determinant.vypocitajD3 (); determinant.postup (D0, D1, D2, D3); long double x, y, z; if (D0 == 0) {cout << "\nRovnica nema riesenie." << endl;} else { x = D1 / D0; y = D2 / D0; z = D3 / D0; cout << "\nx = D1 : D = " << x << "\ny = D2 : D = " << y << "\nz = D3 : D = " << z << endl;} vypocitat_dalsi_priklad_a_n: cout << "\nZelate si vypocitat dalsi priklad? [A/N] "; cin.getline (buffer, 2); if ((buffer[0] == 'A') || (buffer[0] == 'a')) {goto znova;} else if ((buffer[0] == 'N') || (buffer[0] == 'n')) {cout << "\nDovidenia!" << endl;} else {goto vypocitat_dalsi_priklad_a_n;}; return 0; }