
- •Глава 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. Обработка двумерного массива
- •Ошибки при использовании массивов
Инструкция for
Рассмотрим следующую задачу. Пусть нужно написать программу, которая вычисляет значение функции у = 5х2 - 7 в точках —1, -0.5, 0, 0.5 и 1
(таблица должна быть выведена в поле метки формы приложения). Процедура, обеспечивающая решение поставленной задачи, может выглядеть так:
procedure TForm1.ButtonlClick(Sender: TObject); var
у: real; // значение функции
x: real; // аргумент функции
dx: real; // приращение аргумента
st: string; // изображение таблицы
begin
st:='';
x := -1; dx := 0.5;
у := 5*х*х -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);
x :=x + dx;
у := 5*х*х -7;
st := st+ FloatToStr(x)+* '+ FloatToStr(y)+chr(13);
x :=x + dx;
у := 5*х*х -7;
st := st+ FloatToStr(x)+* '+ FloatToStr(y)+chr(13);
x :=x + dx;
у := 5*х*х -7;
st := st+ FloatToStr(x)+' ' + FloatToStr(y)+chr(13);
x :=x + dx;
у := 5*х*х -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);
x :=x + dx;
Label1.Caption := st;
end;
Из текста процедуры видно, что группа инструкций
у := 5*х*х -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);
x :=x + dx;
обеспечивающая вычисление значения функции, формирование строки таблицы и увеличение аргумента, выполняется 5 раз.
Воспользовавшись инструкцией for, приведенную процедуру можно переписать следующим образом:
procedure TForm1.ButtonlClick(Sender: TObject);
var
у: real; // значение функции
x: real; // аргумент функции
dx: real; // приращение аргумента
st: string; // изображение таблицы
i : integer; // счетчик циклов
begin
st:=''; x := -1; dx := 0.5;
for i:=l to 5 do begin
у := 5*x*x -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx; end;
Label1.Caption := st;
end;
Второй вариант процедуры, во-первых, требует меньше усилий при наборе, во-вторых, процедура более гибкая: для того чтобы увеличить количество строк в выводимой таблице, например до десяти, достаточно в строке for i:=1 to 5 do число 5 заменить на 10.
Инструкция for используется в том случае, если некоторую последовательность действий (инструкций программы) надо выполнить несколько раз, причем число повторений заранее известно.
В общем виде инструкция for записывается следующим образом: for счетчик := нач_знач to кон_знач do begin
// здесь инструкции, которые надо выполнить несколько раз end
где:
счетчик — переменная-счетчик числа повторений инструкций цикла;
нач_знач-- выражение, определяющее начальное значение счетчика циклов;
кон_знач — выражение, определяющее конечное значение счетчика циклов.
Переменная счетчик, выражения нач_знач и кон_знач должны быть целого типа.
Количество повторений инструкций цикла можно вычислить по формуле
(кон_знач — нач_знач + l).
Примеры:
for i:=l to 10 do begin
label1.caption:=label1.caption + '*'; end;
for i: =1 to n do s := s+i;
Примечание
Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Рис. 2.13. Алгоритм инструкции for
Алгоритм, соответствующий инструкции for, представлен на рис. 2.13. Обратите внимание, что если начальное значение счетчика больше конечного значения, то последовательность операторов между begin и end не будет выполнена ни разу.
Кроме того, после каждого выполнения инструкций тела цикла счетчик циклов увеличивается автоматически.
Переменную-счетчик можно использовать внутри цикла (но ни в коем случае не изменять). Например, в результате выполнения следующих инструкций:
tab1: = '' ;
for i:=l to 5 do
begin
tab1:=tabl+IntToStr(i)+' '+IntToStr(i*i)+chr(13);
end;
переменная tabl будет содержать изображения таблицы квадратов чисел.
Рассмотрим программу, которая вычисляет сумму первых 10 элементов ряда: 1 + + 1/3 + ... (значение i-го элемента ряда связано с его номером формулой 1//). Диалоговое окно программы должно содержать, по крайней мере, два компонента: поле метки (Label1) и командную кнопку (Buttonl).
Вычисление суммы ряда и вывод результата выполняет процедура обработки события Onclick, текст которой приведен ниже. После вычисления очередного элемента ряда процедура выводит в поле Labell номер элемента и его значение в поле метки формы, предназначенное для вывода результата.
procedure TForm1.ButtonlClick(Sender: TObject);
var
i:integer; { номер элемента ряда }
elem:real;
{ значение элемента ряда }
summ:real;
{ сумма элементов ряда )
begin
summ:=0;
label Leapt ion: = ' ' ;
for i:=l to 10 do begin
elem:=l/i;
label1.caption:=labell.caption+
IntToStr(i)+' '+FloatToStr(elem)+#13; sunrn: =summ+elem;
end;
label1.caption:=label1.caption+
'Сумма ряда:'+FloatToStr(summ);
end;
Если в инструкции for вместо слова to записать downto, то после очередного выполнения инструкций тела цикла значение счетчика будет не увеличиваться, а уменьшаться.