Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Размещение компонентов на Форме




Разместите на Форме компоненты так, как показано на рисунке.

 

Рис. Размещение компонентов на Форме

Сохранение проекта

Для нового проекта создайте новую папку, например X:\65эи\ФИО_Обучающийсяа\Mod2\Lab3. Сохраните проект File | Save Project As…. Сначала сохраните модуль c именем UnStr.pas, затем файл проекта под именем PrStr.dpr

Последующие сохранения выполнять командами File | Save All.

 

Создание процедуры-обработчика события активизации Формы FormActivate

В момент запуска приложения, когда панель интерфейса появляется на экране, для пользователя удобно, чтобы курсор уже находился в поле редактора компонента ComboBox. При активизации Формы возникает событие OnActivate, которое можно использовать для передачи фокуса ввода компоненту ComboBox. Для создания

процедуры-обработчика этого события необходимо в Инспекторе объектов выбрать компонент Form1, на странице Events (События) найти событие OnActivate и дважды щелкнуть «мышью» по его правой (белой) части. Курсор установится в тексте процедуры-обработчика события активизации Формы procedure TForm1.

FormActivate(Sender: TObject). Наберите операторы передачи фокуса ввода компоненту ComboBox1.

 

Создание процедуры-обработчика события ComboBox1KeyPress

В соответствии с заданием необходимо, чтобы при нажатии клавиши Enter строка символов, которую пользователь набрал в поле редактирования, переносилась в список выбора компонента ComboBox1.

Для создания процедуры-обработчика этого события необходимо в Инспекторе объектов выбрать компонент ComboBox1, на странице Events (События) найти событие OnKeyPress и дважды щелкнуть «мышью» по его правой части. Курсор установится в тексте процедуры procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char), которая осуществляет обработку события нажатия клавиши на клавиатуре. Наберите операторы этой процедуры, пользуясь текстом модуля UnStr (листинг 2.3).

В результате выполнения этой процедуры при нажатии клавиши Enter строка из поля редактирования переносится в список выбора и очищается поле редактирования.

 

Создание процедуры-обработчика события нажатия клавиши «мыши» ComboBox1Click Создание процедуры procedure TForm1.ComboBox1Click(Sender: TObject) выполняется аналогично процессу создания процедурыобработчика события OnKeyPress компонента ComboBox1.

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

 

Работа с приложением

Запустите созданное приложение. Занесите с помощью окна редактирования исходные данные в список выбора компонента ComboBox1. Ввод каждой строки завершайте нажатием клавиши Enter. Далее раскройте список выбора, щелкните «мышью» по нужной строке – в результате будет определено количество слов в строке и произойдет замена строчных букв прописными. Преобразование строчных букв в прописные основано на том, что код строчной буквы больше кода прописной. Код прописных букв от «а» до «я» больше соответствующих строчных букв на 32 (см. таблицу кодов Ansi). Например, код символа «а» равен 224, а код символа «А» – 192. Эта закономерность сохраняется и для остальных букв русского алфавита.

На рисунке 2.6 показан интерфейс приложения после ввода исходных данных и выбора строки.

Рис. 2.6. Интерфейс приложения после его выполнения

 

Текст программы

Unit UnStr;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;

type

TForm1 = class(TForm)

Label1: TLabel;

ComboBox1: TComboBox;

Label2: TLabel;

Label3: TLabel;

BitBtn1: TBitBtn;

Label4: TLabel;

Label5: TLabel;

procedure FormActivate(Sender: TObject);

procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);

procedure ComboBox1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

//Обработка события активизации Формы

procedure TForm1.FormActivate(Sender: TObject);

begin

ComboBox1.SetFocus;

end;

// Обработка события ввода символа и нажатия клавиши Enter

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var

Key: Char);

begin

{Если нажата клавиша Enter, то строка из поля редактирования переносится в список выбора ComboBox1}

if key=#13 then

begin

ComboBox1.Items.Add(ComboBox1.Text);

ComboBox1.Text:=''; // очистка окна редактирования

end; end;

// Обработка события нажатия клавиши «мыши» в списке выбора

procedure TForm1.ComboBox1Click(Sender: TObject);

var

st: string;

n,i,nst,ind: integer;

begin

n:=0; //n содержит количество слов

ind:=0;

nst:=ComboBox1.ItemIndex; //определение номера выбранной строки

st:=ComboBox1.Items[nst]; //st присваивается выбранная строка

{Определение количества слов в выбранной строке st}

for i:=1 to length(st) do

case ind of

0: if st[i]<>' ' then //если встретился символ

begin

ind:=1;

n:=n+1; //количество слов увеличивается на единицу

end;

1: if st[i]=' ' then //если встретился пробел

ind:=0;

end;

Label3.Caption:=IntToStr(n); //вывод количества слов

// Замена строчных символов русского языка на прописные

for i:=1 to length(st) do if (st[i]>='а') and (st[i]<='я') then st[i]:=chr(ord(st[i])-32);

Label5.Caption:=st; //полученная строка выводится в Label5

end; end.

 

