Материал: Методические указания по выполнению лабораторных работ № 9-11 по дисциплине «Системное программное обеспечение». Кремер О.Б

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Гоувпо «Воронежский государственный технический университет»

Кафедра «Автоматизированные и вычислительные системы»

Методические указания

по выполнению лабораторных работ № 9-11

по дисциплине «Системное программное обеспечение»

для студентов специальности 230101 «Вычислительные

машины, комплексы, системы и сети»

очной формы обучения

Воронеж 2008

Составитель: канд. техн. наук О.Б. Кремер

УДК 78.029.983

Методические указания по выполнению лабораторных работ № 9-11 по дисциплине «Системное программное обеспечение» для студентов специальности 230101 «Вычислительные машины, комплексы, системы и сети» очной формы обучения / ГОУВПО «Воронежский государственный технический университет»; составитель О.Б. Кремер. Воронеж, 2008. 30 с.

Методические указания включают краткие сведения по каждой теме лабораторной работы, задания и ход выполнения некоторых заданий по разработке системных программ, которые выполняются в среде объектно-ориентированного программирования Delphi. Указания снабжены перечнем рекомендованной литературы.

Издание соответствует требованиям Государственного образовательного стандарта высшего профессионального образования по направлению 230100 «Информатика и вычислительная техника», специальности 230101 «Вычислительные машины, комплексы, системы и сети», дисциплине «Системное программное обеспечение».

Предназначены для студентов четвертого курса.

Методические указания подготовлены в электронном виде в текстовом редакторе MS Word и содержатся в файле Metod_9-11.doc.

Табл. 2. Ил. 1. Библиогр.: 9 назв.

Рецензент канд. техн. наук, доц. Е.А. Ганцева

Ответственный за выпуск зав. кафедрой д-р техн. наук, проф. С.Л. Подвальный

Издается по решению редакционно-издательского совета Воронежского государственного технического университета

© ГОУВПО «Воронежский государственный технический университет», 2008

Требования к выполнению и оформлению лабораторных работ

  1. До выполнения заданий лабораторной работы необходимо изучить теоретическую часть по теме работы.

  2. Лабораторная работа считается выполненной, если каждое задание выполнено на компьютере, программа принята преподавателем и оформлен и распечатан отчет по проделанной работе.

  3. Отчет по лабораторной работе состоит из следующих частей:

    • титульный лист;

    • номер и формулировка задания;

    • алгоритм решения задачи (только для заданий самостоятельного выполнения) или описание хода выполнения работы;

    • экранные формы (при наличии);

    • листинг программы с комментариями на русском языке.

  4. На титульном листе приводятся следующие данные:

Воронежский государственный технический университет;

факультет автоматики и электромеханики;

кафедра автоматизированных и вычислительных систем;

отчет по лабораторной работе № … по дисциплине «Системное программное обеспечение»;

номер варианта (при наличии).

фамилия, инициалы преподавателя;

фамилия, инициалы студента, шифр и номер группы;

город, год.

  1. Отчет по лабораторной работе должен быть оформлен и сдан преподавателю на следующей лабораторной работе.

Лабораторная работа № 9. Средства ввода информации в ос windows. Анализ и преобразование скэн-кода при вводе с клавиатуры

Задание 1. Разработать программу, позволяющую пользователю получить информацию о состоянии клавиатуры, т.е. вывести на экран работу программы-ловушки нажатия пользователем некоторых клавиш.

О состоянии клавиатуры дают информацию следующие функции API: GetKeyState, GetAsyncKeyState, GetKeyboardState.

Функция GetKeyState Описание: function GetKeyState(VirtKey: Integer): Integer;

Функция определяет каково состояние виртуальной клавиши: поднята, нажата или пеpеключается.

Паpаметpы: VirtKey: Виpтуальная клавиша.

Возвpащаемое значение:

Клавиша нажата, если стаpший бит pавен 1, и клавиша пеpеключается, если младший бит pавен 1.

Ход выполнения:

1. В Delphi создать проект на диске с уникальным именем.

2. Для примера составим функцию CapsLock, которая позволит определить включена или выключена клавиша CapsLock. В Windows определены специальные константы для каждой клавиши. VK_CAPITAL – константа кода виртуальной клавиши CapsLock.

function CapsLock : boolean;

begin

result:=(GetKeyState(VK_CAPITAL) and 1) <> 0;

end;

3. Поместить на форму объект Button и подписать выполняемое действие щелчком по данной кнопке (свойство Caption). Добавить объект Edit или Label, в котором будет появляться сообщение о состоянии клавиши CapsLock.

4. В событие OnClick объекта Button ввести следующие операторы:

a:=CapsLock;

if a=TRUE then

EditCL.Text:= 'нажата клавиша CapsLock '

else

EditCL.Text:=' клавиша CapsLock не нажата ';

5. Запустить программу на выполнение.

6. Самостоятельно составить функции и процедуры-ловушки нажатия на клавиши пользователями (не менее 5). Таблица кодов виртуальных клавиш представлена в Приложении 1.

7. Сдать преподавателю работу.

Задание 2. Разработать программу, позволяющую по установленной в программе горячей клавише возвращать активность приложения.

Ход выполнения:

  1. В Delphi создать проект на диске с уникальным именем.

2. В разделе Private надо описать следующую процедуру:

procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;

3. Листинг процедуры имеет следующий вид:

procedure TForm1.WMHotKey(var Message: TMessage);

begin

application.Restore;

application.BringToFront;

showmessage('Нажата CTRL-F7');

end;

4. В событие формы OnActivate добавить оператор, позволяющий назначить горячую клавишу:

RegisterHotKey(Form1.Handle, 123, mod_control, VK_F7);

