- •1Розробка універсальних додатків для різних типів кодувань символьної інформації
- •1.1Мета роботи
- •1.2Методичні вказівки з організації самостійної роботи студентів
- •1.2.1Типи даних char і wchar_t. Універсальне завдання типу
- •1.2.2Функції для роботи з рядками для ansi і unicode кодувань
- •1.2.3Файл tchar.H. Пошук імен для універсальних функцій
- •1.2.4Визначення типу тексту і перетворення типу кодування тексту
- •1.3Порядок виконання лабораторної роботи
- •2.2.2Загальна характеристика динамічних бібліотек
- •2.2.3Створення статичних бібліотек
- •2.2.4Створення dll
- •2.2.5Використання dll
- •2.2.6Алгоритм шифрування rsa
- •2.3Порядок виконання лабораторної роботи
- •3.3Порядок виконання лабораторної роботи
- •3.5Контрольні запитання і завдання
- •4Керування зовнішніми пристроями. Нестандартні пристрої
- •4.1Мета роботи
- •4.2Методичні вказівки з організації самостійної роботи студентів
- •4.3 Порядок виконання лабораторної роботи
- •4.5Контрольні питання и завдання
- •5.2.2Інформація про файлову систему пристрою
- •5.2.3Визначення вільного місця на пристрої
- •5.3Порядок виконання лабораторної роботи
- •5.5Контрольні запитання і завдання
- •7.3Порядок виконання лабораторної роботи
- •7.5Контрольні запитання і завдання
- •8 Керування потоками
- •8.1Мета роботи
- •8.2Методичні вказівки з організації самостійної роботи студентів
- •8.3Порядок виконання лабораторної роботи
- •8.5Контрольні питання й завдання
- •9 Керування розподілом пам'яті (wіnapі)
- •9.1Мета роботи
- •9.2Методичні вказівки з організації самостійної роботи студентів
- •9.3Порядок виконання лабораторної роботи
- •9.5Контрольні питання й завдання
- •10 Синхронізація процесів і потоків
- •10.1Мета роботи
- •10.2Методичні вказівки з організації самостійної роботи студентів
- •10.3Порядок виконання лабораторної роботи
- •10.5 Контрольні питання й завдання
- •Список використаних джерел
- •Додаток а Стандартні функції для введення – виведення даних для стандартних пристроїв. Функції для роботи з файлами.
1.2.4Визначення типу тексту і перетворення типу кодування тексту
Нехай задано текст. Необхідно визначити, яке кодування використовується для завдання цього тексту.
Для цього можно використовувати функцію IsTextUnicode:
BOOL IsTextUnicode( CONST VOID* pBuffer, int cb, LPINT lpi );
де:
pBuffer – буфер з символами;
cb - кількість символів в буфері;
lpi - ознаки, по яким визначається тип кодування. Кожна ознака задається одним бітом. На вході зазвичай задають 1 в усіх бітах, тобто число -1. На виході в 1 установлені ті біти, ознаки для яких підтверджені.
Відкрийте допомогу для цієї функції і розгляньте ці ознаки!
Функція повертає TRUE, якщо текст по більшості ознак типу Unicode, FALSE для типу ANSI.
Функція для перетворення ANSI в Unicode MultiByteToWideChar :
int MultiByteToWideChar(
UINT CodePage, // Кодова сторінка, звичайно задається CP_ACP
DWORD dwFlags, // 0
LPCSTR lpMultiByteStr, // Рядок, який перетворюється
int cbMultiByte, // Розмір (в байтах)
LPWSTR lpWideCharStr, // Рядок - результат
int cchWideChar // Розмір в wchar_t символах.
);
Функція повертає кількість символів в рядку-результату.
Функція для перетворення Unicode в ANSI
int WideCharToMultiByte(
UINT CodePage, // Кодова сторінка, звичайно задається CP_ACP
DWORD dwFlags, // 0
LPCWSTR lpWideCharStr, // Рядок, який перетворюється
int cchWideChar, // // Розмір
LPSTR lpMultiByteStr, // Рядок - результат
int cbMultiByte, // // Розмір
LPCSTR lpDefaultChar, // Адреса символу, яким заміняється
//символ, що перетворюється, якщо він не може бути
// відображений. Дорівнює NULL, якщо використовується
// символ за замовчуванням.
LPBOOL lpUsedDefaultChar // Покажчик на прапорець, який вказує на
// те, чи використовувався символ за замовчуванням у
// попередньому параметрі. Може бути NULL.
);
Функція повертає кількість символів в рядку, який є результатом.
1.3Порядок виконання лабораторної роботи
Складіть програму для програмної перевірки типу кодування, заданого за замовчуванням (визначте довжину в байтах типу TCHAR).
Визначте тип кодування по заданих макросах в командному рядку. Для цього визначимо командний рядок для трансляції програми:
Properties→C/C++→Command Line
Усі змінні, які задаються при трансляції, задаються параметром /D. Якщо визначено змінну UNICODE, то використовується режим UNICODE, якщо така змінна не задана, то використовується режим ANSI.
Перемикніть режим завдання символу на протилежний. Для перемикання режиму з UNICODE в режим ANSI використовують таку послідовність вибору пунктів меню: Properties→General→Character Set→ Use Multi-Byte Character Set
Для перемикання з режиму ANSI в режим UNICODE використовують: Properties→General→Character Set→UseUnicode Character Set.
Після перемикання режиму знову перевірте тип символу за замовчуванням та командний рядок. (Після трансляції!!!)
Завдайте ПІБ членів своєї сім’її в ANSI та виведіть задані значення. Для виведення букв кирилиці необхідно встановити локальні режими. Для цього використовуються файл заголовку і функція:
#include <locale.h>
…
TCHAR * _tsetlocale ( int category, const TCHAR *locale );
де:
category – зазвичай (LC_ALL);
locale – рядок, який визначається мовою, для якої встановлюється:
_T("Russian") – російська мова;
_T("Ukrainian") – українська мова.
Функція повертає 0, якщо функція не може бути виконана.
Переведіть задані рядки в UNICODE за допомогою функції (MultiByteToWideChar).
Виведіть отриманий масив. Перевірте можливість виведення кожним з 3-х способів:
функція _tprintf, якщо встановлено локальні режими;
функція MessageBox
int MessageBox (0, <Рядок, який виводиться>, <Заголовок вікна>, MB_OK)) ;
функція WriteConsole (Дескриптор, <Рядок, який виводиться>, <Довжина рядка в символах>, <Адреса довжини рядка, який виведено>, 0).
Зробіть висновки відносно можливості їх використання.
Виконайте упорядкування масиву рядків, заданих в UNICODE. Для сортування треба використовувати універсальну стандартну функцію qsort:
void qsort(
void *base, // Масив, що упорядковуємо
size_t num, // Кількість елементів масиву;
size_t width, // Ширина елементу масиву;
int (__cdecl *compare )(const void *, const void *) );
// Функція для порівняння елементів масиву
Виконайте зворотне перетворення масиву з Unicode в ANSI.
Виведіть отриманий результат
Завдано текстовий файл. Незалежно від способу кодування символів в цьому файлі, переставити всі символи в зворотному порядку. Символи кінця рядка залишити в правильному порядку.
1.4Зміст звіту
Звіт повинен вміщувати:
повний опис усіх типів і функцій, які використовуються для забезпеченості універсальності кодування;
повний опис усіх типів і функцій, які використовуються для виведення інформації в консольному режимі на російській (українській) мові;
тексти розробленої програми з коментарями;
тести для перевірки правильності програми;
Висновки по роботі
1.5Контрольні запитання і завдання
Навіщо створювати універсальні додатки для роботи з ANSI, UNICODE?
Як забезпечити універсальність об’явлення символу?
Які функції використовуються для введення та виведення універсальних типів даних?
Як встановити локальні характеристики для виведення інформації російською(українською) мовами?
Що треба змінити в програмі для упорядкування масиву ANSI символів?
2СТВОРЕННЯ ТА ВИКОРИСТАННЯ БІБЛІОТЕК
2.1 Мета роботи
Вивчити прийоми та методи створення та використання статичний та динамічних бібліотек
2.2Методичні вказівки з організації самостійної роботи студентів
При підготовці до лабораторної роботи необхідно повторити матеріал відповідних лекцій та ознайомитися з [3, c. 100 - 106 ].
2.2.1Загальна характеристика статичних бібліотек
Статичні бібліотеки (файл з розширенням lib) компонується разом з додатком, в якому використовується ця бібліотека.
Переваги статичних бібліотек:
статична бібліотека утворює разом з рештою додатку єдине ціле, тобто для використання додатка достатньо мати один файл типу .exe.
простота використання за рахунок того, що використання функції зі статичної бібліотеки нічим не відрізняється від використання функцій, визначений в додатку.
Недоліки статичних бібліотек:
бібліотеки залежать від середовища, в якому вони створені. Так, бібліотеку, яку було створено в середовищі С++ Builder, не можна використовувати в середовищі Visual Studio та навпаки;
при зміні коду бібліотеки потрібна повторна компоновка усіх додатків, які використовують бібліотеку;
якщо декілька додатків використовують одну і ту ж бібліотеку, копія цієї бібліотеки зберігається в пам’яті кожного додатку.
