Ім'я файлу: Звіт з лабораторних робіт С++.docx
Розширення: docx
Розмір: 311кб.
Дата: 05.12.2022
скачати

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ БУДІВНИЦТВА ТА АРХІТЕКТУРИ

КАФЕДРА ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ

Звіт з лабораторних робіт

з дисципліни «Алгоритмізація та програмування»

Варіант №8

Студента 1 курсу групи КСМ-11

напряму підготовки

Корут Денис Віталійович

Перевірила: к.т.н., доцент Київська К.І.

Національна шкала_________________

Кількість балів:____________________

Оцінка:ECTS______________________

___________ _____________________

(підпис) (прізвище та ініціали)

___________ _____________________

(підпис) (прізвище та ініціали)

___________ _____________________

(підпис) (прізвище та ініціали)

м. Київ - 2020

ЛАБОРАТОРНА РОБОТА № 1.

Програмування лінійного обчислювального процесу

Завдання 1.1 Скласти програму для обчислення математичного виразу



  1. Математична постановка задачі (МПЗ).



Вхідні дані

Дії

Вихідні дані

x, a дійсного типу

обмеження:



y - дійсне



  1. Схема алгоритму (СА).



  1. Текстовий приклад.



Вхідні дані

Вихідні дані

Розрахунок вручну

Ci

x=2, a=0

2.3

2.33333

x=3, a=0.5

1.416

1.41667

x=5, a=1

8.33

8.33333



  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Розробити математичну постановку задачі та скласти програму для обчислення площі та периметру трикутника



  1. Математична постанова задачі (МПЗ):



Вхідні дані

Дії

Вихідні дані

a, b, c, h дійсного типу. Обмеження: a, b, c, h>0.





P, S - дійсні



  1. Схема алгоритму (СА).



  1. Текстовий приклад.

Вхідні дані

Вихідні дані

Вручну

Ci

P

S

P

S

a=9, b=6, c=5, h=10;

20

45

20

45

a=5.5, b=6.25, c=2.2, h=1.5;

13,95

4,125

13.95

4.125

a=-4, b=2, c=7, h=-3;

5

6

5

6



  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 Скласти програму для визначення значення «у»



  1. Математична постанова задачі (МПЗ).

Вхідні дані

Дії

Вихідні дані

x, a дійсного типу

Якщо виконується a>0, x<0, тоді , інакше .

y – дійсне.



  1. Схема алгоритму (СА)



  1. Текстовий приклад

    Вхідні дані

    Розрахунок вихідних даних

    вручну

    Сі

    x=-1, a=8;

    5

    5

    x=5, a=3;

    46,93236

    46.9324

    x=0.5, a=1

    1,64872

    1.64872

  2. Висновок: Результат розрахунків мають незначну неточність, але в цілому можна вважати, що програма написана вірно.

  3. Код програми

//Корут, Денис, ВАРІАНТ №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) та за номером дня в тижні вивести кількість пар за розкладом вашої групи.

  1. Математична постанова задачі (МПЗ)

    Вхідні дані

    Дії

    Вихідні дані

    К – ціле

    Обмеження:

    К>0.

    Якщо К співпадає з:

    • «1» тоді вивести

    • «2» тоді вивести

    • «3» тоді вивести

    • «4» вивести

    • «5» вивести

    • «6» вивести

    • «7» вивести

    Інакше вивести


    Понедельник

    Вторник

    Среда

    Четверг

    П’ятниця

    Суббота

    Воскресенье

    Ты хоть понимаешь сколько дней в неделе?

    Вхідні дані

    Розрахунок вихідних даних

    Сі

    К=1

    Понедельник:

    1 пара - КомпСхемтех;

    2 пара - Програмирование.

    К=4

    Четверг:

    1 пара - немає;

    2 пара - Физика;

    3 пара - Програмирование;

    4 пара - МатАнализ.

    К=7

    Воскресенье:

    Пар нету

    К=13

    Ты хоть понимаешь сколько дней в неделе?

  2. Текстовий приклад



  1. Схема алгоритму (СА).



  1. Висновок: Результат програми виводить вірні результати, тому можна вважати, що програма написана вірно.

  2. Код програми

//Корут, Денис, ВАРІАНТ №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: Скласти програму для перевірки, чи належить точка з координатами (х, у) до заданої області згідно варіанта завдання.



  1. Математична постанова задачі (МПЗ).

Вхідні дані

Дії

Вихідні дані

x, y – координати точки дійсного типу.

Якщо виконується

^ ^

Тоді вивести на екран 1.

Інакше вивести на екран 2.

  1. Належить

  2. Не належить



  1. Схема алгоритма (СА).



  1. Текстовий приклад

Вхідні дані

Розрахунки вихідних даних

вручну

Ci

x=0; y=3.

Належить

Належить

x=2; y=4.

Належить

Належить

x=1; y=-3.

Не належить

Не належить

x=1; y=-5.

Не належить

