Разработка программы расчета значений функций, решения нелинейного уравнения и вычисления интеграла
Скачать 0.84 Mb.
|
Текст программы#include #include #include #include #include #include #include #define PI 3.141592653589793238462643383279502884L /* pi */ using namespace std; void about() { system("color F5"); setlocale(LC_ALL, "Russian"); system("cls"); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); printf( "\n" "\t\t\t\tОмГТУ\t\t\t\t\t\n" "\t\t\t\tФИТиКС\t\t\t\t\t\n" "\t\t\t\tРГР по програмированию\t\t\t\n" "\t\t\t\tПИН-191\t\t\t\t\t\n" "\t\t\t\tБагаутдинова Алсу\t\n\t\t\t\t\t" "\n" "______@@@__________ @@@______________________________@@@__________ @@@_________\n" "____@______@______@______@_________________________@______@______@______@______\n" "__@_________@__@___________@_____________________@_________@__@___________@____\n" "___@___________@___________@______________________@___________@___________@____\n" "____@______________________@_______________________@______________________@____\n" "_____@____________________@_________________________@____________________@_____\n" "______ @_________________@___________________________ @_________________@______\n" "________ @_____________@______________________________ @______________@________\n" "___________@________@____________________________________@_________@___________\n" "_____________@____@_________________________________________@____@_____________\n" "________________@______________________________________________@_______________\n" "%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); printf("%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c""%c", 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3); _getch(); } void first() { system("cls"); HANDLE hwnd = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hwnd, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY); printf_s("Минимальное значение функций выделено красным цветом.\n"); printf_s("Максимальное значение функций выделено зеленым цветом.\n"); SetConsoleTextAttribute(hwnd, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); float z[16], r[16], k[16], dx, b = 4, x, a, zmin, rmin, zmax, rmax; int i, n = 16; a = 2; dx = fabs(b - a) / (n - 1); k[0] = a; SetConsoleTextAttribute(hwnd, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY); printf_s("--------------------------------------\n"); printf_s("| i | x | F1 | F2 |\n"); printf_s("|___|________|___________|___________|\n"); for (i = 0; i < n; i++) { z[i] = k[i] * cos(k[i] / 2); r[i] = pow(k[i], 1 / 3) + sqrt(2) * pow(exp(k[i]), -k[i]); k[i+1] = k[i] + dx; } zmin = z[0]; rmin = r[0]; zmax = z[0]; rmax = r[0]; for (i = 0; i < n; i++) { if (i) { if (z[i] < zmin)zmin = z[i]; if (z[i] > zmax)zmax = z[i]; if (r[i] < rmin)rmin = r[i]; if (r[i] > rmax)rmax = r[i]; } } for (i = 0; i < n; i++) { printf_s("|%3d|%8.3f|", i + 1, k[i]); if (z[i] == zmin) { SetConsoleTextAttribute(hwnd, FOREGROUND_RED | FOREGROUND_INTENSITY); printf_s("%11.4f", zmin); SetConsoleTextAttribute(hwnd, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY); printf_s("|"); } else if (z[i] == zmax) { SetConsoleTextAttribute(hwnd, FOREGROUND_GREEN | FOREGROUND_INTENSITY); printf_s("%11.4f", zmax); SetConsoleTextAttribute(hwnd, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY); printf_s("|"); } else printf_s("%11.4f|", z[i]); if (r[i] == rmin) { SetConsoleTextAttribute(hwnd, FOREGROUND_RED | FOREGROUND_INTENSITY); printf_s("%11.4f", rmin); SetConsoleTextAttribute(hwnd, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY); printf_s("|\n"); } else if (r[i] == rmax) { SetConsoleTextAttribute(hwnd, FOREGROUND_GREEN | FOREGROUND_INTENSITY); printf_s("%11.4f", rmax); SetConsoleTextAttribute(hwnd, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY); printf_s("|\n"); } else printf_s("%11.4f|\n", r[i]); } printf_s("______________________________________\n\n"); _getch(); } double f(double x) { double f; f = 2 * x * log10(x) - 3; return f; } double FindRoot(double(*f)(double), double a, double b, double e) { double c = 0; while (abs(f(b) - f(a)) > e) { c = (f(b) * a - f(a) * b) / (f(b) - f(a)); if ((f(a) * f(c)) > 0) a = c; else b = c; } return c; } using namespace std; void second() { system("cls"); setlocale(0, ""); system("cls"); system("mode 80, 25"); cout << "Метод половинного деления(бисекции):" << endl; double a, b, e, x, x1; int k; a = 1; b = 10; e = 0.001; cout << "Введите нижнюю границу: "; cin >> a; cout << "Введите верхнюю границу: "; cin >> b; cout << "Интервал: " << a << " - " << b << endl; cout << "Точность: e=" << e << endl; k = 0; if (f(a) * f(b) < 0) { cout << "Условие сходимости выполнено" << endl; k = 0; while (1) { x = (a + b) / 2.0; k = k + 1; if (fabs(f(x)) < e) break; if (f(a) * f(x) < 0) { a = a; b = x; } else { a = x; b = b; } } cout << "Корень: x=" << x << endl; cout << "Количество итераций k=" << k << endl; } else { cout << "Условие сходимости выполнено" << endl; } cout << endl << "Метод хорд:" << endl; cout << "Интервал: " << a << " - " << b << endl; if (f(a) * f(b) > 0) { cout << "Неправильный интервал!\n"; } cout << "Точность: e= " << e << endl; x1 = FindRoot(f, a, b, e); cout << "Корень: x = " << x1 << endl; system("pause"); system("cls"); } double funcI(double x) { return (cos(x) / ( x * x+1)); } double integral1(double a, double b, int n) { int i; double result = 0, step; cout << "Интегрирование функции 6.cos/(x^2+1) на промежутке"; cout << "[ " << a << " ; " << b << " ]" << "Количество итераций - " << n << "\n"; cout << "1) Методом прямоугольников: "; step = (b - a) / n; for (i = 0; i < n; i++) { result += funcI(a + step * (i + 0.5)); } result *= step; cout << "значение этого интеграла - "; return result; cout << "\n"; } double integral2(double a, double b, int n) { double y, dy, In; dy = (b - a) / n; y = funcI(a) + funcI(b); for (int i = 1; i < n; i++) { y += 2 * (funcI(a + dy * i)); } In = (b - a) / (2 * n) * y; cout << "2) Методом трапеций: "; cout << "значение этого интеграла - "; return In; cout << "\n"; _getch(); } void graph_1() { float x, b = 5, a = -5; HDC hDC = GetDC(GetConsoleWindow()); HPEN Pen1 = CreatePen(PS_SOLID, 3, RGB(128, 0, 115)); SelectObject(hDC, Pen1); for (x = a; x <= b; x += 0.001) { MoveToEx(hDC, 20 * x + 425, -60 * ((x) * ((cos(x)/ 2))) + 225, NULL); LineTo(hDC, 20 * x + 425, -60 * ((x) * ((cos(x)/ 2))) + 225); } } void graph_2() { float x, b = 10, a = 0; HDC hDC = GetDC(GetConsoleWindow()); HPEN Pen1 = CreatePen(PS_SOLID, 3, RGB(245, 232, 15)); SelectObject(hDC, Pen1); for (x = a; x <= b; x += 0.001) { MoveToEx(hDC, 20 * x + 425, -20 * ((pow(x, 1 / 3)) + sqrt(2) * (pow(exp(x), -x))) + 185, NULL); LineTo(hDC, 20 * x + 425, -20 * ((pow(x, 1 / 3)) + sqrt(2) * (pow(exp(x), -x))) + 185); } } void grafiki() { system("cls"); setlocale(0, ""); cout << "\t\t\t\t Y" << endl; HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); cout << "\n\n\n\n График №1 : \n"; SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); // БЕЖЕВЫЙ cout << " F1 = x * cos(x / 2) \n"; printf("\n"); cout << "\t\tX" << endl; SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); // БЕЛЫЙ cout << "\n\n График №2 : \n"; SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); // КРАСНЫЙ cout << " F2 = x^(1/3)+2^(1/2)*e^(-x)\n"; SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); graph_1(); graph_2(); HDC hDC = GetDC(GetConsoleWindow()); HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255)); SelectObject(hDC, Pen); MoveToEx(hDC, 250, 185, NULL); LineTo(hDC, 600, 185); MoveToEx(hDC, 425, 30, NULL); LineTo(hDC, 425, 340); _getch(); } void gotoxy(int xpos, int ypos) { COORD s; HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); s.X = xpos; s.Y = ypos; SetConsoleCursorPosition(h, s); } void anime() { system("cls"); HANDLE h; h = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(h, FOREGROUND_RED | BACKGROUND_BLUE); for (int i = 0; i < 20; i++) { double v = 1 + rand() % 30; double alpha = PI * rand() / RAND_MAX; for (double t = 0; t < 2; t += 0.1) { double x = v * t * cos(alpha); double y = v * t * sin(alpha) - 10 * t * t / 2; int x2, y2; x2 = 40 + 0.8 * x; y2 = 15 - 0.9 * y; if (y2 > 23) break; if (x2 > 79) break; gotoxy(x2, y2); printf("%c", 3); Sleep(25); } } _getch(); } void escape() { { } exit(0); } void select(int position) { switch (position) { case 0: about(); break; case 1: first(); break; case 2: second(); break; case 3: system("cls"); double a1, b1, n1; cout << "Введите нижнюю границу" << endl; cin >> a1; cout << "Введите верхнюю границу" << endl; cin >> b1; cout << "Введите количество итераций" << endl; cin >> n1; cout << integral1(a1, b1, n1) << endl;; cout << integral2(a1, b1, n1) << endl; _getch(); break; case 4: grafiki(); break; case 5: anime(); break; case 6: escape(); break; } } int main() { setlocale(LC_ALL, "Russian"); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); WORD active = BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY; WORD nactive = FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_RED | FOREGROUND_INTENSITY; string lines[] = { "\t\t\t\tОб авторе\t\t\t\t", "\t\t\t\tТаблица\t\t\t\t", "\t\t\t\tУравнение\t\t\t\t", "\t\t\t\tИнтеграл\t\t\t\t", "\t\t\t\tГрафики\t\t\t\t", "\t\t\t\tАнимация\t\t\t\t", "\t\t\t\tВыход\t\t\t\t" }; int position = 0; char code; while (true) { system("cls"); for (int i = 0; i < 7; i++) { if (position == i) SetConsoleTextAttribute(handle, active); else SetConsoleTextAttribute(handle, nactive); cout << i + 1 << ")" << lines[i] << endl << endl; } code = _getch(); if (code == 72) { if (position == 0) position = 6; else position--; } if (code == 80) { if (position == 6) { position = 0; } else position++; } if (code == 13) select(position); } } Таблица значений функцийПостроение таблиц в Excel. На рисунке 6 приведены значения функций на интервале [2,4], представленные в виде таблицы. F1= , F2= Рисунок 6 Значения функций на интервале [2,4], Графики функцийРисунок 7 График F1= , Рисунок 8 График F2= Интерфейс программыНа рисунке 9 представлено меню программы. Переход к каждому из разделов меню осуществляется за счет нажатия стрелок на клавиатуре. Рисунок 9 Меню программы На рисунке 10 представлен раздел «Об авторе». Рисунок 10 Сведения об авторе На рисунке 11 изображена таблица значений функций, где красным цветом выделен минимум функции, а зелёным – максимум. Рисунок 11 Таблица значений функций На рисунке 12 показаны графики функций. Изображены оси координат, функции подписаны. Рисунок 12 Графики функций На рисунке 13 представлены методы хорд и бисекции. Рисунок 13 Методы хорд и бисекции На рисунке 14 показаны вычисления интеграла методом трапеции и прямоугольника. Рисунок 14 Вычисления интеграла методом трапеции и прямоугольника На рисунках 15, 16 представлена графическая заставка. Она представляет собой фейрверк. Рисунок 15 Рисунок 16 Список используемой литературыШафеева, О.П. Программирование на языке СИ. Методические указания к лабораторным работам – Омск: издательство ОмГТУ, 2008. Шафеева О.П. Технологии программирования. С++: Учебное пособие – Омск: издательство ОмГТУ, 2007 Шафеева, О.П. Восходящее и нисходящее программирование: учеб.-метод. пособие – Омск: издательство ОмГТУ, 2015. |