Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MET_CP_2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
421.38 Кб
Скачать

4.4 Варіанти завдань до лабораторної роботи

1. Якщо у заданому рядку є слово ‘КН’, то знайти його позицію та створити рядок, де після цього слова стоїть фраза ‘спеціальність століття’.

2. Обробивши матрицю 4х5, створити масив номерів мінімальних елементів кожного рядка.

3. Обнулити у масиві усі елементи, що знаходяться між першими двома від’ємними елементами, та підрахувати їх кількість.

4. Провести ‘швидке’ сортування масиву байтів.

5. Написати функцію, що підраховує кількість однакових найменших по модулю елементів масиву.

6. Підрахувати кількість нулевих бітів у кожному елементі масиву слів.

7. У рядку підрахувати кількість цифр та символів /окремо/ до першої крапки.

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

9. Задано матрицю 4*4. Переписати до масиву А ті діагональні елементи, які менші від заданого числа, та підрахувати їх кількість.

10. Злити два масиви в один, розташовуючи елементи по черзі з кожного із масивів.

11. Задане число вивести у вісімковому та шістнадцятковому вигляді.

12. Знайти максимальний елемент та його координати у матриці Н.

13. Для заданого масиву сформувати масиви квадратів та кубів його елементів.

14. Між словами у тексті може бути більше, ніж один пропуск. Переписати рядок, залишивши по одному пропуску.

15. У заданому рядку знайти слово, що закінчується літерою ’а’.

16. У заданому масиві знайти усі елементи, що діляться на 3, переписати їх в інший масив, а на їх місце помістити їх індекси.

17. Задано два масиви. Нулеві елементи першого масиву замінити відповідними елементами другого.

18. Упорядкувати три слова за кількістю нулевих бітів.

19. Номери цифр з рядка символів переписати до масиву.

20. Поміняти місцями найбільший та найменший елементи масиву.

21. Із масиву переписати до іншого усі парні додатні елементи до першого від’ємного.

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

23. Знайти середнє арифметичне масиву чисел та номер першого одиничного біта в його коді.

24. Із даного масиву створити новий, помістивши до нього числа, що знаходяться у 4-6 бітах.

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

4.5 Самостійна робота

Під час підготовки до роботи потрібно повторити і вивчити такі теми самостійно:

  • особливості організації інтерфейсу асемблерних програм з програмами мовами високого рівня – Visual С++;

  • можливості відлагодження програм, що містять фрагменти на різних мовах програмування.

4.6 Контрольні завдання

1. Структурне програмування, його технологія.

2. Засоби передачі даних в підпрограму-процедуру.

3. Структура стека міжмодульного інтерфейсу.

4. Засоби повернення вихідних даних із підпрограми-функція.

5 СТРУКТУРА WINDOWS - ДОДАТКІВ. ОБРОБКА ПОВІДОМЛЕНЬ .

5.1 . Мета роботи

Ознайомлення зі структурою Windows - додатків , організацією взаємодії програм з операційною системою , отримання практичних навичок по складанню , написання та налагодженні простих програм, що містять опис вигляду вікна програми , віконну процедуру , і оброблювальних елементарні повідомлення від клавіатури , миші та ін пристроїв.

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

 

5.2 . Вказівки з підготовки до виконання лабораторної роботи

Необхідно вивчити принцип побудови і логіку роботи Windows-програми , звернувши увагу на порядок створення додатку (формування структури класу вікна , реєстрація класу , написання віконної процедури , створення і відображення вікна , цикл обробки повідомлень).

5.3 . Огляд теми роботи

Будь-яке віконне додаток, написаний під Windows повинно містити в собі такі елементи:

1 . Функцію реєстрації класу вікна .

2 . Функцію створення вікна .

3 . Віконну процедуру.

4 . Цикл обробки повідомлень.

Далі по тексту наводиться приклад найпростішої програми під Windows , яка виводить на екран вікно додатка з написом "Привіт , світ ! " . Дану програму необхідно взяти за основу при вирішенні свого варіанту завдання. Програма містить , всі необхідні для розуміння її роботи , коментарі.

5.2 . Вказівки з підготовки до виконання лабораторної роботи

Необхідно вивчити принцип побудови і логіку роботи Windows-програми , звернувши увагу на порядок створення додатку (формування структури класу вікна , реєстрація класу , написання віконної процедури , створення і відображення вікна , цикл обробки повідомлень).

#include <windows.h> // подключение библиотеки с функциями API

// Глобальные переменные:

HINSTANCE hInst; // Указатель приложения

LPCTSTR szWindowClass = "QWERTY";

LPCTSTR szTitle = "ПЕРВАЯ ПРОГРАММА";

// Предварительное описание функций

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

// Основная программа

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

