Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Мета роботи




ВСТУП

Мета методичних вказівок – оказати допомогу студентам при підготовці, виконанні та оформленні результатів виконання лабораторних робіт по дисципліні, основним призначенням якої є вивчення принципів побудови сучасних операційних систем та найбільш ефективного використання їх функцій при розробці програм та їх застосуванню.

Лабораторні роботи по дисципліні вчать практичному використанню теоретичних положень, які вивчені на лекціях, закріплюють та розширяють практичні навики, що були отримані на практичних заняттях по курсу.

Кожна лабораторна робота потребує попередньої підготовки, а саме:

- вивчення теоретичного матеріалу;

- розробки алгоритмів вирішення задач, які треба виконати під час лабораторної роботи;

- розробка тестів для перевірки програм.

Усі лабораторні роботи виконуються з застосуванням ЕОМ. При цьому необхідно:

- виконувати правила техніки безпеки при роботі з ЕОМ;

- виконувати правила поведінки в лабораторії ЕОМ;

- приходити на заняття строго за розкладом;

- не допускається зміна прав доступу до системних ресурсів.

До роботи допускаються тільки підготовлені студенти, які склали та захистили програми. При допуску викладач перевіряє наявність цих програм та ступень самостійності їх складання.

Студент самостійно виправляють помилки в програмі.. Сама помилка та дії, необхідні для її виправлення, заносяться в звіт по лабораторній роботі. Найбільш характерні помилки обговорюються з групою в ході виконання лабораторних робіт.

Якщо ЕОМ не хватає для кожного студента, то лабораторну роботу виконує бригада. Звіт оформлюється один на бригаду, але кожний студент здає лабораторну роботу індивідуально.

Звіт повинен включати в себе:

- назву лабораторної роботи;

- мету лабораторної роботи;

- завдання і тексти програм, тести, помилки, які знайдені при виконанні тестів, результати виконання програм, висновки.

В якості шаблону для підготовки звіту можна використовувати цю методичку в електронному вигляді. На титульному листі методички треба написати авторів звіту.

Без наявності електронної копії звіту для поточної лабораторної роботі і всіх попередніх робіт лабораторна робота не приймається. Здача поточної лабораторної роботи може бути виконана в день виконання лабораторної роботи або під час наступної лабораторної роботи. Лабораторна робота, яка здається невчасно, не може бути оцінена високою оцінкою. При отриманні заліку по лабораторним роботам в кінці семестру студент повинен представити викладачу повний звіт по усім лабораторним роботам семестру в електронному вигляді.

Всі лабораторні роботи здаються на ЕОМ.


 

1 РОЗРОБКА УНІВЕРСАЛЬНИХ ДОДАТКІВ ДЛЯ РІЗНИХ ТИПІВ КОДУВАНЬ СИМВОЛЬНОЇ ІНФОРМАЦІЇ

ANSI кодування використовує один байт для завдання одного символу. Цього зовсім не достатньо для завдання текстів, в яких є речення на різних мовах. UNICODE кодування застосовує два байта при кодуванні одного символу. При такому кодуванні максимальна кількість кодів символів 65536 в порівнянні з 256 для ANSI кодування, що забезпечує можливість використання усіх наявних на сьогодні мов. Більшість текстових файлів на сьогодні мають ANSI кодування. Кодування імен файлів залежить від наявної файлової системи, в електронних листах можна використовувати обидві типа кодування. таким чином, обидва способи кодування використовуються. Метою даної лабораторної роботи є навчитися опрацьовувати тексти для обох типів кодування, при чому сама програма не повинна залежати від обраного способу.

 

1.2 Підготовка до роботи. Теоретичні положення

1.2.1 Типи даних char і wchar_t. Універсальне завдання типу

При використанні ANSI кодування використовується тип даних char. Даному типа char виділяється один байт. Приклади використання цього типу:

char symbol = ‘x’;

char array [] = “This is array”;

При використанні UNICODE кодування використовується тип даних wchar_t. Даному типа wchar_t виділяється два байти. Приклади використання цього типу:

wchar_t symbol = L‘x’;

wchar_t array [] = L“This is array”;

Для створення універсального тексту програми, який можна використовувати для обох типів кодування можна використовувати макроси.

Приклад макросу для універсальної об’яви типу даних і їх ініціалізації:

#ifdef UNICODE

typedef wchar_t TCHAR;

#define TEXT(a) L##a

#else

typedef char TCHAR;

#define TEXT(a) a

#endif

В цьому макросі визначено універсальний тип TCHAR, значення якого залежить від того, визначена змінна UNICODE чи ні. Визначено макрос TEXT, за допомогою якого до визначення літералу додається буква L або ні.

Розгляньте цей макрос! Він повинен бути зрозумілим!

Використаємо цей макрос для визначення символу та рядка в універсальному вигляді.

TCHAR symbol = TEXT(‘x’);

TCHAR array [] = TEXT(“This is array”);

