
- •Глава 1. Основы программирования Программа
- •Этапы разработки программы
- •Спецификация
- •Разработка алгоритма
- •Алгоритм и программа
- •Компиляция
- •Язык программирования Delphi
- •Тип данных
- •Целый тип
- •Вещественный тип
- •Символьный тип
- •Строковый тип
- •Логический тип
- •Переменная
- •Константы
- •Числовые константы
- •Строковые и символьные константы
- •Логические константы
- •Именованная константа
- •Инструкция присваивания
- •Выражение
- •Тип выражения
- •Выполнение инструкции присваивания
- •Стандартные функции
- •Математические функции
- •Функции преобразования
- •Использование функций
- •Ввод данных
- •Ввод из окна ввода
- •Ввод из поля редактирования
- •Вывод результатов
- •Вывод в окно сообщения
- •Процедуры и функции
- •Структура процедуры
- •Структура функции
- •Запись инструкций программы
- •Стиль программирования
- •Глава 2. Управляющие структуры языка Delphi
- •Условие
- •Инструкция if
- •Листинг 2.1. Вычисление стоимости телефонного разговора
- •Листинг 2.2.Контроль веса
- •Инструкция case
- •Листинг 2.3. Пересчет веса из фунтов в килограммы
- •Листинг 2.4. Формирование поясняющего текста
- •Листинг 2.5. Вычисление даты следующего дня (фрагмент)
- •Инструкция for
- •Инструкция while
- •Листинг 2. 6. Вычисление числа я
- •Инструкция repeat
- •Листинг 2.7. Простое число
- •Инструкция goto
- •Листинг 2.8. Простое число (использование инструкции goto)
- •Глава 3. Символы и строки
- •Символы
- •Листинг 3.1. Таблица символов
- •Операции со строками
- •Функция length
- •Процедура delete
- •Функция роs
- •Функция сору
- •Глава 4. Консольное приложение
- •Глава 5. Массивы
- •Объявление массива
- •Операции с массивами
- •Вывод массива
- •Листинг 5.1. Инициализация и вывод массива
- •Ввод массива
- •Использование компонента StringGrid
- •Листинг 5.2. Ввод и обработка массива целых чисел
- •Листинг 5.3. Процедура обработки события OnKeyPress
- •Листинг 5.4. Ввод и обработка массива дробных чисел
- •Использование компонента Memo
- •Листинг 5.5. Ввод массива строк из компонента Memo
- •Поиск минимального (максимального) элемента массива
- •Листинг 5.6. Поиск минимального элемента массива
- •Поиск в массиве заданного элемента
- •Алгоритм простого перебора
- •Листинг 5.7. Поиск в массиве
- •Метод бинарного поиска
- •Листинг 5.8. Бинарный поиск в массиве
- •Сортировка массива
- •Листинг 5.9. Сортировка массива простым выбором
- •Сортировка методом обмена
- •Листинг 5.10. Сортировка массива методом обмена
- •Многомерные массивы
- •Листинг 5.11. Инициализация таблицы
- •Листинг 5.12. Обработка двумерного массива
- •Ошибки при использовании массивов
Листинг 5.5. Ввод массива строк из компонента Memo
unit fr_memo_; interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, Menus, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label1: TLabel;
procedure ButtonlClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Forml: TForm1;
implementation
($R *.DFM}
procedure TForml .ButtonlClick(Sender: TObject);
const
SIZE=5; // размер массива var
a:array[l..SIZE]of string[30]; //массив
n: integer; // количество строк, введенных в поле Memo
i:integer; // индекс элемента массива
st:string;
begin
n:=Memo1.Lines.Count;
if n = 0 then begin
ShowMessage('Исходные данные не введены!');
Exit; // выход из процедуры обработки события
end;
// в поле Memo есть текст
if n > SIZE then begin
ShowMessage('Количество строк превышает размер массива.');
n:=SIZE; // будем вводить только первые SIZE строк
end;
for i:=1 to n do
a[i]:=Form1.Memol.Lines[i-1]; // строки Memo пронумерованы с нуля
// вывод массива в окно сообщения
if n > 0 then begin
st:='Введенный массив:'+#13;
for i: =1 to n do
st:=st+IntToStr(i)+' '+ a[i]+f13; ShowMessage(st);
end;
end;
end.
Основную работу выполняет процедура TForm1.Button1Click, которая сначала проверяет, есть ли в поле Memo1 текст. Если текст есть (в этом случае значение свойства Lines.Count больше нуля), то процедура сравнивает количество введенных строк и размер массива. Если это количество превышает размер массива, то программа изменяет значение п, тем самым подготавливает ввод только первых SIZE строк.
На рис. 5.6 приведен вид диалогового окна приложения Ввод массива. После щелчка на командной кнопке Ввод появляется окно (рис. 5.7), которое содержит значения элементов массива, полученные из Memo-поля.
Рис. 5.6. Окно приложения Ввод массива
Рис. 5.7. Массив, введенный из Memo-поля
Поиск минимального (максимального) элемента массива
Задачу поиска минимального элемента массива рассмотрим на примере массива целых чисел.
Алгоритм поиска минимального (максимального) элемента массива довольно очевиден: сначала делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива последовательно сравниваются с этим элементом. Если во время очередной проверки обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент становится минимальным (максимальным) и продолжается проверка оставшихся элементов.
Диалоговое окно приложения поиска минимального элемента массива содержит соответствующим образом настроенный компонент stringGridi, который применяется для ввода элементов массива, два поля меток (Label1 и Labeia), использующиеся для вывода информационного сообщения и результата работы программы, и командную кнопку (Buttonl), при щелчке на которой выполняется поиск минимального элемента массива. В табл. 5.4 приведены значения свойств компонента stringGridi.
Таблица 5.4. Значения свойств компонента stringGrid1
|
|
|
|
|
Свойство |
Значение |
|
|
ColCount |
005 |
|
|
FixedCols |
000 |
|
|
RowCount |
001 |
|
|
DefaultRowHeight |
024 |
|
|
Height |
024 |
|
|
DefaultColWidth |
064 |
|
|
Width |
328 |
|
|
Options . goEditing |
True |
|
|
Options . AlwaysShowEditing |
True |
|
|
Options .goTabs |
True |
|
|
|
|
|
В листинге 5.6 приведена процедура обработки события Onclick для командной кнопки Button1, которая вводит массив, выполняет поиск мини-мального элемента и выводит результат — номер и значение минимального элемента массива.