5. В событие формы OnDestroy добавить оператор, отменяющий горячие клавиши:

UnregisterHotKey(Handle, 123);

6. Изменить горячую клавишу в программе.

7. Сдать преподавателю работу.

Задание 3. Разработать программу, позволяющую перехватить нажатие клавиш, с использованием стандартных событий объекта Form.

Ход выполнения:

  1. В Delphi создать проект на диске с уникальным именем.

  2. В событие формы OnKeyDown добавить оператор:

if Key = VK_RIGHT then

  1. Самостоятельно оформить экранную форму приложения, в котором надо перехватить нажатие не менее 5-ти клавиш.

4. Сдать преподавателю работу.

Задание 4. Разработать программу, позволяющую менять раскладку клавиатуры.

Ход выполнения:

  1. В Delphi создать проект на диске с уникальным именем.

  2. В программе использовать переменную Layout

Layout: array[0.. KL_NAMELENGTH] of char;

  1. На форме создать объекты Button1, Button2, Edit, которые позволят переключать раскладку клавиатуры с русской на английскую и проверить работоспособность переключения.

4. Для русской раскладки клавиатуры используется функция:

LoadKeyboardLayout( StrCopy(Layout,'00000419'), KLF_ACTIVATE)

Для английской раскладки клавиатуры – функция:

LoadKeyboardLayout(StrCopy(Layout,'00000409'), KLF_ACTIVATE)

5. Сдать преподавателю работу.

Задание 5. Дан листинг программы запуска внешнего приложения и ожидания его завершения. Подключите ее к программе предыдущего задания и замените внешнее приложение.

procedure TForm1.Button1Click(Sender: TObject);

var

si : Tstartupinfo;

p : Tprocessinformation;

begin

FillChar( Si, SizeOf( Si ) , 0 );

with Si do begin

cb := SizeOf( Si);

dwFlags := startf_UseShowWindow;

wShowWindow := 4;

end;

Application.Minimize;

Createprocess(nil,'notepad.exe',nil,nil,false,

Create_default_error_mode,nil,nil,si,p);

Waitforsingleobject(p.hProcess,infinite);

Application.Restore;

end;

Задание 6. Составить учебную задачу с использованием приведенных приемов перехвата нажатия клавиш клавиатуры. Записать постановку задачи и составить программу.

Оформить отчет по заданию 6 лабораторной работы с распечаткой уникальных процедур с пояснениями и экранной формы программы и копии экранов результата работы программы.

Лабораторная работа № 10. Организация таблиц идентификаторов

Цель работы: изучить основные методы организации таблиц идентификаторов, получить представление о преимуществах и недостатках, присущих различным методам организации таблиц идентификаторов.

Задание 1: Написать программу, которая получает на входе набор идентификаторов, организует таблицы идентификаторов с помощью заданных методов, позволяет осуществить многократный поиск произвольного идентификатора в таблицах и сравнить эффективность методов организации таблиц. Список идентификаторов считать заданным в виде тексто­вого файла. Длина идентификаторов ограничена 32 символами.

Краткие теоретические сведения Назначение таблиц идентификаторов

При выполнении семантического анализа, генерации кода и оптимизации ре­зультирующей программы компилятор должен оперировать характеристиками основных элементов исходной программы — переменных, констант, функций и других лексических единиц входного языка. Эти характеристики могут быть получены компилятором на этапе синтаксического анализа входной програм­мы (чаще всего при анализе структуры блоков описаний переменных и кон­стант), а также дополнены на этапе подготовки к генерации кода (например при распределении памяти).

Набор характеристик, соответствующий каждому элементу исходной программы, зависит от типа этого элемента, от его смысла (семантики) и, соответственно, от той роли, которую он исполняет в исходной и результирующей программах. В каж­дом конкретном случае этот набор характеристик может быть свой в зависимости от синтаксиса и семантики входного языка, от архитектуры целевой вычислитель­ной системы и от структуры компилятора. Но есть типовые характеристики, ко­торые чаще всего присущи тем или иным элементам исходной программы. На­пример для переменной — это ее тип и адрес ячейки памяти, для константы — ее значение, для функции — количество и типы формальных аргументов, тип воз­вращаемого результата, адрес вызова кода функции.

Главной характеристикой любого элемента исходной программы является его имя. Именно с именами переменных, констант, функций и других элементов входного языка оперирует разработчик программы — поэтому и компилятор должен уметь анализировать эти элементы по их именам.

Имя каждого элемента должно быть уникальным. Многие современные языки программирования допускают совпадения (неуникальность) имен переменных и функций в зависимости от их области видимости и других условий исходной программы. В этом случае уникальность имен должен обеспечивать сам компи­лятор, здесь же бу­дем считать, что имена элементов исходной программы всегда являются уникаль­ными.

Таким образом, задача компилятора заключается в том, чтобы хранить некото­рую информацию, связанную с каждым элементом исходной программы, и иметь доступ к этой информации по имени элемента. Для решения этой задачи компи­лятор организует специальные хранилища данных, называемые таблицами иден­тификаторов, или таблицами символов. Таблица идентификаторов состоит из набора полей данных (записей), каждое из которых может соответствовать одно­му элементу исходной программы. Запись содержит всю необходимую компиля­тору информацию о данном элементе и может пополняться по мере работы ком­пилятора. Количество записей зависит от способа организации таблицы иденти­фикаторов, но в любом случае их не может быть меньше, чем элементов в исходной программе. В принципе, компилятор может работать не с одной, а с несколькими таблицами идентификаторов — их количество и структура зависят от реализации компилятора.

Источник: https://studfile.net/preview/16567187/