Не належить



  1. Висновок: Результат розрахунків мають точність, тому можна вважати, що програма написана вірно.

  2. Код програми:

#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: Скласти програму для вилучення з запису цілого числа нулів.

  1. Математична постанова задачі (МПЗ).

Вхідні дані

Дії

Вихідні дані

N цілого числа.

  1. k=0; N=|N|

  2. Доки N≠ 0, виконувати наступні кроки, інакше – останій пункт



  3. Вивести m, k.

  4. k=k+1; Перехід до пункту 2.

  5. Зупинка

m – цифра числа N, ціле;

k – номер розряду, ціле;



  1. Схема алгоритму (СА).

  2. Текстовий приклад

Вхідні

дані

Розрахунок вихідних даних

вручну

Сі

N=10100

m=1; k=0

m=0; k=1

m=1; k=2

m=0; k=3

m=0; k=4

Перед-умова

Після-умова

1 0

0 1

1 2

0 3

0 4

?

N=204

m=2; k=0

m=0; k=1

m=4; k=2

2 0

0 1

4 2

?






  1. Висновок: По всіх тестових прикладах результати, що були отримані вручну та програмно повністю співпадають, це доводить правильність роботи програми.

  2. Код програми:

#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: Скласти програму для обчислення суми скінченого ряду



  1. Математичка постанова задачі (МПЗ)

Вхідні дані

Дії

Вихідні дані

x





y



  1. Схема алгоритму(СА)



  1. Текстовий приклад

Вхідні дані

Розрахунок вихідних даних

вручну

Сі

x=4

54,598

54.5981

x=0

1

1

x=-2

0,1353

0.13528



  1. Висновок; Результат розрахунків мають незначну неточність, але в цілому можна вважати, що програма написана вірно.

  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

  • Скласти програму для табулювання функції згідно з варіантом завдання на заданому проміжку:

при середнє арифметичне серед тих значень у, що більше за Р.

  1. Математична постанова задачі (МПЗ).

    Вхідні дані

    Дії

    Вихідні дані

    x,y,step, Rx, Lx Р,

    step=(Rx-Lx+1)/P




    x,y,Р

  2. Схема алгоритму (СА).



  1. Текстовий приклад

    Вхідні дані

    Розрахунки вручну

    Розрахунки Сі

    Р=3

    -2.000 1.260

    2.000 1.817

    6.000 3.476

    -2.000 1.260

    2.000 1.817

    6.000 3.476

    Р=6

    -2.000 1.260

    0.000 0.000

    2.000 1.817

    4.000 2.714

    6.000 3.476

    8.000 4.160


    -2.000 1.260

    0.000 0.000

    2.000 1.817

    4.000 2.714

    6.000 3.476

    8.000 4.160

    Р=12

    -2.000 1.260

    -1.000 0.000

    0.000 0.000

    1.000 1.260

    2.000 1.817

    3.000 2.289

    4.000 2.714

    5.000 3.107

    6.000 3.476

    7.000 3.826

    8.000 4.160

    9.000 4.481

    -2.000 1.260

    -1.000 0.000

    0.000 0.000

    1.000 1.260

    2.000 1.817

    3.000 2.289

    4.000 2.714

    5.000 3.107

    6.000 3.476

    7.000 3.826

    8.000 4.160

    9.000 4.481

  2. Висновок: : Результат розрахунків мають точність, тому можна вважати, що програма написана вірно.

  3. Код програми

//Корут Денис Виталиевич, Вариант №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), переробити програму, оформивши обчислення з цього варіанта завдання як підпрограму. Описати цю підпрограму як “чорну скриню”, визначити, які дані будуть передаватися за значенням, а які за посиланням, розробити для підпрограми МПЗ, скласти схему алгоритму;

  1. Математична постанова задачі (МПЗ).

Вхідні дані

Дії

Вихідні дані

a, b, c, h дійсного типу.

Обмеження: a, b, c, h>0.





P, S – дійсні.



  1. Схема алгоритму (СА).



  1. Текстовий приклад

Вхідні дані

Вихідні дані

Вручну

Ci

P

S

P

S

a=9, b=6, c=5, h=10;

20

45

20.000

45.000

a=5,5, b=6,25, c=2,2, h=1,5;

13,95

4,125

13.95000

4.125000

a=-4, b=2, c=7, h=-3;

5

6

5.000

6.000



  1. Висновок: Результат розрахунків мають вірні результати, тому можна вважати, що програма написана вірно.

  2. Код програми:

//Корут Денис Виталиевич, Вариант №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

Скласти програму з використанням підпрограм зі стандартних бібліотек для управління виведенням на екран у складі двох підпрограм:

  1. Перша функція – в текстовому режимі роботи екрана виводить кольоровим шрифтом в центрі екрана інформацію про розробника програми та привітання з найближчим святом для викладача;

  2. Друга – в графічному режимі роботи екрана виводить емблему розробника

  1. Код програми:

//Корут, Денис, ВАРИАНТ №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();

}

  1. Результат:


скачати

© Усі права захищені
написати до нас