Практическое задание

Во всех заданиях исходные данные вводить с помощью компонента Edit в компонент ListBox, либо с помощью свойства Text в свойство Items компонента ComboBox. Результат выводить с помощью компонента Label. Ввод строки заканчивать нажатием клавиши Enter. Работа приложения должна завершаться нажатием кнопки Close.

 

Индивидуальные задания 1-го уровня

1. Дана строка символов, содержащая буквы русского и латинского алфавитов. Верно ли, что в этой строке содержится четное количество строчных латинских букв. Вывести на экран соответствующее сообщение.

2. Дана строка символов, содержащая буквы и цифры. Определить, чего больше – цифр или букв. Вывести на экран соответствующее сообщение.

3. Дана строка символов, состоящая из букв, цифр, запятых, точек. Удалите из данной последовательности все цифры. Полученную строку вывести на экран.

4. Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Преобразовать последовательность, заменив пробелы между словами на символ звездочки.

5. Строка символов содержит только цифры. Вывести на экран номера позиций цифры, заданной пользователем.

6. Дана строка символов, содержащая заглавные латинские буквы. Определить, упорядочены ли эти буквы по алфавиту.

7. Дана символьная строка. Определить, является ли данная последовательность записью двоичного числа (т.е. содержит только нули и единицы).

8. Дана строка символов. Подсчитайте, сколько среди них латинских заглавных букв.

9. Дано слово, записанное через дефис. Поменяйте части слова до и после дефиса.

10. Дана строка символов. Определить, какой процент слов начинается на букву «К».

 

Индивидуальные задания 2-го уровня

11. Дана строка, состоящая из букв, цифр, запятых, точек. Заменить каждую точку многоточием и вывести новую строку.

12. Дана строка символов, среди которых есть двоеточия. Выведите в Memo все символы, расположенные до первого двоеточия.

13. Дана символьная строка. Заменить все символы «!» точками, кроме первого. Вывести полученную строку.

14. Дана символьная строка, содержащая два предложения, каждое из которых заканчивается точкой. Поменять их местами, сохранив порядок слов в предложениях.

15. Дана символьная строка. Слово – последовательность символов между пробелами, не содержащая пробелы внутри себя. Определить длину самого короткого слова.

16. Дана символьная строка. Слово – последовательность символов между пробелами, не содержащая пробелы внутри себя. Определить количество слов заданной длины.

17. Дана символьная строка. Слово – последовательность символов между пробелами, не содержащая пробелы внутри себя. Переставить и распечатать слова заданной строки в алфавитном порядке по первой букве.

18. Дана строка символов, состоящая из произвольных десятичных цифр, разделенных пробелами. Вывести на экран числа этой строки в порядке возрастания их значений.

19. Дана строка символов, состоящая из произвольного текста на английском языке, слова отделены пробелами. Вывести на экран порядковый номер слова максимальной длины и номер позиции строки, с которой оно начинается.

20. Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков «+» и «-». Выделить подстроку, которая соответствует записи целого числа (т.е. начинается со знака «+» или «-» и внутри подстроки нет букв, запятых и точек).

21. Дана символьная строка и символ. Слово – последовательность символов между пробелами, не содержащая пробелы внутри себя. Вывести все слова, в которых есть заданный символ.

22. Дана строка символов, содержащая некоторый текст. Разработать программу, которая определяет, является ли данный текст палиндромом, т.е. читается ли он слева направо так же, как и справа налево (например, «А роза упала на лапу Азора»).

23. Дана строка символов, состоящая из произвольного текста на английском языке, слова отделены пробелами. Поменять местами первую и последнюю буквы каждого слова.

24. Составить программу, которая читает построчно текст другой программы (ввести с клавиатуры) на языке Pascal, подсчитывает количество ключевых слов «begin» и «end» и выводит на экран соответствующее сообщение.

25. Дано предложение, состоящее из слов, отделенных друг от друга «*». В конце предложения стоит точка. Определите все повторяющиеся слова в предложении.

Контрольные вопросы

1. Что такое строка символов?

2. Какие строковые форматы поддерживает Delphi?

3. Как описываются строки в языке Delphi?

4. На какой странице Палитры компонентов размещены компоненты ListBox и ComboBox?

5. Как в Object Pascal осуществляется доступ к отдельным символам строковой переменной?


Практическая работа №10,

Лабораторная работа №10

 

Тема. Обработка множеств и записей. Разработка программ обработки множеств и записей

Цель. Освоить программирование алгоритмов обработки множеств и массивов записей.

Оборудование. Персональный компьютер

Ход работы.

1. Повторить теоретическую часть.

2. Выполнить практическое задание.

3. Ответить на контрольные вопросы.

Теоретическая часть

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

Тип элементов множества называется базовым типом множества. Область значений типа множества — набор всевозможных подмножеств, составленных из элементов базового типа.

В языке Pascal имеются ограничения на базовый тип. Это может быть только порядковый тип, количество значений которого не превышает 256. Из простых типов к таким относятся char, byte, boolean. Разрешается использовать перечисляемый тип и диапазон (если он включает не больше 256 элементов).

