SlideShare a Scribd company logo
1 of 15
Download to read offline
Кросплатформне програмування
Лабораторна робота 1. Створення DLL-бібліотеки на мові C++ та виклик її функцій з
Windows-проекту на мові C#.
Мета роботи: набути навичок з розробки та збирання компонентів у багатомовному
середовищі MS .NET Framework.
План:
1. Створення рішення у багатомовному середовищі MS .NET Framework
2. Створення проекту DLL–бібліотеки на мові C++
3. Експорт символів
4. Визначення угод виклику
5. Створення Windows-проекту для виклику функцій з DLL-бібліотеки
1. Створення рішення
Запустіть Visual Studio 2010. Із стартової сторінки перейдіть до створення проекту:
File|New|Project.
Рис. 1.1. Вікно New Project налаштувань Рішення Lab1
У вікні New Project в папці Installed Templates|Other Project Types|
Visual Studio Solutions виберіть шаблон Blank Solutions. Всі поля редагування у вікні будуть
заповнені значеннями за промовчанням. Задайте власну інформацію:
- у полі Name вкажіть ім'я рішення Lab1 (поле Location Name автоматично
отримає те саме ім'я);
- у полі Location вкажіть шлях до каталогу, де зберігатиметься рішення, що
містить проект, наприклад, D:tempLab1.
Зверніть увагу на інші налаштування, зроблені в цьому вікні: включений прапорець
(за промовчанням) “Create directory for solution”, у верхньому віконці із списку можливих
каркасів вибраний відповідний каркас (на рисунку це Framework .Net 4).
Натиснувши кнопку “OK”, отримаємо автоматично побудоване рішення. В панелі
Solution Explorer з’явиться Solutions Lab1, відкритий у середовищі Visual Studio 2010, а у
відповідній папці на диску – файл Lab1.sln.
2. Створення проекту DLL–бібліотеки на мові C++
Клацніть правою кнопкою миші на Solutions Lab1 в панелі Solution Explorer та у
контенстному меню виберіть Add|New Project.
Рис. 1.2. Вікно Add New Project з налаштуваннями DLL-бібліотеки MyDll
У вікні Add New Project (див. рис. 1.2) з папки
Installed Templates|Other Languages|Visual C++|Win32 виберіть шаблон Win32 Project. Нижче
у полі Name введіть ім’я проету MyDll та натисніть кнопку “OK”.
На екрані з’явиться помічник Win32 Application Wizard. Натисніть кнопку “Next >” та
перейдіть до наступного вікна діалогу (див. рис. 1.3), де серед налаштувань застосування
виберіть тип застосування Dll. Натисніть кнопку “Finish”.
Рис. 1.3. Вікно налаштувань помічника Win32 Application Wizard
У панелі Solution Explorer з’явиться проект MyDll. Напишемо на C++ функцію, що
реалізує додавання та добуток двох дійсних чисел (див. Лістінг 1.1).
Лістінг 1.1. Код функцій додавання та добутку двох дійсних чисел на мові C++
На цьому етапі вже можна скомпілювати і скомпонувати DLL, однак DLL ще не буде
експортувати функції, тому не буде дійсно корисною.
3. Експорт символів (створення .def-файла)
Щоб отримати доступ до функції з DLL-бібліотеки, необхідно повідомити
компілятору, які символи будуть експортуватися. Є два способи це зробити. Перший і
найпростіший полягає у використанні тегу __declspec(dllexport) в прототипі функції, що буде
експортуватися. Для цього необхідно додати тег до її оголошення та визначення:
__declspec(dllexport) double sum(double a, double b)
...
__declspec(dllexport) double mult(double a, double b)
...
Другий метод полягає у використанні .def-файлу для явного оголошення функцій, які
будуть експортуватися. .def-файл – це текстовий файл, що містить інформацію, яку
компонувальник використовує для експорту. Він має наступний формат:
LIBRARY <Ім’я, що використовується всередині DLL>
DESCRIPTION "<Опис>"
EXPORTS
<Перший символ експорту> @1
<Другий символ експорту> @2
<Третій символ експорту> @3
...
Для функцій sum та mult цей файл матиме вигляд (див. Лістінг 1.2).
Лістінг 1.2. Текст .def-файла
Скористаємося другим способом. Щоб створити .def-файл, клацніть правою кнопкою
миші на імені проекта MyDll в панелі Solution Explorer і у контенстному меню виберіть
Add|New Item. У вікні Add New Item, що відкриється, с папці Installed Tamplates|Utility
виберіть шаблон Text File (.txt). Нижче у полі Name введіть ім’я MyDll.exp та натисніть
кнопку “Add” (див. рис. 1.4).
Рис. 1.4. Вікно Add New Item під час створення файлу MyDll.exp
Файл MyDll.exp з’явиться у списку в панелі Solution Explorer. У вікні редагування
файлу MyDll.exp введіть текст .def-файла (див. Лістінг 1.2).
Компонувальник автоматично шукає .def-файл з тим же ім'ям, що і проект, в каталозі
проекту. Але у нашому випадку необхідно вказати компонувальнику, що MyDll.exp слід
використовувати як .def-файл. Клацніть правою кнопкою миші на імені проекта MyDll в
панелі Solution Explorer і у контенстному меню виберіть Properties. У відкритому вікні
MyDll Property Pages (див. рис. 1.5) виберіть папку Configuration Properties| Linker|Input та
змініть властивість Module Definition File на MyDll.exp. Натисніть кнопку “OK”. Бібліотека
готова.
Рис. 1.5. Вікно MyDll Property Pages
4. Визначення угод виклику
Останнє, що необхідно зробити перед компіляцією DLL, – це визначити угоди
виклику функцій, які надалі будуть експортуватися. Це можна зробити двома способами:
використати угоди виклику C або стандартні угоди виклику, які також називаються Паскаль і
WINAPI. Більшість функцій DLL використовують стандартні угоди виклику, але в цій
лабораторній роботі можна скористатися будь-яким з них.
Угоди виклику C можна не вказувати, бо вони визначаються за промовчуванням,
якщо в Project|Properties|C/C++|Advanced не вказано інакше. Якщо необхідно явно
оголосити функцію як виклик C, в оголошенні та визначенні функції слід використати
ключове слово __cdecl.
Щоб задати стандартні угоди виклику, помістіть ключове слово __stdcall в
оголошення та визначення функцій:
double __stdcall sum(double a, double b)
...
double __stdcall mult(double a, double b)
...
Скористаємося другим способом.
Примітка. Угода виклику (або модель виклику) регламентують технічні особливості
виклику підпрограми, передачі параметрів, повернення з підпрограми і передачі результату
обчислень в точку виклику. Угода виклику __stdcall застосовується при виклику функцій
WinAPI і вказує, що аргументи передаються через стек, справа наліво, очищення стека
виконує підпрограма, яка викликається.
5. Створення Windows-проекту для виклику функції з DLL-бібліотеки
Клацніть правою кнопкою миші на Solutions Lab1 в панелі Solution Explorer і у
контенстному меню виберіть Add|New Project.
У вікні Add New Project (див. рис. 1.6) в папці Installed Tamplates| Visual C# виберіть
шаблон Windows Forms Application. Нижче у полі Name введіть ім’я проекту MyFormApp та
натисніть кнопку “OK”. В панелі Solution Explorer з’явиться проект MyFormApp.
Рис. 1.6. Вікно Add New Project під час створення проекту
У полі Name форми вкажіть нове ім’я MyForm. На формі (див. рис. 1.7) розмістіть
чотири текстові поля для введення двох вхідних параметрів і результатів з назвами txtBoxA,
txtBoxB, txtBoxSum та txtBoxMult відповідно. Також додайте кнопку “Calculate” з іменем
btnCalculate.
Рис. 1.7. Форма Windows-проекту
Двічі клацнувши мишкою на кнопці “Calculate”, створимо для неї обробник події
Click. Додайте до нього код, що містить виклик функцій sum та mult з DLL-бібліотеки (див.
Лістінг 1.3).
Лістінг 1.3. Обробник події для кнопки “Calculate”
Компілятор стверджуватиме, що класа MyDllClass не існує. Виправимо це.
Перейдіть у панель Solution Explorer.Клацніть правою кнопкою миші на MyFormApp і
у контенстному меню виберіть Add|Class. У вікні, що з’явилося, виберіть шаблон Class, дайте
йому ім’я MyDllClass.cs та натисніть кнопку “Add”. У вікні редагування MyDllClass.cs
відобразиться такий код (див. Лістінг 1.4).
Лістінг 1.4. Оголошення класу MyDllClass, яке міститься у файлі MyDllClass.cs після
його створення
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyFormsApp
{
class MyDllClass
{
}
}
Додамо до класу MyDllClass оголошення зовнішніх методів sum та mult. Тепер
клас матиме наступний вигляд:
Модифікатор extern означає, що функції sum та mult визначена зовні.
У квадратних дужках "[]" розміщено атрибут DllImport. В C# атрибути
використовуються як засіб додавання декларативної інформації до елементів програмного
коду. Призначення атрибутів – організація взаємодії між програмними модулями, додаткова
інформація про умови виконання коду, управління сериалізацією (тобто правила збереження
інформації), відладка тощо. Атрибути можуть бути як стандартними, так і заданими
користувачем. Стандартні атрибути використовуються CLR і впливають на те, як буде
виконуватися проект. В атрибуті DllImport вказано повний шлях до файла MyDll.dll.
Якщо повний шлях не вказано, за промовчанням компілятор шукатиме вказаний в атрибуті
файл MyDll.dll у тій же папці, де знаходиться MyFormApp.exe. Але у даному випадку
MyDll.dll знаходиться в іншій папці, тому потрібно вказувати повний шлях.
Компілятор підкреслює червоним атрибут DllImport, оскільки не може знайти його
простір імен. Клацніть на DllImport мишею, поряд з DllImport з’явиться значок . Якщо
навести на нього курсор, на екрані відображається кнопка , що розкриває меню (див.
рис. 1.8). Виберіть з цього меню using System.Runtime.InteropServices; і декларація
про використання відповідного простору імен автоматично з’явиться на початку вихідного
коду.
Рис. 1.8. Вікно MyDll Property Pages
Інший варіант виправлення цієї помилки – вказати повне ім’я атрибута
System.Runtime.InteropServices.DllImport.
Побудуємо рішення і отримаємо повідомлення про помилку, оскільки не вказали
стартовий проект. Для цього перейдіть у панель Solution Explorer, клацніть правою кнопкою
миші на MyFormApp і у контенстному меню виберіть Set as StartUp Project. Натисніть кнопку
F5, щоб запустити проект. Переконайтеся, що програма успішно працює.
Завдання для самостійної роботи
1. Створити рішення
2. Створити DLL-бібліотеку, яка містить функції, що необхідні для реалізації
індивідуального завдання.
3. Створити в тому ж рішенні Windows-проект, який викликає ці бібліотечні методи
для виконання необхідних обчислень. Форма для введення вхідних даних та виведення
результатів повинна бути достатньо інформативною, щоб корстувачу було зрозуміло, які
саме обчислення і за якими формулами виконуються у програмі.
4. При введенні вхідних даних перевіряти їх на допустимість значень. Наприклад,
якщо використовується операція ділення, перевіряти, щоб знаменник не дорівнював нулю.
Діапазони допустимих значень описати у звіті. Проіюструвати скрін-шотами роботу
програми на допустимих та недопустимих значеннях вхідних даних (повідомлення про
помилки або невірно введені дані).
5. Вивести на форму власні анкетні дані: прізвище, ім'я, по-батькові, група, курс.
Зміст звіту:
1. Постановка завдання для індивідуального варіанту.
2. Список і призначення використовуваних змінних, діапазони їх допустимих
значень.
3. Текст програми.
4. Протокол роботи програми (на допустимих та недопустимих значеннях
вхідних даних).
5. Висновки.
Варіанти індивідуальних завдань
№ ва-
ріанту
Зміст завдання
1 1. Реалізувати функцію фактеріалу від цілого числа.
2. Обчислити функцію Cos(x) через ряд Тейлора: n
n
n
x
n
x 2
0 )!2(
)1(
cos 



 . Значення x –
дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі.
Результат вивести на форму разом з результатом, отриманим з застосуванням
вбудованих функцій для тригонометричних обчислень та порівняти їх для різних
значень n.
3. Обчислити площу прямокутного трикутника за заданими катетами.
2 1. Реалізувати функцію піднесення дійсного числа x у ступінь n (n – ціле).
2. Обчислити функцію Sin(x) через ряд Тейлора: 12
0 )!12(
)1(
sin 


 

 n
n
n
x
n
x . Значення
x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у
формі. Результат вивести на форму разом з результатом, отриманим з
застосуванням вбудованих функцій для тригонометричних обчислень та
порівняти їх для різних значень n.
3. Реалізувати функцію перетворення введеного значення ваги з одних одиниць
вимірювання (грами, кг, центнер, тонна) у інші (грами, кг, центнер, тонна).
Одиниці вимірвання для вхідних даних та результату обирати зі списків.
3 1. Реалізувати функцію обчислення усіх чисел, на які без залишку ділеться задане
ціле число. Повідомляти, якщо уведене ціле число є простим числом.
2. Обчислити функцію arcsin(x) через ряд Тейлора:
12
0
2
)12()!(4
)!2(
arcsin 


 
 n
n
n
x
nn
n
x для 1x . Значення x – дійсне число, n – ціле
(кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на
форму разом з результатом, отриманим з застосуванням вбудованих функції для
тригонометричних обчислень та порівняти їх для різних значень n.
3. Обчислити радіуси кіл, вписаного та описаного навколо рівнобедреного
трикутника, якщо відомі сторони цього трикутника.
4 1. Реалізувати функцію перетворення температури у градусах Цельсія у
температуру у Фарингейтах. Значення температури вводиться у формі, а вихідна
шкала обирається зі списку, шкала результату встановлюється автоматично.
2. Обчислити функцію arctg(x) через ряд Тейлора: 12
0 12
)1( 


 

 n
n
n
x
n
xarctg для
1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n
вводяться у формі. Результат вивести на форму разом з результатом, отриманим з
застосуванням вбудованих функцій для тригонометричних обчислень та
порівняти їх для різних значень n.
3. Обчислити об’єм та площу поверхні кулі за заданим радіусом.
5 1. Ввести довжину в одних одиницях виміру (дюйм, фут, ярд, миля), виконати її
перетворення у інші одиниці виміру та вивести результат на форму. Одиниці
виміру обирати зі списку.
2. Обчислити функцію експоненти через ряд Тейлора: 



0 !n
n
x
n
x
e . Значення x –
дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі.
Результат вивести на форму разом з результатом, отриманим з застосуванням
вбудованих функцій та порівняти їх для різних значень n.
3. Обчислити площу повної поверхні зрізаного конуса, якщо відомі радіуси
нижньої та верхньої основи, твірна конуса.
6 1. Реалізувати функцію обчислення послідовності чисел Фібоначчі за формулою
21   nnn FFF (наступне число є сумою двох попередніх, перші два числа
дорівнюють 1). Вивести на форму послідовність чисел Фібоначчі до n-го числа, n
– ціле, n>2, n вводиться у формі.
2. Обчислити функцію натурального логарифма через ряд Тейлора:






0
1
)1(
)1ln(
n
n
n
x
n
x для 1x . Значення x – дійсне число, n – ціле (кількість
членів ряду). Значення x та n вводяться у формі. Результат вивести на форму
разом з результатом, отриманим з застосуванням вбудованих функцій та
порівняти їх для різних значень n.
3. Обчислити площу квадрату за заданою діагоналлю.
7 1. Обчислити середнє арифметичне та середнє геометричне трьох дійсних чисел.
2. Обчислити функцію arccos(x) через ряд Тейлора:
12
0
2
)12()!(4
)!2(
2
arcsin
2
arccos 


 
 n
n
n
x
nn
n
xx

для 1x . Значення x – дійсне
число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі.
Результат вивести на форму разом з результатом, отриманим з застосуванням
вбудованих функцій для тригонометричних обчислень та порівняти їх для різних
значень n.
3. Обчислити площу та радіус вписаного у рівнобедрену трапецію кола за
сторонами цієї трапеції.
8 1. Реалізувати функцію обчислення гармонічного середнього (обчислюється за
формулою
nxxx
n
x
111
21



) трьох дійсних чисел.
2. Обчислити через ряд Тейлора квадратний корінь n
n
n
n
x
nn
n
x 

 


0
2
)21()!(4
)!2()1(
1
для 1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x
та n вводяться у формі. Результат вивести на форму разом з результатом,
отриманим з застосуванням вбудованої функції Math.sqrt(x) та порівняти їх для
різних значень n.
3. Обчислити площу правильного багатокутника, якщо відома довжина його
сторони a та кількість сторін n .
9 1. Реалізувати функцію перетворення уведеного у десятковій системі числення
цілого числа x у довільну систему числення, обрану зі списку (двійкова,
вісімкова, шістнадцяткова). Перевіряти уведене число, щоб воно містило лише
символи 0,1,2,...,9.
2. Обчислити через ряд Тейлора 



 01
1
n
n
x
x
для 1x . Значення x – дійсне
число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі.
Результат вивести на форму.
3. Обчислити площу довільного трикутника за заданими значеннями його сторін.
10 1. Реалізувати функцію перетворення введеного значення довжини з одних
одиниць вимірювання (мм, см, дм, м, км) у інші (мм, см, дм, м, км). Одиниці
вимірювання для вхідних даних та результату обирати зі списків.
2. Знайти значення поліному p=3,5*x4
+3*x3
+10*x2
+8,3. Значення x ввести у
формі. Результат вивести на форму
3. Обчислити площу довільної трапеції, якщо відомі значення її верхньої та
нижньої основ і висоти. Визначити, чи можна вписати у цю трапецію коло, і,
якщо це можливо, обчислити його радіус.
11 1. Ввести вартість покупки у гривні та суму, яку сплачує покупець у будь-якій
іншій валюті (валюту обирати зі списку запропонованих). Вивести повідомлення
про решту, яку має видати продавець у гривні. Курси валют ініціалізувати у коді
та вказати поряд з назвою валюти у списку.
2. Обчислити значення функції z=a/x2
+b*y2
+c при будь-яких значеннях
параметрів і змінних.
3. Обчислити площу кільця, якщо відомі радіус зовнішнього кола R та
внутрішнього кола r .
12 1. Реалізувати функцію піднесення до кубу різниці двох дійсних чисел.
2. Обчислити значення функції 7
1
25 2
2

y
xyxz при будь-яких значеннях
змінних.
3. Обчислити площу довільного трикутника, радіуси вписаного та описаного
навколо нього кола, якщо задано його сторони.
13 1. Відомі координати двох точок на площині. Обчислити відстань між цими
точками.
2. Обчислити значення функції 22
25
3
126 x
xy
xyxz  при будь-яких
значеннях параметрів і змінних.
3. Обчислити площу та периметр кола за його радіусом.
14 1. Реалізувати функцію обчислення частки та залишку при діленні двох цілих
чисел.
2. Обчислити значення функції y=2*x2
+10*x–2
+40. Змінна х вводиться у формі.
3. Для вказаної площі території і кількості жителів країни знайти щільність
населення.
15 1. Для вказаного об'єму і маси твердого тіла знайти його щільність. Вхідні дані
вводити у формі. Результат вивести на форму.
2. Знайти значення поліному 3,8710305,23 145
 
xxxp . Значення x ввести
у формі. Результат вивести на форму.
3. Обчислити бісектрису медіану та висоту довільного трикутника, якщо відомі
його сторони a , b , c та c – сторона, на яку опущені бісектриса, медіана та
висота.
16 1. Реалізувати функцію обчислення найменшого спільного кратного трьох чисел
(наприклад, для чисел 15, 6 та 10 – це 30).
2. Обчислити функцію значення за формулою:
 









ba
ab
ba
a
baba
x
,
sin
,
2 .
Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на
форму.
3. Обчислити площу повної поверхні прямого кругового конуса, якщо відомі
радіус кола основи та довжина твірної бічної поверхні.
17 1. Реалізувати функцію перетворення уведеного у двійковій системі числення
цілого числа x у довільну систему числення, обрану зі списку (вісімкова,
десяткова, шістнадцяткова). Перевіряти уведене число, щоб воно містило лише
символи 0,1.
2. Реалізувати функцію обчислення значення x за формулою:
   







ba
batg
baba
x
,
cos
11
,3
. Значення a , b – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити площу поверхні та довжину просторової діагоналі прямокутного
паралелепіпеду, якщо відомі його сторони a , b , c .
18 1. Реалізувати функцію обчислення найбільшого спільного дільника трьох чисел
(наприклад, для чисел 12, 18 та 30 – це 6).
2. Реалізувати функцію обчислення значення x за формулою:







baba
baba
x
,sin*cos21
,22
. Значення a , b – дійсні числа, що вводяться у
формі. Результат вивести на форму.
3. Обчислити площу сегмента круга, якщо відомі його радіус r та центральний
кут сегмента  (в радіанах).
19 1. Реалізувати функцію визначення, чи ділиться ціле число n на 2, 3, 4, 5, 6, 8, 9,
10, 11 за ознаками подільності (наприклад, на 5 діляться числа, остання цифра
яких 0 або 5). Число n уводиться у формі, дільник обирається зі списку.
2. Реалізувати функцію обчислення значення x за формулою:











baba
ba
baba
ab
ba
ba
x
,ln
,
2
22 . Значення a , b – дійсні числа, що вводяться у
формі. Результат вивести на форму.
3. Обчислити апофему правильної піраміди за формулою
2
2
180





















n
tg
a
hf o
,
де n – кількість сторін правильного багатокутника, який є основою правильної
піраміди, a – сторона правильного багатокутника - основи правильної піраміди
та h – висота правильної піраміди.
20 1. Реалізувати функцію перетворення уведеного у шістнадцятковій системі
числення цілого числа x у довільну систему числення, обрану зі списку
(двійкова, вісімкова, десяткова). Перевіряти уведене число, щоб воно містило
лише символи 0,1,2,...,9,A,B,C,D,E.F.
2. Реалізувати функцію обчислення значення y за формулою:
 
 





xaax
xaaxa
y
,sin
,ln
. Значення a , x – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити об'єм зрізу, якщо відомі радіус кулі, відстань між двома кулями та
радіуси обох перерізів.
21 1. Реалізувати функцію обчислення середнього квадратичного відхилення трьох
дійсних чисел 1a , 2a , 3a за формулою
     
n
aaaaaa n
22
2
2
1 


 ,
де
n
aaa
a n

21
.
2. Реалізувати функцію обчислення значення z за формулою:
 









yx
yx
yx
yxyx
z
,ln
,cos 2
. Значення x , y – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити об'єм кульового сектора, якщо відомі його висота та радіус
великого кола кулі.
22 1. Реалізувати функцію обчислення n -членів арифметичної прогресії, якщо
кожен її член визначається за формулою  11  ndaan . Значення n , 1a та d
вводяться у формі.
2. Реалізувати функцію обчислення значення z за формулою:







yxyx
yxyx
z
,sinln
,sin
3
3 22
. Значення x , y – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити об'єм правильної трикутної піраміди, якщо відомі строна
правильного трикутника, що є її основою, та висота піраміди.
23 1. Реалізувати функцію знаходження рішення системи двох рівнянь першого
ступеня з двома невідомими





feydx
cbyax
. Коефіцієнти a , b , c , d , e , f – цілі
числа, що вводяться у формі. Перевіряти уведені дані на виконання умови
існування одного єдиного рішення системи рівнянь:
e
b
d
a
 .
2. Реалізувати функцію обчислення значення z за формулою:
 










yxyx
yx
yx
yx
z
,ln
,
coscos
sin
3
. Значення x , y – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити об'єм сектора, якщо відомі радіус кулі та довжина перпендикуляра,
опущеного на центр основи конуса зі сфери.
24 1. Реалізувати функцію обчислення n -членів геометричної прогресії, якщо кожен
її член визначається за формулою 1
1

 n
n qaa . Значення n , 1a та q вводяться у
формі.
2. Реалізувати функцію обчислення значення x за формулою:







baba
ba
b
a
ba
x
,cossin
,sin 2
3
. Значення a , b – дійсні числа, що вводяться у
формі. Результат вивести на форму.
3. Обчислити площу паралелограма, якщо відомі його сусідні сторони та кут між
ними.
25 1. Обчислити значення коренів квадратного рівняння 02
 cbxax за
формулою Вієтта
a
acbb
x
2
42
2,1

 . Коефіцієнти a , b , c – цілі числа, що
вводяться у формі. Перевіряти уведені дані на виконання умови існування двох
дійсних коренів квадратного рівняння: 042
 acb .
2. Реалізувати функцію обчислення значення z за формулою:
   
   

















yx
y
x
yx
ytgxtg
ytgxtg
z
,
1
lnlog
,
1
2
. Значення x , y – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити число  за формулою: 



n
i
x
x0
2
1
4
 , якщо відомі кількість
ітерацій n , крок nx /1 та початкове значення nx
2
1
0  , а кожне наступне
визначається як xxx nn  1 .
26 1. Реалізувати функцію обчислення процентів по депозиту, якщо відомий розмір
вкладу (вводиться у формі), процентна ставка та термін вкладу. Термін вкладу
обирається зі списку (наприклад, 1, 3, 6, 9 місяців, 365 діб), процентна ставка
залежить від терміну. Реалізувати можливість вибору вкладу з капіталізацією та
без.
2. Реалізувати функцію обчислення значення x за формулою:








baba
ba
a
a
x
ab
,
,
sin
cos1
sincos
2 . Значення a , b – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити площу поверхні сектора, якщо відомі радіус кулі та довжина
перпендикуляра, опущеного на центр основи конуса зі сфери.
27 1. Реалізувати функцію обчислення кількості днів між двома датами. Дати
вводяться у формі.
2. Реалізувати функцію обчислення значення z за формулою:
       













yxyx
x
yxxyyx
z
,
2
log
,cossincossin
. Значення x , y – дійсні числа, що
вводяться у формі. Результат вивести на форму.
3. Обчислити площу еліпсу, якщо відомі довжини малої та великої півосей.
28 1. Реалізувати функцію обчислення процентів за кредитом, якщо відома сума
кредиту (вводиться у формі), процентна ставка та термін кредитування. Метод
розрахунку: ануітет (рівні платежі). Термін кредитування обирається зі списку
(наприклад, 3, 6, 9, 12, ... місяців), процентна ставка уводиться у текстовому полі.
2. Реалізувати функцію обчислення значення x за формулою:
 
  







babaa
ba
a
a
x
,logln
,
cos1
sin
2
2
. Значення a , b – дійсні числа, що вводяться у формі.
Результат вивести на форму.
3. Обчислити об’єм прямого круглого конуса, якщо відомі радіус кола основи та
висота конуса.
Контрольні питання:
1. Назвіть основні складові платформи .NET Framework.
2.Чому середовище CLR є загальномовним? Які переваги це надає? Для яких мов
програмування .NET-компілятори розробила компанія Microsoft?
3. Опишіть етапи створення та виконання програми у середовищі CLR.
4. Чим керований код відрізняється від некерованого? Для яких мов програмування у
середовищі CLR керований код створюється за промовчанням?
5. Що таке метадані? Для чого вони використовуються?
6. Що є компонентом у контексті .NET Framework?
7. Назвіть основні складові керованого модуля. Яка саме з них робить модуль
керованим?
8. Що таке загальна система типів CTS? Яка її структура?
9. Вкажіть 4 основні відмінності типів-значень та типів-посилань.
10. Що таке boxing та unboxing? Як працює unboxing?

More Related Content

What's hot

Запалення: гуморальні механізми
Запалення: гуморальні механізмиЗапалення: гуморальні механізми
Запалення: гуморальні механізмиVictor Dosenko
 
Опір організаційним змінам, причини, наслідки, шляхи подолання
Опір організаційним змінам, причини, наслідки, шляхи подоланняОпір організаційним змінам, причини, наслідки, шляхи подолання
Опір організаційним змінам, причини, наслідки, шляхи подоланняMaximSidorenko
 
Презентація 1
Презентація 1Презентація 1
Презентація 1Vladysha1989
 
методи менеджменту
методи менеджментуметоди менеджменту
методи менеджментуuliana8
 
Оптимізація економічних систем з допомогою мережевих методів планування і упр...
Оптимізація економічних систем з допомогою мережевих методів планування і упр...Оптимізація економічних систем з допомогою мережевих методів планування і упр...
Оптимізація економічних систем з допомогою мережевих методів планування і упр...CDN_IF
 
9. фінансове планування
9. фінансове планування9. фінансове планування
9. фінансове плануванняBilovus
 
Ініціація проекту
Ініціація проектуІніціація проекту
Ініціація проектуOleg Nazarevych
 
Essay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САН
Essay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САНEssay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САН
Essay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САНKhishig Altankhuyag
 
змертвіння, виразки, нориці
змертвіння, виразки, норицізмертвіння, виразки, нориці
змертвіння, виразки, нориціdemon4ik demon4ik
 
Призначення балансу та його побудова
Призначення балансу та його побудоваПризначення балансу та його побудова
Призначення балансу та його побудоваIrisha56
 
2 життєвий цикл інформаційних систем
2 життєвий цикл інформаційних систем2 життєвий цикл інформаційних систем
2 життєвий цикл інформаційних системVolodymyr Ushenko
 
Інструменти проектного менеджменту для малого та середнього бізнесу презентація
Інструменти проектного менеджменту для малого та середнього бізнесу презентаціяІнструменти проектного менеджменту для малого та середнього бізнесу презентація
Інструменти проектного менеджменту для малого та середнього бізнесу презентаціяDmytryLozovytskiy
 
презентація до 3теми
презентація до 3темипрезентація до 3теми
презентація до 3темиstetsenko_lyudmila
 
мікроб. контроль
мікроб. контрольмікроб. контроль
мікроб. контрольolgazelik
 
мотивація як загальна функція менеджменту
мотивація як загальна функція менеджментумотивація як загальна функція менеджменту
мотивація як загальна функція менеджментуuliana8
 

What's hot (20)

Запалення: гуморальні механізми
Запалення: гуморальні механізмиЗапалення: гуморальні механізми
Запалення: гуморальні механізми
 
Опір організаційним змінам, причини, наслідки, шляхи подолання
Опір організаційним змінам, причини, наслідки, шляхи подоланняОпір організаційним змінам, причини, наслідки, шляхи подолання
Опір організаційним змінам, причини, наслідки, шляхи подолання
 
Презентація 1
Презентація 1Презентація 1
Презентація 1
 
методи менеджменту
методи менеджментуметоди менеджменту
методи менеджменту
 
Econ ch 10
Econ ch 10Econ ch 10
Econ ch 10
 
Лекц №11 Төслийн удирдлага
Лекц №11 Төслийн удирдлагаЛекц №11 Төслийн удирдлага
Лекц №11 Төслийн удирдлага
 
Оптимізація економічних систем з допомогою мережевих методів планування і упр...
Оптимізація економічних систем з допомогою мережевих методів планування і упр...Оптимізація економічних систем з допомогою мережевих методів планування і упр...
Оптимізація економічних систем з допомогою мережевих методів планування і упр...
 
9. фінансове планування
9. фінансове планування9. фінансове планування
9. фінансове планування
 
Ініціація проекту
Ініціація проектуІніціація проекту
Ініціація проекту
 
Essay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САН
Essay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САНEssay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САН
Essay zagvar-1 БОЛОВСРОЛЫН ЗЭЭЛИЙН САН
 
змертвіння, виразки, нориці
змертвіння, виразки, норицізмертвіння, виразки, нориці
змертвіння, виразки, нориці
 
фізіологія дихання
фізіологія диханняфізіологія дихання
фізіологія дихання
 
Призначення балансу та його побудова
Призначення балансу та його побудоваПризначення балансу та його побудова
Призначення балансу та його побудова
 
2 життєвий цикл інформаційних систем
2 життєвий цикл інформаційних систем2 життєвий цикл інформаційних систем
2 життєвий цикл інформаційних систем
 
Інструменти проектного менеджменту для малого та середнього бізнесу презентація
Інструменти проектного менеджменту для малого та середнього бізнесу презентаціяІнструменти проектного менеджменту для малого та середнього бізнесу презентація
Інструменти проектного менеджменту для малого та середнього бізнесу презентація
 
презентація до 3теми
презентація до 3темипрезентація до 3теми
презентація до 3теми
 
мікроб. контроль
мікроб. контрольмікроб. контроль
мікроб. контроль
 
Економічна теорія: від історії до сучасності
Економічна теорія: від історії до сучасностіЕкономічна теорія: від історії до сучасності
Економічна теорія: від історії до сучасності
 
мотивація як загальна функція менеджменту
мотивація як загальна функція менеджментумотивація як загальна функція менеджменту
мотивація як загальна функція менеджменту
 
It101 lk-10
It101 lk-10It101 lk-10
It101 lk-10
 

Similar to лаб. роб. №1 створення dll-бібліотеки на c++

Visual studio 2013 Розробка простого консольного додатка
Visual studio 2013 Розробка простого консольного додаткаVisual studio 2013 Розробка простого консольного додатка
Visual studio 2013 Розробка простого консольного додаткаVadym Rud
 
07 07-delphi
07 07-delphi07 07-delphi
07 07-delphiIren50
 
Урок 31-32. 8 клас
Урок 31-32. 8 класУрок 31-32. 8 клас
Урок 31-32. 8 класAndrey Podgayko
 
Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Nikolay Shaygorodskiy
 
конспект уроку налагодження програм
конспект уроку налагодження програмконспект уроку налагодження програм
конспект уроку налагодження програмtan4ikbah
 
Inf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasInf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasAllaGureva
 
Презентація до уроку № 2
Презентація до уроку № 2Презентація до уроку № 2
Презентація до уроку № 2Ірина І
 
Урок 22. Знайомство з середовищем програмування. Елементи вікна програмування
Урок 22. Знайомство з середовищем програмування. Елементи вікна програмуванняУрок 22. Знайомство з середовищем програмування. Елементи вікна програмування
Урок 22. Знайомство з середовищем програмування. Елементи вікна програмуванняВасиль Тереховський
 
Delphi ppt
Delphi pptDelphi ppt
Delphi pptgulitaap
 
головне меню за допомогою Label
головне меню за допомогою Labelголовне меню за допомогою Label
головне меню за допомогою Labelantalia1010
 
5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...
5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...
5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...Дмитро Загура
 

Similar to лаб. роб. №1 створення dll-бібліотеки на c++ (20)

Visual studio 2013 Розробка простого консольного додатка
Visual studio 2013 Розробка простого консольного додаткаVisual studio 2013 Розробка простого консольного додатка
Visual studio 2013 Розробка простого консольного додатка
 
07 07-delphi
07 07-delphi07 07-delphi
07 07-delphi
 
Урок 31-32. 8 клас
Урок 31-32. 8 класУрок 31-32. 8 клас
Урок 31-32. 8 клас
 
Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...
 
8 клас урок 42
8 клас урок 428 клас урок 42
8 клас урок 42
 
конспект уроку налагодження програм
конспект уроку налагодження програмконспект уроку налагодження програм
конспект уроку налагодження програм
 
розділ3 перший проект
розділ3 перший проектрозділ3 перший проект
розділ3 перший проект
 
середовище Lazarus
середовище Lazarusсередовище Lazarus
середовище Lazarus
 
dfgInf tema 1_urok_4_6_klas
dfgInf tema 1_urok_4_6_klasdfgInf tema 1_urok_4_6_klas
dfgInf tema 1_urok_4_6_klas
 
1 4
1 41 4
1 4
 
Inf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klasInf tema 1_urok_4_6_klas
Inf tema 1_urok_4_6_klas
 
Презентація до уроку № 2
Презентація до уроку № 2Презентація до уроку № 2
Презентація до уроку № 2
 
Урок 22. Знайомство з середовищем програмування. Елементи вікна програмування
Урок 22. Знайомство з середовищем програмування. Елементи вікна програмуванняУрок 22. Знайомство з середовищем програмування. Елементи вікна програмування
Урок 22. Знайомство з середовищем програмування. Елементи вікна програмування
 
Delphi ppt
Delphi pptDelphi ppt
Delphi ppt
 
головне меню за допомогою Label
головне меню за допомогою Labelголовне меню за допомогою Label
головне меню за допомогою Label
 
розділ 3 перший проект 1
розділ 3 перший проект 1розділ 3 перший проект 1
розділ 3 перший проект 1
 
Windows forms
Windows formsWindows forms
Windows forms
 
5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...
5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...
5 клас. Морзе. Урок 17. Діалогові вікна, їх об'єкти. Інформаційні вікна. Ство...
 
6 клас урок 4
6 клас урок 46 клас урок 4
6 клас урок 4
 
Win api module_2.1
Win api module_2.1Win api module_2.1
Win api module_2.1
 

More from cit-cit

лекція 5
лекція 5лекція 5
лекція 5cit-cit
 
лаборатор. 10
лаборатор. 10лаборатор. 10
лаборатор. 10cit-cit
 
лекція 19
лекція 19лекція 19
лекція 19cit-cit
 
лекція 18
лекція 18лекція 18
лекція 18cit-cit
 
лекція 17
лекція 17лекція 17
лекція 17cit-cit
 
лекція 16
лекція 16лекція 16
лекція 16cit-cit
 
лекція 12
лекція 12лекція 12
лекція 12cit-cit
 
лекція 11
лекція 11лекція 11
лекція 11cit-cit
 
лекція 10
лекція 10лекція 10
лекція 10cit-cit
 
лаборатор. 15
лаборатор. 15лаборатор. 15
лаборатор. 15cit-cit
 
лаборатор. 14
лаборатор. 14лаборатор. 14
лаборатор. 14cit-cit
 
лаборатор. 13
лаборатор. 13лаборатор. 13
лаборатор. 13cit-cit
 
лаборатор. 12
лаборатор. 12лаборатор. 12
лаборатор. 12cit-cit
 
лаборатор. 11
лаборатор. 11лаборатор. 11
лаборатор. 11cit-cit
 
лаборатор. 9
лаборатор. 9лаборатор. 9
лаборатор. 9cit-cit
 
лаборатор. 8
лаборатор. 8лаборатор. 8
лаборатор. 8cit-cit
 
лаборатор. 7
лаборатор. 7лаборатор. 7
лаборатор. 7cit-cit
 
лекція 15 (pdf.io)
лекція 15 (pdf.io)лекція 15 (pdf.io)
лекція 15 (pdf.io)cit-cit
 
лекція 14 (pdf.io)
лекція 14 (pdf.io)лекція 14 (pdf.io)
лекція 14 (pdf.io)cit-cit
 
лекція 13 (pdf.io)
лекція 13 (pdf.io)лекція 13 (pdf.io)
лекція 13 (pdf.io)cit-cit
 

More from cit-cit (20)

лекція 5
лекція 5лекція 5
лекція 5
 
лаборатор. 10
лаборатор. 10лаборатор. 10
лаборатор. 10
 
лекція 19
лекція 19лекція 19
лекція 19
 
лекція 18
лекція 18лекція 18
лекція 18
 
лекція 17
лекція 17лекція 17
лекція 17
 
лекція 16
лекція 16лекція 16
лекція 16
 
лекція 12
лекція 12лекція 12
лекція 12
 
лекція 11
лекція 11лекція 11
лекція 11
 
лекція 10
лекція 10лекція 10
лекція 10
 
лаборатор. 15
лаборатор. 15лаборатор. 15
лаборатор. 15
 
лаборатор. 14
лаборатор. 14лаборатор. 14
лаборатор. 14
 
лаборатор. 13
лаборатор. 13лаборатор. 13
лаборатор. 13
 
лаборатор. 12
лаборатор. 12лаборатор. 12
лаборатор. 12
 
лаборатор. 11
лаборатор. 11лаборатор. 11
лаборатор. 11
 
лаборатор. 9
лаборатор. 9лаборатор. 9
лаборатор. 9
 
лаборатор. 8
лаборатор. 8лаборатор. 8
лаборатор. 8
 
лаборатор. 7
лаборатор. 7лаборатор. 7
лаборатор. 7
 
лекція 15 (pdf.io)
лекція 15 (pdf.io)лекція 15 (pdf.io)
лекція 15 (pdf.io)
 
лекція 14 (pdf.io)
лекція 14 (pdf.io)лекція 14 (pdf.io)
лекція 14 (pdf.io)
 
лекція 13 (pdf.io)
лекція 13 (pdf.io)лекція 13 (pdf.io)
лекція 13 (pdf.io)
 

лаб. роб. №1 створення dll-бібліотеки на c++

  • 1. Кросплатформне програмування Лабораторна робота 1. Створення DLL-бібліотеки на мові C++ та виклик її функцій з Windows-проекту на мові C#. Мета роботи: набути навичок з розробки та збирання компонентів у багатомовному середовищі MS .NET Framework. План: 1. Створення рішення у багатомовному середовищі MS .NET Framework 2. Створення проекту DLL–бібліотеки на мові C++ 3. Експорт символів 4. Визначення угод виклику 5. Створення Windows-проекту для виклику функцій з DLL-бібліотеки 1. Створення рішення Запустіть Visual Studio 2010. Із стартової сторінки перейдіть до створення проекту: File|New|Project. Рис. 1.1. Вікно New Project налаштувань Рішення Lab1 У вікні New Project в папці Installed Templates|Other Project Types| Visual Studio Solutions виберіть шаблон Blank Solutions. Всі поля редагування у вікні будуть заповнені значеннями за промовчанням. Задайте власну інформацію: - у полі Name вкажіть ім'я рішення Lab1 (поле Location Name автоматично отримає те саме ім'я); - у полі Location вкажіть шлях до каталогу, де зберігатиметься рішення, що містить проект, наприклад, D:tempLab1. Зверніть увагу на інші налаштування, зроблені в цьому вікні: включений прапорець (за промовчанням) “Create directory for solution”, у верхньому віконці із списку можливих каркасів вибраний відповідний каркас (на рисунку це Framework .Net 4). Натиснувши кнопку “OK”, отримаємо автоматично побудоване рішення. В панелі Solution Explorer з’явиться Solutions Lab1, відкритий у середовищі Visual Studio 2010, а у відповідній папці на диску – файл Lab1.sln.
  • 2. 2. Створення проекту DLL–бібліотеки на мові C++ Клацніть правою кнопкою миші на Solutions Lab1 в панелі Solution Explorer та у контенстному меню виберіть Add|New Project. Рис. 1.2. Вікно Add New Project з налаштуваннями DLL-бібліотеки MyDll У вікні Add New Project (див. рис. 1.2) з папки Installed Templates|Other Languages|Visual C++|Win32 виберіть шаблон Win32 Project. Нижче у полі Name введіть ім’я проету MyDll та натисніть кнопку “OK”. На екрані з’явиться помічник Win32 Application Wizard. Натисніть кнопку “Next >” та перейдіть до наступного вікна діалогу (див. рис. 1.3), де серед налаштувань застосування виберіть тип застосування Dll. Натисніть кнопку “Finish”.
  • 3. Рис. 1.3. Вікно налаштувань помічника Win32 Application Wizard У панелі Solution Explorer з’явиться проект MyDll. Напишемо на C++ функцію, що реалізує додавання та добуток двох дійсних чисел (див. Лістінг 1.1). Лістінг 1.1. Код функцій додавання та добутку двох дійсних чисел на мові C++ На цьому етапі вже можна скомпілювати і скомпонувати DLL, однак DLL ще не буде експортувати функції, тому не буде дійсно корисною. 3. Експорт символів (створення .def-файла) Щоб отримати доступ до функції з DLL-бібліотеки, необхідно повідомити компілятору, які символи будуть експортуватися. Є два способи це зробити. Перший і найпростіший полягає у використанні тегу __declspec(dllexport) в прототипі функції, що буде експортуватися. Для цього необхідно додати тег до її оголошення та визначення: __declspec(dllexport) double sum(double a, double b) ... __declspec(dllexport) double mult(double a, double b) ... Другий метод полягає у використанні .def-файлу для явного оголошення функцій, які будуть експортуватися. .def-файл – це текстовий файл, що містить інформацію, яку компонувальник використовує для експорту. Він має наступний формат: LIBRARY <Ім’я, що використовується всередині DLL>
  • 4. DESCRIPTION "<Опис>" EXPORTS <Перший символ експорту> @1 <Другий символ експорту> @2 <Третій символ експорту> @3 ... Для функцій sum та mult цей файл матиме вигляд (див. Лістінг 1.2). Лістінг 1.2. Текст .def-файла Скористаємося другим способом. Щоб створити .def-файл, клацніть правою кнопкою миші на імені проекта MyDll в панелі Solution Explorer і у контенстному меню виберіть Add|New Item. У вікні Add New Item, що відкриється, с папці Installed Tamplates|Utility виберіть шаблон Text File (.txt). Нижче у полі Name введіть ім’я MyDll.exp та натисніть кнопку “Add” (див. рис. 1.4). Рис. 1.4. Вікно Add New Item під час створення файлу MyDll.exp Файл MyDll.exp з’явиться у списку в панелі Solution Explorer. У вікні редагування файлу MyDll.exp введіть текст .def-файла (див. Лістінг 1.2). Компонувальник автоматично шукає .def-файл з тим же ім'ям, що і проект, в каталозі проекту. Але у нашому випадку необхідно вказати компонувальнику, що MyDll.exp слід використовувати як .def-файл. Клацніть правою кнопкою миші на імені проекта MyDll в панелі Solution Explorer і у контенстному меню виберіть Properties. У відкритому вікні MyDll Property Pages (див. рис. 1.5) виберіть папку Configuration Properties| Linker|Input та змініть властивість Module Definition File на MyDll.exp. Натисніть кнопку “OK”. Бібліотека готова.
  • 5. Рис. 1.5. Вікно MyDll Property Pages 4. Визначення угод виклику Останнє, що необхідно зробити перед компіляцією DLL, – це визначити угоди виклику функцій, які надалі будуть експортуватися. Це можна зробити двома способами: використати угоди виклику C або стандартні угоди виклику, які також називаються Паскаль і WINAPI. Більшість функцій DLL використовують стандартні угоди виклику, але в цій лабораторній роботі можна скористатися будь-яким з них. Угоди виклику C можна не вказувати, бо вони визначаються за промовчуванням, якщо в Project|Properties|C/C++|Advanced не вказано інакше. Якщо необхідно явно оголосити функцію як виклик C, в оголошенні та визначенні функції слід використати ключове слово __cdecl. Щоб задати стандартні угоди виклику, помістіть ключове слово __stdcall в оголошення та визначення функцій: double __stdcall sum(double a, double b) ... double __stdcall mult(double a, double b) ... Скористаємося другим способом. Примітка. Угода виклику (або модель виклику) регламентують технічні особливості виклику підпрограми, передачі параметрів, повернення з підпрограми і передачі результату обчислень в точку виклику. Угода виклику __stdcall застосовується при виклику функцій WinAPI і вказує, що аргументи передаються через стек, справа наліво, очищення стека виконує підпрограма, яка викликається. 5. Створення Windows-проекту для виклику функції з DLL-бібліотеки Клацніть правою кнопкою миші на Solutions Lab1 в панелі Solution Explorer і у контенстному меню виберіть Add|New Project. У вікні Add New Project (див. рис. 1.6) в папці Installed Tamplates| Visual C# виберіть шаблон Windows Forms Application. Нижче у полі Name введіть ім’я проекту MyFormApp та натисніть кнопку “OK”. В панелі Solution Explorer з’явиться проект MyFormApp.
  • 6. Рис. 1.6. Вікно Add New Project під час створення проекту У полі Name форми вкажіть нове ім’я MyForm. На формі (див. рис. 1.7) розмістіть чотири текстові поля для введення двох вхідних параметрів і результатів з назвами txtBoxA, txtBoxB, txtBoxSum та txtBoxMult відповідно. Також додайте кнопку “Calculate” з іменем btnCalculate. Рис. 1.7. Форма Windows-проекту Двічі клацнувши мишкою на кнопці “Calculate”, створимо для неї обробник події Click. Додайте до нього код, що містить виклик функцій sum та mult з DLL-бібліотеки (див. Лістінг 1.3). Лістінг 1.3. Обробник події для кнопки “Calculate”
  • 7. Компілятор стверджуватиме, що класа MyDllClass не існує. Виправимо це. Перейдіть у панель Solution Explorer.Клацніть правою кнопкою миші на MyFormApp і у контенстному меню виберіть Add|Class. У вікні, що з’явилося, виберіть шаблон Class, дайте йому ім’я MyDllClass.cs та натисніть кнопку “Add”. У вікні редагування MyDllClass.cs відобразиться такий код (див. Лістінг 1.4). Лістінг 1.4. Оголошення класу MyDllClass, яке міститься у файлі MyDllClass.cs після його створення using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyFormsApp { class MyDllClass { } } Додамо до класу MyDllClass оголошення зовнішніх методів sum та mult. Тепер клас матиме наступний вигляд: Модифікатор extern означає, що функції sum та mult визначена зовні. У квадратних дужках "[]" розміщено атрибут DllImport. В C# атрибути використовуються як засіб додавання декларативної інформації до елементів програмного коду. Призначення атрибутів – організація взаємодії між програмними модулями, додаткова інформація про умови виконання коду, управління сериалізацією (тобто правила збереження інформації), відладка тощо. Атрибути можуть бути як стандартними, так і заданими користувачем. Стандартні атрибути використовуються CLR і впливають на те, як буде виконуватися проект. В атрибуті DllImport вказано повний шлях до файла MyDll.dll.
  • 8. Якщо повний шлях не вказано, за промовчанням компілятор шукатиме вказаний в атрибуті файл MyDll.dll у тій же папці, де знаходиться MyFormApp.exe. Але у даному випадку MyDll.dll знаходиться в іншій папці, тому потрібно вказувати повний шлях. Компілятор підкреслює червоним атрибут DllImport, оскільки не може знайти його простір імен. Клацніть на DllImport мишею, поряд з DllImport з’явиться значок . Якщо навести на нього курсор, на екрані відображається кнопка , що розкриває меню (див. рис. 1.8). Виберіть з цього меню using System.Runtime.InteropServices; і декларація про використання відповідного простору імен автоматично з’явиться на початку вихідного коду. Рис. 1.8. Вікно MyDll Property Pages Інший варіант виправлення цієї помилки – вказати повне ім’я атрибута System.Runtime.InteropServices.DllImport. Побудуємо рішення і отримаємо повідомлення про помилку, оскільки не вказали стартовий проект. Для цього перейдіть у панель Solution Explorer, клацніть правою кнопкою миші на MyFormApp і у контенстному меню виберіть Set as StartUp Project. Натисніть кнопку F5, щоб запустити проект. Переконайтеся, що програма успішно працює. Завдання для самостійної роботи 1. Створити рішення 2. Створити DLL-бібліотеку, яка містить функції, що необхідні для реалізації індивідуального завдання. 3. Створити в тому ж рішенні Windows-проект, який викликає ці бібліотечні методи для виконання необхідних обчислень. Форма для введення вхідних даних та виведення результатів повинна бути достатньо інформативною, щоб корстувачу було зрозуміло, які саме обчислення і за якими формулами виконуються у програмі. 4. При введенні вхідних даних перевіряти їх на допустимість значень. Наприклад, якщо використовується операція ділення, перевіряти, щоб знаменник не дорівнював нулю. Діапазони допустимих значень описати у звіті. Проіюструвати скрін-шотами роботу програми на допустимих та недопустимих значеннях вхідних даних (повідомлення про помилки або невірно введені дані). 5. Вивести на форму власні анкетні дані: прізвище, ім'я, по-батькові, група, курс. Зміст звіту: 1. Постановка завдання для індивідуального варіанту. 2. Список і призначення використовуваних змінних, діапазони їх допустимих значень. 3. Текст програми.
  • 9. 4. Протокол роботи програми (на допустимих та недопустимих значеннях вхідних даних). 5. Висновки. Варіанти індивідуальних завдань № ва- ріанту Зміст завдання 1 1. Реалізувати функцію фактеріалу від цілого числа. 2. Обчислити функцію Cos(x) через ряд Тейлора: n n n x n x 2 0 )!2( )1( cos      . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованих функцій для тригонометричних обчислень та порівняти їх для різних значень n. 3. Обчислити площу прямокутного трикутника за заданими катетами. 2 1. Реалізувати функцію піднесення дійсного числа x у ступінь n (n – ціле). 2. Обчислити функцію Sin(x) через ряд Тейлора: 12 0 )!12( )1( sin        n n n x n x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованих функцій для тригонометричних обчислень та порівняти їх для різних значень n. 3. Реалізувати функцію перетворення введеного значення ваги з одних одиниць вимірювання (грами, кг, центнер, тонна) у інші (грами, кг, центнер, тонна). Одиниці вимірвання для вхідних даних та результату обирати зі списків. 3 1. Реалізувати функцію обчислення усіх чисел, на які без залишку ділеться задане ціле число. Повідомляти, якщо уведене ціле число є простим числом. 2. Обчислити функцію arcsin(x) через ряд Тейлора: 12 0 2 )12()!(4 )!2( arcsin       n n n x nn n x для 1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованих функції для тригонометричних обчислень та порівняти їх для різних значень n. 3. Обчислити радіуси кіл, вписаного та описаного навколо рівнобедреного трикутника, якщо відомі сторони цього трикутника. 4 1. Реалізувати функцію перетворення температури у градусах Цельсія у температуру у Фарингейтах. Значення температури вводиться у формі, а вихідна шкала обирається зі списку, шкала результату встановлюється автоматично. 2. Обчислити функцію arctg(x) через ряд Тейлора: 12 0 12 )1(        n n n x n xarctg для 1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованих функцій для тригонометричних обчислень та порівняти їх для різних значень n. 3. Обчислити об’єм та площу поверхні кулі за заданим радіусом. 5 1. Ввести довжину в одних одиницях виміру (дюйм, фут, ярд, миля), виконати її перетворення у інші одиниці виміру та вивести результат на форму. Одиниці виміру обирати зі списку.
  • 10. 2. Обчислити функцію експоненти через ряд Тейлора:     0 !n n x n x e . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованих функцій та порівняти їх для різних значень n. 3. Обчислити площу повної поверхні зрізаного конуса, якщо відомі радіуси нижньої та верхньої основи, твірна конуса. 6 1. Реалізувати функцію обчислення послідовності чисел Фібоначчі за формулою 21   nnn FFF (наступне число є сумою двох попередніх, перші два числа дорівнюють 1). Вивести на форму послідовність чисел Фібоначчі до n-го числа, n – ціле, n>2, n вводиться у формі. 2. Обчислити функцію натурального логарифма через ряд Тейлора:       0 1 )1( )1ln( n n n x n x для 1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованих функцій та порівняти їх для різних значень n. 3. Обчислити площу квадрату за заданою діагоналлю. 7 1. Обчислити середнє арифметичне та середнє геометричне трьох дійсних чисел. 2. Обчислити функцію arccos(x) через ряд Тейлора: 12 0 2 )12()!(4 )!2( 2 arcsin 2 arccos       n n n x nn n xx  для 1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованих функцій для тригонометричних обчислень та порівняти їх для різних значень n. 3. Обчислити площу та радіус вписаного у рівнобедрену трапецію кола за сторонами цієї трапеції. 8 1. Реалізувати функцію обчислення гармонічного середнього (обчислюється за формулою nxxx n x 111 21    ) трьох дійсних чисел. 2. Обчислити через ряд Тейлора квадратний корінь n n n n x nn n x       0 2 )21()!(4 )!2()1( 1 для 1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму разом з результатом, отриманим з застосуванням вбудованої функції Math.sqrt(x) та порівняти їх для різних значень n. 3. Обчислити площу правильного багатокутника, якщо відома довжина його сторони a та кількість сторін n . 9 1. Реалізувати функцію перетворення уведеного у десятковій системі числення цілого числа x у довільну систему числення, обрану зі списку (двійкова, вісімкова, шістнадцяткова). Перевіряти уведене число, щоб воно містило лише символи 0,1,2,...,9.
  • 11. 2. Обчислити через ряд Тейлора      01 1 n n x x для 1x . Значення x – дійсне число, n – ціле (кількість членів ряду). Значення x та n вводяться у формі. Результат вивести на форму. 3. Обчислити площу довільного трикутника за заданими значеннями його сторін. 10 1. Реалізувати функцію перетворення введеного значення довжини з одних одиниць вимірювання (мм, см, дм, м, км) у інші (мм, см, дм, м, км). Одиниці вимірювання для вхідних даних та результату обирати зі списків. 2. Знайти значення поліному p=3,5*x4 +3*x3 +10*x2 +8,3. Значення x ввести у формі. Результат вивести на форму 3. Обчислити площу довільної трапеції, якщо відомі значення її верхньої та нижньої основ і висоти. Визначити, чи можна вписати у цю трапецію коло, і, якщо це можливо, обчислити його радіус. 11 1. Ввести вартість покупки у гривні та суму, яку сплачує покупець у будь-якій іншій валюті (валюту обирати зі списку запропонованих). Вивести повідомлення про решту, яку має видати продавець у гривні. Курси валют ініціалізувати у коді та вказати поряд з назвою валюти у списку. 2. Обчислити значення функції z=a/x2 +b*y2 +c при будь-яких значеннях параметрів і змінних. 3. Обчислити площу кільця, якщо відомі радіус зовнішнього кола R та внутрішнього кола r . 12 1. Реалізувати функцію піднесення до кубу різниці двох дійсних чисел. 2. Обчислити значення функції 7 1 25 2 2  y xyxz при будь-яких значеннях змінних. 3. Обчислити площу довільного трикутника, радіуси вписаного та описаного навколо нього кола, якщо задано його сторони. 13 1. Відомі координати двох точок на площині. Обчислити відстань між цими точками. 2. Обчислити значення функції 22 25 3 126 x xy xyxz  при будь-яких значеннях параметрів і змінних. 3. Обчислити площу та периметр кола за його радіусом. 14 1. Реалізувати функцію обчислення частки та залишку при діленні двох цілих чисел. 2. Обчислити значення функції y=2*x2 +10*x–2 +40. Змінна х вводиться у формі. 3. Для вказаної площі території і кількості жителів країни знайти щільність населення. 15 1. Для вказаного об'єму і маси твердого тіла знайти його щільність. Вхідні дані вводити у формі. Результат вивести на форму. 2. Знайти значення поліному 3,8710305,23 145   xxxp . Значення x ввести у формі. Результат вивести на форму. 3. Обчислити бісектрису медіану та висоту довільного трикутника, якщо відомі його сторони a , b , c та c – сторона, на яку опущені бісектриса, медіана та висота. 16 1. Реалізувати функцію обчислення найменшого спільного кратного трьох чисел
  • 12. (наприклад, для чисел 15, 6 та 10 – це 30). 2. Обчислити функцію значення за формулою:            ba ab ba a baba x , sin , 2 . Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити площу повної поверхні прямого кругового конуса, якщо відомі радіус кола основи та довжина твірної бічної поверхні. 17 1. Реалізувати функцію перетворення уведеного у двійковій системі числення цілого числа x у довільну систему числення, обрану зі списку (вісімкова, десяткова, шістнадцяткова). Перевіряти уведене число, щоб воно містило лише символи 0,1. 2. Реалізувати функцію обчислення значення x за формулою:            ba batg baba x , cos 11 ,3 . Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити площу поверхні та довжину просторової діагоналі прямокутного паралелепіпеду, якщо відомі його сторони a , b , c . 18 1. Реалізувати функцію обчислення найбільшого спільного дільника трьох чисел (наприклад, для чисел 12, 18 та 30 – це 6). 2. Реалізувати функцію обчислення значення x за формулою:        baba baba x ,sin*cos21 ,22 . Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити площу сегмента круга, якщо відомі його радіус r та центральний кут сегмента  (в радіанах). 19 1. Реалізувати функцію визначення, чи ділиться ціле число n на 2, 3, 4, 5, 6, 8, 9, 10, 11 за ознаками подільності (наприклад, на 5 діляться числа, остання цифра яких 0 або 5). Число n уводиться у формі, дільник обирається зі списку. 2. Реалізувати функцію обчислення значення x за формулою:            baba ba baba ab ba ba x ,ln , 2 22 . Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити апофему правильної піраміди за формулою 2 2 180                      n tg a hf o , де n – кількість сторін правильного багатокутника, який є основою правильної піраміди, a – сторона правильного багатокутника - основи правильної піраміди та h – висота правильної піраміди. 20 1. Реалізувати функцію перетворення уведеного у шістнадцятковій системі числення цілого числа x у довільну систему числення, обрану зі списку (двійкова, вісімкова, десяткова). Перевіряти уведене число, щоб воно містило лише символи 0,1,2,...,9,A,B,C,D,E.F. 2. Реалізувати функцію обчислення значення y за формулою:
  • 13.          xaax xaaxa y ,sin ,ln . Значення a , x – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити об'єм зрізу, якщо відомі радіус кулі, відстань між двома кулями та радіуси обох перерізів. 21 1. Реалізувати функцію обчислення середнього квадратичного відхилення трьох дійсних чисел 1a , 2a , 3a за формулою       n aaaaaa n 22 2 2 1     , де n aaa a n  21 . 2. Реалізувати функцію обчислення значення z за формулою:            yx yx yx yxyx z ,ln ,cos 2 . Значення x , y – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити об'єм кульового сектора, якщо відомі його висота та радіус великого кола кулі. 22 1. Реалізувати функцію обчислення n -членів арифметичної прогресії, якщо кожен її член визначається за формулою  11  ndaan . Значення n , 1a та d вводяться у формі. 2. Реалізувати функцію обчислення значення z за формулою:        yxyx yxyx z ,sinln ,sin 3 3 22 . Значення x , y – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити об'єм правильної трикутної піраміди, якщо відомі строна правильного трикутника, що є її основою, та висота піраміди. 23 1. Реалізувати функцію знаходження рішення системи двох рівнянь першого ступеня з двома невідомими      feydx cbyax . Коефіцієнти a , b , c , d , e , f – цілі числа, що вводяться у формі. Перевіряти уведені дані на виконання умови існування одного єдиного рішення системи рівнянь: e b d a  . 2. Реалізувати функцію обчислення значення z за формулою:             yxyx yx yx yx z ,ln , coscos sin 3 . Значення x , y – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити об'єм сектора, якщо відомі радіус кулі та довжина перпендикуляра, опущеного на центр основи конуса зі сфери. 24 1. Реалізувати функцію обчислення n -членів геометричної прогресії, якщо кожен її член визначається за формулою 1 1   n n qaa . Значення n , 1a та q вводяться у формі. 2. Реалізувати функцію обчислення значення x за формулою:        baba ba b a ba x ,cossin ,sin 2 3 . Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на форму.
  • 14. 3. Обчислити площу паралелограма, якщо відомі його сусідні сторони та кут між ними. 25 1. Обчислити значення коренів квадратного рівняння 02  cbxax за формулою Вієтта a acbb x 2 42 2,1   . Коефіцієнти a , b , c – цілі числа, що вводяться у формі. Перевіряти уведені дані на виконання умови існування двох дійсних коренів квадратного рівняння: 042  acb . 2. Реалізувати функцію обчислення значення z за формулою:                          yx y x yx ytgxtg ytgxtg z , 1 lnlog , 1 2 . Значення x , y – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити число  за формулою:     n i x x0 2 1 4  , якщо відомі кількість ітерацій n , крок nx /1 та початкове значення nx 2 1 0  , а кожне наступне визначається як xxx nn  1 . 26 1. Реалізувати функцію обчислення процентів по депозиту, якщо відомий розмір вкладу (вводиться у формі), процентна ставка та термін вкладу. Термін вкладу обирається зі списку (наприклад, 1, 3, 6, 9 місяців, 365 діб), процентна ставка залежить від терміну. Реалізувати можливість вибору вкладу з капіталізацією та без. 2. Реалізувати функцію обчислення значення x за формулою:         baba ba a a x ab , , sin cos1 sincos 2 . Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити площу поверхні сектора, якщо відомі радіус кулі та довжина перпендикуляра, опущеного на центр основи конуса зі сфери. 27 1. Реалізувати функцію обчислення кількості днів між двома датами. Дати вводяться у формі. 2. Реалізувати функцію обчислення значення z за формулою:                      yxyx x yxxyyx z , 2 log ,cossincossin . Значення x , y – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити площу еліпсу, якщо відомі довжини малої та великої півосей. 28 1. Реалізувати функцію обчислення процентів за кредитом, якщо відома сума кредиту (вводиться у формі), процентна ставка та термін кредитування. Метод розрахунку: ануітет (рівні платежі). Термін кредитування обирається зі списку (наприклад, 3, 6, 9, 12, ... місяців), процентна ставка уводиться у текстовому полі. 2. Реалізувати функцію обчислення значення x за формулою:             babaa ba a a x ,logln , cos1 sin 2 2 . Значення a , b – дійсні числа, що вводяться у формі. Результат вивести на форму. 3. Обчислити об’єм прямого круглого конуса, якщо відомі радіус кола основи та висота конуса.
  • 15. Контрольні питання: 1. Назвіть основні складові платформи .NET Framework. 2.Чому середовище CLR є загальномовним? Які переваги це надає? Для яких мов програмування .NET-компілятори розробила компанія Microsoft? 3. Опишіть етапи створення та виконання програми у середовищі CLR. 4. Чим керований код відрізняється від некерованого? Для яких мов програмування у середовищі CLR керований код створюється за промовчанням? 5. Що таке метадані? Для чого вони використовуються? 6. Що є компонентом у контексті .NET Framework? 7. Назвіть основні складові керованого модуля. Яка саме з них робить модуль керованим? 8. Що таке загальна система типів CTS? Яка її структура? 9. Вкажіть 4 основні відмінності типів-значень та типів-посилань. 10. Що таке boxing та unboxing? Як працює unboxing?