MSG msg;

// Регистрация класса окна

MyRegisterClass(hInstance);

// Создание окна приложения

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

// Цикл обработки сообщений

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

// FUNCTION: MyRegisterClass()

// Регистрирует класс окна

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW; // стиль окна

wcex.lpfnWndProc = (WNDPROC)WndProc; // оконная процедура

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance; // указатель приложения

wcex.hIcon = LoadIcon(NULL, IDI_HAND); // определение иконки

wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // определение курсора

wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE); // установка фона

wcex.lpszMenuName = NULL; // определение меню

wcex.lpszClassName = szWindowClass; // имя класса

wcex.hIconSm = NULL;

return RegisterClassEx(&wcex); // регистрация класса окна

}

// FUNCTION: InitInstance(HANDLE, int)

// Создает окно приложения и сохраняет указатель приложения в переменной hInst

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // сохраняет указатель приложения в переменной hInst

hWnd=CreateWindow(szWindowClass, // имя класса окна

szTitle, // имя приложения

WS_OVERLAPPEDWINDOW, // стиль окна

CW_USEDEFAULT, // положение по Х

CW_USEDEFAULT, // положение по Y

CW_USEDEFAULT, // размер по Х

CW_USEDEFAULT, // размер по Y

NULL, // описатель родительского окна

NULL, // описатель меню окна

hInstance, // указатель приложения

NULL); // параметры создания.

if (!hWnd) // Если окно не создалось, функция возвращает FALSE

{

return FALSE;

}

ShowWindow(hWnd, nCmdShow); // Показать окно

UpdateWindow(hWnd); // Обновить окно

return TRUE; //Успешное завершение функции

}

// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)

// Оконная процедура. Принимает и обрабатывает все сообщения, приходящие в приложение

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

PAINTSTRUCT ps;

HDC hdc;

RECT rt;

switch (message)

{

case WM_CREATE: // Сообщение приходит при создании окна

break;

case WM_PAINT: // Перерисовать окно

hdc = BeginPaint(hWnd, &ps); // Начать графический вывод

GetClientRect(hWnd, &rt); // Область окна для рисования

DrawText(hdc, "Привет, мир!", -1, &rt, DT_SINGLELINE|DT_CENTER | DT_VCENTER);

EndPaint(hWnd, &ps); // Закончить графический вывод

break;

case WM_DESTROY: // Завершение работы

PostQuitMessage(0);

break;

default:

// Обработка сообщений, которые не обработаны пользователем

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

В большинство программ для Windows включаются пользовательские значки (например, пользователь видит их на экране в левом углу строки заголовка окна приложения), курсоры (при передвижении мыши вид курсора меняется), меню, дочерние окна управления. Все это виды ресурсов (resources) Windows. Ресурсы являются данными, и они хранятся в .ехе файле программы, но расположены они не в области данных, где обычно хранятся данные исполняемых программ. Таким образом, к ресурсам нет непосредственного доступа через переменные, определенные в исходном тексте программы. Они должны быть явно загружены из файла с расширением .ехе в память.

Для выполнения лабораторной работы необходимо изучить следующие виды ресурсов: иконки (icons), курсоры (cursors), битовые образы (bitmaps), символьные строки (character strings), меню (menus), быстрые клавиши (keyboard accelerators), окна диалога (dialog boxes), ресурсы пользователя (user defined resources), - а также набор функций API работы с ресурсами.

Следует уяснить, что программа работает с описателями всех видов объектов. Функции, которые создают или читают объекты из ресурсов возвращают указатель на объект, который в дальнейшем используется в процедурах вывода и преобразования.

Особое внимание следует уделить следующим группам функций API:

  • Чтения объектов из ресурсов (LoadCursor, LoadIcon, LoadString, LoadResource, LoadBitmap, LoadMenu)

  • Создания объектов (см. пп.3, 4).

  • Выбора объекта в контекст (SelectObject).

  • Управления объектами: например, для меню существует группа функций изменения меню в процессе выполнения программы (AppendMenu, DeleteMenu, InsertMenu, ModifyMenu, RemoveMenu, GetSubMenu и т.п.).

  • Управления диалоговыми окнами (DialogBox).

Одним из широко используемых видов ресурса являются описатели диалоговых окон. Диалоговые окна бывают модальными и немодальными. Наиболее часто используются модельные окна. Эти окна не дают пользователю работать с другими окнами приложения, но разрешают переключаться на работу с другими приложениями. Для того чтобы пользователь мог продолжить работу с приложением, необходимо завершить работу с диалоговым окном. Немодальные диалоговые окна не требуют своего завершения для продолжения работы, и пользователь может во время работы с ними свободно переключаться на любое окно приложения и другие приложения.