Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
UlSU

Кафедра ИТ, ФМИиАТ

Расписание Статистика сдачи л/р

Программирование в ОС Windows

Вопросы к экзамену

Раздел 1. Программирование в Windows.

  • 1. OS Windows. Основные различия в версиях OS Windows. Понятие API, версии Windows API.
  • 2. Система, управляемая сообщениями. Основные оконные сообщения. Функции для работы с сообщениями.
  • 3. Основные этапы создания простейшего однооконного приложения.
  • 4. Модальные и немодальные диалоговые окна. Окна сообщений. Диалоговые окна общего пользования.
  • 5. Динамически загружаемые библиотеки (DLL). Явное и неявное подключение. Module Definition File.
  • 6. Хуки (Hooks) и DLL. Разделяемые сегменты данных (Shared-секции).
  • 7. Процессы и потоки. Классы процессов и приоритеты потоков.
  • 8. Объекты синхронизации. Функции синхронизации потоков (ожидающие функции).

Раздел 2. Язык программирования C.

  • 1. Типы данных в языке C.
  • 2. Переменные и константы.
  • 3. Основные инструкции языка С.
  • 4. Указатели и массивы.
  • 5. Структуры.
  • 6. Функции.
  •  

Лабораторные работы

Требования к лабораторным работам
Лабораторная работа предполагает написание программы на C/C++ с использованием функций Win32 API (без использования MFC, VCL, ATL и т.п.). Один вариант л/р может сдавать не более двух человек. Естественно, эти л/р не должны быть одинаковыми (т.е. списанными друг с друга). В л/р допускается наличие одинаковых блоков кода только в общих местах, рассмотренных на лекциях или практических занятиях. Работа должна быть выполнена на уровне, соответствующем курсу ФМИиАТ УлГУ, который определяется мной. Значимые имена переменных, отступы табуляции и т.п. не только улучшают "читабельность" работы, но и способствуют ее скорейшей сдаче. Комментарии к исходному тексту работы добавляются студентом по мере необходимости и в достаточном количестве. В заголовке каждого файла работы обязательно наличие следующих атрибутов:
  • Фамилия Имя Отчество.
  • Группа и курс.
  • Номер л/р. Вариант л/р.
  • Текст задания л/р.
Эта информация должна присутствовать в About (О программе) исполняемого файла.
Задания для первой л/р
  • 1. Просмотрщик bmp-файлов. Принимает в командной строке имя файла, открывает окно и показывает картину, растягивая ее на все окно (не нарушая пропорций).
  • 2. Программа открывает окно, заголовком которого является командная строка. Обеспечить возможность перетаскивания окна за любую точку его содержимого.
  • 3. Программа принимает в командной строке число N и создает окно в форме правильного N-угольника.
  • 4. Программа открывает окно, заголовком которого является командная строка. При перетаскивании окна, когда оно приближается на 15 или менее пикселов к границе экрана, оно должно автоматически "прилипать" к границе. "Отлипание" должно происходить аналогично.
  • 5. Проигрыватель wav-файлов. Принимает в командной строке имя файла, открывает окно и при нажатии левой кнопки мыши в пределах окна проигрывает указанный wav-файл.
  • 6. Программа открывает окно. При изменении размеров окна с помощью мыши окно должно быть нельзя уменьшить менее чем до 300x200 и увеличить более чем до 600x400.
  • 7. Программа открывает два окна, которые имеют одинаковый размер (200x200) и располагаются в один ряд по горизонтали. При перетаскивании первого окна второе также должно изменять свое местоположение, чтобы положение окон относительно друг друга не менялось.
  • 8. Программа открывает окно 300x300, в центре которого нарисован черный квардрат 200x200. При изменении размеров окна квадрат также пропорционально изменяет свои размеры.
  • 9. Программа открывает окно. При нажатии левой кнопкой мыши внутри окна в текстовый файл записывается текущее время и координаты курсора мыши относительно верхнего левого угла окна.
  • 10. Программа открывает окно, заголовком которого является командная строка. В окне отображаются текущие координаты верхнего левого угла окна и размер окна. При перетаскивании окна или изменении размеров числа в окне также должны меняться.
