Проект № 1.
Движение на дороге
1. Изучите материал § 48 учебника (создание объектов в программе).
2. Постройте программу, которая описана в тексте параграфа. Используя выбранную среду программирования, изобразите движение машин по дороге в текстовом или графическом режиме. Для этого дополните класс TCar.
3. *Добавьте в модель светофор, который переключается автоматически по программе (например, 5 с горит красный свет, затем 1 с – жёлтый, потом 5 с – зеленый и т.д.). Измените классы так, чтобы машина запрашивала у объекта Дорога местоположение ближайшего светофора, а затем обращалась к светофору для того, чтобы узнать, какой сигнал горит. Машины должны останавливаться у светофора с запрещающим сигналом.
1. Измените построенную ранее программу моделирования движения автомашин по дороге так, чтобы все поля у объектов были закрытыми. Используйте свойства для доступа к данным.
Проект № 2.
Иерархия классов (логические элементы)
1. Используя материалы § 50 учебника, постройте модуль, описывающий иерархию классов логических элементов. Для проверки его работы напишите программу, которая строит таблицу истинности последовательного соединения логических элементов «И» и «НЕ».
2. Добавьте в иерархию классов элементы «исключающее ИЛИ», «И-НЕ» и «ИЛИ-НЕ». Вынесите всю построенную систему классов логических элементов в отдельный модуль LogElement.
3. «Соберите» в программе RS-триггер из двух логических элементов «ИЛИ-НЕ», постройте его таблицу истинности (обратите внимание на вариант, когда оба входа нулевые).
4. *Постройте новый класс TNOrTrigger, моделирующй RS-триггер на двух логических элементах «ИЛИ-НЕ». От какого класса лучше наследовать этот класс? Почему?
Ответ:
Как лучше включить в этот класс два элемента «ИЛИ-НЕ»? Будете ли вы использовать для этого наследование?
Ответ:
5. *Выполните задания 3-4 для RS-триггера на двух логических элементах «И-НЕ». Определите, при каких входах состояние сохраняется, а какие входные сигналы запрещены.
Ответ:
6. *Постройте логический элемент «шифратор», который выдает на выходы двоичное представление номера входа, на который подали сигнал. Обозначение и таблица истинности шифратора «4 в 2» показаны ниже:
Все комбинации входов, которые не перечислены в таблице истинности, считаются запрещенными. Выполните следующие задания:
а) по таблице истинности составьте логическую схему шифратора; постарайтесь использовать минимальное число логических элементов;
б) добавьте в программу новый класс – модель шифратора (англ. coder), в которой будут использованы уже имеющиеся классы логических элементов;
Будете ли вы использовать наследование? Почему?
Ответ:
в) напишите программу, которая строит таблицу истинности шифратора, используя построенную модель.
7. *Постройте модель логического элемента «дешифратор» (англ. decoder), который выполняет обратную операцию. Напишите программу, которая строит его таблицу истинности.
1. Постройте программу с графической формой, описание которой приведено в § 52 учебника.
2. Определите обработчики событий
OnShow (вывод формы на экран) – установить размеры формы 400 на 100 пикселей;
OnClick (щелчок мыши по форме) – уменьшить ширину и высоту формы на 10 пикселей, если соответствующий размер больше, чем 100 пикселей;
OnResize (изменение размеров формы) – вывести размеры формы в заголовке окна.
3. *[Для Delphi] Найдите в Интернете, как ограничить пределы изменения размеров формы (то есть установить минимальную и максимальную ширину и высоту). Добавьте эти возможности в программу.
1. Постройте программу для просмотра рисунков, описание которой приведено в § 53 учебника.
2. *Дополните программу так, чтобы рисунок, размер которого меньше, чем отведенное для его поле, центрировался в рамках этого поля.
Подсказка: нужно «подложить» под компонент TImage панель (компонент TPanel), у компонента TImage отключить принудительное выравнивание, и менять положение и размеры этого компонента при изменении размеров формы (можно использовать обработчик события OnResize панели, на которой лежит TImage).
1. Постройте программу «RGB-кодирование», описание которой приведено в § 53 учебника. Добавьте в эту программу защиту от ввода слишком больших чисел (больших, чем 255).
2. *Добавьте в программу возможность обратного перевода цифровых кодов: введенное значение шестнадцатеричного кода должно преобразовываться в отдельные значения RGB, например, из «#FF00CC» нужно получить R = 255, G = 0 и B = 204.
Возможно, вам будет полезно логическое свойство Focused, которое есть у компонентов, принимающих ввод с клавиатуры. Оно равно True, если компонент имеет «фокус ввода», то есть пользователь вводит данные в это поле. Например, если Edit1 – это компонент класса TEdit, можно написать
if Edit1.Focused then
{ компонент принимает ввод с клавиатуры }
else
{ компонент НЕ принимает ввод с клавиатуры }
3. Разработайте программу для перевода морских милей в километры (1 миля = 1852 м).
4. Разработайте программу для решения системы двух линейных уравнений. Обратите внимание на обработку ошибок при вычислениях.
5. Разработайте программу для перевода суммы в рублях в другие валюты.
6. Разработайте программу для перевода чисел и десятичной системы в двоичную, восьмеричную и шестнадцатеричную.
7. Разработайте программу для вычисления информационного объема рисунка по его размерам и количеству цветов в палитре.
8. Разработайте программу для вычисления информационного объема звукового файла при известных длительности звука, частоте дискретизации и глубине кодирования (числу бит на отсчёт).
1. Постройте программу с компонентом TIntEdit, описание которой приведено в § 54 учебника.
2. *Найдите в Интернете информацию по установке нового компонента в палитру компонентов среды Lazarus (или Delphi) и выполните такую установку. Измените программу так, чтобы она использовала компонент TIntEdit из палитры компонентов. Учтите, что при установке компонента в Lazarus потребуется пересборка всей среды (в Delphi – нет).
Проект № 3.
Модель и представление
*Сделайте обработку ошибок, используя исключения (Exception).
Предусмотрите сообщение об ошибке «Непарные скобки в выражении». Для обработки этой ошибки используйте исключение – наследник класса Exception:
type EBracketException = class(Exception);
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.