МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ БУДІВНИЦТВА ТА АРХІТЕКТУРИ КАФЕДРА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ Звіт з лабораторних робіт з дисципліни «Алгоритмізація та програмування» Варіант №8 Студента 1 курсу групи КСМ-11 напряму підготовки Корут Денис Віталійович Перевірила: к.т.н., доцент Київська К.І. Національна шкала_________________ Кількість балів:____________________ Оцінка:ECTS______________________ ___________ _____________________ (підпис) (прізвище та ініціали) ___________ _____________________ (підпис) (прізвище та ініціали) ___________ _____________________ (підпис) (прізвище та ініціали) м. Київ - 2020 ЛАБОРАТОРНА РОБОТА № 1. Програмування лінійного обчислювального процесу Завдання 1.1 Скласти програму для обчислення математичного виразу Математична постановка задачі (МПЗ).
Схема алгоритму (СА). Текстовий приклад.
Висновок: Результат розрахунків мають незначну похибку, тому можна вважати, що програма написана вірно. Код програми. //Корут, Денис, ВАРІАНТ №8 #include #include using namespace std; int main() { float y, x, b; cout << "x="; cin >> x; cout << "y="; cin >> y; b = 1 + abs(y - x) + pow((y - x), 2) / 2 + pow((y - x), 3) / 3; cout << "b=" << b; system("pause"); return 0; } Завдання 1.2Розробити математичну постановку задачі та скласти програму для обчислення площі та периметру трикутника Математична постанова задачі (МПЗ):
Схема алгоритму (СА). Текстовий приклад.
Висновок: Результат розрахунків мають вірні результати, тому можна вважати, що програма написана вірно. Код програми. //Корут, Денис, ВАРІАНТ №8 #include #include #include #include using namespace std; int main() { float a, b, c, h, P = 0, S = 0, y=0; cout << "a="; cin >> a, cout << "b="; cin >> b, cout << "c="; cin >> c, cout << "h="; cin >> h; S = a * h / 2; P = a + b + c; cout << "S=" << S << endl; cout << "P=" << P << endl; system("pause"); return 0; } ЛАБОРАТОРНА РОБОТА № 2. Програмування розгалуженого обчислювального процесу Завдання 2.1 Скласти програму для визначення значення «у» Математична постанова задачі (МПЗ).
Схема алгоритму (СА) Текстовий приклад
Висновок: Результат розрахунків мають незначну неточність, але в цілому можна вважати, що програма написана вірно. Код програми //Корут, Денис, ВАРІАНТ №8 #include #include #include #include using namespace std; int main() { float x, a, y; cout << "x="; cin >> x, cout << "a="; cin >> a; if (0 < a && x < 0) y = pow(x, 2 * a) + abs(a - 12); else y = exp(x) / sqrt(1 + pow(a, 2)); cout << "y=" << y; system("pause"); return 0; } Завдання 2.2 Скласти програму з використанням оператору case (switch) та за номером дня в тижні вивести кількість пар за розкладом вашої групи. Математична постанова задачі (МПЗ)
Текстовий приклад Схема алгоритму (СА). Висновок: Результат програми виводить вірні результати, тому можна вважати, що програма написана вірно. Код програми //Корут, Денис, ВАРІАНТ №8 #include #include #include #include using namespace std; int main() { setlocale(LC_ALL, "Rus"); short k; printf("Введите день недели (число)\n"); scanf_s("%hd", &k); switch (k) { case 1: printf("Понедельник:\n1 пара - КомпСхемтех;\n2 пара - Програмирование.\n"); break; case 2: printf("Вторник:\n1 пара - Програмирование;\n2 пара - Физика;\n3 пара - КомпЛогика.\n "); break; case 3: printf("Среда:\n1 пара - ВступдоФаху;\n2 пара - Английський;\n3 пара- ФизВоспитание.\n"); break; case 4: printf("Четверг:\n1 пара - немає;\n2 пара - Физика;\n3 пара - Програмирование;\n4 пара - МатАнализ.\n"); break; case 5: printf("П'ятниця:\n1 пара - КомпЛогика;\n2 пара - окно;\n3 пара - ФизВоспитание.\n"); break; case 6: printf("Суббота:\nПар нету\n"); break; case 7: printf("Воскресенье:\nПар нету\n"); break; default: printf("Ты хоть понимаешь сколько дней в неделе?\n"); } system("pause"); return 0; } Завдання 2.3: Скласти програму для перевірки, чи належить точка з координатами (х, у) до заданої області згідно варіанта завдання. Математична постанова задачі (МПЗ).
Схема алгоритма (СА). Текстовий приклад
Висновок: Результат розрахунків мають точність, тому можна вважати, що програма написана вірно. Код програми: #include #include #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); float x, y; do { printf("Введите координаты(х,у):\n"); scanf_s("%f%f", &x, &y); if ((pow((x + 2), 2) + pow((y - 4), 2) <= 4) || (pow((x - 2), 2) + pow((y - 4), 2) <= 4) || (y >= 1.5 * abs(x) - 3 && y < 4)) printf("Принадлежит\n"); else printf("Не пренадлежит\n"); printf("Для выхода нажмите ESC\n"); } while (_getch() != 27); system("pause"); return 0; } Завдання 3.1: Скласти програму для вилучення з запису цілого числа нулів. Математична постанова задачі (МПЗ).
Схема алгоритму (СА). Текстовий приклад
Висновок: По всіх тестових прикладах результати, що були отримані вручну та програмно повністю співпадають, це доводить правильність роботи програми. Код програми: #include #include #include #include #include const int w = 10; int main() { setlocale(LC_ALL, "Rus"); long n; short nn = 0, i = 1; printf("\nВведите n: "); scanf_s("%ld", &n); n = fabsf(n); while (n != 0); { if (n % w != 0) { nn += (n % 10) * i; i *= 10; } n = n / 10; } printf("Твой номер без нулей:%hd", nn); _getch(); } Завдання 3.2: Скласти програму для обчислення суми скінченого ряду Математичка постанова задачі (МПЗ)
Схема алгоритму(СА) Текстовий приклад
Висновок; Результат розрахунків мають незначну неточність, але в цілому можна вважати, що програма написана вірно. Код програми: //Корут Денис Віталійович, №8 #include #include #include #include using namespace std; int main() { double x, p = 1, y = 1, b, eps = 1.0e-4; cout << "x="; cin >> x; for (b = 1; fabs(p) > eps; b++) { p = p * x/ b; y += p; } cout << "y=" << y << endl; system("pause"); return 0; } ЛАБОРАТОРНА РОБОТА № 4. Програми з підпрограмами Завдання 4.1 Скласти програму для табулювання функції згідно з варіантом завдання на заданому проміжку: при середнє арифметичне серед тих значень у, що більше за Р. Математична постанова задачі (МПЗ).
Схема алгоритму (СА). Текстовий приклад
Висновок: : Результат розрахунків мають точність, тому можна вважати, що програма написана вірно. Код програми //Корут Денис Виталиевич, Вариант №8 #include #include #include #include using namespace std; void fkp(double x, double *y) { *y = pow((pow(x,2) + x), 1/3.0); } void print_t(double x, double *y, double step, double Rx, double Lx) { for (x = Lx; x <= Rx; x += step) { cout << x << "\t"; fkp(x, &*y); cout << *y << "\n"; } } int main() { cout << fixed << setprecision(3); double x=1, Rx=9, Lx=-2, P, y, step; setlocale(LC_ALL, "Rus"); cin >> P; step = (Rx - Lx + 1) / P; print_t(x, &y, step, Rx, Lx); return 0; } Завдання 4.2: Використавши свій варіант завдання 1.2 (л.р.№1), переробити програму, оформивши обчислення з цього варіанта завдання як підпрограму. Описати цю підпрограму як “чорну скриню”, визначити, які дані будуть передаватися за значенням, а які за посиланням, розробити для підпрограми МПЗ, скласти схему алгоритму; Математична постанова задачі (МПЗ).
Схема алгоритму (СА). Текстовий приклад
Висновок: Результат розрахунків мають вірні результати, тому можна вважати, що програма написана вірно. Код програми: //Корут Денис Виталиевич, Вариант №8 #include #include #include using namespace std; void fkp(float a, float b, float c, float h, float* P, float *S) { *S = a * h / 2; *P = a + b + c; } int main() { float b1, b2, b3, b4, Rp, Rs; setlocale(LC_ALL, "Rus"); printf("Введите b1, b2, b3, b4:\n"); scanf_s("%f%f%f%f", &b1, &b2, &b3, &b4); fkp(b1, b2, b3, b4, &Rs, &Rp); printf("P=%f \nS=%f\n", Rs, Rp); system("pause"); return 0; } Завдання 4.3 Скласти програму з використанням підпрограм зі стандартних бібліотек для управління виведенням на екран у складі двох підпрограм: Перша функція – в текстовому режимі роботи екрана виводить кольоровим шрифтом в центрі екрана інформацію про розробника програми та привітання з найближчим святом для викладача; Друга – в графічному режимі роботи екрана виводить емблему розробника Код програми: //Корут, Денис, ВАРИАНТ №8 #ifndef UNICODE #define UNICODE #endif #include #include #include using namespace std; // green RGB(50, 205, 50) // pink RGB(255, 182, 193) // blue RGB(0, 0, 255) // yellow RGB(255, 255, 0) // brown RGB(165, 42, 42) LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { const wchar_t text[] = L"Merry Xmas, Катерина Ивановна"; PAINTSTRUCT ps; HDC hdc; static HPEN textPen; static HBRUSH textBrush; static HPEN greenPen; static HPEN pen; static HBRUSH pinkBrush; static HBRUSH blueBrush; static HBRUSH yellowBrush; static HBRUSH brownBrush; int x, y; int topX = 300; int topY = 50; RECT rect; rect.top = topY + 130 + 1; rect.bottom = topY + 150; rect.left = topX - 30; rect.right = topX + 30; RECT textRect; textRect.top = 30; textRect.bottom = 60; textRect.left = 70; textRect.right = 300; switch (uMsg) { case WM_CREATE: // create pen textPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); textBrush = CreateSolidBrush(RGB(255, 255, 255)); pen = CreatePen(PS_NULL, 1, RGB(0, 0, 0)); greenPen = CreatePen(PS_SOLID, 2, RGB(50, 205, 50)); pinkBrush = CreateSolidBrush(RGB(255, 182, 193)); blueBrush = CreateSolidBrush(RGB(0, 0, 255)); yellowBrush = CreateSolidBrush(RGB(255, 255, 0)); brownBrush = CreateSolidBrush(RGB(165, 42, 42)); break; /*case WM_SIZE: sx = LOWORD(lParam); sy = HIWORD(lParam); InvalidateRect(hwnd, NULL, TRUE); // WM_PAINT break;*/ case WM_PAINT: hdc = BeginPaint(hwnd, &ps); SelectObject(hdc, greenPen); // select pen MoveToEx(hdc, topX, topY, NULL); LineTo(hdc, topX - 26, topY + 40); LineTo(hdc, topX - 16, topY + 40); LineTo(hdc, topX - 45, topY + 85); LineTo(hdc, topX - 35, topY + 85); LineTo(hdc, topX - 70, topY + 130); MoveToEx(hdc, topX, topY, NULL); LineTo(hdc, topX + 26, topY + 40); LineTo(hdc, topX + 16, topY + 40); LineTo(hdc, topX + 45, topY + 85); LineTo(hdc, topX + 35, topY + 85); LineTo(hdc, topX + 70, topY + 130); MoveToEx(hdc, topX - 70, topY + 130, NULL); LineTo(hdc, topX + 70, topY + 130); FillRect(hdc, &rect, brownBrush); SelectObject(hdc, pen); SelectObject(hdc, blueBrush); x = topX - 10; y = topY + 20; Ellipse(hdc, x, y, x + 20, y + 20); SelectObject(hdc, yellowBrush); x = topX - 18; y = topY + 50; Ellipse(hdc, x, y, x + 20, y + 20); SelectObject(hdc, pinkBrush); x = topX + 5; y = topY + 70; Ellipse(hdc, x, y, x + 20, y + 20); SelectObject(hdc, blueBrush); x = topX - 17; y = topY + 75; Ellipse(hdc, x, y, x + 20, y + 20); SelectObject(hdc, yellowBrush); x = topX - 40; y = topY + 100; Ellipse(hdc, x, y, x + 20, y + 20); SelectObject(hdc, pinkBrush); x = topX - 10; y = topY + 100; Ellipse(hdc, x, y, x + 20, y + 20); SelectObject(hdc, yellowBrush); x = topX + 25; y = topY + 100; Ellipse(hdc, x, y, x + 20, y + 20); SelectObject(hdc, textBrush); SelectObject(hdc, textPen); SetBkMode(hdc, TRANSPARENT); SetTextColor(hdc, RGB(0x00, 0x00, 0x00)); DrawText(hdc, text, wcslen(text), &textRect, DT_LEFT | DT_SINGLELINE); EndPaint(hwnd, &ps); break; case WM_DESTROY: DeleteObject(greenPen); // free pen DeleteObject(pinkBrush); // free pen DeleteObject(blueBrush); // free pen DeleteObject(yellowBrush); // free pen DeleteObject(brownBrush); // free pen PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, uMsg, wParam, lParam); } void showWnd() { auto hInstance = GetModuleHandle(nullptr); auto nCmdShow = SW_SHOW; // Register the window class. const wchar_t CLASS_NAME[] = L"Sample Window Class"; WNDCLASS wc = {}; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.hCursor = LoadCursor(NULL, IDC_ARROW); RegisterClass(&wc); // Create the window. HWND hwnd = CreateWindowEx( 0, // Optional window styles CLASS_NAME, // Window class L"Tree", // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hwnd == NULL) { return; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // Run the message loop. MSG msg = {}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } void SetTextColor(int text) { int background = 0; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | (text))); } int main() { SetTextColor(9); cout << "\n\n\n\n\n\n\n\n\n"; cout << " Happy New Year!!!\n\n\n"; SetTextColor(15); system("PAUSE"); showWnd(); } Результат: |