Задания для второй л/р
  • 1. Реализовать три разных алгоритма сортировки, работающих в трех потоках. Все алгоритмы работают с одним массивом, т.е. нужно реализовать их синхронизацию, таким образом: поток захватывает эту область памяти, случайным образом заполняет ее, и начинает сортировать, потом освобождает эту область памяти для других потоков. Также нужно вывести такую информацию: тип сортировки, время старта, время окончания работы потока, время, ушедшее на сортировку.
  • 2. Подвесить хук ко всем потокам, и с его помошью отлавливать нажатия на клавиши и записывать их в файл.
  • 3. Подвесить хук ко всем потокам, и с его помошью отлавливать перемещение окна и изменение его размеров. В файл записывать: заголовок окна, его положение и размеры, плюс дата и время изменения.
  • 4. Смоделировать солнечную систему (Солнце, планеты и Луну). Пропорции расстояний от Солнца до планет и от Земли до Луны можно не соблюдать. Главное - чтобы все было отчетливо нарисовано. Каждая планета (и Луна тоже) управляется отдельной нитью. Одна из планет (Земля) движется самостоятельно с заранее заданной скоростью, движение остальных планет осуществляется через синхронизацию с движением Земли. Все орбиты считать круговыми.
  • 5. Две нити. Одна нить порождает случайное количество (от 3 до 12) случайных чисел, которые могут быть длинами сторон соответствующего многоугольника; вторая нить отрисовывает в окне в случайном месте многоугольник, длины сторон которого порождены первой нитью. Передача чисел происходит с использованием синхронизации.
  • 6. Подвесить хук ко всем потокам, и с его помошью отлавливать нажатия на кнопки мыши. Записывать в файл дату и время нажатия, координаты курсора на экране, а также какая кнопка нажата.
  • 7. Три нити. Одна генерирует тройки чисел, вторая решает соответсвующее квадратное уравнение, третья записывает данные о решении в файл (a, b, c, D, x1, x2). Передача чисел происходит с использованием синхронизации.
  • 8. Игра в крестики-нолики. Играют две нити. Провести 1000 партий, окончательный вид поля для каждой партии вывести в файл, результаты (счет, например, 500:500) вывести в окне. Взаимодействие нитей через синхронизацию. Ходы делаются не случайным образом, а в соответствии с правилами и стратегией на не-проигрыш.
  • 9. Игра "камень-ножницы-бумага". Три нити генерируют случайно свои ходы. Провести 10000 ходов. Данные о ходах вывести в файл. Результат в виде счета вывести в окне. Взаимодействие нитей через синхронизацию.
  • 10. Три нити. Первая генерирует три точки на плоскости в области (0..10, 0..10), вторая одну точку в этой же области. Третья принимает данные от первых двух нитей и определяет, лежит ли точка внутри треугольника. Данные о координатах всех точек и результат работы третьей нити записывать в файл. Провести 10000 итераций. Количество удачных итераций (точка находится внутри треугольника) вывести в окне.
