Professional Documents
Culture Documents
Laba 8 Oop
Laba 8 Oop
Кафедра САП
Лабораторна робота № 8
Виконав
студент групи ПП-17
Скорохід Тарас А.
Прийняв:Дутка В.Ю.
Львів-2023 р.а
Мета роботи
Ознайомитись з методикою створення та використання dll-бібліотеки.
Завдання 1
Написати програму для виконання геометричних обчислень відповідно до
власного варіанту. Створені функції для реалізації геометричних формул
виділити в dll-бібліотеку.
13. Обчислити об’єм зрізу, якщо відомі радіус кулі, відстань між двома
кулями та радіуси обох перерізів.
DLL library
file “calculation.h”
#pragma once
#ifdef CALCULATION_EXPORTS
#define CALCULATION_API __declspec(dllexport)
#else
#define CALCULATION_API __declspec(dllimport)
#endif
file “calculation.cpp”
#include "pch.h"
#define _USE_MATH_DEFINES
#include <utility>
#include <limits.h>
#include "calculation.h"
#include <iostream>
#include<cmath>
Console application
source file
#include <iostream>
#include "calculation.h"
cout << "The volume of the segment is: " << segmentVolume << endl;
return 0;
Завдання 2
1. Створити рішення
2. Створити DLL-бібліотеку, яка містить функції, що необхідні для реалізації
індивідуального завдання.
3. Створити в тому ж рішенні Windows-проект, який викликає ці бібліотечні методи для
виконання необхідних обчислень. Форма для введення вхідних даних та виведення
результатів повинна бути достатньо інформативною, щоб користувачу було зрозуміло,
які саме обчислення і за якими формулами виконуються у програмі.
4. При введенні вхідних даних перевіряти їх на допустимість значень. Наприклад, якщо
використовується операція ділення, перевіряти, щоб знаменник не дорівнював нулю.
Діапазони допустимих значень описати у звіті. Проілюструвати скріншотами роботу
програми на допустимих та недопустимих значеннях вхідних даних (повідомлення про
помилки, або невірно введені дані).
13.
1. Реалізувати функцію перетворення введеного у десятковій системі числення цілого
числа x у довільну систему числення, обрану зі списку (двійкова, вісімкова,
шістнадцяткова). Перевіряти введене число, щоб воно містило лише символи
0,1,2,...,9.
2. Обчислити через ряд Тейлора 1/( 1−х )= ∑ 𝑥 ∞ 𝑛 𝑛=0 x^n для |x|<1. Значення x –
дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі.
Результат вивести на форму.
3. Обчислити площу довільного трикутника за заданими значеннями його сторін.
DLL:
calculation.h
#pragma once
#include <iostream>
extern "C" __declspec(dllexport)
float triangle(double a, double b, double c);
extern "C" __declspec(dllexport) ;
double taylor(int n, double x);
extern "C" __declspec(dllexport) int binary(int a);
extern "C" __declspec(dllexport) int octal(int a);
calculation.cpp
#include "pch.h"
#include "MYDLL.h"
#include <cmath>
float __stdcall triangle(double a, double b, double c)
{
float p = (a + b + c) / 2;
float result = sqrt(p * ( p - a ) * (p - b) * (p - c));
return result;
}
int factorial(int i)
{
if (i == 0 || i == 1) return 1;
else return i * factorial(i - 1);
}
double __stdcall taylor(int n, double x)
{
double result{};
double formula{};
for (int i = 0; i < n; i++){
formula = (pow(-1, i) * factorial(2 * i) * pow(x, i)) /
((1.0 - (2.0 * (double)i)) *
MyFormApp:
Form1:
namespace App
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Triangle_Click(object sender, EventArgs e) {
try
{
double a = double.Parse(textBox3.Text);
double n = double.Parse(textBox1.Text);
double g = double.Parse(textBox2.Text);
textBoxResult1.Text = MyClass.triangle(a, n,
g).ToString(); }
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Binary_Click(object sender, EventArgs e) {
try
{
int a = int.Parse(textBox5.Text);
textBoxResult2.Text = MyClass.binary(a).ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void textBoxResult2_TextChanged(object sender,
EventArgs e) {
}
private void Octal_Click(object sender, EventArgs e) {
try
{
int a = int.Parse(textBox5.Text);
textBoxResult2.Text = MyClass.octal(a).ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Taylor_Click(object sender, EventArgs e) {
try
{
int a = int.Parse(textBox8.Text);
double g = double.Parse(textBox7.Text);
textBoxResult3.Text = MyClass.taylor(a,
g).ToString(); }
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
MyClass:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace MyFormApp
{
internal class MyClass {
[DllImport(@E:\way\programing\c++ just for visual
studio\laba_8\DLLlab8\x64\Debug)]
public static extern float triangle(double a, double b, double c);
[DllImport(@"E:\way\programing\c++ just for visual
studio\laba_8\DLLlab8\x64\Debug")]
public static extern double taylor(int n, double x);
[DllImport(@"E:\way\programing\c++ just for visual
studio\laba_8\DLLlab8\x64\Debug\Lab_8.dll")]
public static extern int binary(int a);
[DllImport(@"E:\way\programing\c++ just for visual
studio\laba_8\DLLlab8\x64\Debug\Lab_8.dll")]
public static extern int octal(int a);
}
}
Контрольні запитання
1. Що таке dll-бібліотека?
DLL (Dynamic Link Library) бібліотека - це файл, який містить код і дані, які можуть
бути використані багатьма програмами одночасно. DLL-бібліотеки зберігають функції і
ресурси, які можуть бути викликані зовнішніми програмами.