Цей код відповідає ANSI кодуванню, якщо не визначено змінної UNICODE, і UNICODE, якщо визначена ця змінна.

 

1.2.2 Функції для роботи з рядками для ANSI і UNICODE кодувань

Функції для роботи з рядками для ANSI кодування визначено в файлі заголовків string.h. Більшість функцій починається з префіксу str, наприклад, strcpy, strcat, strlen,….

Функції для роботи з рядками для UNICODE кодування визначено в тому ж файлі заголовків string.h. Більшість функцій починається з префіксу wcs, наприклад, wcscpy, wcscat, wcslen,….

Визначимо універсальну функцію, наприклад, для визначення довжини рядка (в символах):

#ifdef UNICODE

#define _tcslen wcslen

#else

#define _tcslen strlen

#endif

Аналогічно можно визначити усі функції для роботи з рядками.

1.2.3 Файл tchar.h. Пошук імен для універсальних функцій

Усі ці типи і функції вже визначені в файлі tchar.h. Підключить цей файл та розгляньте його.

Для того, щоб знайти ім’я універсальної функції необхідно відкрити файл tchar.h, та знайти в ньому визначення функції для ANSI кодування. Це визначення має такий же формат, який ми використовували для визначення функції strlen. Отримайте універсальне ім’я функції. Визначить ім’я головної функції консольного додатку (яке відповідає функції main).

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 Завдання до лабораторної роботи. Порядок виконання

1. Складіть програму для програмної перевірки типу кодування, заданого за замовчуванням (визначте довжину в байтах типу TCHAR).

2. Визначте тип кодування по заданих макросах в командному рядку. Для цього визначимо командний рядок для трансляції програми:

Properties→C/C++→Command Line

Усі змінні, які задаються при трансляції, задаються параметром /D. Якщо визначено змінну UNICODE, то використовується режим UNICODE, якщо така змінна не задана, то використовується режим ANSI.

3. Перемикніть режим завдання символу на протилежний. Для перемикання режиму з UNICODE в режим ANSI використовують:

Properties→General→Character Set→Use Multi-Byte Character Set

Для перемикання з режиму ANSI в режим UNICODE використовують: Properties→General→Character Set→UseUnicode Character Set.

4. Після перемикання режиму знову перевірте тип символу за замовчуванням та командний рядок.

(Після трансляції!!!)

5. Задайте ПІБ членів своєї сім’її в ANSI та виведіть задані значення. Для виведення букв кирилиці необхідно встановити локальні режими. Для цього використовуються файл заголовку і функція:

#include <locale.h>

TCHAR * _tsetlocale (int category, const TCHAR *locale);

де:

category – зазвичай (LC_ALL);

locale – рядок, який визначається мовою, для якої встановлюється:

_T("Russian") – російська мова;

_T("Ukrainian") – українська мова.

Функція повертає 0, якщо функція не може бути виконана.

6. Переведіть задані рядки в UNICODE за допомогою функції (MultiByteToWideChar).

7. Виведіть отриманий масив. Перевірте можливість виведення кожним з 2-х способів:

- функція _tprintf, якщо встановлено локальні режими;

- функція MessageBox

int MessageBox (0, <Рядок, який виводиться>, <Заголовок вікна>, MB_OK));

8. Виконайте упорядкування масиву рядків, заданих в UNICODE. Для сортування використовувати універсальну стандартну функцію qsort:

void qsort(

void *base, // Масив, що упорядковуємо

size_t num, // Кількість елементів масиву;

size_t width, // Ширина елементу масиву;

int (__cdecl *compare)(const void *, const void *));

// Функція для порівняння елементів масиву

9. Виконайте зворотне перетворення масиву з Unicode в ANSI.

10. Виведіть отриманий результат

11. Задано текстовий файл. Незалежно від способу кодування символів в цьому файлі, переставити ці символи в зворотньому порядку. Символи кінця рядка залишити в правильному порядку (це завдання для отримання найвищої оцінки).

1.4 Зміст звіту

 

Звіт повинен вміщувати:

- повний опис усіх типів і функцій, які використовуються для забезпеченості універсальності кодування;

- повний опис усіх типів і функцій, які використовуються для виведення інформації в консольному режимі на російській (українській) мові;

- тексти розробленої програми з коментарями;

- тести для перевірки правильності програми;

- Висновки по роботі

 

1.5 Контрольні запитання і завдання

1. Навіщо створювати універсальні додатки для роботи з ANSI, UNICODE?

2. Як забезпечити універсальність об’явлення символу?

3. Які функції використовуються для введення та виведення універсальних типів даних?

4. Як встановити локальні характеристики для виведення інформації російською(українською) мовами?

5. Що треба змінити в програмі для упорядкування масиву ANSI символів?

 

2 СТВОРЕННЯ ТА ВИКОРИСТАННЯ БІБЛІОТЕК




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 877; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.045 сек.