Задания для третьей л/р
  • 1. Реализовать простейший текстовый редактор, обладающий возможностями стандартного notepad, поставляемого с Windows. Фичи, которые желательно видеть (плюсик на экзамене), но необязательно делать: печать и все что с ней связано, переход по номеру строки и отображение самих номеров строк, форматирование текста, чтобы он помещался в окно. Остальные возможности notepad должны быть реализованы обязательно. Небольшое дополнение: обязательно должна быть возможность выбора шрифта (тип, размер и пр.) для всего текста в редакторе. Т.е. я от вас не требую RichEdit'a - шрифт применяется ко всему тексту.
  • 2. Реализовать простейший графический редактор, аналог Paint'а, поставляемого с Windows. Различия в следующем: убираем все виды выделения, заливку, увеличительное стекло и спрэй. Оставляем: кисть, линия/поли-линия, текст, прямоугольник, овал. Для всех этих объектов должна быть предоставлена возможность изменения кисти, карандаша и пр. Сохранять художества в BMP-файл, читать из него же. Хорошо бы видеть toolbar. Печать, как и в первом пункте, желательна, но не обязательна.
  • 3. Реализовать простейший файловый менеджер. Типа TotalCommander (реализации Far'а не предлагать - т.к. курс программирование в Windows и поэтому хотелось бы видеть окошки). Реализовать следующие возможности: копирование, перемещение, удаление, переименование, запуск/открытие файла. Из настроек редактора: выбор дефолтного просмотрщика файлов (по умолчанию пусть будет notepad), выбор дефолтного редактора файлов (WordPad), цвет бэкграунда программы (по умолчанию серый, а не белый). Toolbar желателен. Иконки файлов считанные у системы, тоже желательно видеть (в этом случае лучше использовать List-View Control). Не желательно, но по некоторым вопросам реализации можно обращаться ко мне, ессно при помощи почты - сразу сказать, как получить иконку у файла я не смогу :) Полезная ссылка: Пространство имён shell.
  • 4. Реализовать простейший просмотрщик Web-страниц. Функциональность как у стандартного MS Explorer. В настройки вынести: стартовую страницу, собственный списочек Избранного и пр. Toolbar обязателен, если сделаете в точности как у Эксплорера (с 16-битными картинками и текстом на некоторых кнопках справа), будет дополнительный плюс на экзамене.
  • 5. Реализовать эксплорер по папкам. Аналог того что появляется при выборе Start->My Computer. Слева дерево папок, справа список файлов. Действия аналогичны заданию с "файловым менеджером". Условия на которых можно обращаться за помощью ко мне, аналогичны заданию с "файловым менеджером".
  • 6. Реализовать простейшую игрушку - Тетрис. Т.к. игра должна быть игрой интересной, то и оформлена она должна быть соответствующим образом - красивые кнопочки, красивый бэк, все выводится без морганий и желательно без тормозов на компьютерах в л/р классе. Да, желательно использовать GDI, т.к. я не могу обещать последних версий драйверов для видеокарт (OpenGL) и установленного DirectX 9.0 (соотв. DirectX). Помимо графики, игрушка должна пищать, т.е. воспроизводить какие-нибудь звуки на какие-нибудь события.
  • 7. Реализовать простейший вьюэр картинок. Аналог Windows Picture and Fax Viewer из Windows XP. Желательно использовать GDI+. Поддерживаемые форматы: BMP, JPEG, PNG. Функции стандартные: выбираем папочку, выводится первая картинка, далее нажимая вверх и вниз выводятся соотв. предыдущая и последующая картинки. Желательно, но необязательно, видеть слева дерево файлов и папок. Обязательно реализовать режим слайд-шоу. Если будут трудности с разворотом на весь экран, можно это делать в оконном режиме.
  • 8. Реализовать проигрыватель звуковых файлов. Пример - WinAmp (кста, файлы можно играть с его помощью). Что нужно помимо стандартных кнопок СТАРТ, СТОП, ПАУЗА: playlist, вывод текущего проигрываемого файла, зацикливание, случайный выбор мелодии. Если будете делать только проигрыватель звуковых файлов (можно только wav, но крайне не желательно), то он должен влазить в высоту заголовка окна, как WinAmp в свернутом состоянии. Если же реализуете проигрывание видео файлов (ActiveX MediaPlayer вам в руки), то оформить лучше в виде стандартного (старого) Windows - проигрывателя.
  • 9. Создать подобие Registry Editor (regedit.exe) из стандартной поставки MS Windows. Нужно уметь: добавлять ключи, создавать ключи, устанавливать значения для ключей, удалять ключи, переименовывать ключи. То же самое и для значений ключей и для данных. Подсказка: не грузите в дерево слева сразу все ключи - грузите только тогда, когда мы начинаем разворачивать node дерева (жмем на "+"). Поиск должен быть обязательно, хотя бы по имени ключа. Контекстное меню (по правой клавиши мыши) крайне рекомендуется.
  • 10. Сделать подобие инсталляционной программы. Внимание, никакими NSIS, InoSetup или их подобиями пользоваться нельзя! Должны быть следующие экраны: Welcome, Выбор папки, Выбор типа установки (пара чек боксов), Установка с прогресс баром, Finish. Инсталлится пусть 2-3 текстовых файла из исходников. Файлы можно запихнуть как в exe, так и просто положить рядом с exe. Главное в этой программе, показать умение работать с Property Sheet и Property Pages.

Дополнительные материалы

Настройка рабочего окружения.
Прямая ссылка на скачивание Visual Studio Community.
Другие продукты из этой серии можно посмотреть на сайте visualstudio.com.
Visual Studio Code - удобный редактор для разных языков программирования и различных платформ.
Справка Microsoft Docs по Win32 API: Онлайн версия | Оффлайн версия для Visual Studio 2008 SP1.
Полезные ссылки.
Microsoft's Old API Help File Reborn - справка по Win32 API в виде одного chm-файла. Немного устарела, но все еще норм. Есть вероятность, что браузер испортит загруженный файл справки. Возпользуйтесь другим загрузчиком или этим скриптом на питоне
Russian Software Developer Network | Хуки и DLL
realcoding.net - Программирование для всех | Процессы в Windows
Сcылки по Win32 API: The Code Project | CodeGuru
Ссылки по С++: cppreference.com | cplusplus.com | Compiler Explorer | РГ21 С++ Россия
Видеоматериалы.
Channel 9 - Видео для разработчиков от создателей продуктов и служб Майкрософт.
Microsoft Visual Studio - Официальный канал Visual Studio на YouTube.
Углубленное программирование на С/С++, читает Алексей Петров.