Методические указания по лабораторным работам по ПП. Создание и сохранение проектов, форм, модулей
Скачать 1.04 Mb.
|
Тема: Работа с функциями преобразования типов - проект «Ваш вес». Цель: закрепить теоретические знания и получить практические навыки по работе с функциями преобразования типов. Студент должен: знать: - язык Delphi; - свойства формы; - состав проекта Delphi; - компоненты Delphi; - среду Delphi; - функции преобразования типов; уметь: - писать программы на языке Паскаль; - изменять свойства компонент и формы; - прописывать код в оболочке Delphi; - использование процедуры ShowMessage для вывода сообщения в отдельном окне. Литература: Шумаков П.В. Delphi 7: руководство разработчика / П.В. Шумаков. - М.: Нолидж, 2011 Бобровский С. Delphi 7: учебный курс / С. Бобровский. - М.: Питер, 2010 Фленов М. Библия Delphi / М. Фленов. – СПб: БХВ-Петербург, 2012 Хомоненко А. Delphi 7 / А. Хоменко. - СПб: БХВ-Петербург, 2011 Подготовка к работе: повторить лекционный материал, прочитать приложение 1 Задание: Разработать программу, в которой после ввода роста и фактического веса человека и нажатия кнопки «Расчет», определяется худой человек или полный, а также, на сколько килограммов ему надо поправиться или похудеть (рисунок 1). Оптимальный вес человека определяется как рост минус 100 см. Если фактический вес человека меньше оптимального, то он будет считаться худым, если больше, то полным. Рисунок 1 Порядок выполнения: Откройте новый проект. Разместите в форме экземпляры компонентов в соответствии с рисунком 2. В поле Edit1 будем вводить вес в килограммах, а в Edit2 – рост в сантиметрах. Рисунок 2 Сохраните код программы и проект под именами, например, Unit4.pas и Pr4.dpr. Для сохранения результатов расчета введем переменные: - faktW – фактический вес, - optW – оптимальный вес; - Rost – рост; - Delta – разница между оптимальным весом и фактическим. Вначале будем считать, что все данные у нас целые числа. В блоке реализации после слова implementation поместите описание переменных: VAR factW, optW, Rost, Delta : Integer; Выполните следующие действия:
Комментарий: а) компонента Edit содержит информацию строкового типа, поэтому нам необходимо для выполнения вычислений перевести ее в числовой вид; б) после выполнения арифметических действий результат вычислений нужно будет разместить на форме в компоненте Label, которая так же может содержать только информацию строкового типа; в) функция StrToInt преобразует строку символов в целое число, функция IntToStr выполняет обратное действие – целое число преобразует в строку символов. 6. Сохраните проект, запустите и протестируйте его. 7. Усовершенствуйте программу так, чтобы можно было вводить любые десятичные величины. Для этого необходимо использовать вещественный тип переменных Real: Комментарий Преобразование действительных чисел в строковый тип и строковый тип в действительное число выполняется с помощью функций: FloatToStr и StrToFloat. Внесите соответствующие изменения в обработку события OnClick компонента Button1. 8. Сохраните проект окончательно, запустите и протестируйте его. 9. Внесите необходимые изменения для обработки исключительных ситуаций, возникающих при вводе чисел. Задание для самостоятельного выполнения: 1. Усовершенствуйте проект: - сделайте к программе заголовок, - сделайте шрифт выводимой реплики отличным от стандартного по виду, цвету и размеру, - вставьте кнопку выхода из программы, - предусмотрите возможность повторного запуска программы (см. Проект «Диалог»). 2. Сделайте так, чтобы в начале программы и после повторного запуска объект Button1 был не доступен и только после того, как будет введен вес, появлялась возможность нажать на кнопку «Расчет». 3. Сделайте так, чтобы в начале программы и после повторного запуска объекты Label2 и Edit2 были не видны и появлялись на экране только после того, как будет введен вес. Подсказка. Изменение свойства видимости компонента – Visible. Если свойство имеет значение True, то компонент виден, а если значение False, то – не виден. 4. Предусмотрите невозможность ввода отрицательных значений веса и роста. 5. Измените алгоритм расчета с учетом Индекса массы тела. Вес – X, Рост – Y. Индекс массы тела – A, где A = X2 / Y (кг2/см) Результат определяется по таблице:
Этот результат выдавайте в новую метку - Label4. Контрольные вопросы и задания: 1.Элементы интерфейса среды Delphi. 2.Основные файлы проекта. 3.Основные компоненты Delphi. 5.Функции StrToInt, IntToStr, FloatToStr и StrToFloat. 6. Свойство компонентов Visible. 7. Свойство SetFocus. Приложение 1 Обработка исключительных ситуаций В случае преобразования строкового типа в числовой тип может возникнуть ситуация появления ошибки, если введены недопустимые символы. Если функции StrToInt или StrToFloat обнаружат ошибку в записи числа, они инициируют так называемую исключительную ситуацию, которая обычно приводит к аварийному завершению работы программы. Но существует возможность не допустить аварийное завершение программы. Для этого используется обработчик исключительных ситуаций: Try <защищенный блок операторов> except <обработка исключительной ситуации> end; Если при выполнении операторов из защищенного блока возникнет исключительная ситуация, управление будет передано в блок операторов, располагающийся между ключевыми словами except и end. Но если обработка пройдет без ошибок, блок обработки исключительной ситуации игнорируется и управление передается оператору, следующему за ключевым словом end. Пример использования обработки исключительной ситуации для процедуры Edit1KeyPressed может выглядеть так: Try FactW:=StrToInt(Edit1.Text); except ShowMessage('Ошибочная запись числа: ' + Edit1.Text); Edit1.SetFocus; Exit; end; В результате выполнения оператора FactW:=StrToInt(Edit1.Text); Если возникнет исключительная ситуация, то процедура ShowMessage выведет на экран простое диалоговое окно, содержащее строку с текстом и кнопку «OK». Эта процедура используется для сообщения пользователю какой-либо информации и не требует принимать каких-либо решений. После появления окна работа программы приостановится в ожидании реакции пользователя. При вызове стандартной процедуры Exit снова активизируется окно редактора (компонента Edit1), в котором обнаружен ошибочный текст. Лабораторная работа № 5 Тема: Программирование ввода-вывода и контроля строковых и числовых данных. Цель: закрепить теоретические знания и получить практические навыки по работе с вводом-выводом и контролем строковых и числовых данных. Студент должен: знать: - язык Delphi; - свойства формы; - состав проекта Delphi; - компоненты Delphi; - среду Delphi; - функции преобразования типов; уметь: - писать программы на языке Паскаль; - изменять свойства компонент и формы; - прописывать код в оболочке Delphi; - работать с помощью окна ввода InputBox. Литература: Шумаков П.В. Delphi 7: руководство разработчика / П.В. Шумаков. - М.: Нолидж, 2011 Бобровский С. Delphi 7: учебный курс / С. Бобровский. - М.: Питер, 2010 Фленов М. Библия Delphi / М. Фленов. – СПб: БХВ-Петербург, 2012 Хомоненко А. Delphi 7 / А. Хоменко. - СПб: БХВ-Петербург, 2011 Подготовка к работе: повторить лекционный материал Задание: Напишите программу расчета площади треугольника по трем сторонам. Ввести фамилии и выдать их нумерованный список. Порядок выполнения: Откройте новый проект для расчета площади треугольника и назовите его treygolnik. Эта программа должна выполнять следующие условия: а) ввод данных проверять на «ноль» и на существование треугольника; б) первоначальный ввод сторон сделать из полей редактирования с установкой фокуса ввода; в) на «ноль» выдавать сообщение об этом и вводить новые значение через отдельное окно ввода; г) если треугольник не существует, то выдать окно расширенного сообщения об этом со значком «внимание» и кнопками «ОК» и «Cancel». По «ОК» ввести новые значения сторон отдельными окнами ввода. По «Cancel» закрыть задачу. Формула расчета площади по трем сторонам: ; ; д) значение площади выводить в поле метки с указанием единицы измерения. 2.Откройте новый проект для ввода фамилий и выдачи нумерованных списков и назовите его spisok. Эта программа должна выполнять следующие условия: а) для ввода фамилии используйте окно ввода InputBox; б) для вывода списка используйте Label; в) для конца ввода в окне InputBox пишите «конец»; г) список в Label1 должен выглядеть следующим образом: 1. Иванов; 2. Петров; 3. . . . . . . 21. Яковлев конец. д) напишите программу и отладьте ее. Ниже дан фрагмент программы для отладки: Unit faml; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForml = class (TForm) Label2: TLabel; Buttonl : TButton; Button2 : TButton; Editl : TEdit; Procedure ButtonlClick (Sender: TObject); procedure Button2Click (Sender: TObject); private { Private declarations} public { Public declarations} end; var Forml; TForml; implementation {i$R*.dfm} Procedure TForml.ButtonlClick(Sender: TObject); varfam: string; // для фамилии s: string; // для формирования списка (строка длиной до 1024 кб) n: integer; // для нумерации фамилии begin n:=0; s := ‘’; // начальное значение строки «пусто» whilefam<> 'конец' do begin n := n+1; fam:=InputBox ('Фамилия','Введите фамилию и инициалы ',' конец'); s := s + IntToStr(n) + '.' + ’ ’ + Fam + #13; end; Label2.Caption:=s; end; end. Контрольные вопросы и задания: 1. Элементы интерфейса среды Delphi. 2. Основные файлы проекта. 3. Основные компоненты Delphi. 5. Окно ввода InputBox. 6. Функции StrToInt, IntToStr, FloatToStr и StrToFloat. Лабораторная работа № 6 Тема: Создание и обработка массива. Цель: закрепить теоретические знания и получить практические навыки по созданию и обработке массива. Студент должен: знать: - язык Delphi; - свойства формы; - состав проекта Delphi; - компоненты Delphi; - среду Delphi; - объекты Delphi – панель GroupBox, панель RadioGroup, компонент CheckBox; - флажки CheckBox; уметь: - писать программы на языке Паскаль; - изменять свойства компонент и формы; - прописывать код в оболочке Delphi; - работать с компонентом CheckBox; - работать с панелями GroupBox и RadioGroup; - работать с флажками CheckBox. Литература: Шумаков П.В. Delphi 7: руководство разработчика / П.В. Шумаков. - М.: Нолидж, 2011 Бобровский С. Delphi 7: учебный курс / С. Бобровский. - М.: Питер, 2010 Фленов М. Библия Delphi / М. Фленов. – СПб: БХВ-Петербург, 2012 Хомоненко А. Delphi 7 / А. Хоменко. - СПб: БХВ-Петербург, 2011 Подготовка к работе: повторить лекционный материал Задание: Создайте приложение, которое предлагает пользователю задать размер линейного массива, заполняет этот массив случайными целыми числами, выводит список элементов массива, а затем по выбору пользователя определяет минимальный и максимальный элементы массива, сумму всех элементов и количество положительных элементов (см. рисунок 1). Рисунок 1 - Окно приложения создания и обработки линейного массива Порядок выполнения: 1. Создайте форму, для свойства Caption задайте значение «Создание и обработка массива». 2. На форме разместите компоненты Edit1 (число элементов массива) и Edit2 (исходный массив), кнопку Button1 (Создать массив), для свойства Caption кнопки задайте значение «Создать массив». 3. Разместите на форме панель GroupBox1, для свойства Caption которой задайте значение «Определить». Примечание Панель GroupBox — это контейнер с рамкой и надписью, объединяющий группу связанных органов управления, таких как переключатели RadioButton, флажки CheckBox и т. д. GroupBox имеет встроенную рамку с надписью, которая обычно используется для выделения на форме группы функционально объединенных компонентов. 4. В панели GroupBox1 разместите компоненты CheckBox1, CheckBox2, CheckBox3 и CheckBox4, для свойств Caption которых задайте значения: «Минимальный элемент», «Максимальный элемент», «Сумма всех элементов», «Число положительных элементов», соответственно. 5. Напротив них разместите компонентыEdit3, Edit4, Edit5 и Edit6. Если компоненты CheckBox1, CheckBox2, СпескВохЗ, CheckBox4 окажутся размещенными под панелью GroupBox1 и не будут отображаться, то следует выделить панель GroupBox1 и выбрать в контекстном меню команду Control ► SendtoBack (Порядок ► На задний план). 6. В нижней части формы разместите кнопкуButton2 и задайте значение свойства Button2.Caption — «Вычислить». 7. Удалите текст Edit1, Edit2, Edit3, Edit4, Edit5, Edit6 из соответствующих компонентов. 8. Выровняйте компоненты на форме, как показано на рисунке 2. Зафиксируйте положение компонентов на форме, выбрав в меню Delphi команду Правка ► Зафиксировать. Рисунок 2 - Окно формы с компонентами 9. Сохраните файл проекта и программного модуля. 10. Прежде чем создавать обработчики событий щелчка мышью по кнопкам Button1 и Button2, в разделе описания глобальных переменных опишите переменные целого типа N и I, где N — размер массива, а I — порядковый номер элемента массива, а также М - динамический массив целых чисел. var Form1: TForm1; N,I: integer; М: array of integer; {описание динамического массива целых чисел} 11. Для предупреждения ввода в окно Edit1 нечислового значения реализуем обработку события нажатия на клавишу в окне Edit1, чтобы запретить ввод любых символов, кроме цифр от 0 до 9. Для создания процедуры обработчика события нажатия на клавишу в окне Edit1 выберите в окне Инспектора объектов компонент Edit1 и на странице События дважды щелкните левой кнопкой мыши на пустом поле списка в событии OnKeyPress. После этого окно Редактора кода немедленно получит фокус и в разделе interface появится запись процедуры обработчика события: Procedure Edit1KeyPress(Sender: TObject; varKey:Char); а в разделе implementation — текст заготовки этой процедуры: procedure Edit1KeyPress(Sender: TObject; var Key: Char); begin end; Вставьте в тело процедуры следующий оператор: if not (Key in ['0'..'9']) then Key:=#0; Действие этого оператора сводится к сравнению значения переменной Key с множеством значений ['0'..'9']. Если символ нажатой клавиши не входит в это множество, то Key присваивается значение нулевого символа (#0). 12. Таким образом, в окне Edit2 будет отображаться текст, состоящий только из цифр. 13. Создание массива целых чисел опишите в процедуре обработчика события щелчка мышью на кнопке Button1. Для создания процедуры обработчика события выберите в окне Инспектора объектов объект Button1, затем на странице События сделайте двойной щелчок на пустом поле списка в событии OnClick. После этого отредактируйте заготовку процедуры обработчика события procedure TForm1.Button1Click(Sender:TObject) в окне Редактора кода следующим образом: procedureTForm1.Button1Click(Sender: TObject); begin Randomize; N:=StrToInt(Edit1.Text); {число элементов массива} SetLength (M, N); {задать массиву М длину N} Edit2.Text:=' '; {очистить окно Edit2} for I:= 0 to N-1 do{заполнить массив случайными значениями целых чисел} begin M[I]:= Random(100); {присвоить элементу массива случайное значение} Edit2.Text:=Edit2.Text + ' ' + IntToStr (M[I]); {вывести элементы массива} end; end; Примечание Оператор Randomize задает случайное начальное значение для функции Random. 14. Обработку массива опишите в процедуре обработчика события щелчка мышью на кнопке Button2. Для этого выберите в окне Инспектора объектов объект Button2, затем на странице События сделайте двойной щелчок на пустом поле списка в событии OnClick. После этого в окне Редактора кода в заготовку процедуры обработчика события procedure TForm1.Button2Click(Sender:TObject) в раздел описания локальных переменных поместите следующее описание: var Max, Min, Sum, CountPlus : integer; {результаты обработки массива} где Мах — максимальный элемент массива, Min — минимальный элемент массива, Sum — сумма всех элементов массива, CountPlus — количество положительных элементов массива. Обработку массива можно реализовать с помощью цикла For, в котором вычисление значения каждой из этих переменных записывается при помощи оператора if then, проверяющим условие CheckBox.Checked. Если свойство Checked имеет значение True, то выполняется вычисление соответствующей переменной. В заключительной части процедуры можно разместить вывод результатов обработки массива. Текст процедуры обработки массива может быть записан следующим образом: Procedure TForm1.Button2Click(Sender: TObject); {обработка массива} var Max, Min, Sum, CountPlus : integer; {результаты обработки массива} begin if CheckBox1.Checked then Min:=M[0]; {пусть 0-й элемент - Min} Edit3.Text:=' '; if CheckBox2.Checked then Max:=M[0]; {пусть 0-й элемент - Max} Edit4.Text := ' '; Sum := 0; {обнулить значения Sum} Edit5.Text := ' '; CountPlus := 0; {обнулить значения суммы положительных элементов} Edit6.Text := ' '; for I:=0 to N-l do begin if CheckBox1.Checked then {определить минимальный элемент массива} if Min>M[I] then Min:=M[I]; ifCheckBox2.Checked then {определить максимальный элемент массива} написать самостоятельно if CheckBox3.Checked then {суммировать элементы массива} Sum:=Sum+M[I]; if CheckBox4.Checked then {суммировать положительные элементы массива} if M[I]>0 then CountPlus:=CountPlus+1; end; {вывести результаты обработки массива} if CheckBox1.Checked then Edit3.Text:=IntToStr(Min); if CheckBox2.Checked then Edit4.Text:=IntToStr(Max); if CheckBox3.Checked then Edit5.Text:=IntToStr(Sum); if CheckBox4.Checked then Edit6.Text:=IntToStr(CountPlus); end; 15.Сохраните файлы проекта и программного модуля, откомпилируйте и запустите программу на выполнение. 16.Задавая различные значения числа элементов массива и щелкая мышью на кнопке Создать массив, убедитесь в правильной работе процедуры защиты от ввода нечисловых данных в Edit1 и генерации массива случайных целых чисел. 17.Выбирая варианты обработки массива установкой соответствующих флажков CheckBox, как показано на рисунке 3, и щелкая мышью на кнопке Вычислить, убедитесь в правильности работы процедуры обработки массива (см. рисунок 3). 18.Закройте окно приложения. Рисунок 3 Задание для самостоятельного выполнения: Измените приложение так, чтобы затем, используя переключатели, указать порядок сортировки (по убыванию, по возрастанию), выполнить сортировку и просмотреть отсортированный массив. 1. Для этого добавьте компонент Edit для вывода отсортированного массива. Над этим объектом поместите объект Label, для свойства Caption которого задайте значение «Отсортированный массив». 2. Ниже объекта Edit на форме поместите панель RadioGroup, для свойства Caption которой задайте значение «Порядок сортировки». 3. Для выбора порядка сортировки задайте два переключателя в панели RadioGroup и подписи к ним. Выбрав в Инспекторе объектов компонент RadioGroup, на странице свойств выберите свойство Items, затем в окне StringListEditor введите список элементов: По возрастанию, По убыванию и нажмите ОК. 4. Справа от панели RadioGroup поместите кнопку Button, для свойства Caption которой задайте значение «Отсортировать». Контрольные вопросы и задания: Основные файлы проекта. Основные компоненты Delphi. Панель GroupBox, панель RadioGroup, компонент CheckBox; Флажки CheckBox; Свойство Checked. Лабораторная работа № 7 |