close

Вход

Забыли?

вход по аккаунту

?

Практика

код для вставкиСкачать
 Объектно-ориентированное программирование на языке Delphi
Информатика - это область человеческой деятельности, связанная с процессами преобразования информации с помощью компьютеров и их взаимодействием со средой применения. Информатика появилась благодаря развитию компьютерной техники и немыслима без нее.
Одним из важнейших разделов информатики является программирование. Язык программирования - это формальный, искусственно созданный язык для написания и реализации алгоритма на компьютере. Данное методическое пособие предназначено для изучения основ объектно-ориентированного языка программирования Delphi (ООП) без ориентации на структурную парадигму.
Среди главных причин, принесших заслуженную популярность объектно-ориентированного программирования, следует отметить следующие: * почти полное разрешение проблемы кризиса в программном обеспечении, за счет уменьшения времени на разработку программного продукта и высокой технологии программирования;
* переход от существующих языков программирования к новым, прогрессивным информационным технологиям и сходство идей объектно-ориентированного программирования с идеями из других областей науки. Методы ООП для решения технических задач нередко используются в повседневной жизни, поэтому, обучение языкам объектно-ориентированного программирования не вызывает особых трудностей.
Методическое пособие может быть рекомендовано для студентов, изучающих объектно-ориентированное программирование.
Оглавление
Алгоритмы и исполнители5
Основные понятия объектно-ориентированного программирования6
Проверочная работа №1. Алгоритмы и исполнители. Основные понятия ООП8
Форма и размещение на ней простейших объектов10
Лабораторная работа №112
Расположение объектов на форме17
Лабораторная работа №218
Дополнительные возможности при работе с объектами Edit, Memo. Кнопка с изображением BitBtn19
Лабораторная работа №3. MainMenu - главное меню формы20
Проверочная работа №2. Работа с компонентами.21
Арифметические операции в ООП22
Лабораторная работа № 424
Лабораторная работа №5. Алгоритм решения математический задачи на языке.25
Стандартные арифметические функции26
Лабораторная работа № 627
Флажки (CheckBox) и переключатели (RadioButton). Условный оператор27
Лабораторная работа №732
Проверочная работа №3. Условный оператор.34
Оператор варианта39
Лабораторная работа №840
Работа со строками в объектно-ориентированном программировании. Оператор цикла с параметрами41
Лабораторная работа №944
Программирование циклических алгоритмов. Циклы "до" и "пока"45
Лабораторная работа №1046
Проверочная работа №4. Строки. Циклы49
Рассмотрение дополнительных компонентов для ввода/вывода строк52
Оператор присоединения (With)54
Графические компоненты55
Лабораторная работа №1157
Работа с таблицами59
Лабораторная работа №1260
Массивы61
Лабораторная работа №1363
Проверочная работа №5. Массивы64
Обработка событий мыши. Регулировка прозрачности формы67
Процедуры и функции вызова диалоговых окон68
Лабораторная работа №1469
Работа с датой и временем70
Лабораторная работа №1574
Компоненты вкладки Samples. Обработка событий OnDownClick и OnUpClick74
Лабораторная работа №1675
Компоненты вкладки Dialogs76
Лабораторная работа №1776
Контрольная работа78
Список рекомендуемой литературы80
Алгоритмы и исполнители
Термин алгоритм происходит от имени узбекского ученого 9в. Аль-Хорезми, который в своем труде "Арифметический трактат", переведенном в 12в. с арабского на латынь, изложил правила арифметических действий над числами. Эти правила и называли алгоритмами. Таким образом, правила вычитания, сложения, умножения, построения геометрических фигур - все это алгоритмы. С течением времени данное понятие расширялось и теперь, алгоритмами называют определенную последовательность действий, приводящую к определенному результату. Рассмотрим пример:
Дано: улица с движением, пешеходный переход.
Найти: переход на другую сторону улицы.
1) остановиться на тротуаре;
2) посмотреть налево;
3) если транспорта нет, то идти до середины дороги и остановиться, иначе ждать пока проедет транспорт, затем идти до середины дороги и остановиться;
4) посмотреть направо;
5) если транспорта нет, то идти до тротуара противоположной стороны улицы, иначе ждать пока проедет транспорт, затем идти до тротуара противоположной стороны улицы;
6) конец.
Свойства алгоритмов:
1. Дискретность (разбиение на последовательность отдельных шагов)
2. Понятность
3. Детерминированность или однозначность (не должно быть шагов, которые можно воспринять неоднозначно)
4. Результативность
5. Массовость Способы записи алгоритмов:
1. словесный
> естественный язык (кулинарный рецепт)
> язык программирования
2. графический (блок-схемы)
Ни один алгоритм не может работать без исполнителя - человека, животного или машины который понимает команды и исполняет их формально, т.е. не задумываясь. У каждого исполнителя есть своя система команд исполнителя (СКИ). Если по каким-либо причинам он не может выполнить команду, поступает сообщение "не могу". Если команда не входит в СКИ, поступает сообщение "не понимаю".
Основные понятия объектно-ориентированного программирования
Язык программирования - это искусственно созданный язык для записи алгоритма с помощью ЭВМ. Программа - алгоритм, записанный на языке программирования.
Языки программирования:
1. неструктурный (Basic)
2. структурный (Pascal); 3. логический (Prolog); 4. объектно-ориентированный (Delphi); 5. функциональный (Lisp ("черный ящик")). Преимущество ООП в наглядном представлении программы с помощью объектов (кнопок, строк для ввода информации и др.). Каждый объект принадлежит определенному классу. Например, кнопка (Button1) принадлежит классу кнопок TButton. В класс входит сколь угодно много объектов, объединенных в одну группу согласно их свойствам и поведению в среде окружения, в которой они существуют и взаимодействуют.
TButton
Button1Button2Button3...ButtonN Чаще всего объекты включают в свою программу путем визуального программирования, используя заготовки - компоненты.
Компонент класса TButton
Каждый объект обладает свойствами, событиями и методами.
Свойства характеризуют отличительные особенности компонента (Name (Имя), Caption (Заголовок) и др.).
События - сообщение, которое компонент принимает от приложения, если во время работы программы выполняется определенное действие (например, нажатие на кнопку).
Методы - программный код, обрабатывающий значения свойств.
Класс характеризуется: * Наследованием - любой класс может быть порожден от другого класса. Порожденный класс автоматически наследует поля, методы и свойства своего родителя и может добавлять новые.
* Инкапсуляцией. Класс представляет собой единство трех сущностей - полей, методов и свойств. Объединение этих сущностей в единое целое и называется инкапсуляцией. Представляет собой сокрытие отдельных деталей внутреннего устройства классов от внешних по отношению к нему объектов или пользователей.
* Полиморфизмом - это свойство классов решать схожие по смыслу проблемы разными способами. Действия, выполняемые одноименными методами, могут отличаться в зависимости от того, какому из классов относится тот или иной метод.
Проверочная работа №1. Алгоритмы и исполнители. Основные понятия ООП
Вариант №1.
1. От имени какого ученого произошел термин алгоритм? _______________________________________________________
2. Перечислите свойства алгоритма
a. ______________________________
b. ______________________________
c. ______________________________
d. ______________________________
e. ______________________________
3. Дайте определение исполнителя
_____________________________________________________________________________________________________________________________________________________________________
4. Что мы понимаем под языком программирования? ______________________________________________________________________________________________________________
5. Приведите пример класса и объекта ему принадлежащего. _______________________________________________________
Вариант №2*.
1. Дайте определение алгоритма. ________________________________________________________________________________________________________________________________________________________________________ 2. Перечислите способы записи алгоритма в виде схемы
________________________________________________________________________________3. Что такое СКИ? __________________________________________
4. Что такое программа? ________________________________________________________________________________________________________________
5. Чем обладает объект?
____________________________________________________________ Форма и размещение на ней простейших объектов
Среда программирования Delphi состоит из:
1. Главного меню. В нем располагаются стандартные операции работы с файлами (создать, сохранить, закрыть и т.д.)
Ниже располагаются вкладки объектов: Standard, Additional и прочие. Для открытия вкладки необходимо щелкнуть по ней кнопкой мыши.
2. Окно формы. На нее наносятся все объекты необходимые для работы создаваемого проекта. 3. Окно программного кода. В нем записывается методы для работы программы.
4. Окна инспектора объектов
Состоит из окна свойств (Properties) и событий (Events). При настройке свойств объектов на форме необходимо выделить данный объект щелчком мыши по нему и изменить поле слева от названия свойства. Например, для изменения свойства Caption (надпись) у объекта Form1 (см. рис.) необходимо стереть в левом столбце Form1. Внимание! Нельзя путать свойства Caption и Name. Первое отвечает за название на форме, а второе - за имя объектаДля нанесения объекта на форму нужно выбрать его в главном меню и щелкнуть в нужное место формы.
Лабораторная работа №1
1. Запустите среду программирования Delphi
2. Перед вами открылся новый проект, состоящий из Формы (Form), на которую будете наносить объекты и окно Программного кода (Unit), куда будете записывать программу
Создание графического интерфейса объекта. Создать приложение, в котором после запуска на форме печатается некоторый текст, например, "Первый проект на языке Delphi".
Создадим заготовку проекта, для этого свойству Caption (заголовок) формы Form1 присвоим значение "Первый проект'. Для этого активизировать форму Form1 щелчком мыши (чтобы вокруг компонента появились черные квадратики - маркеры для изменения размера). В окне Object Inspector (Инспектор объектов) → Properties (Свойств объекта) выбрать свойство Сaption и присвоить ему значение "Первый проект" (написать в ячейке справа от Caption Первый проект).
Выведем на форму текстовое сообщение. Это можно сделать различными способами:
* С помощью элемента управления Label (Метка)
* С помощью элемента управления Edit (Одна строка)
* С помощью элемента управления Memo (Несколько строк)
Разместим на форме метку Label1 и присвоим свойству Сaption (Надпись) значение выводимого текстового сообщения
3. Выбрать на Панели инструментов класс управляющих элементов TLabel и разместить экземпляр метки Label1 на форме Form1
4. Активизировать метку Label1 щелчком мыши. В окне Object Inspector (Инспектор объектов) → Properties (Свойства объекта) выбрать свойство Caption (заголовок) и присвоить ему значение 'Первый проект на языке Delphi'.
Разместим на форме текстовое поле Edit1 и присвоим свойству Text значение выводимого сообщения (сделать самостоятельно)
Событийные процедуры. Любой объект можно связать с набором процедур, исполняемых при наступлении определенных событий, такие процедуры называют событийными процедурами
Двойной щелчок мышью по объекту вызывает окно Программного кода (Unit) с пустой заготовкой событийной процедуры (метода). Если осуществить двойной щелчок по метке Memo1, то появится заготовка событийной процедуры TForm1.Memo1Change (...); (эта надпись появляется автоматически!)
procedure TForm1.Memo1Change(Sender: TObject);
begin
... end; В теле процедуры (между служебными словами begin и end) должен быть записан метод, т.е. последовательность операторов, которые будут выполняться при наступлении событий (нажатии на Memo1)
5. Выбрать на Панели инструментов класс управляющих элементов TMemo и разместить экземпляр многострочного редактора Memo1 на форме Form1. В свойстве Lines удалить существующую надпись Memo1. (щелкнув по многострочному полю Memo1, кликнуть напротив свойства Lines и удалить там надпись Memo1).
6. Активизировать Memo1 двойным щелчком мыши, тем самым вызвать окно Программного кода с пустой процедурой TForm1.Memo1.Change (...); (эта надпись появляется автоматически)
7. В теле процедуры записать
Memo1.Text:='Второй проект на языке Delphi';
т.е. при запуске программы, щелкнув по Memo1, появится надпись "Второй проект на языке Delphi"
Использование кнопок. Обычно, при работе с событийными процедурами используют Кнопки (TButton). Логично, что при нажатии на кнопку с определенным именем происходит какое-либо действие. Теперь необходимо решить предыдущую задачу, но с помощью Кнопки. В дальнейшем большинство задач будет решаться при обработке события OnClick - двойной щелчок по кнопке.
8. Выбрать на Панели инструментов класс управляющих элементов Button и разместить экземпляр кнопки Button1 на форме Form1
9. Выбрать на Панели инструментов класс управляющих элементов TLabel и разместить экземпляр метки Label2 на форме Form1
10. Активизировать кнопку Button1. В окне Свойств объекта выбрать свойство Caption и присвоить ему значение Моя кнопка (щелкнув по кнопке Button1, написать в колонке Properties Моя Кнопка в ячейке справа от Caption).
11. Активизировать Button1 двойным щелчком мыши, тем самым вызвать окно Программного кода с пустой процедурой TForm1.Button1Click(Sender: TObject); (эта надпись появляется автоматически)
12. В теле процедуры записать Label2.Caption:='Третий проект на языке Delphi';
т.е. при запуске программы, щелкнув по Моей кнопке, появится надпись на метке Label2 "Третий проект на языке Delphi"
Выход из программы легко осуществлять записывая в событийной процедуре оператор Close;
Установка цвета формы и параметров шрифта. Сделаем внешний вид более привлекательным и для этого изменим свойства объектов, определяющих их внешний вид.
13. Активизировать форму Form1. В окне свойства объекта выбрать свойство Сolor (цвет фона) и двойным щелчком открыть диалоговое окно с цветовой палитрой. Выбрать цвет, например желтый.
14. Активизировать метку Label1. В окне свойства объекта установить значения Color - синий, Font - Arial, жирный, 26 размер, травяной цвет символов.
15. Поэкспериментировать с объектами Memo1, Edit1, Label2
Для того, чтобы менять параметры шрифта с помощью кнопки при запуске программы необходимо в событийной процедуре указать, например Label2.Font.Size:=30; Label2.Font.Сolor:=clWhite; Т.е. при нажатии на кнопку размер шрифта метки 2 станет равным 30, а цвет - белым. Для изменения начертания шрифта пишем * Label2.Font.Style:=fsbold; {полужирный},
* Label2.Font.Style:=fsitalic; {курсив},
* Label2.Font.Style:=fsunderline; {полужирный}. Если необходимо поменять шрифт пишем Label2.Font.Name:='Arial'; {Arial} или Label2.Font.Name:='Times New Roman'; {Times New Roman}
Задание для самостоятельной работы:
1. Создать проект "Вывод сообщений", в котором на форму выводится текстовое сообщение "Первое задание выполнено!" с помощью метки, одной строки и многострочного редактора, а выход из программы осуществляется щелчком по кнопке Выход. Придумать графический интерфейс программе.
2. Создать проект "Вывод сообщений в строку", в котором два различных варианта текста выводятся в строку Edit1 по щелчку по двум кнопкам. Предусмотреть возможность выхода из программы по третьей кнопке.
3. Создать проект "Печать на форме", в котором в нескольких метках при нажатии на кнопки тексты будут со следующими параметрами:
* "Times New Roman, 18, курсив, красный"
* "Courier New, 40, полужирный, зеленый"
* "Arial, 22, подчеркнутый, синий"
* "Webdings, 12, подчеркнутый курсив, желтый"
* "Monotype Corsiva, 32, полужирный"
Расположение объектов на форме
Местоположение объекта, которое он будет занимать на форме после запуска приложения на выполнение, можно легко изменить. Для этого достаточно перетащить объект с помощью мыши в любое место экрана. Если необходимо установить точные значения местоположения и размеров объектов, то это можно сделать, установив значения свойств Left (расстояние по горизонтали от левого верхнего угла монитора до верхнего левого угла формы), Top (расстояние по вертикали от левого верхнего угла монитора до верхнего левого угла формы), Width (ширина формы), Height (высота формы).
Для этого необходимо активизировать, например Edit. В окне Свойства объекта последовательно присвоить свойствам Left, Top, Width, Height значения 32, 104, 225, 30.
Лабораторная работа №2
Расположение управляющих элементов на форме. Расположение на форме и размеры управляющих элементов можно легко изменять с помощью мыши. Для этого необходимо активизировать объект щелчком мыши (он будет выделен восемью квадратиками - маркерами) и перетащить его на новое место или изменить размер элемента.
Точное месторасположение и размеры выделенных элементов управления отображаются двумя парами чисел: Left, Top, Width и Height.
1. Активизировать метку Label1. В окне свойства объекта последовательно присвоить свойствам Left, Top, Width и Height значения 30, 0, 100, 100.
2. Активизировать метку Label2. В окне свойства объекта последовательно присвоить свойствам Left, Top, Width и Height значения 70, 0, 450, 100
3. Активизировать метку Label3. В окне свойства объекта последовательно присвоить свойствам Left, Top, Width и Height значения 0, 330, 100, 30.
Задачи для самостоятельного выполнения:
1. Создать проект "Перемещение кнопки по форме", в котором, например, в центре, располагаются кнопки и по щелчку перемещаются в заданное место на форме, например по углам формы
2. Создать проект "Перемещение формы на экране", в котором будет изменяться местоположение формы на экране монитора с помощью четырех командных кнопок. Кнопки расположить в углах формы. После щелчка по кнопке, форма должна переместиться в соответствующую часть экрана. Перемещение формы должно сопровождаться комментариями, выводимыми с помощью надписи в центре формы.
Дополнительные возможности при работе с объектами Edit, Memo. Кнопка с изображением BitBtn
Для межстрочного поля Memo существует способность отображать множество строк. Все они, как известно, содержаться в свойстве Lines. Метод Add добавляет новую строчку к имеющемуся в межстрочном поле набору строк. Memo1.Lines.Add('Привет!');
В языке программирования Delphi облегчает работу оператор Edit1.SetFocus; С помощью этого оператора поле Edit1 получает фокус ввода, т.е. связывает указанный компонент с клавиатурой. Одной из разновидностью кнопок служит BitBtn - кнопка с изображением. Она находится во вкладке Additional. Свойство Kind для такой кнопки определит одну из 11 стандартных разновидностей кнопки. Если у кнопки был изменен рисунок (свойство Glyph), Delphi автоматически присваивает свойству Kind кнопки значение bkCustom. Лабораторная работа №3. MainMenu - главное меню формы
Компонент класса TMainMenu определяет главное меню формы (программы). 1. Установите компонент на форму
2. Создайте пункты меню. Для этого следует дважды щелкнуть по компоненту мышью. Меню обладает свойством Caption, в котором можно задать его имя. Каждый пункт меню может раскрываться в подменю или являться конечной командой. Для создания подпунктов:
3. Щелкните мышью ниже пункта меню и введите имя первого пункта подменю.
В названиях пунктов можно указать символ амперсанда (&) перед тем символом, который определит клавишу быстрого вызова.
Для вставки разделительной черты, определяющей пункты меню, нужно ввести в качестве имени очередного пункта меню дефис (-).
В Delphi имеется возможность связывать с пунктами меню небольшие изображения. Эти изображения можно задать либо свойством BitMap, либо свойством ImageIndex. Изображение (если оно есть) появляется слева от пункта меню.
Задание для самостоятельной работы: создать проект для работы с компонентом класса TMainMenu (см рис.). Все пункты меню должны быть рабочими.
Проверочная работа №2. Работа с компонентами.
Вариант №1.
1. Что такое компонент? ________________________________________________________________________________________________________________________
2. Охарактеризуйте данные компоненты и перечислите их основные свойства.
Button1__________________________________________________________Edit1__________________________________________________________Form1__________________________________________________________ Вариант №2*.
1. Из чего состоит окно инспектора объектов? ________________________________________________________________________________________________________________________
2. Охарактеризуйте данные компоненты и перечислите их основные свойства.
Label1___________________________________________________________Memo1___________________________________________________________BitBtn1___________________________________________________________ Арифметические операции в ООП
В объектно-ориентированном программировании можно выполнять любые арифметические действия. Для этого необходимо использовать не числа, как в математике, а переменные - символы, которые будут обозначать цифры в общем виде. Существуют специальные знаки, позволяющие записывать арифметические действия:
1. := - присваивание (А:=В).
2. операции языка: + - сложение (А:=В+С)
* - умножение
− - вычитание
/ - деление
3. знаки операций отношения: <, >, =, <=, >=, <>
4. {..} или // - комментарии, то есть необязательный текст в окне программного кода, который служит для пояснения и не влияет на выполнение задачи.
5. ; - символ для разделения инструкций языка (операторов)
Для решения арифметических задач необходимо описывать все используемые переменные:
Var a, b, c, dude: integer; //целые числа
x, y, z, max: real; // вещественные числа
Т.е. пример a+b=c мы будем решать следующим образом:
1. Заведем 3 переменные a, b, c.
2. Запись c:=a+b будет означать, что результат суммы двух чисел, лежащих в ячейках a и b будет записан в переменную с. В языке программирования Delphi запись с=а+b будет означать, что сумма чисел а и b равна с.
Теперь, если нам необходимо решить пример 2+4=6, при запуске программы мы в переменную a положим 2, в b - 4 и программа выдаст ответ 6.
Для решения примеров мы будем использовать функции IntToStr (<переменная>) (перевод числа из целого в строчный тип) и StrToInt (<переменная>) (перевод из строкового в целый тип). Это необходимо в связи с тем, что при вводе числа в строку Edit оно становится строкового типа, а со строками нельзя выполнить арифметических операций. Для вычисления необходимо преобразовывать тип из строкового в целый, а для вывода результата нужно обратно переводить из целого в строчный тип.
Однако если ответ задачи лежит в переменной вещественного типа, то для вывода его в строчном поле классов TEdit или TMemo необходимо использовать функцию FloatToStr(<переменная>).
Лабораторная работа № 4
Решим простейший пример: найти сумму трех чисел.
1. Описываем после служебного слова VAR несколько переменных целого типа для удобства решения: Var a, b, c, s: integer;
2. На форму заводим 3 метки: Label1, Label2, Label3. У каждой из них в свойстве Caption написать соответственно а=, в=, с=.
3. Наносим однострочные элементы управления Edit1, Edit2, Edit3. В них будем вводить числа. Для этого в свойстве Text нужно удалить надписи.
4. Заводим кнопку, которую называем Cумма
5. Наносим элемент управления Memo1 и удаляем все надписи в многострочном редакторе. Для этого в окне Свойства объекта выбираем свойство Lines и удаляем все надписи в нем.
Примерно ваша форма должна выглядеть так:
6. Активируем двойным щелчком мыши кнопку. Появляется процедура TForm1.Button1Click(Sender: TObject);
7. В теле процедуры присваиваем заведенным переменным значения строк следующим образом a:=StrToInt(Edit1.text); (аналогично для b и c)
8. Вычисляем сумму s:=a+b+c;
9. Выводим результат в Memo1. Для этого записываем Memo1.Text:=IntToStr(s);
Продумать свое графическое оформление этой задачи.
Задания для самостоятельной работы: 1. Вычислить произведение четырех чисел. Графическое оформление задачи самостоятельное.
2. Решить пример a=b+c/m*k. Графическое оформление задачи самостоятельное.
Лабораторная работа №5. Алгоритм решения математический задачи на языке.
Алгоритм решения задачи имеет 3 основные части:
1. ввод данных
Например:
a:=StrToInt(Memo1.text); // занести в переменную а содержимое многострочного редактора Memo1, переведенное из строкового в числовую форму для выполнения математических действий.
b:=StrToInt(Edit1.text); // занести в переменную b содержимое однострочного редактора Edit1, переведенное из строкового в числовую форму для выполнения математических действий.
2. проведение определенных действий, требуемых в условии задачи.
3. вывод результата или сообщения о проведенном анализе данных.
Вывод результата: c:=a+b; // ответ с
Memo1.text:=IntToStr(c); // вывод результата решения примера в многострочный редактор Memo1 путем перевода ответа из числовой в строковую форму.
Вывод сообщения: Edit1.text:='Задача решена успешно!'; // вывод сообщения о проведенном анализе данных в многострочный редактор Edit1. Перевод сообщения из числовой в строковую форму НЕ ОСУЩЕСТВЛЯЕТСЯ!
Стандартные арифметические функции abs(x)Модуль хcos(x)Косинус хexp(x)Экспонентаfrac(x)Дробная часть от хint(x)Целая часть от хrandomпсевдослучайное число [0,1)random(x)псевдослучайное число [0,x)sin(x)Синус хsqr(x)квадрат хsqrt(x)корень квадратный Возведение в степень: xy = exp(y*ln(x))
Для работы с арифметическими функциями необходимо выполнять простое правило: 1. Для вывода значения функции х2 нужно описать две переменные x и y целого типа.
2. Ввести х с клавиатуры. Например, x:=StrToInt(Edit1.Text); 3. В программе y:=sqr(x);
4. Вывести значение у. Например, Memo1.Text:=IntToStr(y);
Лабораторная работа № 6
Для работы с арифметическими функциями необходимо выполнять простое правило: 1. Для вывода значения функции х2 нужно описать две переменные x и y целого типа.
2. Ввести х с клавиатуры. Например, x:=StrToInt(Edit1.Text); 3. В программе y:=sqr(x);
4. Вывести значение у. Например, Memo1.Text:=IntToStr(y);
Задания для самостоятельной работы:
1.
2. 3. Дано число. Вывести на экран его целую и дробную части.
4. Даны числа a, b, c. Возвести в третью степень a, в квадрат произведения b на с и найти модуль суммы этих чисел.
Флажки (CheckBox) и переключатели (RadioButton). Условный оператор
Флажки в среде программирования используются для выбора собственного решения (да/нет или да/нет/не уверен). В последнем случае флажок устанавливается, но выглядит блекло. Это решение отражается в свойстве State компонента, доступном как для чтения, так и для записи. State может быть 3 типов: * Установлен (Checked)
* Не установлен (Unchecked)
* Не уверен (Alignment)
Переключатели предназначены для выбора одного из нескольких взаимоисключающих решений. На форме помещаются, по меньшей мере, два таких компонента. Они могут иметь только два состояния, определяемых свойством Checked.
Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. То есть Условный оператор - средство ветвления вычислительного процесса.
Структура условного оператора в общем виде:
IF <УСЛОВИЕ> THEN <ОПЕРАТОР №1> ELSE <ОП.2>;
где IF, THEN, ELSE - ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА (если, то, иначе)
<условие> - произвольное выражение логического типа,
<операторы> - любые операторы, т.е. действия.
Далее можно разъяснить алгоритм работы условного оператора:
1. Вычисляется <условие>.
2. Если оно TRUE (истина), то выполняется оператор 1, а оператор 2 пропускается.
3. Если результат - FALSE (ложь), наоборот <оп.1> пропускается, а выполняется <оп.2>.
Рассмотрим структуру неполного ветвления. Запишем ее в общем виде:
IF <УСЛОВИЕ> THEN <ОПЕРАТОР>;
Условный оператор может быть использован для решения математических задач. Для облегчения работы с оператором на начальном этапе работы с ним, рассмотрим таблицу:
<Условие> <Оператор> a>0 k:=0; k:=k+1: //количество a<0 s:=0; s:=s+a; //сумма(a mod 2=0) а нацело делится на 2, а - четное p:=1; p:=p*a; //произведение ... ... В структуру условного оператора IF <УСЛОВИЕ> THEN <ОПЕРАТОР №1> ELSE <ОП.2>;
вместо <УСЛОВИЕ> и <ОПЕРАТОР> вставляем нужные поля таблицы. В предлагаемые столбцы, можно вводить какие угодно условия и операторы, необходимые для решения задачи.
Запомним основные правила для работы с условным оператором:
перед else ; никогда не ставится;
если необходимо использовать составное условие, то каждое подусловие записывается в скобках через логические операции "и" (and) или "или" (or).
Например: Даны числа x, y, z. Найти количество чисел, которые больше 5 и меньше 10.
Var x, y, z, k : integer; Обработаем событийную процедуру:
{раздел ввода данных}
x := StrToInt(Edit1.Text);
y := StrToInt(Edit2.Text);
z := StrToInt(Edit3.Text); k := 0;
{раздел основного алгоритма}
if (x>5) and (x<10) then k := k+1;
if (y>5) and (y<10) then k := k+1;
if (z>5) and (z<10) then k := k+1;
{раздел вывода результата}
Memo1.Text := IntToStr(k);
Если на одной из ветвей находятся несколько операторов необходимо использовать операторные скобки begin ... end.
Например: Увеличить значение t и m на единицу, если k - четное и уменьшить в обратном случае.
Var t, m, k : integer;
Рассмотрим алгоритм записи условия:
... if (k mod 2 = 0) then Begin
t := t+1; m := m+1;
end // перед else ; не ставится!!!
else Begin
t := t-1; m := m-1;
end; ...
Другая форма записи увеличения на единицу числа: inc(<число>);
для уменьшения - pred(<число>); тогда решение представленного выше примера может быть записано следующим образом:
... if (k mod 2 = 0) then Begin
inc (t); inc (m);
end
else Begin
pred(t); pred (m); end; ...
Лабораторная работа №7
Флажки. При активизации двойным щелчком мыши CheckBox1 появится процедура TForm1.CheckBox1Click(Sender: TObject);
Задача: При установке флажка текст в Метке1 должен становиться жирным. Procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked=true then Label1.font.Style:=font.style+[fsbold]
else Label1.font.Style:=font.style-[fsbold]
end; То есть, если (if) флажок установлен, (then) текст в Метке1 должен становиться жирным, (else) а при повторном нажатии на флажок - обычным. Рассмотрим применение таблицы для первого случая, когда необходимо текст в многострочном редакторе сделать жирным при установке флажка и обычным при повторном нажатии.
<Условие> <Оператор> CheckBox1.checked Memo1.Font.Style:=Memo1.Font.Style+[fsBold] Memo1.Font.Style:=Memo1.Font.Style-[fsBold] Вставив условия и операторы в шаблон получим:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.checked then
Memo1.Font.Style:=Memo1.Font.Style+[fsBold]
else
Memo1.Font.Style:=Memo1.Font.Style-[fsBold]
end;
Переключатели. Задача: При установке переключателей текст в Метке1 должен становиться желтым либо красным.
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
if RadioButton1.Checked=true then Label1.Font.Color:=clyellow
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
if RadioButton2.Checked=true then Label1.font.Color:=clred
end;
Задания для самостоятельной работы: 1. Создать простейший текстовый процессор, содержащий переключатели цвета шрифта, флажки для определения стиля.
2. Вычислить наибольшее (max) из двух введенных чисел а и b.
3. Вычислить наименьшее (min) из трех чисел a, b, c.
4. Даны числа x, y, z. Найти количество чисел больших нуля.
5. Даны числа x, y, z. Найти сумму чисел меньших нуля и произведение чисел больших нуля.
6. Даны числа a, b, c. Вычислить модуль чисел меньших нуля, квадрат чисел не равных нулю и корень из чисел больших нуля.
7. Найти значение выражения z=3x-4, 0<x<=1и z=|x-x2|, 1<x<=10
8. s=max(x,y), x<0 s=min(x,y), x>=0
9. Известно, что из четырех чисел а1, а2, а3, а4 одно отлично от трех других, равных между собой. Вывести это число. 10. Даны два действительных числа x и y, не равные друг другу. Меньшее из этих чисел заменить половиной их суммы.
Придумать и решить несколько задач по данной теме.
Проверочная работа №3. Условный оператор.
Вариант №1.
1. Для чего необходим условный оператор?
________________________________________________________________________________________________________________________________
2. Переведите на язык программирования следующие высказывания
a. Если a больше b тогда c присвоить 1.
___________________________________________________________
b. Если a равно 5 тогда c присвоить b, иначе c присвоить b2.
______________________________________________________________________________________________________________________
c. Если a меньше 0 тогда b присвоить 5, c присвоить 10, иначе c присвоить 5 и d присвоить b.
______________________________________________________________________________________________________________________
d. Если 1>a>3 тогда c присвоить модуль a иначе c присвоить корень квадратный из b.
______________________________________________________________________________________________________________________
3. Напишите алгоритм нахождения наибольшего из 2 чисел.
________________________________________________________________________________________________________________________________
4. Напишите алгоритм нахождения суммы положительных чисел из a, b, c.
________________________________________________________________________________________________________________________________________________________________________________________________
5. Как ввести целое число в однострочное поле? a. a:=IntToStr(Edit1.text);
b. a:=StrToInt(Memo1.text);
c. a:=IntToStr(Memo1);
d. a:=StrToInt(Edit1.text);
6. Выберите синтаксически правильную запись (может быть несколько вариантов ответа)
a. If a>b then c:=d; else c:=b;
b. If a>b then c:=5 and d:=7;
c. If a>b then c:=5+s;
d. If a<10 then c:=1 else c:=0;
e. If a=1 and b=6 then k:=k+1;
f. If (a=5) or (b=5) then c:=5;
g. If a≠10 then s:=s+b;
h. If a≥1 then begin c:=4; b:=4;
else
c:=5; b:=5;
end;
i. if a>0 then begin
c:=1; d:=1;
end else k:=1;
Вариант №2*.
a. Приведите формат записи условного оператора (общий вид). ________________________________________________________
2. Переведите на язык программирования следующие высказывания
a. Если a равно b тогда c присвоить их сумму.
___________________________________________________________
b. Если a не равно b тогда c присвоить квадрат a иначе c присвоить корень квадратный из b.
___________________________________________________________
c. Если a меньше 10 тогда b присвоить модуль d, c присвоить квадрат a иначе c присвоить корень квадратный из b и d присвоить сумму a и b.
______________________________________________________________________________________________________________________
d. Если 1>a>10 тогда c присвоить верхнюю границу интервала иначе c присвоить нижнюю границу интервала.
___________________________________________________________
3. Напишите алгоритм нахождения наименьшего из 3 чисел.
________________________________________________________________________________________________________________________________
4. Напишите алгоритм нахождения количество положительных чисел и произведение отрицательных из x, y, z.
________________________________________________________________________________________________________________________________________________________________________________________________
5. Как вывести вещественное число в многострочное поле? a. Memo1.Text:=IntToStr(a);
b. Edit1.Text:=StrToInt(a);
c. Memo1:=a;
d. Memo1.Text:=FloatToInt(a);
e. Memo1.Text:=FloatToStr(a);
f. Edit1.Text:=StrToFloat(a);
6. Выберите синтаксически правильную запись (может быть несколько вариантов ответа)
a. If x>y then c:=2; else c:=5;
b. If a>b then z:=2 and z:=2;
c. If a>1 then c:=sqr(s);
d. If a<=10 then c:=10 else c:=0;
e. If (a=1) and (b=6) then k:=k+1; z:=2; else k:=1; z:=z+2;
f. If (a=5) or (b=5) then c:=5;
g. If a≠10 then s:=sqrt(w);
h. If a≥1 then begin c:=4; b:=4; end;
else c:=5; b:=5; end;
i. if a>0 then begin c:=1; d:=1; end else begin k:=1; z:=1 end;
Оператор варианта Оператор варианта Case является обобщением оператора if и позволяет сделать выбор из произвольного числа вариантов.
Он состоит из выражения, называемого селектором, и списка параметров, каждому из которых предшествует список констант выбора (список может состоять из одной константы). Как и в операторе if, здесь может присутствовать else, имеющее тот же смысл.
Формат:
Case <выражение-селектор> of
<список 1>: <оператор 1>;
<список 2>: <оператор 2>;
...
<список N>: <оператор N> else <оператор>
end; Селектор может иметь любой скалярный тип, кроме вещественного. Использование строкового типа в качестве селектора запрещено. Список констант выбора может состоять из произвольного количества значений или диапазонов, отделенных друг от друга запятыми.
Тип констант в любом случае должен совпадать с типом селектора.
Рассмотрим примеры:
1. селектор интервального типа. Case i of
1..10: Memo1.Lines.Add ('число', I:4, 'в диапазоне 1-10');
11..20: Memo1.Lines.Add ('число', I:4, 'в диапазоне 11-20');
21..30: Memo1.Lines.Add ('число', I:4, 'в диапазоне 21-30')
else Memo1.Lines.Add ('число', I:4, 'вне пределов контроля') end;
2. селектор целочисленного типа.
Case I of
1: z:=i+10;
2: z:=i+100; end;
Лабораторная работа №8
Задача: Написать программу, которая по введенному числу 1..3 выводит его название.
Опишем переменную Var a: integer;
Для события по щелчку кнопки в теле процедуры напишем:
Begin
a:=(Edit1.text); // ввод числа
case a of
1: Memo1.text:=IntToStr('один');
2: Memo1.text:=IntToStr('два');
3: Memo1.text:=IntToStr('три');
else Memo1.text:=IntToStr('Введите число 1, 2 или 3');
end;
End;
Задания для самостоятельной работы:
1. Составить программу, которая по заданному числу (1-12) выводит название соответствующего месяца.
2. Написать программу, которая по введенному номеру времени года выдавала соответствующие этому времени года месяцы и число дней в каждом месяце.
3. Составить программу, которая для любого натурального числа 1-1000 печатает количество цифр в записи этого числа.
4. Для целого числа k от 1 до 99 напечатать фразу "я прочел k книг", согласовав окончание слова "книга" с числом k.
Работа со строками в объектно-ориентированном программировании. Оператор цикла с параметрами
Для языков программирования характерны не только возможности работы с числовой информацией, но и со строковой. Напомним, что для работы с числами мы использовали два основных типа данных: Integer (целый) и Real (вещественный). Например, var a: integer; b: real;
Для работы со строками необходимо использовать тип данных string (var s: string). Отличительной чертой этого типа данных является то, что мы можем обратиться как к строке целиком, так и посимвольно, то есть к каждой букве в отдельности. Для этого нам необходимо использовать оператор цикла. Цикл - многократное повторение последовательности действий по некоторому условию. Известны три типа циклических алгоритмических структур, но при работе со строками будем использовать одну из них - цикл с параметром. Он имеет две формы записи:
For <параметр>:=<нач. значение> to <кон. значение> do <тело цикла>; For <параметр>:=<кон. значение> downto <нач. значение> do <тело цикла>;
Цикл повторяется пока значение параметра лежит в интервале между начальным и конечным значениями параметра. Причем эти выражения (начального и конечного значение) вычисляются только один раз в начале выполнения цикла. Параметр обязательно должен быть целого типа.
В первом варианте при каждом повторении цикла значения параметра изменяется на следующее значение в данном типе (для целого типа - увеличивается на 1). Понятие шаг. Во втором варианте при каждом повторении цикла значение параметра изменяется на предыдущее значение параметра (для целого типа - уменьшается на единицу).
При работе со строкой запишем оператор цикла следующим образом: for i:=1 to length(s) do (обращение к символам от первого до последнего в строке s). Кроме того, используются следующие процедуры и функции:
1. Функция length (s) определяет длину строки. Результат - целое число 0..255
Пример: дана строка, подсчитать количество цифр в строке.
var s: string; k: integer;
k:=length(s);
2. Процедура Delete (s,pos,n) - удаление части строки. Удаляет из строки s n-символов начиная с символа № pos.
Пример: s:='рогатка'; Delete(s,5,3) => рога 3. Процедура Insert (s1,s2,pos). Вставка части строки.
S1-что, S2-куда, Pos-с какой позиции
Пример: S1:='свет'; Insert(s1,'o',2) => 'совет'
4. Функция Copy (s,pos,n) - возвращает часть строки s длиной n, начиная с позиции pos.
Пример: S:='пароход'; t:=copy(s,1,3) => 'пар'
5. Сцепление строк - функция Concat (s1,s2,s3,...,sn)
Пример: Concat ('к','о','т') => 'кот' 6. Функция Pos (s1,s2) - поиск одной строки в другой. Возвращает номер символа, начиная с которого строка s1 является частью s2.
Пример: pos ('cd','abcdf') => 3
Лабораторная работа №9
Рассмотрим алгоритм решения задачи, в которой нужно подсчитать количество вхождений символа "а" в строку. Используем компоненты классов TEdit и TMemo для ввода строки и вывода результата.
Var s: string;
i, k: integer;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
s:=edit1.text; //ввод строки
For i:=1 to length(s) do //идем по строке
If s[i]='a' then k:=k+1; {если i-ый символ а, тогда увеличивай счетчик k}
Memo1.text:=IntToStr(k) //вывод результата
End;
Пусть форма будет выглядеть следующим образом:
Задания для самостоятельной работы:
1. Дана строка s: Найти количество вхождений букв a,c,d в строку.
2. Найти количество цифр в строке.
3. Сцепить несколько строк в одну.
4. Из данной строки выбрать цифры и сформировать из них новую строку.
5. Найти количество слов, начинающихся на букву с.
6. Подсчитать количество слов в строке.
7. Определить начинается и заканчивается ли слово одной буквой.
8. Удалить каждую четную букву в строке.
9. Проверить одинаковое ли число открытых и закрытых скобок в строке.
10. По введенным: фамилии, имени, отчеству выводить информацию о том, является ли пользователь автором программы, его теской или являются ли теской отец автора и пользователя программы.
Программирование циклических алгоритмов. Циклы "до" и "пока"
Как уже говорилось, известны три типа циклических алгоритмических структур. Была рассмотрена только одна из них - цикл с параметром. Поговорим об остальных: - цикл с предусловием
- цикл с постусловием
Существуют операторы для их реализации.
1. Цикл с предусловием (цикл-"пока") - наиболее универсальная циклическая структура. Реализуется оператором While. Формат оператора:
While <логическое выражение> do <тело цикла>
Пока значение логического выражения истинно (true), выполняется тело цикла, тело может быть простым или составным оператором.
2. Цикл с постусловием (цикл-"до") имеет формат
Repeat < тело цикла > until < логическое выражение >
Повторяется выполнение тело цикла. Цикл заканчивается, когда логическое выражение становится истинным. Тело цикла с постусловием выполняется хотя бы один раз. Использование операторных скобок для ограничения тела цикла не требуется. Для гибкого управления циклическими операторами используют следующие процедуры:
Break - реализует немедленный выход из цикла
Continue - обеспечивает досрочное завершение очередного прохода цикла.
Лабораторная работа №10
Задача: Вывести 5 одинаковых надписей: "Программа цикла"
Для вывода повторяющегося действия нам понадобиться описать переменную i целого типа, обработать события OnClick для кнопки Button1. В теле процедуры необходимо описать нижеследующий метод: procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=1 to 5 do
Memo1.Lines.Add('Программа цикла')
end;
Рассмотрим пример решения задачи: найти сумму ряда s=1+1/2+1/3+...+1/k.
Для задачи наиболее оптимальным алгоритмом решения будет цикл. Для того чтобы выделить повторяющие части запишем ряд следующим образом: s=1/1+1/2+1/3+...+1/k.
Заметим, что числители постоянен и равен 1. Знаменатели постоянно увеличиваются на 1 в интервале от 1 до k. Таким образом, общий вид элемента ряда = 1/i, где i - изменяющийся знаменатель. Следовательно, запишем метод решения задачи:
Var k,i: integer; s: real;
Begin
k:=StrToInt(Edit1.Text); s:=0;
For i:=1 to k do s:=s+1/i; {i пробегает все значения знаменателя от 1 до k (1, 2, 3, ..., k) изначально s=0, при k=1 s=0+1/1, s становится равным 1; при k=2 s=1+1/2, s становится равным 1,5 и т.д.} Memo1.Text:=FloatToStr(s);
End;
Задания для самостоятельной работы:
1. Вывести таблицу умножения на любое число, введенное с клавиатуры.
2. Вывести таблицу значений функции y=sin(x) в интервале 0..1
3. Вывести 4 надписи: "На окне сидело n кошек", 1n4.
4. В интервале [0,20] подсчитать количество четных чисел и чисел, которые делятся на 3.
5. Вычислить сумму натурального ряда чисел от 1 до n.
6. Вычислить сумму чисел s=1/(p+2)+2(p+2)+3/(p+2)+...+p/(p+2).
7. Вычислить произведение чисел кратных 5 ряда от 1 до n.
8*. Вычислить сумму чисел s=(1+3+5+...+2*n-1)3-(2+4+6+...+2*n)2.
9*. Составить программу для проверки утверждения: "Результатами вычислений по формуле х2+х+17 при 0≤х≤15 являются простые числа". Все результаты вывести на экран (простое число - число которое делится только на себя и на единицу).
10*. Покупатель должен заплатить в кассу s рублей. У него имеются 1, 2, 5, 10, 50, 100, 500, 1000-рублевые купюры. Сколько купюр разного достоинства отдаст покупатель, если он начнет платить с самых крупных? (использовать процедуру Continue).
11*. Написать программу, которая запрашивает исходные данные и производит над ними выбранное пользователем действие. Выбор действий осуществляется с помощью меню. Исходные данные - числа a и b. Меню действий:
1. - сложить
2. - умножить
3. - вычесть
4. - разделить
5. - выход
Результат выводить после каждого действия
Проверочная работа №4. Строки. Циклы
Вариант №1.
1. Опишите строку s.
________________________________________________________________
2. Напишите программу для проверки количества вхождений в строку буквы v.
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 3. Опишите структуру цикла "до" в "общем" виде
________________________________________________________________
4. Переведите на язык программирования следующие высказывания
a. Цикл от 1 до 10.
___________________________________________________________
b. Сообщение "Привет" выводится пока a<5
______________________________________________________________________________________________________________________
c. Пока m>10 увеличиваем количество a и b на 2 и 3 соответственно.
_________________________________________________________________________________________________________________________________________________________________________________
5. Выберите синтаксически правильную запись (может быть несколько вариантов ответа)
a. For i:=1 to n do a:=a+1;
b. For i=1 to 5 do a:=a+1;
c. For i:=1 to 10 do a:=a+1;
d. For i:=1 to n do a:=a+1; b:=b+a;
e. For i:=1 to n do begin a:=a+1; c:=c+1; end;
f. While a>0 do m:=m+1;
g. While c≠10 do begin a:=1; b:=2; end;
h. Repeat a>0 until b:=b-1;
i. Repeat b:=b-1 until a>0;
j. While b:=b+2 do m>0;
k. Repeat b=10 do k:=k-2; end;
l. While a>0 until b:=b-1;
m. Repeat b:=b-1; n:=n+2 until a>0;
Вариант №2*.
1. Опишите строку s, максимальная длина которой 10.
________________________________________________________________
2. Напишите программу для проверки количества вхождений в строку буквы символов +, -, ), (.
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 3. Опишите структуру цикла "пока" в "общем" виде
________________________________________________________________
4. Переведите на язык программирования следующие высказывания
a. Цикл с параметром от 1 до 20.
___________________________________________________________
b. Сообщение "Добрый день" выводится 5 раз.
______________________________________________________________________________________________________________________
c. Увеличиваем a на единицу и выводим текущее значение на экран до тех пор, пока m≠10 _________________________________________________________________________________________________________________________________________________________________________________
5. Выберите синтаксически правильную запись (может быть несколько вариантов ответа) и исправьте неправильные
a. For j:=1 to n do a:=a+1; ________________________________________________________
b. For j=1 to 5 do a:=a+1; m:=18*a;
________________________________________________________
c. For i:=1 to n do begin a:=a+1; b:=b+a; end; ________________________________________________________
d. For i:=1 to n do begin a:=a+1; c:=c+1 end; ________________________________________________________
e. While a>0 do m:=m+1; n:=n*a2
________________________________________________________
f. While c<10 do begin a:=1; b:=2; end; ________________________________________________________
g. Repeat a>0 until begin b:=b-1; c:=c+2; end; ________________________________________________________
h. Repeat b:=b-1; n:=n+2; until a>0;
_______________________________________________________
i. While begin b:=b+2; v:=v+4; end; do m>0; ________________________________________________________
j. Repeat begin b=10 do k:=k-2; end; ________________________________________________________
k. Repeat b:=b-1; n:=n+2; k:=k+10 until a>0; ________________________________________________________
Рассмотрение дополнительных компонентов для
ввода/вывода строк
Для ввода и вывода информации в объектно-ориентированном программировании существует целый ряд вариантов. В библиотеке визуальных компонентов Delphi существует множество компонентов, позволяющих отображать, вводить и редактировать текстовую информацию. Нами уже были рассмотрены Label (метка), Edit (однострочное поле) и Memo (многострочное поле). В таблице приведен перечень оставшихся компонентов с краткими характеристиками и указанием основных параметров, содержащих отображаемый или вводимый текст. ПиктограммаКомпонентВкладкаОписаниеStaticText (метка с бордюром)Additional Подобен компоненту Label, но обеспечивает возможность задания стиля бордюра. Основное свойство - Caption. Panel (панель)Standard Компонент является контейнером для группирования органов управления, но может использоваться и для отображения текста с возможностями объемного оформления. Основное свойство - Caption. MaskEdit (окно маскированного редактирования)Additional Используется для форматирования данных или для ввода символов в соответствии с шаблоном. Основные свойства - Text и EditText. RichEdit (многострочное окно редактирования в формате RTF)Win32 Компонент представляет собой окно редактирования позволяющее производить выбор атрибутов шрифта, поиск текста и многое другое. Основное свойство - Lines. ListBox (окно списка)Standard Отображение стандартного окна списка Windows, позволяющего пользователю выбирать из него пункты. Основное свойство - Items. CheckListBox (список с индикаторами)Additional Компонент является комбинацией свойств списка ListBox и индикаторов CheckBox в одном компоненте. ComboBox (редактируемый список)Standard Объединяет функции ListBox и Edit. Пользователь может либо ввести текст, либо выбрать его из списка. Основное свойство - Items. Оператор присоединения (With)
Оператор используется для сокращения записи кода программы при обращениях к свойствам объекта. Он позволяет избегать повторных ссылок на объект в последующих операторах.
Структура:
With <объект> Do <оператор>;
Например, группу операторов
Form1.label1.left := form1.label1.left + 10;
Form1.label1.caption :=label2.caption;
Form1.label1.font.color := clred;
С помощью with можно записать короче:
With form1.label1 do
Begin
left := left + 10;
caption :=label2.caption;
font.color := clred;
end;
Графические компоненты
TImage - изображение
Данный компонент служит для размещения на форме одного из трех поддерживаемых Delphi типов изображений: растрового рисунка (*.bmp), значка (*.ico) или метафайла (*.wmf, *.emf). С помощью свойства Canvas программа может отредактировать растровое изображение (но не метафайл или значок!)
Свойства компонента:
Свойство Описание AutoSize Разрешает/запрещает изменять размеры компонента так, чтобы в них полностью загрузилось изображение Canvas Для прорисовки изображения Center Указывает, надо ли центрировать изображение в границах компонента Picture Контейнер изображения Stretch Разрешает/запрещает изменять размеры изображения так, чтобы оно целиком заполнило клиентскую область компонента Transparent Разрешает/запрещает накладывать собственный фон изображения на фон компонента TShape - стандартная фигура
Компонент рисует одну из простейших геометрических фигур:
stCircle - окружность
stRounrSaustre - квадрат с закругленными сторонами
stSquare - квадрат
stEllipse - эллипс
stRectangle - прямоугольник
stRoundRect - прямоугольник с закругленными сторонами Фигура полностью занимает все пространство компонента. Помимо стандартных графических инструментов Brush и Pen, в компоненте определено свойство Shape, задающий вид фигуры. Изменение этого свойства приводит к немедленной перерисовке изображения TPaintBox - окно для рисования
Для создания изображения в компоненте класса TPaintBox используется свойство канва (Canvas), графические инструменты - в свойствах Font, Pen, Brush. Рисование осуществляется в обработчике события OnPaint.
Лабораторная работа №11
Создадим несложную программу просмотра изображений:
1. Поместите на форму панель TPanel, очистите ее свойство Caption.
2. Разместите на панели кнопку TButton с надписью Загрузить.
3. На любое свободное место формы (над панелью) поместите компонент TImage и установите в его свойство Align значение alClient.
4. На любое место поместите компонент TOpenPictureDialog (вкладка Dialogs) - с его помощью пользователь программы может разыскать нужный файл с изображением.
5. Для кнопки напишите обработчик события OnClick:
Begin
If OpenPictureDialog1.Execute then
Begin
Image1.Picture.LoadFormFile(OpenPictureDialog1.FileName);
Image1.Stretch := True {масштабирует изображение, чтобы оно занимало всю рабочую область}
End;
End;
Для того чтобы нарисовать нижеследующий рисунок в окне PaintBox необходимо растянуть данный компонент по форме, форму развернуть на весь экран и написать представленный код. procedure TForm1.PaintBox1Paint (Sender: TObject);
var x, y: integer;
begin
with paintbox1.Canvas do
begin
brush.Color:=clred; ellipse(0,0,620,420); font.Name:='arial';
font.Size:=height div 5; font.Style:=[fsbold,fsitalic];
font.Color:=clwhite;
x:=(620 - textwidth('Delphi')) div 2; y:=(420 - textheight('D')) div 2;
textOut(x,y,'Delphi')
end; end;
Задания для самостоятельной работы:
1. По введенным координатам точки А(a1,a2) вывести координатную четверть с ПДСК.
2. Нарисовать домики пейзаж около него. 3. По введенному числу лепестков вывести значение гадания по ромашке "любит" или "не любит".
Работа с таблицами
TStringGrid - текстовая таблица
Компонент TScrollBar предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. Таблица делится на две части - фиксированную и рабочую. Фиксированная часть служит для показа заголовков колонок и рядов, а так же для ручного управления их размерами. Обычно фиксированная часть занимает левую колонку и верхний ряд таблицы, однако с помощью свойств FixedCols и FixedRows можно задать другое количество фиксированных колонок и рядов.
Рабочая часть - это остальная часть таблицы. Она может содержать произвольное количество колонок и рядов, более того, эти величины могут изменяться программно. Если рабочая часть таблицы не помещается целиком на экране, то автоматически появляется полоса прокрутки.
Свойства компонента:
Свойство Описание BorderStyle Определяет рамку компонента: bsNone - нет рамки, bsSingle - рамка толщиной 1 пиксел Cells[col,row] Определяет содержимое ячейки с табличными координатами (col,row) Col Содержит номер колонки с ячейкой, имеющей фокус ввода ColCount Содержит количество колонок таблицы ColWidths Содержит ширину колонки с индексом Index EditorMode Разрешает/запрещает редактирование ячеек. Игнорируется, если свойство Options включает значение goAlwayseShowEditor или не включает значение goEditing FixedColor Определяет цвет фиксированной зоны FixedCols Определяет количество колонок фиксированной зоны FixedRows Определяет количество рядов фиксированной зоны GridHeight Содержит значение высоты таблицы GridLineWidth Определяет ширину линий, расчерчивающих таблицу GridWidth Содержит значение ширины таблицы Row Содержит номер ряда ячейки, имеющий фокус ввода RowCount Содержит количество рядов таблицы RowHeights Содержит значение высоты ряда с индексом Index Rows Содержит все текстовые строки ряда с индексом Index ScrollBars Определяет полосы прокрутки: ssNone - нет полос; ssHorizontal - в таблицу вставляется горизонтальная полоса; ssVertical - вставляется вертикальная полоса; ssBoth - вставляются обе полосы.Лабораторная работа №12
Для обращения к ячейке [0,0] нужно использовать свойство Cells:
StringGrid1.Cells[0,0]:=IntToStr(5)
1. Проиллюстрируйте возможности рассмотренного компонента, составив таблицу следующего вида:
Дисциплина ФИО педагога 1. Математика Иванов И.И. 2. Русский язык Петров П.П. 3. ... ... 2. Составить таблицу 4х4, состоящую из целых чисел. Программа должна выводить число, лежащее в ячейке с введенным с клавиатуры номером столбца и строки.
3. Составить таблицу, выводящую расписание занятий в школе.
Массивы
Массив - упорядоченный набор однотипных значений - компонент массива. Тип компонент называется базовым типом массива.
В Delphi массив рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое, так и на любую из его компонент. Описание массивов
VAR <имя переменной>:ARRAY [<type1, type2,...>] OF <type>;
[<type1, type2,...>] - типы индексов
<type> - базовый тип
Количество типов индексов определяет размерность массива. Тип индексов может быть любым, кроме Real. Базовым типом может быть любой тип данных. Примеры описания массивов
Var a: array[1..10] of integer; - последовательность целых чисел
Var t: array[1..2,1..2] of real; - таблица 2х2.
Var a1: array ['A'..'Z'] of word;
Обращение к элементам массива
a[1] - первый элемент из массива a.
t[1,2] - элемент из первой строки второго столбца.
Индексы можно задавать либо конкретными значениями, либо выражениями. i:=1; a[i] - первый элемент из массива a; a[i+1] - второй элемент массива а.
В динамических массивах не указывается размерность в описании: Например, var a: array of integer;
Размерность устанавливается в теле программы: SetLength(a, 10); - длинна массива а - 10 элементов.
По массиву проход осуществляется от первого до последнего элемента:
for i := Low(a) to High(a) do где i: integer;
Лабораторная работа №13
Задания для самостоятельной работы:
1. Заполнить линейный массив произвольными числами и вывести его на экран.
2. Заполнить линейный массив числами, введенными с клавиатуры, вывести этот массив, увеличить все элементы на 5 и снова вывести получившийся массив на экран.
3. В линейном массиве найти элементы массива равные 10 и вывести их индексы.
4. В линейном массиве вывести элементы с четными индексами.
5. В двумерном массиве найти количество четных элементов.
6. В двумерном массиве найти сумму элементов главной диагонали.
7. В двумерном массиве подсчитать произведение наибольших элементов каждой строки.
8. В динамическом массиве вывести на экран элементы равные своему индексу.
9. В динамическом массиве найти элементы, удовлетворяющие условию сумма индексов меньше значения элемента.
10. Вывести массив следующего вида. Размерность произвольная.
1111100110...1111111. Вывести массив следующего вида. Размерность произвольная.
1000020000...0000N12. Вывести массив следующего вида. Размерность произвольная.
1222312233...23331Проверочная работа №5. Массивы Вариант №1.
1. Опишите массив a, состоящий из 10 элементов.
________________________________________________________________
2. Опишите двумерный массив mas, состоящий из 10 строк и 10 столбцов.
________________________________________________________________
3. Опишите динамический массив dmas.
________________________________________________________________
4. Что мы называем a ________________________, i __________________________ и a[i] ___________________________.
5. Напишите основной алгоритм для нахождения суммы элементов линейного массива.
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6. Напишите основной алгоритм для нахождения количества четных элементов двумерного массива.
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7. Переведите на язык программирования следующие высказывания
a. Присвоить элементам массива a случайные значения.
___________________________________________________________
b. Найти количество элементов массива mas, меньших 10.
______________________________________________________________________________________________________________________
c. Найти сумму элементов массива dmas, кратных 5.
_________________________________________________________________________________________________________________________________________________________________________________
Вариант №2*.
1. Опишите целочисленный массив a, состоящий из N элементов.
________________________________________________________________
2. Опишите двумерный массив mas, состоящий из 5 строк и 10 столбцов.
________________________________________________________________
3. Опишите двумерный динамический массив dmas. Задайте его длину.
________________________________________________________________
4. Как обозначаются верхняя __________________________ и нижняя __________________ границы динамического массива.
5. Напишите основной алгоритм для нахождения суммы положительных и произведения отрицательных элементов линейного массива.
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 6. Напишите основной алгоритм для нахождения количества элементов, удовлетворяющих условию, что сумма индексов равна значению ячейки двумерного массива.
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 7. Переведите на язык программирования следующие высказывания
a. Присвоить элементам массива a случайные значения в диапазоне от 10 до 100.
___________________________________________________________
b. Найти количество элементов массива mas, меньших 10 и больших 0.
______________________________________________________________________________________________________________________
c. Найти сумму элементов массива dmas, кратных 3 и 5.
_________________________________________________________________________________________________________________________________________________________________________________
Обработка событий мыши. Регулировка прозрачности формы
Обработчики событий OnMouseDown и OnMouseUp определяют реакцию программы на соответственно нажатие и отпускание кнопки мыши, OnMouseMove -на перемещение указателя мыши на компоненте.
Два свойства AlphaBlend и AlphaBlendValue впервые были введены в версии Delphi 6 и позволяют регулировать степень прозрачности окна формы. Если AlphaBlend = true, то значение свойства AlphaBlendValue задает степень прозрачности. 0 - окно полностью прозрачно, 255 - совершенно непрозрачно. Свойства TransparentColorValue и TransparentColor определяют цвет прозрачности и возможность его использования. Однако указанные свойства работают только с ОС Windows 2000/XP и выше на процессорах Pentium с тактовой частотой не ниже 90 МГц и видеокарта компьютера должна отображать больше 255 цветов.
Процедуры и функции вызова диалоговых окон
Процедура ShowMessage ('<строка>') отображающая окно с сообщением и кнопкой ОК. Пример: ShowMessage ('До свидания!')
Процедура ShowMessageFmt('Задано %d параметров из %d ', [n1,n2]) Последний оператор при n1=5 и n2=7 выдаст сообщение с текстом: "Задано 5 параметров из 7"
Функции отображают окна, в которых пользователю задается какой-либо вопрос и анализируется полученный ответ.
Функция MessageDlg (<строка>, AType, Abuttons, HelpCtx) отображает диалоговое окно и ожидает ответ пользователя. Вид отображения окна задается параметром AType. Значение Описание MtWarning Окно замечаний MtError Окно ошибок MtInformation Информационное окно MtConfirmation Окно подтверждения mtCustom Заказное окно без рисунка Параметр Abuttons определяет, какие кнопки будут присутствовать в окне.
Значение Надпись на кнопке MbYes Yes MbNo No MbOk Ok MbCancel Cancel MbHelp Help MbAbort Abort MbRetry Retry MbIgnore Ignore MbAll All Определены 3 константы, соответствующие часто используемым сочетанием кнопок
MbYesNoCancel Входят кнопки Yes, No, Cancel mbOkCancel Входят кнопки Ok, Cancel mbAbortRetryIgnore Входят кнопки Abort, Retry, IgnoreЛабораторная работа №14
Пример: В теле процедуры запишем
Begin
... if MessageDlg('Yo!',mtWarning,[mbYes, mbNo],0)=mrYes
then close;
end.
Получим: Задания для самостоятельной работы:
1. Перераспределить значения переменных x и y так, чтобы в х оказалось большее, а в у - меньшее.
2. Посетитель проиграл в казино a рублей. У него есть фишки 2, 5, 15, 20, 50, 100, 500$. Сколько фишек разного достоинства отдаст игрок, если будет платить с самых дорогих?
Работа с датой и временем
Тип TDateTime Var t: TDateTime;
Для обработки даты и времени модуль SysUtils содержит следующие основные функции:
function Date: TDataTime; - возвращает текущую дату как значение типа TDateTime.
function DateToStr(Date: TDateTime): string; - преобразовывает дату, указанную параметром Date, в строку.
function DayOfWeek(Date: TDateTime): Integer; - возвращает номер дня недели для даты, указанной параметром Date. Для воскресенья возвращается значение 1, для понедельника - 2 и т. д.
function EncodeDate(Year, Month, Day: Word): TDateTime; - собирает значение даты из заданных составляющих Year, Month и Day и возвращает его как значение типа TDateTime.
function DecodeDate(Date: TDateTime): Word; - собирает значение типа TDateTime и возвращает его как значение типа дата из заданных составляющих Year, Month и Day.
function Now: TDateTime; - возвращает значение текущей даты и времени.
function StrToDate(const S; string): TDateTime; - преобразовывает значение строки, указываемое параметром S, в дату типа TDateTime.
function Time: TDateTime; - возвращает текущее значение времени.
function TimeToStr(Time: TDateTime): string; - преобразовывает время в строку в соответствии с форматом, определяемым глобальной переменной LongTimeFormat.
TDateTimePocker - ввод и отобрание даты/времен
Свойства компонента:
Свойство Описание CalAlignmentОпределяет положение раскрывающегося календаря: dtaLeft - слева от компонента; dtaRight - справа от компонента. Учитывается только для Kind=dtkDate и DateMode=dmComoBox CalColorsЦвет календаря CheckedЕсли выполняются условия Checked=True и ShowCheckBox=True, то флажок рядом с полем даты (времени) будет показан и установлен. Наличие флажка или его отсутствие разрешает или запрещает ручной ввод даты или времени DateСодержит введенную дату DateFormatОпределяет формат показа даты: dfShort - 11.01.04; dfLong - 5 сентября 2004 г. DateModeОпределяет способ выбора даты: dmComboBox - с помощью раскрывающегося календаря; dmUpDown - с помощью встроенного компонента TUpDown KindОпределяет содержимое компонента: dtkDate - дата; dtkTime - время MaxDateОпределяет максимальную дату, которую может выбрать или ввести пользователь MinDateОпределяет минимальную дату, которую может выбрать или ввести пользователь TimeСодержит введенное пользователем время TMonthCalendar - календарь
Предназначен для выбора и отображения даты. Очень похож на календарь, рассмотренный выше, но в отличие от него может одновременно отображать несколько смежных месяцев - в зависимости от своих размеров.
Свойства компонента:
Свойство Описание CalColorsЦвет календаря (фона, дат, заголовков) DateОпределяет выбранную дату EndDateОпределяет конечную дату диапазона выбранных дат FirstDayOfWeekОпределяет первый день недели MaxDateОпределяет максимальную дату, месяц которой еще будет доступен для отображения в компоненте. Если свойство содержит пустое значение, то отображается любой следующий месяц MinDateОпределяет минимальную дату, месяц которой еще будет доступен для отображения в компоненте. Если свойство содержит пустое значение, то отображается любой предыдущий месяц ShowTodayCircleРазрешает/запрещает обводить кружком текущую дату WeekNumbersРазрешает/запрещает показ порядковых номеров недель от начала года в левой колонке TTimer - таймер
Данный компонент служит для отсчета интервалов реального времени. Минимальный реально достижимый интервал отсчета времени в ОС MS-DOS, Windows 95/98/ME не может быть меньше 55 миллисекунд (этот интервал называется тиком). Для ОС Windows NT Server, Windows 2000, Windows XP длительность тика составляет 10 миллисекунд.
TCalenar - календарь
Компонент календарь отображает календарь на выбранный месяц и год. Его свойства Day, Month, Year могут содержать любую дату от 1 до 9999 года от Рождества Христова.
Лабораторная работа №15
Рассмотрим пример, в котором числа 2006, 1, 1 выводятся в формате даты 1.1.2006.
var MyTime: TDateTime;
begin
MyTime := EncodeDate(2006, 1, 1);
Edit1.Text := DateToStr(MyTime); end;
Для вывода в однострочное окно текущей записи на экран необходимо Edit1.Text := DateToStr(Now);
Задания для самостоятельной работы:
1. По введенному номеру года найти количество понедельников в этом году.
2. По введенному номеру года найти количество пятниц 13.
Компоненты вкладки Samples. Обработка событий OnDownClick и OnUpClick
TSpinButton - спаренные кнопки
Для данного компонента следует написать обработчики событий OnDownClick и OnUpClick, в которых реализуется реакция программы на щелчок по той или иной кнопке. TСolorGrid - цветовая таблица
Класс предназначен для выбора и отображения цветов из 16-цветной палитры. Свойство BackGroundIndex содержит индекс выбранного фонового цвета, GridOrdering определяет количество колонок и столбцов.Лабораторная работа №16
Задача: При нажатии на верхнюю спаренную кнопку выводится сообщение Up, на нижнюю - Down.
procedure TForm1.SpinButton1DownClick(Sender: TObject);
begin edit2.text:='Down' end;
procedure TForm1.SpinButton1UpClick(Sender: TObject);
begin edit2.text:='Up' end;
Задания для самостоятельной работы:
Составить задачу, в которой форма окрашивается в выбранный из палитры цвет.
Компоненты вкладки Dialogs
TOpenDialog - открытие файлов и TSaveDialog - сохранение файлов
Компоненты имеют идентичные свойства.
Свойство Описание FileName Имя файла из которого читаются (TOpenDialog) или записываются (TSaveDialog) данные Filter Отбор файлов DefaultExt Формируется полное имя файла, если при ручном вводе пользователь не указал расширение Files Доступ к выбранным именам файлов, если разрешен множественный выборЛабораторная работа №17
Программа для просмотра содержимого текстового файла.
1. На пустую форму нанести компонент TOpenDialog, кнопку TButton и многострочное поле TMemo.
2. При работе программы щелчок по кнопке будет сигналом о необходимости загрузить в поле новый файл.
3. Procedure TForm1.Button1Click (Sender: TObject);
Begin
// настраиваем компонент на отбор текстовых файлов
OpenDialog1.Filter := 'Текстовые файлы|*.txt|'+'Bat файлы |*.bat|';
// выполняем диалог и анализируем его результат
If OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
// Результат успешный - пользователь выбрал файл
// загружаем файл в поле Memo
Memo1.Lines.LoadFromFile (OpenDialog1.FileName) End;
Контрольная работа
Вариант №1
1. Найти наибольшее из 3 чисел a, b, c.
2. Найти сумму чисел s=1/(p+2)+ 2/(p+2)+...+ p/(p+2)
3. Дана строка. Найти количество вхождений букв А.
4. Дан двумерный массив. Найти количество элементов меньших 10.
Вариант №2
1. Найти среднее арифметическое положительных чисел из a, b, c, d.
2. Найти сумму чисел s=1+1/2+1/3+...+1/k
3. Дана строка. Найти количество знаков +, -, *, /
4. Дан одномерный массив. Найти сумму элементов кратных 5.
Вариант №3
1. Найти среднее геометрическое положительных чисел из a, b, c.
Примечание: среднее геометрическое считать равному квадратному корню из a*b*c.
2. Найти сумму чисел s=1+1/4+1/9+...+1/n2
3. Дана строка. Заменить * знаком +.
4. Дан одномерный массив. Найти количество элементов равных 0.
Вариант №4*
1. Дана точка А(x1, y1). Определить принадлежит ли она треугольнику со сторонами (x2, y2), (x3, y3), (x4, y4).
2. Найти сумму чисел s=(1+3+5+...+2n-1)2-(2+4+6+...+2n)3
3. Дана строка. Найти сумму входящих в нее цифр.
4. Дан динамический массив. Заполнить его следующим образом:
11112222............nnnn
Список рекомендуемой литературы
1. Delphi 7. Учебный курс./Под ред. С.И.Бобровского. - СПб.: Питер, 2003.
2. Архангельский А.Я. Object Pascal в Delphi 5. - М. БИНОМ. 1999.
3. Архангельский А.Я. Программирование в Delphi 7. - М., 2004.
4. Борковский А.Б. Англо-русский словарь по программированию и информатике. - М., 1990.
5. Информатика./ Под ред. Н.В. Макаровой. - М., 2003.
6. Могилев А.В., Пак Н.И., Хеннер Е.К. Информатика. - М., 1999.
7. Орлов С.А. Технологии разработки программного обеспечения. - СПб., 2003. Семакин И., Шеина Т. Преподавание базового курса информатики в средней школе. Методическое пособие - М., 2000.
8. Угринович Н., Морозов В., Нечаев В. Преподавание курса "Информатика и информационные технологии". Методическое пособие - М., 2002.
9. Фаронов В.В. Delphi. Программирование на языке высокого уровня. - СПб., 2004.
10. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. Учебное пособие. Издание 7-е, переработанное. - М.: "Нолидж", 2000.
Документ
Категория
Рефераты
Просмотров
202
Размер файла
636 Кб
Теги
лабораторная работа, лаба, практика, лабораторная
1/--страниц
Пожаловаться на содержимое документа