При задании значений элементов множества применяются квадратные скобки.

Например: [1,2,3,4], ['а'.. 'z']

Если множество не имеет элементов, оно называется пустым и обозначается []. Пустое множество включено в любое другое.

Формат объявления множественных типов следующий:

type

ИмяТипа = set of ТипЭлементовМножества;

var

ИмяПеременной: ИмяТипа;

Можно описать переменные множественного типа:

var

ИмяПеременной: set of Тип;

Можно объявить константы множественного типа:

const ИмяКонстанты=[ЗначениеМножества];

а также типизированные константы:

const ИмяКонстанты:ТипМножества=[ЗначениеМножества];

Например:

const number = [1,4,7,9];

type simply = set of 'a'..'h';

var pr: simply; letter: set of char; {без предварительного описания в разделе типов}

В памяти множества представлены особым образом. Каждому значению базового типа множества в памяти отводится 1 бит (не байт) Следовательно, максимальный размер ячейки памяти, отводимой под множество, составляет 32 байта Поскольку все значения порядкового типа расположены строго по порядку, 1 в соответствующем бите означает наличие данного значения в множественной переменной, а 0 — отсутствие

Исходя из особенностей внутреннего представления множеств, можно сделать два основных вывода:

- в множестве не может быть одинаковых элементов;

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

При работе с множествами допускается использование следующих операций:

- отношения (=, >=, <=);

- объединения множеств (+);

- пересечения множеств (*);

- разности множеств (—);

- проверка принадлежности элемента множеству (in).

Рассмотрим каждую из операций в отдельности.

- Операция "равно" (=). Два множества А и В считаются равными, если они состоят из одних и тех же элементов.

- Операция "не равно" (<>). Два множества А ч В считаются не равными, если они отличаются по количеству элементов или по значению хотя бы одного элемента

- Операция "больше или равно" (>=). Эта операция используется для определения принадлежности одного множества другому. Результат операции А>=В равен true, если все элементы множества В содержатся в множестве А. В противном случае результат равен false

- Операция "меньше или равно" (<=). Операция используется аналогично предыдущей операции, но результат выражения А<=В равен true, если все элементы множества А содержатся в множестве В. В противном случае результат равен false

- Операция in. Эта операция используется для проверки принадлежности какого-либо значения указанному множеству. Она обычно применяется в условных операторах. Например, сложное условие if (a=l) or (a=2) or (a=3) or (a=4) or (a=5) then... можно заменить более коротким выражением if a in [1.. 5] then...

- Объединение множеств (+). Объединением двух множеств является третье множество, содержащее элементы обоих множеств

- Пересечение множеств (*). Пересечением двух множеств является третье множество, которое содержит элементы, входящие одновременно в оба множества

- Разность множеств (—). Разностью двух множеств является третье множество, которое содержит элементы первого множества, не входящие во второе множество

Например, процедура для вывода множества символов может иметь следующий вид:

type charset=set of char;

procedure writeset(a:charset);

var с:char; begin

for c:=chr(0) to chr(255) do if с in a then вывод(c,' ');

end;

Рассмотрим следующий пример, демонстрирующий проверку принадлежности элемента множеству. Пусть требуется в предложении, введенном с клавиатуры, определить количество гласных букв.

Подсчет количества гласных букв в предложении

const glasn=['a','e','и','о','у','ы','э','ю','я', 'А', 'Е', 'И', 'О','У', 'Ы', 'Э', 'Ю', 'Я'];

var s:string; p,i:integer;

begin

вывод('Введите строку текста: '); ввод(s);

p:=0;

for i:=l to length(s) do if s[i] in glasn then p:=p+l;

вывод('В строке ',р, ' гласных букв');

end.

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

Сначала объявляется тип записи.

Type

Имя Типа = record

ИмяПоля1: ТипПоля1;

ИмяПоля2: ТипПоля2;

...

ИмяПоляN: ТипПоляN;

end;

Затем объявляются переменные соответствующего типа.

var

ИмяПеременной: ИмяТипа;

Например:

type avto=record

number: integer; { номер автомобиля }

marka: string[20]; { марка автомобиля }

fio: string[40]; { фамилия, инициалы владельца }

address: string[60]; { адрес владельца }

end;

var m,v: avto;

Можно задать в программе типизированную константу типа записи, определив значения каждого из полей.

Например, для типа avto можно объявить константу:

const car:avto=(number:1000; marka:'Волга';fio: 'Иванов И.И. '; address:'ул. Горького, д.1,кв.З');

Значения полей записи могут использоваться в выражениях. Обращение к значению поля осуществляется с помощью имени переменной и имени поля, разделенных точкой. Такая комбинация называется составным именем. Например, чтобы получить доступ к полям записи avto, надо записать:m.number, m.marka, m. fio, m.address

Составные имена можно использовать в операторах ввода/вывода:

ввод(m.number,m.marka,m.fio,m.address);

вывод(m.number:4,m.marka:10,m.fio:13,m.address: 23);

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...